diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000000..97626ba454 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="Encoding"> + <file url="PROJECT" charset="UTF-8" /> + </component> +</project> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000000..28a804d893 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="JavaScriptSettings"> + <option name="languageLevel" value="ES6" /> + </component> +</project> \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000000..e5921a7e27 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/.idea/webpack.iml" filepath="$PROJECT_DIR$/.idea/webpack.iml" /> + </modules> + </component> +</project> \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000000..94a25f7f4c --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$" vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/.idea/webpack.iml b/.idea/webpack.iml new file mode 100644 index 0000000000..24643cc374 --- /dev/null +++ b/.idea/webpack.iml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="WEB_MODULE" version="4"> + <component name="NewModuleRootManager"> + <content url="file://$MODULE_DIR$"> + <excludeFolder url="file://$MODULE_DIR$/.tmp" /> + <excludeFolder url="file://$MODULE_DIR$/temp" /> + <excludeFolder url="file://$MODULE_DIR$/tmp" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module> \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000000..cf853ad91c --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,192 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ChangeListManager"> + <list default="true" id="fe887eca-b926-4bf8-91f1-fca8efc608fe" name="Default" comment="" /> + <ignored path="$PROJECT_DIR$/.tmp/" /> + <ignored path="$PROJECT_DIR$/temp/" /> + <ignored path="$PROJECT_DIR$/tmp/" /> + <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> + <option name="TRACKING_ENABLED" value="true" /> + <option name="SHOW_DIALOG" value="false" /> + <option name="HIGHLIGHT_CONFLICTS" value="true" /> + <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> + <option name="LAST_RESOLUTION" value="IGNORE" /> + </component> + <component name="FileEditorManager"> + <leaf> + <file leaf-file-name="build.js" pinned="false" current-in-tab="true"> + <entry file="file://$PROJECT_DIR$/template/build/build.js"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="120"> + <caret line="5" column="26" lean-forward="false" selection-start-line="5" selection-start-column="26" selection-end-line="5" selection-end-column="26" /> + <folding /> + </state> + </provider> + </entry> + </file> + </leaf> + </component> + <component name="Git.Settings"> + <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> + </component> + <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" /> + <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER"> + <package-json value="$PROJECT_DIR$/package.json" /> + </component> + <component name="JsFlowSettings"> + <service-enabled>true</service-enabled> + <exe-path /> + <other-services-enabled>true</other-services-enabled> + <auto-save>true</auto-save> + </component> + <component name="JsGulpfileManager"> + <detection-done>true</detection-done> + <sorting>DEFINITION_ORDER</sorting> + </component> + <component name="ProjectFrameBounds" extendedState="6"> + <option name="x" value="-8" /> + <option name="y" value="-8" /> + <option name="width" value="1920" /> + <option name="height" value="1080" /> + </component> + <component name="ProjectView"> + <navigator currentView="ProjectPane" proportions="" version="1"> + <flattenPackages /> + <showMembers /> + <showModules /> + <showLibraryContents /> + <hideEmptyPackages /> + <abbreviatePackageNames /> + <autoscrollToSource /> + <autoscrollFromSource /> + <sortByType /> + <manualOrder /> + <foldersAlwaysOnTop value="true" /> + </navigator> + <panes> + <pane id="ProjectPane"> + <subPane> + <expand> + <path> + <item name="webpack" type="b2602c69:ProjectViewProjectNode" /> + <item name="webpack" type="462c0819:PsiDirectoryNode" /> + </path> + </expand> + <select /> + </subPane> + </pane> + <pane id="Scope" /> + <pane id="Scratches" /> + </panes> + </component> + <component name="PropertiesComponent"> + <property name="settings.editor.selected.configurable" value="Settings.JavaScript" /> + <property name="WebServerToolWindowFactoryState" value="false" /> + <property name="last_opened_file_path" value="$PROJECT_DIR$" /> + <property name="HbShouldOpenHtmlAsHb" value="" /> + <property name="node.js.path.for.package.eslint" value="project" /> + <property name="node.js.detected.package.eslint" value="true" /> + <property name="node.js.selected.package.eslint" value="" /> + <property name="node.js.path.for.package.standard" value="project" /> + <property name="node.js.detected.package.standard" value="true" /> + <property name="node.js.selected.package.standard" value="" /> + <property name="JavaScriptWeakerCompletionTypeGuess" value="true" /> + </component> + <component name="RecentsManager"> + <key name="CopyFile.RECENT_KEYS"> + <recent name="C:\Users\admin\Desktop\webpack\template" /> + </key> + </component> + <component name="RunDashboard"> + <option name="ruleStates"> + <list> + <RuleState> + <option name="name" value="ConfigurationTypeDashboardGroupingRule" /> + </RuleState> + <RuleState> + <option name="name" value="StatusDashboardGroupingRule" /> + </RuleState> + </list> + </option> + </component> + <component name="ShelveChangesManager" show_recycled="false"> + <option name="remove_strategy" value="false" /> + </component> + <component name="SvnConfiguration"> + <configuration /> + </component> + <component name="TaskManager"> + <task active="true" id="Default" summary="Default task"> + <changelist id="fe887eca-b926-4bf8-91f1-fca8efc608fe" name="Default" comment="" /> + <created>1541485811159</created> + <option name="number" value="Default" /> + <option name="presentableId" value="Default" /> + <updated>1541485811159</updated> + <workItem from="1541485813194" duration="424000" /> + </task> + <servers /> + </component> + <component name="TimeTrackingManager"> + <option name="totallyTimeSpent" value="424000" /> + </component> + <component name="ToolWindowManager"> + <frame x="-8" y="-8" width="1936" height="1056" extended-state="6" /> + <layout> + <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" /> + <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> + <window_info id="Docker" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" /> + <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" /> + <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" /> + <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> + <window_info id="npm" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" /> + <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> + <window_info id="Mongo Explorer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" /> + <window_info id="Terminal" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.33184358" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" /> + <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" /> + <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> + <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> + <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" /> + <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> + <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> + <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> + <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> + <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> + </layout> + </component> + <component name="TypeScriptGeneratedFilesManager"> + <option name="version" value="1" /> + </component> + <component name="VcsContentAnnotationSettings"> + <option name="myLimit" value="2678400000" /> + </component> + <component name="XDebuggerManager"> + <breakpoint-manager /> + <watches-manager /> + </component> + <component name="editorHistoryManager"> + <entry file="file://$PROJECT_DIR$/template/src/router/index.js"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="240"> + <caret line="10" column="25" lean-forward="false" selection-start-line="10" selection-start-column="25" selection-end-line="10" selection-end-column="25" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/template/src/App.vue"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="16"> + <caret line="18" column="15" lean-forward="true" selection-start-line="18" selection-start-column="15" selection-end-line="18" selection-end-column="15" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/template/build/build.js"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="120"> + <caret line="5" column="26" lean-forward="false" selection-start-line="5" selection-start-column="26" selection-end-line="5" selection-end-column="26" /> + <folding /> + </state> + </provider> + </entry> + </component> +</project> \ No newline at end of file diff --git a/template/.babelrc b/template/.babelrc index 6646ce7f96..3a280ba34b 100644 --- a/template/.babelrc +++ b/template/.babelrc @@ -8,12 +8,5 @@ }], "stage-2" ], - "plugins": ["transform-vue-jsx", "transform-runtime"]{{#if_or unit e2e}}, - "env": { - "test": { - "presets": ["env", "stage-2"]{{#if_eq runner "karma"}}, - "plugins": ["transform-vue-jsx", "istanbul"]{{/if_eq}}{{#if_eq runner "jest"}}, - "plugins": ["transform-vue-jsx", "transform-es2015-modules-commonjs", "dynamic-import-node"]{{/if_eq}} - } - }{{/if_or}} + "plugins": ["transform-vue-jsx", "transform-runtime"] } diff --git a/template/.eslintignore b/template/.eslintignore index ef5bd37d05..e1fcc9c45f 100644 --- a/template/.eslintignore +++ b/template/.eslintignore @@ -2,6 +2,3 @@ /config/ /dist/ /*.js -{{#unit}} -/test/unit/coverage/ -{{/unit}} diff --git a/template/.eslintrc.js b/template/.eslintrc.js index 30593179e2..85f88ea658 100644 --- a/template/.eslintrc.js +++ b/template/.eslintrc.js @@ -1,74 +1,32 @@ // https://eslint.org/docs/user-guide/configuring -module.exports = { - root: true, - parserOptions: { - parser: 'babel-eslint' - }, - env: { - browser: true, - }, - {{#if_eq lintConfig "standard"}} - extends: [ - // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention - // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. - 'plugin:vue/essential', - // https://github.com/standard/standard/blob/master/docs/RULES-en.md - 'standard' - ], - {{/if_eq}} - {{#if_eq lintConfig "airbnb"}} - // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention - // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. - extends: ['plugin:vue/essential', 'airbnb-base'], - {{/if_eq}} - {{#if_eq lintConfig "none"}} - // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention - // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. - extends: ['plugin:vue/essential'], - {{/if_eq}} - // required to lint *.vue files - plugins: [ - 'vue' - ], - {{#if_eq lintConfig "airbnb"}} - // check if imports actually resolve - settings: { - 'import/resolver': { - webpack: { - config: 'build/webpack.base.conf.js' - } - } - }, - {{/if_eq}} - // add your custom rules here - rules: { - {{#if_eq lintConfig "standard"}} - // allow async-await - 'generator-star-spacing': 'off', - {{/if_eq}} - {{#if_eq lintConfig "airbnb"}} - // don't require .vue extension when importing - 'import/extensions': ['error', 'always', { - js: 'never', - vue: 'never' - }], - // disallow reassignment of function parameters - // disallow parameter object manipulation except for specific exclusions - 'no-param-reassign': ['error', { - props: true, - ignorePropertyModificationsFor: [ - 'state', // for vuex state - 'acc', // for reduce accumulators - 'e' // for e.returnvalue - ] - }], - // allow optionalDependencies - 'import/no-extraneous-dependencies': ['error', { - optionalDependencies: ['test/unit/index.js'] - }], - {{/if_eq}} - // allow debugger during development - 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' - } -} +// module.exports = { +// root: true, +// parserOptions: { +// parser: 'babel-eslint' +// }, +// env: { +// browser: true, +// }, +// extends: [ +// // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention +// // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. +// 'plugin:vue/essential', +// // 'plugin:vue/strongly-recommended', +// 'standard' +// ], +// // required to lint *.vue files +// plugins: [ +// 'vue' +// ], +// // add your custom rules here +// rules: { +// // allow async-await +// 'generator-star-spacing': 'off', +// // allow debugger during development +// 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', +// 'no-mixed-spaces-and-tabs': ['error', 'smart-tabs'], +// 'prefer-promise-reject-errors': ['error', {'allowEmptyReject': true}], +// 'no-unneeded-ternary': 0 +// } +// } diff --git a/template/.gitignore b/template/.gitignore index c80b682e18..541a820f6c 100644 --- a/template/.gitignore +++ b/template/.gitignore @@ -4,13 +4,6 @@ node_modules/ npm-debug.log* yarn-debug.log* yarn-error.log* -{{#unit}} -/test/unit/coverage/ -{{/unit}} -{{#e2e}} -/test/e2e/reports/ -selenium-debug.log -{{/e2e}} # Editor directories and files .idea diff --git a/template/README.md b/template/README.md index 4b0258a35b..9f3c6eecb3 100644 --- a/template/README.md +++ b/template/README.md @@ -1,6 +1,6 @@ -# {{ name }} +# purchase -> {{ description }} +> purchase ## Build Setup @@ -8,29 +8,52 @@ # install dependencies npm install -# serve with hot reload at localhost:8080 -npm run dev +# serve with hot reload at localhost:8090 +npm run dev # build for production with minification npm run build # build for production and view the bundle analyzer report npm run build --report -{{#unit}} - -# run unit tests -npm run unit -{{/unit}} -{{#e2e}} - -# run e2e tests -npm run e2e -{{/e2e}} -{{#if_or unit e2e}} - -# run all tests -npm test -{{/if_or}} ``` For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). + +### src目录结构 + |--assets // 一些静态资源目录 + |--packages // 第三方插件 + |--stylus // stylus初始化样式文件 + |--components // 公用基础组件 + |--mixins // 公用混入 + |-formSearchCommon.js // 表格查询时的公用mixin + |--mockData // mock相关,前端本地模拟调试 + |--common // 公用mock + |--index.js // 启用mock的主文件,可配置HOST等 + |--no-mock.js // 默认禁用状态不引入mockjs,会启用这个文件 + ...其他模块相关管理文件 + ...一些菜单目录等json文件 + |--router + |--views // 按页面模块独立注册路由 + |-index.js // 汇总路由,现有路由跳转前后钩子函数处理逻辑,后期视复杂度剥离出来 + |--store // 公用状态管理(用户信息,面包屑,遮罩显示等等) + |--utils // 公用工具包 + |-default-setting.js // 业务公用设置,比如时间段选择的设置等等 + |-dom.js // dom操作相关方法 + |-bus.js // 公用vue实例作为广播 + |-http.js // 公用ajax请求封装,加入了请求队列存储,简化书写,默认判断等 + |-utils.js // 公用方法函数 + |--index.js // 全局注册http请求 + |--views // 业务模块界面编写 + |--common // 公用业务组件 + |-form-froup-btns.vue // 表单查询、重置按钮公用样式 + |-goods-detail.vue // 商品列表表格详情(仅展示) + |--home.vue // 首页 + |--services // 类似于api文件夹管理模式,模仿了ng的service管理公用业务逻辑的模式,这里可配置接口的api定义; + 也可以把业务逻辑抽取出来放在service中实现;可通过sevices存储公用属性和部分不需实时监听的公用状态,解决滥用vuex的问题 + |-ajax.service.js // 这是ajax请求相关的服务(对ajax进行公用封装) + |-store.service.js // 这是负责储存公用数据的服务 (一些页面过渡需要短暂缓存或者公用请求需要共享的数据可以放这里) + |-common.service.js // 这是所有模块公用业务逻辑的服务 (也可以设置公用配置) + |-index.js // 汇总注册 + |-App.vue // 根layout界面 + |-main.js // 主入口文件,负责注册组件引入样式、路由、vuex等 \ No newline at end of file diff --git a/template/build/build.js b/template/build/build.js index 11eb43759c..8f2ad8ad49 100644 --- a/template/build/build.js +++ b/template/build/build.js @@ -22,7 +22,7 @@ rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { process.stdout.write(stats.toString({ colors: true, modules: false, - children: false, // if you are using ts-loader, setting this to true will make typescript errors show up during build + children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. chunks: false, chunkModules: false }) + '\n\n') diff --git a/template/build/utils.js b/template/build/utils.js index e534fb0fd6..bf9be3a04c 100644 --- a/template/build/utils.js +++ b/template/build/utils.js @@ -59,8 +59,8 @@ exports.cssLoaders = function (options) { css: generateLoaders(), postcss: generateLoaders(), less: generateLoaders('less'), - sass: generateLoaders('sass', { indentedSyntax: true }), - scss: generateLoaders('sass'), + // sass: generateLoaders('sass', { indentedSyntax: true }), + // scss: generateLoaders('sass'), stylus: generateLoaders('stylus'), styl: generateLoaders('stylus') } diff --git a/template/build/webpack.base.conf.js b/template/build/webpack.base.conf.js index 391160c571..fcee26a15f 100644 --- a/template/build/webpack.base.conf.js +++ b/template/build/webpack.base.conf.js @@ -1,96 +1,111 @@ -'use strict' -const path = require('path') -const utils = require('./utils') -const config = require('../config') -const vueLoaderConfig = require('./vue-loader.conf') +"use strict"; +const path = require("path"); +const utils = require("./utils"); +const config = require("../config"); +const vueLoaderConfig = require("./vue-loader.conf"); -function resolve (dir) { - return path.join(__dirname, '..', dir) +function resolve(dir) { + return path.join(__dirname, "..", dir); } -{{#lint}}const createLintingRule = () => ({ - test: /\.(js|vue)$/, - loader: 'eslint-loader', - enforce: 'pre', - include: [resolve('src'), resolve('test')], - options: { - formatter: require('eslint-friendly-formatter'), - emitWarning: !config.dev.showEslintErrorsInOverlay - } -}){{/lint}} +// const createLintingRule = () => ({ +// test: /\.(js|vue)$/, +// loader: 'eslint-loader', +// enforce: "pre", +// include: [resolve("src"), resolve("test")], +// options: { +// formatter: require("eslint-friendly-formatter"), +// emitWarning: !config.dev.showEslintErrorsInOverlay +// } +// }); module.exports = { - context: path.resolve(__dirname, '../'), - entry: { - app: './src/main.js' - }, - output: { - path: config.build.assetsRoot, - filename: '[name].js', - publicPath: process.env.NODE_ENV === 'production' - ? config.build.assetsPublicPath - : config.dev.assetsPublicPath - }, - resolve: { - extensions: ['.js', '.vue', '.json'], - alias: { - {{#if_eq build "standalone"}} - 'vue$': 'vue/dist/vue.esm.js', - {{/if_eq}} - '@': resolve('src'), - } - }, - module: { - rules: [ - {{#lint}} - ...(config.dev.useEslint ? [createLintingRule()] : []), - {{/lint}} - { - test: /\.vue$/, - loader: 'vue-loader', - options: vueLoaderConfig - }, - { - test: /\.js$/, - loader: 'babel-loader', - include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')] - }, - { - test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, - loader: 'url-loader', - options: { - limit: 10000, - name: utils.assetsPath('img/[name].[hash:7].[ext]') - } - }, - { - test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, - loader: 'url-loader', - options: { - limit: 10000, - name: utils.assetsPath('media/[name].[hash:7].[ext]') - } - }, - { - test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, - loader: 'url-loader', - options: { - limit: 10000, - name: utils.assetsPath('fonts/[name].[hash:7].[ext]') - } - } - ] - }, - node: { - // prevent webpack from injecting useless setImmediate polyfill because Vue - // source contains it (although only uses it if it's native). - setImmediate: false, - // prevent webpack from injecting mocks to Node native modules - // that does not make sense for the client - dgram: 'empty', - fs: 'empty', - net: 'empty', - tls: 'empty', - child_process: 'empty' - } -} + context: path.resolve(__dirname, "../"), + entry: { + app: "./src/main.js" + }, + output: { + path: config.build.assetsRoot, + filename: "[name].js", + publicPath: + process.env.NODE_ENV === "production" + ? config.build.assetsPublicPath + : config.dev.assetsPublicPath + }, + resolve: { + extensions: [".js", ".vue", ".json"], + alias: { + vue$: "vue/dist/vue.esm.js", + "@": resolve("src"), + components: resolve("src/components"), + style: resolve("src/assets/stylus"), + "mock-data": + process.env.NODE_MOCK === "yes" + ? resolve("src/mockData") + : resolve("src/mockData/no-mock.js"), + "test-demo": + process.env.NODE_TEST === "yes" + ? resolve("src/test") + : resolve("src/test/no-test.js") + } + }, + module: { + rules: [ + // ...(config.dev.useEslint ? [createLintingRule()] : []), + { + test: /\.vue$/, + loader: "vue-loader", + options: vueLoaderConfig + }, + { + test: /\.js$/, + loader: "babel-loader", + include: [ + resolve("src"), + resolve("test"), + resolve("node_modules/webpack-dev-server/client") + ] + }, + { + test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, + loader: "url-loader", + options: { + limit: 10000, + name: utils.assetsPath("img/[name].[hash:7].[ext]") + } + }, + { + test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, + loader: "url-loader", + options: { + limit: 10000, + name: utils.assetsPath("media/[name].[hash:7].[ext]") + } + }, + { + test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, + loader: "url-loader", + options: { + limit: 10000, + name: utils.assetsPath("fonts/[name].[hash:7].[ext]") + } + }, + { + test: /\.s[a|c]ss$/, + use: ["style-loader", "css-loader", "postcss-loader", "sass-loader"] + } + ] + }, + node: { + // prevent webpack from injecting useless setImmediate polyfill because Vue + // source contains it (although only uses it if it's native). + setImmediate: false, + // prevent webpack from injecting mocks to Node native modules + // that does not make sense for the client + dgram: "empty", + fs: "empty", + net: "empty", + tls: "empty", + child_process: "empty" + } +}; diff --git a/template/build/webpack.prod.conf.js b/template/build/webpack.prod.conf.js index fc5d53fa3d..d9f99f65a5 100644 --- a/template/build/webpack.prod.conf.js +++ b/template/build/webpack.prod.conf.js @@ -11,9 +11,7 @@ const ExtractTextPlugin = require('extract-text-webpack-plugin') const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') const UglifyJsPlugin = require('uglifyjs-webpack-plugin') -const env = {{#if_or unit e2e}}process.env.NODE_ENV === 'testing' - ? require('../config/test.env') - : {{/if_or}}require('../config/prod.env') +const env = require('../config/prod.env') const webpackConfig = merge(baseWebpackConfig, { module: { @@ -63,9 +61,7 @@ const webpackConfig = merge(baseWebpackConfig, { // you can customize output by editing /index.html // see https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ - filename: {{#if_or unit e2e}}process.env.NODE_ENV === 'testing' - ? 'index.html' - : {{/if_or}}config.build.index, + filename: config.build.index, template: 'index.html', inject: true, minify: { diff --git a/template/build/webpack.test.conf.js b/template/build/webpack.test.conf.js deleted file mode 100644 index 0d658d9ebe..0000000000 --- a/template/build/webpack.test.conf.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict' -// This is the webpack config used for unit tests. - -const utils = require('./utils') -const webpack = require('webpack') -const merge = require('webpack-merge') -const baseWebpackConfig = require('./webpack.base.conf') - -const webpackConfig = merge(baseWebpackConfig, { - // 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') - }) - ] -}) - -// no need for app entry during tests -delete webpackConfig.entry - -module.exports = webpackConfig diff --git a/template/config/index.js b/template/config/index.js index 820109957f..2d54a8c641 100644 --- a/template/config/index.js +++ b/template/config/index.js @@ -1,77 +1,86 @@ -'use strict' -// Template version: {{ template_version }} +"use strict"; +// Template version: 1.3.1 // see http://vuejs-templates.github.io/webpack for documentation. -const path = require('path') +const path = require("path"); module.exports = { - dev: { + dev: { + // Paths + assetsSubDirectory: "static", + assetsPublicPath: "/", + proxyTable: { + "/erp_store": { + target: "http://erp2.hwdev.pagoda.com.cn/", // 线上 + // target: "http://192.168.2.25:8080/", // 曾文基 + // target: "http://192.168.7.25:8080/", //谢翔 + // target: "http://192.168.2.77:8080/", // 刘婷婷 + changeOrigin: true, + pathRewrite: { + "^/erp_store": "erp_store" + } + } + }, + // Various Dev Server settings + // host: 'localhost', // can be overwritten by process.env.HOST + host: "0.0.0.0", + port: 8090, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined + autoOpenBrowser: false, + errorOverlay: true, + notifyOnErrors: true, + poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- - // Paths - assetsSubDirectory: 'static', - assetsPublicPath: '/', - proxyTable: {}, + // Use Eslint Loader? + // If true, your code will be linted during bundling and + // linting errors and warnings will be shown in the console. + useEslint: true, + // If true, eslint errors and warnings will also be shown in the error overlay + // in the browser. + showEslintErrorsInOverlay: false, - // Various Dev Server settings - host: 'localhost', // can be overwritten by process.env.HOST - port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined - autoOpenBrowser: false, - errorOverlay: true, - notifyOnErrors: true, - poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- + /** + * Source Maps + */ - {{#lint}}// Use Eslint Loader? - // If true, your code will be linted during bundling and - // linting errors and warnings will be shown in the console. - useEslint: true, - // If true, eslint errors and warnings will also be shown in the error overlay - // in the browser. - showEslintErrorsInOverlay: false, - {{/lint}} + // https://webpack.js.org/configuration/devtool/#development + devtool: "cheap-module-eval-source-map", - /** - * Source Maps - */ + // If you have problems debugging vue-files in devtools, + // set this to false - it *may* help + // https://vue-loader.vuejs.org/en/options.html#cachebusting + cacheBusting: true, - // https://webpack.js.org/configuration/devtool/#development - devtool: 'cheap-module-eval-source-map', + cssSourceMap: true + }, - // If you have problems debugging vue-files in devtools, - // set this to false - it *may* help - // https://vue-loader.vuejs.org/en/options.html#cachebusting - cacheBusting: true, + build: { + // Template for index.html + index: path.resolve(__dirname, "../dist/index.html"), - cssSourceMap: true - }, + // Paths + assetsRoot: path.resolve(__dirname, "../dist"), + assetsSubDirectory: "static", + assetsPublicPath: "./", - build: { - // Template for index.html - index: path.resolve(__dirname, '../dist/index.html'), + /** + * Source Maps + */ - // Paths - assetsRoot: path.resolve(__dirname, '../dist'), - assetsSubDirectory: 'static', - assetsPublicPath: '/', + productionSourceMap: true, + // https://webpack.js.org/configuration/devtool/#production + devtool: "#source-map", - /** - * Source Maps - */ + // 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"], - productionSourceMap: true, - // https://webpack.js.org/configuration/devtool/#production - devtool: '#source-map', - - // Gzip off by default as many popular static hosts such as - // Surge or Netlify already gzip all static assets for you. - // Before setting to `true`, make sure to: - // npm install --save-dev compression-webpack-plugin - productionGzip: false, - productionGzipExtensions: ['js', 'css'], - - // Run the build command with an extra argument to - // View the bundle analyzer report after build finishes: - // `npm run build --report` - // Set to `true` or `false` to always turn it on or off - bundleAnalyzerReport: process.env.npm_config_report - } -} + // 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 + } +}; diff --git a/template/config/test.env.js b/template/config/test.env.js deleted file mode 100644 index c2824a307a..0000000000 --- a/template/config/test.env.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict' -const merge = require('webpack-merge') -const devEnv = require('./dev.env') - -module.exports = merge(devEnv, { - NODE_ENV: '"testing"' -}) diff --git a/template/index.html b/template/index.html index 6cfaafc7a8..28d55b9da3 100644 --- a/template/index.html +++ b/template/index.html @@ -3,7 +3,9 @@ <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> - <title>{{ name }}</title> + <link href="static/favicon.ico" rel="shortcut icon"> + <link href="//at.alicdn.com/t/font_465584_31nxhqzgm2t.css" rel="stylesheet" type="text/css"/> + <title>百果园ERP-门店运营</title> </head> <body> <div id="app"></div> diff --git a/template/package-lock.json b/template/package-lock.json new file mode 100644 index 0000000000..b11838f7d8 --- /dev/null +++ b/template/package-lock.json @@ -0,0 +1,12303 @@ +{ + "name": "purchase", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "requires": { + "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "3.3.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "ansi-escapes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "3.1.10", + "normalize-path": "2.1.1" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.11.0" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "optional": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "optional": true + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "optional": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, + "async-validator": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.2.tgz", + "integrity": "sha1-t3WXIm6WJC+NUxwNRq4pX2JCK6Q=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "optional": true + }, + "atob": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz", + "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==", + "dev": true + }, + "autoprefixer": { + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", + "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", + "dev": true, + "requires": { + "browserslist": "2.11.3", + "caniuse-lite": "1.0.30000830", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "6.0.21", + "postcss-value-parser": "3.3.0" + } + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "optional": true + }, + "aws4": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", + "optional": true + }, + "axios": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", + "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "requires": { + "follow-redirects": "1.4.1", + "is-buffer": "1.1.6" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-core": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.5", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "babel-eslint": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz", + "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0" + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.5", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "babel-helper-bindify-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", + "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-explode-class": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", + "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "dev": true, + "requires": { + "babel-helper-bindify-decorators": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-loader": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.4.tgz", + "integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==", + "dev": true, + "requires": { + "find-cache-dir": "1.0.0", + "loader-utils": "1.1.0", + "mkdirp": "0.5.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-async-generators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", + "dev": true + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", + "dev": true + }, + "babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", + "dev": true + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-generator-functions": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-generators": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", + "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", + "dev": true, + "requires": { + "babel-helper-explode-class": "6.24.1", + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", + "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "0.10.1" + } + }, + "babel-plugin-transform-runtime": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", + "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-vue-jsx": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-3.7.0.tgz", + "integrity": "sha512-W39X07/n3oJMQd8tALBO+440NraGSF//Lo1ydd/9Nme3+QiRGFBb1Q39T9iixh0jZPPbfv3so18tNoIgLatymw==", + "dev": true, + "requires": { + "esutils": "2.0.2" + } + }, + "babel-preset-env": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", + "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0", + "browserslist": "2.11.3", + "invariant": "2.2.4", + "semver": "5.5.0" + } + }, + "babel-preset-stage-2": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", + "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", + "dev": true, + "requires": { + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-decorators": "6.24.1", + "babel-preset-stage-3": "6.24.1" + } + }, + "babel-preset-stage-3": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", + "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", + "dev": true, + "requires": { + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-generator-functions": "6.24.1", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.26.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.5", + "home-or-tmp": "2.0.0", + "lodash": "4.17.5", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.5", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.5" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.5" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.5", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "bfj-node4": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/bfj-node4/-/bfj-node4-5.3.1.tgz", + "integrity": "sha512-SOmOsowQWfXc7ybFARsK3C4MCOWzERaOMV/Fl3Tgjs+5dJWyzo3oa127jL44eMbQiAN17J7SvAs2TRxEScTUmg==", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "check-types": "7.3.0", + "tryer": "1.0.0" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.3", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.16" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "2.1.1", + "deep-equal": "1.0.1", + "dns-equal": "1.0.0", + "dns-txt": "2.0.2", + "multicast-dns": "6.2.3", + "multicast-dns-service-types": "1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", + "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "1.2.0", + "browserify-des": "1.0.1", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", + "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.6" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.1" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "1.0.6" + } + }, + "browserslist": { + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", + "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000830", + "electron-to-chromium": "1.3.42" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "1.3.0", + "ieee754": "1.1.11", + "isarray": "1.0.0" + } + }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "chownr": "1.0.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.2", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.2", + "ssri": "5.3.0", + "unique-filename": "1.1.0", + "y18n": "4.0.0" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "2.3.2", + "upper-case": "1.1.3" + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "caniuse-api": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000830", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30000830", + "electron-to-chromium": "1.3.42" + } + } + } + }, + "caniuse-db": { + "version": "1.0.30000830", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000830.tgz", + "integrity": "sha1-bkUlWzRWSf0V/1kHLaHhK7PeLxM=", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30000830", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000830.tgz", + "integrity": "sha512-yMqGkujkoOIZfvOYiWdqPALgY/PVGiqCHUJb6yNq7xhI/pR+gQO0U2K6lRDqAiJv4+CIU3CtTLblNGw0QGnr6g==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "optional": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "check-types": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.3.0.tgz", + "integrity": "sha1-Ro9XGkQ1wkJI9f0MsOjYfDw0Hn0=", + "dev": true + }, + "chokidar": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", + "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", + "dev": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.1.3", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.0.4" + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "clap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "dev": true, + "requires": { + "chalk": "1.1.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "clean-css": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", + "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "2.0.0" + } + }, + "cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "dev": true + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + } + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "dev": true, + "requires": { + "q": "1.5.1" + } + }, + "coalescy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/coalescy/-/coalescy-1.0.0.tgz", + "integrity": "sha1-SwZYRrg2NhrabEtKSr9LwcrDG/E=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "color": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true, + "requires": { + "clone": "1.0.4", + "color-convert": "1.9.1", + "color-string": "0.3.0" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + } + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true, + "requires": { + "color": "0.11.4", + "css-color-names": "0.0.4", + "has": "1.0.1" + } + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "compressible": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz", + "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=", + "dev": true, + "requires": { + "mime-db": "1.33.0" + } + }, + "compression": { + "version": "1.7.2", + "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", + "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "bytes": "3.0.0", + "compressible": "2.0.13", + "debug": "2.6.9", + "on-headers": "1.0.1", + "safe-buffer": "5.1.1", + "vary": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "1.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" + } + }, + "connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, + "consolidate": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz", + "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=", + "dev": true, + "requires": { + "bluebird": "3.5.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.5.1.tgz", + "integrity": "sha512-OlTo6DYg0XfTKOF8eLf79wcHm4Ut10xU2cRBRPMW/NA5F9VMjZGTfRHWDIYC3s+1kObGYrBLshXWU1K0hILkNQ==", + "dev": true, + "requires": { + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "globby": "7.1.1", + "is-glob": "4.0.0", + "loader-utils": "1.1.0", + "minimatch": "3.0.4", + "p-limit": "1.2.0", + "serialize-javascript": "1.5.0" + } + }, + "core-js": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz", + "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "dev": true, + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.7.0", + "minimist": "1.2.0", + "object-assign": "4.1.1", + "os-homedir": "1.0.2", + "parse-json": "2.2.0", + "require-from-string": "1.2.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "create-ecdh": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.1.tgz", + "integrity": "sha512-iZvCCg8XqHQZ1ioNBTzXS/cQSkqkqcPs8xSX4upNB+DAk9Ht3uzQf2J32uAHNCne8LDmKr29AgZrEs4oIrwLuQ==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "md5.js": "1.3.4", + "ripemd160": "2.0.1", + "sha.js": "2.4.11" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.11" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.2", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "optional": true, + "requires": { + "boom": "2.10.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.14", + "public-encrypt": "4.0.2", + "randombytes": "2.0.6", + "randomfill": "1.0.4" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-loader": { + "version": "0.28.11", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", + "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "css-selector-tokenizer": "0.7.0", + "cssnano": "3.10.0", + "icss-utils": "2.1.0", + "loader-utils": "1.1.0", + "lodash.camelcase": "4.3.0", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-modules-extract-imports": "1.2.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0", + "postcss-value-parser": "3.3.0", + "source-list-map": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + } + }, + "css-selector-tokenizer": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", + "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "dev": true, + "requires": { + "cssesc": "0.1.0", + "fastparse": "1.1.1", + "regexpu-core": "1.0.0" + }, + "dependencies": { + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + } + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true, + "requires": { + "autoprefixer": "6.7.7", + "decamelize": "1.2.0", + "defined": "1.0.0", + "has": "1.0.1", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-calc": "5.3.1", + "postcss-colormin": "2.2.2", + "postcss-convert-values": "2.6.1", + "postcss-discard-comments": "2.0.4", + "postcss-discard-duplicates": "2.1.0", + "postcss-discard-empty": "2.1.0", + "postcss-discard-overridden": "0.1.1", + "postcss-discard-unused": "2.2.3", + "postcss-filter-plugins": "2.0.2", + "postcss-merge-idents": "2.1.7", + "postcss-merge-longhand": "2.0.2", + "postcss-merge-rules": "2.1.2", + "postcss-minify-font-values": "1.0.5", + "postcss-minify-gradients": "1.0.5", + "postcss-minify-params": "1.2.2", + "postcss-minify-selectors": "2.1.1", + "postcss-normalize-charset": "1.1.1", + "postcss-normalize-url": "3.0.8", + "postcss-ordered-values": "2.2.3", + "postcss-reduce-idents": "2.4.0", + "postcss-reduce-initial": "1.0.1", + "postcss-reduce-transforms": "1.0.4", + "postcss-svgo": "2.1.6", + "postcss-unique-selectors": "2.0.2", + "postcss-value-parser": "3.3.0", + "postcss-zindex": "2.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000830", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30000830", + "electron-to-chromium": "1.3.42" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true, + "requires": { + "clap": "1.2.3", + "source-map": "0.5.7" + } + }, + "cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "0.10.42" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "optional": true + } + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==" + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "2.0.5", + "object-keys": "1.0.11" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" + }, + "dependencies": { + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "detect-node": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", + "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, + "requires": { + "arrify": "1.0.1", + "path-type": "3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "1.1.5", + "safe-buffer": "5.1.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "1.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "2.0.2" + } + }, + "dom-converter": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", + "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", + "dev": true, + "requires": { + "utila": "0.3.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", + "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "duplexify": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.4.tgz", + "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "stream-shift": "1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "2.5.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.9.tgz", + "integrity": "sha512-GJCAeDBKfREgkBtgrYSf9hQy9kTb3helv0zGdzqhM7iAkW8FA/ZF97VQDbwFiwIT8MQLLOe5VlPZOEvZAqtUAQ==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.42", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.42.tgz", + "integrity": "sha1-lcM78B0MxAVVauyJn+Yf1NduoPk=", + "dev": true + }, + "element-ui": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.3.4.tgz", + "integrity": "sha512-wJij9v2kNn23a1PjsNMviYAQF1yRrHbO9q3yyyJls49tIauJp+DfoESRVXR+l7qhnUKaocvKmHf5fmBoEzZMoQ==", + "requires": { + "async-validator": "1.8.2", + "babel-helper-vue-jsx-merge-props": "2.0.3", + "deepmerge": "1.5.2", + "normalize-wheel": "1.0.1", + "throttle-debounce": "1.0.1" + } + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.8" + } + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "requires": { + "prr": "1.0.1" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.1.tgz", + "integrity": "sha1-oyArj7AxFKqbQKDjZp5IsrZaAQo=", + "dev": true, + "requires": { + "stackframe": "1.0.4" + } + }, + "es-abstract": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", + "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", + "dev": true, + "requires": { + "es-to-primitive": "1.1.1", + "function-bind": "1.1.1", + "has": "1.0.1", + "is-callable": "1.1.3", + "is-regex": "1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "1.1.3", + "is-date-object": "1.0.1", + "is-symbol": "1.0.1" + } + }, + "es5-ext": { + "version": "0.10.42", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.42.tgz", + "integrity": "sha512-AJxO1rmPe1bDEfSR6TJ/FgMFYuTBhR5R57KW58iCkYACMyFbrkqVyzXSurYoScDGvgyMpk7uRF/lPUPPTmsRSA==", + "dev": true, + "requires": { + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.42", + "es6-symbol": "3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.42", + "es6-iterator": "2.0.3", + "es6-set": "0.1.5", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.42", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.42" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.42", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + } + }, + "eslint": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "babel-code-frame": "6.26.0", + "chalk": "2.4.0", + "concat-stream": "1.6.2", + "cross-spawn": "5.1.0", + "debug": "3.1.0", + "doctrine": "2.1.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "1.0.0", + "espree": "3.5.4", + "esquery": "1.0.1", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.2", + "globals": "11.4.0", + "ignore": "3.3.7", + "imurmurhash": "0.1.4", + "inquirer": "3.3.0", + "is-resolvable": "1.1.0", + "js-yaml": "3.11.0", + "json-stable-stringify-without-jsonify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.5", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "7.0.0", + "progress": "2.0.0", + "regexpp": "1.1.0", + "require-uncached": "1.0.3", + "semver": "5.5.0", + "strip-ansi": "4.0.0", + "strip-json-comments": "2.0.1", + "table": "4.0.2", + "text-table": "0.2.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "globals": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz", + "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==", + "dev": true + }, + "js-yaml": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "eslint-config-standard": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", + "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=", + "dev": true + }, + "eslint-friendly-formatter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-friendly-formatter/-/eslint-friendly-formatter-3.0.0.tgz", + "integrity": "sha1-J4h0Q1psRuwdlPoLH/SU4w7wQpA=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "coalescy": "1.0.0", + "extend": "3.0.1", + "minimist": "1.2.0", + "text-table": "0.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "2.6.9", + "resolve": "1.7.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "eslint-loader": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-1.9.0.tgz", + "integrity": "sha512-40aN976qSNPyb9ejTqjEthZITpls1SVKtwguahmH1dzGCwQU/vySE+xX33VZmD8csU0ahVNCtFlsPgKqRBiqgg==", + "dev": true, + "requires": { + "loader-fs-cache": "1.0.1", + "loader-utils": "1.1.0", + "object-assign": "4.1.1", + "object-hash": "1.3.0", + "rimraf": "2.6.2" + } + }, + "eslint-module-utils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", + "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", + "dev": true, + "requires": { + "debug": "2.6.9", + "pkg-dir": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "1.1.2" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.11.0.tgz", + "integrity": "sha1-Fa7qN6Z0mdhI6OmBgG1GJ7VQOBY=", + "dev": true, + "requires": { + "contains-path": "0.1.0", + "debug": "2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "0.3.2", + "eslint-module-utils": "2.2.0", + "has": "1.0.1", + "lodash": "4.17.5", + "minimatch": "3.0.4", + "read-pkg-up": "2.0.0", + "resolve": "1.7.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + } + } + }, + "eslint-plugin-node": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz", + "integrity": "sha512-xhPXrh0Vl/b7870uEbaumb2Q+LxaEcOQ3kS1jtIXanBAwpMre1l5q/l2l/hESYJGEFKuI78bp6Uw50hlpr7B+g==", + "dev": true, + "requires": { + "ignore": "3.3.7", + "minimatch": "3.0.4", + "resolve": "1.7.1", + "semver": "5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, + "eslint-plugin-promise": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.7.0.tgz", + "integrity": "sha512-2WO+ZFh7vxUKRfR0cOIMrWgYKdR6S1AlOezw6pC52B6oYpd5WFghN+QHxvrRdZMtbo8h3dfUZ2o1rWb0UPbKtg==", + "dev": true + }, + "eslint-plugin-standard": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", + "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=", + "dev": true + }, + "eslint-plugin-vue": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-4.4.0.tgz", + "integrity": "sha512-UHeE0aTEv9A/9xe8J6X7rDLMbwV6GuQFKAscMyLEv49Y4wK4KwQiifr2X0MsNsVlmccrDUyjI9KO4DuFTkPP9A==", + "dev": true, + "requires": { + "vue-eslint-parser": "2.0.3" + } + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + } + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "5.5.3", + "acorn-jsx": "3.0.1" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.42" + } + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dev": true, + "requires": { + "original": "1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.1" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + }, + "dependencies": { + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "express": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.3", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "1.4.0", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "0.4.2", + "iconv-lite": "0.4.21", + "tmp": "0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "extract-text-webpack-plugin": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz", + "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==", + "dev": true, + "requires": { + "async": "2.6.0", + "loader-utils": "1.1.0", + "schema-utils": "0.3.0", + "webpack-sources": "1.1.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastparse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", + "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": "0.7.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "1.3.0", + "object-assign": "4.1.1" + } + }, + "file-loader": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", + "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "schema-utils": "0.4.5" + }, + "dependencies": { + "ajv": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", + "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", + "dev": true, + "requires": { + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1", + "uri-js": "3.0.2" + } + }, + "ajv-keywords": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", + "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", + "dev": true + }, + "schema-utils": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "dev": true, + "requires": { + "ajv": "6.4.0", + "ajv-keywords": "3.1.0" + } + } + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "make-dir": "1.2.0", + "pkg-dir": "2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } + }, + "flatten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "dev": true + }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "follow-redirects": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", + "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==", + "requires": { + "debug": "3.1.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "optional": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "friendly-errors-webpack-plugin": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz", + "integrity": "sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "error-stack-parser": "2.0.1", + "string-width": "2.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.6" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.10.0", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "dir-glob": "2.0.0", + "glob": "7.1.2", + "ignore": "3.3.7", + "pify": "3.0.0", + "slash": "1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "gzip-size": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-4.1.0.tgz", + "integrity": "sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw=", + "dev": true, + "requires": { + "duplexer": "0.1.1", + "pify": "3.0.0" + } + }, + "handle-thing": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "hosted-git-info": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "wbuf": "1.7.3" + } + }, + "html-comment-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", + "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", + "dev": true + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "html-minifier": { + "version": "3.5.15", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.15.tgz", + "integrity": "sha512-OZa4rfb6tZOZ3Z8Xf0jKxXkiDcFWldQePGYFDcgKqES2sXeWaEv9y6QQvWUtX3ySI3feApQi5uCsHLINQ6NoAw==", + "dev": true, + "requires": { + "camel-case": "3.0.0", + "clean-css": "4.1.11", + "commander": "2.15.1", + "he": "1.1.1", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.3.21" + } + }, + "html-webpack-plugin": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz", + "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "html-minifier": "3.5.15", + "loader-utils": "0.2.17", + "lodash": "4.17.5", + "pretty-error": "2.1.1", + "toposort": "1.0.6" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + } + } + }, + "htmlparser2": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", + "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.1.0", + "domutils": "1.1.6", + "readable-stream": "1.0.34" + }, + "dependencies": { + "domutils": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", + "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.4.0" + } + }, + "http-parser-js": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.11.tgz", + "integrity": "sha512-QCR5O2AjjMW8Mo4HyI1ctFcv+O99j/0g367V3YoVnrNw5hkDvAWZD0lWGcc+F4yN3V55USPCVix4efb75HxFfA==", + "dev": true + }, + "http-proxy": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "dev": true, + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "dev": true, + "requires": { + "http-proxy": "1.16.2", + "is-glob": "3.1.0", + "lodash": "4.17.5", + "micromatch": "2.3.11" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + } + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + } + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", + "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", + "dev": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "dev": true, + "requires": { + "postcss": "6.0.21" + } + }, + "ieee754": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", + "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "dev": true + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "optional": true + }, + "import-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "dev": true, + "requires": { + "pkg-dir": "2.0.0", + "resolve-cwd": "2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "3.1.0", + "chalk": "2.4.0", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.2.0", + "figures": "2.0.0", + "lodash": "4.17.5", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "internal-ip": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", + "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "dev": true, + "requires": { + "meow": "3.7.0" + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ipaddr.js": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", + "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.11.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-callable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", + "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-odd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", + "dev": true, + "requires": { + "is-number": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "1.0.1" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true, + "requires": { + "html-comment-regex": "1.1.1" + } + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "optional": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "optional": true + }, + "js-base64": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", + "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==", + "dev": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "2.7.3" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "optional": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "optional": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "optional": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "optional": true + } + } + }, + "killable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", + "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "last-call-webpack-plugin": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-2.1.2.tgz", + "integrity": "sha512-CZc+m2xZm51J8qSwdODeiiNeqh8CYkKEq6Rw8IkE4i/4yqf2cJhjQPsA6BtAV970ePRNhwEOXhy2U5xc5Jwh9Q==", + "dev": true, + "requires": { + "lodash": "4.17.5", + "webpack-sources": "1.1.0" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "less": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/less/-/less-3.0.1.tgz", + "integrity": "sha512-qUR4uNv88/c0mpnGOULgMLRXXSD6X0tYo4cVrokzsvn68+nuj8rskInCSe2eLAVYWGD/oAlq8P7J/FeZ/euKiw==", + "requires": { + "errno": "0.1.7", + "graceful-fs": "4.1.11", + "image-size": "0.5.5", + "mime": "1.6.0", + "mkdirp": "0.5.1", + "promise": "7.3.1", + "request": "2.81.0", + "source-map": "0.5.7" + } + }, + "less-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz", + "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==", + "requires": { + "clone": "2.1.2", + "loader-utils": "1.1.0", + "pify": "3.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "loader-fs-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz", + "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", + "dev": true, + "requires": { + "find-cache-dir": "0.1.1", + "mkdirp": "0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "1.1.2" + } + } + } + }, + "loader-runner": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "2.4.0" + } + }, + "loglevel": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lru-cache": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", + "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "macaddress": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", + "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", + "dev": true + }, + "make-dir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", + "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, + "math-expression-evaluator": { + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", + "dev": true + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "0.1.7", + "readable-stream": "2.3.6" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "1.33.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "duplexify": "3.5.4", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.3", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.4.0", + "stream-each": "1.2.2", + "through2": "2.0.3" + } + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "1.3.1", + "thunky": "1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "neo-async": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz", + "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "1.1.4" + } + }, + "node-forge": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz", + "integrity": "sha1-naYR6giYL0uUIGs760zJZl8gwwA=", + "dev": true + }, + "node-libs-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "1.1.1", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.6", + "stream-browserify": "2.0.1", + "stream-http": "2.8.1", + "string_decoder": "1.1.1", + "timers-browserify": "2.0.10", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + } + }, + "node-notifier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.2.1.tgz", + "integrity": "sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==", + "dev": true, + "requires": { + "growly": "1.3.0", + "semver": "5.5.0", + "shellwords": "0.1.1", + "which": "1.3.0" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.6.0", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.3" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "prepend-http": "1.0.4", + "query-string": "4.3.4", + "sort-keys": "1.1.2" + } + }, + "normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz", + "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, + "requires": { + "boolbase": "1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "object-hash": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.0.tgz", + "integrity": "sha512-05KzQ70lSeGSrZJQXE5wNDiTkBJDlUT/myi6RX9dVIvz7a7Qh4oH93BQdiPMn27nldYvVQCKMUaM83AfizZlsQ==", + "dev": true + }, + "object-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, + "opener": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", + "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", + "dev": true + }, + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "requires": { + "is-wsl": "1.1.0" + } + }, + "optimize-css-assets-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-Fjn7wyyadPAriuH2DHamDQw5B8GohEWbroBkKoPeP+vSF2PIAPI7WDihi8WieMRb/At4q7Ea7zTKaMDuSoIAAg==", + "dev": true, + "requires": { + "cssnano": "3.10.0", + "last-call-webpack-plugin": "2.1.2" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, + "ora": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-1.4.0.tgz", + "integrity": "sha512-iMK1DOQxzzh2MBlVsU42G80mnrvUhqsMh74phHtDlrcTZPK0pH6o7l7DRshK+0YsxDyEuaOkziVdvM3T0QTzpw==", + "dev": true, + "requires": { + "chalk": "2.4.0", + "cli-cursor": "2.1.0", + "cli-spinners": "1.3.1", + "log-symbols": "2.2.0" + } + }, + "original": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", + "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", + "dev": true, + "requires": { + "url-parse": "1.0.5" + }, + "dependencies": { + "url-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", + "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", + "dev": true, + "requires": { + "querystringify": "0.0.4", + "requires-port": "1.0.0" + } + } + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "dev": true, + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.2.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pagoda-ui": { + "version": "1.0.23", + "resolved": "https://registry.npmjs.org/pagoda-ui/-/pagoda-ui-1.0.23.tgz", + "integrity": "sha512-gnh3vKGqNfPLkMx+XijJeIg1fpLciZLqIAhrUznH9Q8vupElQHSTtb/AflCw2D++0Sds9KmQdjoFr9MULHRUkQ==", + "requires": { + "axios": "0.17.1", + "less": "3.0.1", + "less-loader": "4.1.0" + }, + "dependencies": { + "axios": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.17.1.tgz", + "integrity": "sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=", + "requires": { + "follow-redirects": "1.4.1", + "is-buffer": "1.1.6" + } + } + } + }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "2.3.2" + } + }, + "parse-asn1": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "dev": true, + "requires": { + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.14" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "pbkdf2": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "dev": true, + "requires": { + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.11" + } + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "optional": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "2.1.0" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "portfinder": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", + "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "dev": true, + "requires": { + "async": "1.5.2", + "debug": "2.6.9", + "mkdirp": "0.5.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", + "dev": true, + "requires": { + "chalk": "2.4.0", + "source-map": "0.6.1", + "supports-color": "5.4.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-calc": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-message-helpers": "2.0.0", + "reduce-css-calc": "1.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true, + "requires": { + "colormin": "1.1.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-convert-values": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-duplicates": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-empty": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-unused": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "uniqs": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-filter-plugins": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", + "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "uniqid": "4.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-import": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-11.1.0.tgz", + "integrity": "sha512-5l327iI75POonjxkXgdRCUS+AlzAdBx4pOvMEhTKTCjb1p8IEeVR9yx3cPbmN7LIWJLbfnIXxAhoB4jpD0c/Cw==", + "dev": true, + "requires": { + "postcss": "6.0.21", + "postcss-value-parser": "3.3.0", + "read-cache": "1.0.0", + "resolve": "1.7.1" + } + }, + "postcss-load-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", + "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "dev": true, + "requires": { + "cosmiconfig": "2.2.2", + "object-assign": "4.1.1", + "postcss-load-options": "1.2.0", + "postcss-load-plugins": "2.3.0" + } + }, + "postcss-load-options": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", + "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "dev": true, + "requires": { + "cosmiconfig": "2.2.2", + "object-assign": "4.1.1" + } + }, + "postcss-load-plugins": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", + "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "dev": true, + "requires": { + "cosmiconfig": "2.2.2", + "object-assign": "4.1.1" + } + }, + "postcss-loader": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.4.tgz", + "integrity": "sha512-L2p654oK945B/gDFUGgOhh7uzj19RWoY1SVMeJVoKno1H2MdbQ0RppR/28JGju4pMb22iRC7BJ9aDzbxXSLf4A==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "postcss": "6.0.21", + "postcss-load-config": "1.2.0", + "schema-utils": "0.4.5" + }, + "dependencies": { + "ajv": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", + "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", + "dev": true, + "requires": { + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1", + "uri-js": "3.0.2" + } + }, + "ajv-keywords": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", + "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", + "dev": true + }, + "schema-utils": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "dev": true, + "requires": { + "ajv": "6.4.0", + "ajv-keywords": "3.1.0" + } + } + } + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-merge-rules": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-api": "1.6.1", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3", + "vendors": "1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30000830", + "electron-to-chromium": "1.3.42" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-message-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "postcss-minify-font-values": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-minify-gradients": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-minify-params": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0", + "uniqs": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-minify-selectors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "has": "1.0.1", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz", + "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", + "dev": true, + "requires": { + "postcss": "6.0.21" + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.21" + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.21" + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.21" + } + }, + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true, + "requires": { + "is-absolute-url": "2.1.0", + "normalize-url": "1.9.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-reduce-transforms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true, + "requires": { + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "postcss-svgo": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true, + "requires": { + "is-svg": "2.1.0", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0", + "svgo": "0.7.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "uniqs": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-url": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-7.3.2.tgz", + "integrity": "sha512-QMV5mA+pCYZQcUEPQkmor9vcPQ2MT+Ipuu8qdi1gVxbNiIiErEGft+eny1ak19qALoBkccS5AHaCaCDzh7b9MA==", + "dev": true, + "requires": { + "mime": "1.6.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "postcss": "6.0.21", + "xxhashjs": "0.2.2" + } + }, + "postcss-value-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "postcss-zindex": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.18", + "uniqs": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "prettier": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.12.1.tgz", + "integrity": "sha1-wa0g6APndJ+vkFpAnSNn4Gu+cyU=", + "dev": true + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "requires": { + "renderkid": "2.0.1", + "utila": "0.4.0" + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "optional": true, + "requires": { + "asap": "2.0.6" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "proxy-addr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", + "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "dev": true, + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.6.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.1", + "randombytes": "2.0.6" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz", + "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", + "dev": true, + "requires": { + "duplexify": "3.5.4", + "inherits": "2.0.3", + "pump": "2.0.1" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "optional": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", + "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "2.0.6", + "safe-buffer": "5.1.1" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + } + } + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + }, + "dependencies": { + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.6", + "set-immediate-shim": "1.0.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "1.7.1" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "math-expression-evaluator": "1.2.17", + "reduce-function-call": "1.0.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "reduce-function-call": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", + "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "dev": true, + "requires": { + "balanced-match": "0.4.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "renderkid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", + "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", + "dev": true, + "requires": { + "css-select": "1.2.0", + "dom-converter": "0.1.4", + "htmlparser2": "3.3.0", + "strip-ansi": "3.0.1", + "utila": "0.3.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.7.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true, + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + }, + "dependencies": { + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + } + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "1.2.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "4.0.8" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "0.1.15" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "5.5.2" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + } + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.2.tgz", + "integrity": "sha1-tESVgNmZKbZbEKSDiTAaZZIIh1g=", + "dev": true, + "requires": { + "node-forge": "0.7.1" + } + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.3", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", + "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", + "dev": true + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "1.0.3", + "http-errors": "1.6.3", + "mime-types": "2.1.18", + "parseurl": "1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "requires": { + "glob": "7.1.2", + "interpret": "1.1.0", + "rechoir": "0.6.2" + } + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.1", + "use": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "optional": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "dev": true, + "requires": { + "faye-websocket": "0.10.0", + "uuid": "3.2.1" + } + }, + "sockjs-client": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "eventsource": "0.1.6", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.3.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "dev": true, + "requires": { + "websocket-driver": "0.7.0" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "1.1.0" + } + }, + "source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", + "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "dev": true, + "requires": { + "atob": "2.1.0", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "dev": true + }, + "spdy": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", + "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "dev": true, + "requires": { + "debug": "2.6.9", + "handle-thing": "1.2.5", + "http-deceiver": "1.2.7", + "safe-buffer": "5.1.1", + "select-hose": "2.0.0", + "spdy-transport": "2.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "spdy-transport": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.0.tgz", + "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", + "dev": true, + "requires": { + "debug": "2.6.9", + "detect-node": "2.0.3", + "hpack.js": "2.1.6", + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "safe-buffer": "5.1.1", + "wbuf": "1.7.3" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "optional": true + } + } + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stackframe": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", + "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "stream-each": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + } + }, + "stream-http": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz", + "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true, + "requires": { + "coa": "1.0.4", + "colors": "1.1.2", + "csso": "2.3.2", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "sax": "1.2.4", + "whet.extend": "0.9.9" + } + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "ajv-keywords": "2.1.1", + "chalk": "2.4.0", + "lodash": "4.17.5", + "slice-ansi": "1.0.0", + "string-width": "2.1.1" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + } + } + }, + "tapable": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throttle-debounce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.0.1.tgz", + "integrity": "sha1-2tD+Ew+drzcZ/eoz3Dao5rp/MLU=" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.6", + "xtend": "4.0.1" + } + }, + "thunky": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz", + "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=", + "dev": true + }, + "time-stamp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", + "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + }, + "toposort": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz", + "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "tryer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.0.tgz", + "integrity": "sha1-Antp+oIyJeVRys4+8DsR9qs3wdc=", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "optional": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.18" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "3.3.21", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.21.tgz", + "integrity": "sha512-uy82472lH8tshK3jS3c5IFb5MmNKd/5qyBd0ih8sM42L3jWvxnE339U9gZU1zufnLVs98Stib9twq8dLm2XYCA==", + "dev": true, + "requires": { + "commander": "2.15.1", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "uglifyjs-webpack-plugin": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.5.tgz", + "integrity": "sha512-hIQJ1yxAPhEA2yW/i7Fr+SXZVMp+VEI3d42RTHBgQd2yhp/1UdBcR3QEWPV5ahBxlqQDMEMTuTEvDHSFINfwSw==", + "dev": true, + "requires": { + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "schema-utils": "0.4.5", + "serialize-javascript": "1.5.0", + "source-map": "0.6.1", + "uglify-es": "3.3.9", + "webpack-sources": "1.1.0", + "worker-farm": "1.6.0" + }, + "dependencies": { + "ajv": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", + "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", + "dev": true, + "requires": { + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1", + "uri-js": "3.0.2" + } + }, + "ajv-keywords": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", + "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", + "dev": true + }, + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, + "schema-utils": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "dev": true, + "requires": { + "ajv": "6.4.0", + "ajv-keywords": "3.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "dev": true, + "requires": { + "commander": "2.13.0", + "source-map": "0.6.1" + } + } + } + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqid": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", + "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", + "dev": true, + "requires": { + "macaddress": "0.2.8" + } + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "dev": true, + "requires": { + "unique-slug": "2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "dev": true, + "requires": { + "imurmurhash": "0.1.4" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.4.tgz", + "integrity": "sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw==", + "dev": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "uri-js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz", + "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", + "dev": true, + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-loader": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.9.tgz", + "integrity": "sha512-B7QYFyvv+fOBqBVeefsxv6koWWtjmHaMFT6KZWti4KRw8YUD/hOU+3AECvXuzyVawIBx3z7zQRejXCDSO5kk1Q==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "mime": "1.3.6" + }, + "dependencies": { + "mime": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.3.0.tgz", + "integrity": "sha512-zPvPA3T7P6M+0iNsgX+iAcAz4GshKrowtQBHHc/28tVsBc8jK7VRCNX+2GEcoE6zDB6XqXhcyiUWPVZY6C70Cg==", + "dev": true, + "requires": { + "querystringify": "1.0.0", + "requires-port": "1.0.0" + }, + "dependencies": { + "querystringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", + "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", + "dev": true + } + } + }, + "use": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" + }, + "validate-npm-package-license": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "dev": true, + "requires": { + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", + "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "optional": true + } + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "vue": { + "version": "2.5.16", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.16.tgz", + "integrity": "sha512-/ffmsiVuPC8PsWcFkZngdpas19ABm5mh2wA7iDqcltyCTwlgZjHGeJYOXkBMo422iPwIcviOtrTCUpSfXmToLQ==" + }, + "vue-eslint-parser": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", + "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==", + "dev": true, + "requires": { + "debug": "3.1.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "1.0.0", + "espree": "3.5.4", + "esquery": "1.0.1", + "lodash": "4.17.5" + } + }, + "vue-hot-reload-api": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.0.tgz", + "integrity": "sha512-2j/t+wIbyVMP5NvctQoSUvLkYKoWAAk2QlQiilrM2a6/ulzFgdcLUJfTvs4XQ/3eZhHiBmmEojbjmM4AzZj8JA==", + "dev": true + }, + "vue-loader": { + "version": "13.7.1", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-13.7.1.tgz", + "integrity": "sha512-v6PbKMGl/hWHGPxB2uGHsA66vusrXF66J/h1QiFXtU6z5zVSK8jq5xl95M1p3QNXmuEJKNP3nxoXfbgQNs7hJg==", + "dev": true, + "requires": { + "consolidate": "0.14.5", + "hash-sum": "1.0.2", + "loader-utils": "1.1.0", + "lru-cache": "4.1.2", + "postcss": "6.0.21", + "postcss-load-config": "1.2.0", + "postcss-selector-parser": "2.2.3", + "prettier": "1.12.1", + "resolve": "1.7.1", + "source-map": "0.6.1", + "vue-hot-reload-api": "2.3.0", + "vue-style-loader": "3.1.2", + "vue-template-es2015-compiler": "1.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "vue-router": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.0.1.tgz", + "integrity": "sha512-vLLoY452L+JBpALMP5UHum9+7nzR9PeIBCghU9ZtJ1eWm6ieUI8Zb/DI3MYxH32bxkjzYV1LRjNv4qr8d+uX/w==" + }, + "vue-style-loader": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-3.1.2.tgz", + "integrity": "sha512-ICtVdK/p+qXWpdSs2alWtsXt9YnDoYjQe0w5616j9+/EhjoxZkbun34uWgsMFnC1MhrMMwaWiImz3K2jK1Yp2Q==", + "dev": true, + "requires": { + "hash-sum": "1.0.2", + "loader-utils": "1.1.0" + } + }, + "vue-template-compiler": { + "version": "2.5.16", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.16.tgz", + "integrity": "sha512-ZbuhCcF/hTYmldoUOVcu2fcbeSAZnfzwDskGduOrnjBiIWHgELAd+R8nAtX80aZkceWDKGQ6N9/0/EUpt+l22A==", + "dev": true, + "requires": { + "de-indent": "1.0.2", + "he": "1.1.1" + } + }, + "vue-template-es2015-compiler": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz", + "integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==", + "dev": true + }, + "vuex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.0.1.tgz", + "integrity": "sha512-wLoqz0B7DSZtgbWL1ShIBBCjv22GV5U+vcBFox658g6V0s4wZV9P4YjCNyoHSyIBpj1f29JBoNQIqD82cR4O3w==" + }, + "watchpack": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.5.0.tgz", + "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==", + "dev": true, + "requires": { + "chokidar": "2.0.3", + "graceful-fs": "4.1.11", + "neo-async": "2.5.1" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "1.0.1" + } + }, + "webpack": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz", + "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==", + "dev": true, + "requires": { + "acorn": "5.5.3", + "acorn-dynamic-import": "2.0.2", + "ajv": "6.4.0", + "ajv-keywords": "3.1.0", + "async": "2.6.0", + "enhanced-resolve": "3.4.1", + "escope": "3.6.0", + "interpret": "1.1.0", + "json-loader": "0.5.7", + "json5": "0.5.1", + "loader-runner": "2.3.0", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "mkdirp": "0.5.1", + "node-libs-browser": "2.1.0", + "source-map": "0.5.7", + "supports-color": "4.5.0", + "tapable": "0.2.8", + "uglifyjs-webpack-plugin": "0.4.6", + "watchpack": "1.5.0", + "webpack-sources": "1.1.0", + "yargs": "8.0.2" + }, + "dependencies": { + "ajv": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", + "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", + "dev": true, + "requires": { + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1", + "uri-js": "3.0.2" + } + }, + "ajv-keywords": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", + "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true, + "requires": { + "source-map": "0.5.7", + "uglify-js": "2.8.29", + "webpack-sources": "1.1.0" + } + } + } + }, + "webpack-bundle-analyzer": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.11.1.tgz", + "integrity": "sha512-VKUVkVMc6TWVXmF1OxsBXoiRjYiDRA4XT0KqtbLMDK+891VX7FCuklYwzldND8J2upUcHHnuXYNTP+4mSFi4Kg==", + "dev": true, + "requires": { + "acorn": "5.5.3", + "bfj-node4": "5.3.1", + "chalk": "2.4.0", + "commander": "2.15.1", + "ejs": "2.5.9", + "express": "4.16.3", + "filesize": "3.6.1", + "gzip-size": "4.1.0", + "lodash": "4.17.5", + "mkdirp": "0.5.1", + "opener": "1.4.3", + "ws": "4.1.0" + } + }, + "webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "1.6.0", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0", + "time-stamp": "2.0.0" + } + }, + "webpack-dev-server": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz", + "integrity": "sha512-zrPoX97bx47vZiAXfDrkw8pe9QjJ+lunQl3dypojyWwWr1M5I2h0VSrMPfTjopHQPRNn+NqfjcMmhoLcUJe2gA==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "array-includes": "3.0.3", + "bonjour": "3.5.0", + "chokidar": "2.0.3", + "compression": "1.7.2", + "connect-history-api-fallback": "1.5.0", + "debug": "3.1.0", + "del": "3.0.0", + "express": "4.16.3", + "html-entities": "1.2.1", + "http-proxy-middleware": "0.17.4", + "import-local": "1.0.0", + "internal-ip": "1.2.0", + "ip": "1.1.5", + "killable": "1.0.0", + "loglevel": "1.6.1", + "opn": "5.3.0", + "portfinder": "1.0.13", + "selfsigned": "1.10.2", + "serve-index": "1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.1.4", + "spdy": "3.4.7", + "strip-ansi": "3.0.1", + "supports-color": "5.4.0", + "webpack-dev-middleware": "1.12.2", + "yargs": "6.6.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true, + "requires": { + "globby": "6.1.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "p-map": "1.2.0", + "pify": "3.0.0", + "rimraf": "2.6.2" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "1.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "4.2.1" + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + } + } + } + }, + "webpack-merge": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.2.tgz", + "integrity": "sha512-/0QYwW/H1N/CdXYA2PNPVbsxO3u2Fpz34vs72xm03SRfg6bMNGfMJIQEpQjKRvkG2JvT6oRJFpDtSrwbX8Jzvw==", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + }, + "webpack-sources": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", + "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "dev": true, + "requires": { + "source-list-map": "2.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "websocket-driver": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "dev": true, + "requires": { + "http-parser-js": "0.4.11", + "websocket-extensions": "0.1.3" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "dev": true + }, + "whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "worker-farm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "dev": true, + "requires": { + "errno": "0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "0.5.1" + } + }, + "ws": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "dev": true, + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1" + } + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "requires": { + "cuint": "0.2.2" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dev": true, + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + } + } +} diff --git a/template/package.json b/template/package.json index 207322b98c..288791f362 100644 --- a/template/package.json +++ b/template/package.json @@ -1,89 +1,34 @@ { - "name": "{{ name }}", + "name": "purchase", "version": "1.0.0", - "description": "{{ description }}", - "author": "{{ author }}", + "description": "purchase", + "author": "pagoda", "private": true, "scripts": { "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", - "start": "npm run dev", - {{#if_eq runner "jest"}} - "unit": "jest --config test/unit/jest.conf.js --coverage", - {{/if_eq}} - {{#if_eq runner "karma"}} - "unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run", - {{/if_eq}} - {{#e2e}} - "e2e": "node test/e2e/runner.js", - {{/e2e}} - {{#if_or unit e2e}} - "test": "{{#unit}}npm run unit{{/unit}}{{#unit}}{{#e2e}} && {{/e2e}}{{/unit}}{{#e2e}}npm run e2e{{/e2e}}", - {{/if_or}} - {{#lint}} - "lint": "eslint --ext .js,.vue src{{#unit}} test/unit{{/unit}}{{#e2e}} test/e2e/specs{{/e2e}}", - {{/lint}} - "build": "node build/build.js" + "dev-mock": "cross-env NODE_MOCK=yes webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", + "start": "npm run dev-mock", + "lint": "eslint --ext .js,.vue src", + "build": "node build/build.js", + "build-dev": "cross-env NODE_TEST=yes NODE_MOCK=yes node build/build.js" }, "dependencies": { - "vue": "^2.5.2"{{#router}}, - "vue-router": "^3.0.1"{{/router}} + "axios": "^0.18.0", + "babel-polyfill": "^6.26.0", + "element-ui": "~2.3.9", + "file-saver": "^1.3.8", + "mockjs": "^1.0.1-beta3", + "moment": "^2.22.1", + "pagoda-ui": "^1.2.7", + "sortablejs": "^1.7.0", + "vue": "^2.5.2", + "vue-router": "^3.0.1", + "vuex": "^3.0.1" }, "devDependencies": { - {{#lint}} - "babel-eslint": "^7.2.3", - "eslint": "^4.15.0", - "eslint-friendly-formatter": "^3.0.0", - "eslint-loader": "^1.7.1", - "eslint-plugin-vue": "^4.0.0", - {{#if_eq lintConfig "standard"}} - "eslint-config-standard": "^10.2.1", - "eslint-plugin-promise": "^3.4.0", - "eslint-plugin-standard": "^3.0.1", - "eslint-plugin-import": "^2.7.0", - "eslint-plugin-node": "^5.2.0", - {{/if_eq}} - {{#if_eq lintConfig "airbnb"}} - "eslint-config-airbnb-base": "^11.3.0", - "eslint-import-resolver-webpack": "^0.8.3", - "eslint-plugin-import": "^2.7.0", - {{/if_eq}} - {{/lint}} - {{#if_eq runner "jest"}} - "babel-jest": "^21.0.2", - "babel-plugin-dynamic-import-node": "^1.2.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0", - "jest": "^22.0.4", - "jest-serializer-vue": "^0.3.0", - "vue-jest": "^1.0.2", - {{/if_eq}} - {{#if_eq runner "karma"}} - "cross-env": "^5.0.1", - "karma": "^1.4.1", - "karma-coverage": "^1.1.1", - "karma-mocha": "^1.3.0", - "karma-phantomjs-launcher": "^1.0.2", - "karma-phantomjs-shim": "^1.4.0", - "karma-sinon-chai": "^1.3.1", - "karma-sourcemap-loader": "^0.3.7", - "karma-spec-reporter": "0.0.31", - "karma-webpack": "^2.0.2", - "mocha": "^3.2.0", - "chai": "^4.1.2", - "sinon": "^4.0.0", - "sinon-chai": "^2.8.0", - "inject-loader": "^3.0.0", - "babel-plugin-istanbul": "^4.1.1", - "phantomjs-prebuilt": "^2.1.14", - {{/if_eq}} - {{#e2e}} - "babel-register": "^6.22.0", - "chromedriver": "^2.27.2", - "cross-spawn": "^5.0.1", - "nightwatch": "^0.9.12", - "selenium-server": "^3.0.1", - {{/e2e}} "autoprefixer": "^7.1.2", "babel-core": "^6.22.1", + "babel-eslint": "^7.2.3", "babel-helper-vue-jsx-merge-props": "^2.0.3", "babel-loader": "^7.1.1", "babel-plugin-syntax-jsx": "^6.18.0", @@ -93,29 +38,44 @@ "babel-preset-stage-2": "^6.22.0", "chalk": "^2.0.1", "copy-webpack-plugin": "^4.0.1", + "cross-env": "^5.2.0", "css-loader": "^0.28.0", + "eslint": "^4.15.0", + "eslint-config-standard": "^10.2.1", + "eslint-friendly-formatter": "^3.0.0", + "eslint-loader": "^1.7.1", + "eslint-plugin-import": "^2.7.0", + "eslint-plugin-node": "^5.2.0", + "eslint-plugin-promise": "^3.4.0", + "eslint-plugin-standard": "^3.0.1", + "eslint-plugin-vue": "^4.0.0", "extract-text-webpack-plugin": "^3.0.0", "file-loader": "^1.1.4", "friendly-errors-webpack-plugin": "^1.6.1", "html-webpack-plugin": "^2.30.1", - "webpack-bundle-analyzer": "^2.9.0", "node-notifier": "^5.1.2", + "node-sass": "^4.5.3", + "optimize-css-assets-webpack-plugin": "^3.2.0", + "ora": "^1.2.0", + "portfinder": "^1.0.13", "postcss-import": "^11.0.0", "postcss-loader": "^2.0.8", "postcss-url": "^7.2.1", + "rimraf": "^2.6.0", + "sass-loader": "^6.0.5", "semver": "^5.3.0", "shelljs": "^0.7.6", - "optimize-css-assets-webpack-plugin": "^3.2.0", - "ora": "^1.2.0", - "rimraf": "^2.6.0", + "style-loader": "^0.23.0", + "stylus": "^0.54.5", + "stylus-loader": "^3.0.2", "uglifyjs-webpack-plugin": "^1.1.1", "url-loader": "^0.5.8", "vue-loader": "^13.3.0", "vue-style-loader": "^3.0.1", "vue-template-compiler": "^2.5.2", - "portfinder": "^1.0.13", "webpack": "^3.6.0", - "webpack-dev-server": "^2.9.1", + "webpack-bundle-analyzer": "^2.9.0", + "webpack-dev-server": "^2.6.1", "webpack-merge": "^4.1.0" }, "engines": { diff --git a/template/src/App.vue b/template/src/App.vue index 0156030e49..eec0c68d78 100644 --- a/template/src/App.vue +++ b/template/src/App.vue @@ -1,34 +1,199 @@ <template> - <div id="app"> - <img src="./assets/logo.png"> - {{#router}} - <router-view/> - {{else}} - <HelloWorld/> - {{/router}} - </div> -</template> + <pagoda-layout v-if="!$route.meta.full" logo="" title="" collapse + :collapse-icon="['iconfont icon-shensuocaidan1', 'iconfont icon-shensuocaidan']" :side-menu="sideMenu" + :top-menu="topMenu" :header-props="{ + height: '50px' + }" + :top-menu-default-active="topMenuActive" :side-menu-default-active="sideMenuActive" + @tabs-change="handleTabsChange" @tabs-data-change="handleTabsDataChange" + @select-side-menu="handleSelectSideMenu" @collapse-change="handleCollapseChange" + @select-top-menu="handleSelectTopMenu" ref="layout" class="pagoda-layout-purchase pagoda-erp-ui-reset" + v-loading="loading.fullShow"> + <div slot="header-left" class="logo"><h3>百果园ERP</h3> + </div> + <div slot="header-right"> + <img class="vertical-middle" :src="role.img" width="38" height="38" alt="ddd"> + <!-- 2018-5-31 14:53:44 增加切换角色功能 --> + <el-dropdown @command="handleCommand" class="pointer text-blue" style="width: 80px;" trigger="click"> + <span class="el-dropdown-link"> + {{role.name}}<i class="el-icon-arrow-down el-icon--right"></i> + </span> + <el-dropdown-menu slot="dropdown"> + <!-- <el-dropdown-item disabled><span class="fz12" style="margin-left: -10px;">请购单角色</span></el-dropdown-item> --> + <el-dropdown-item v-for="(rl, index) in roles" :key="index" :command="rl" :disabled="rl.name === role.name"> + {{rl.name}} + </el-dropdown-item> + <!-- <el-dropdown-item disabled divided><span class="fz12" style="margin-left: -10px;">采购单角色</span></el-dropdown-item> + <el-dropdown-item disabled>待添加</el-dropdown-item> --> + </el-dropdown-menu> + </el-dropdown> + </div> + <div class="mb-10"> + <span v-if="$route.meta.back" class="fz13 inline-block por text-green" style="top: -3px;"> + <a class="pointer" @click="goBack()">返回上一级</a> | + </span> + <el-breadcrumb separator-class="el-icon-arrow-right" class="inline-block" v-if="breadcrumb && breadcrumb.length"> + <el-breadcrumb-item v-for="(item, index) in breadcrumb" :class="{'is-link': item.name}" :key="index" + @click.native="handleBreadcrumbChange(item.name)">{{item.label}} + </el-breadcrumb-item> + </el-breadcrumb> + </div> + <template v-if="isRouterAlive"> + <keep-alive :include="include"> + <router-view v-loading="loading.show" ref="routerView"></router-view> + </keep-alive> + </template> + </pagoda-layout> + <router-view v-loading="loading.fullShow" v-else></router-view> +</template> <script> -{{#unless router}} -import HelloWorld from './components/HelloWorld' + /* eslint-disable */ + import { + mapState, + mapGetters, + mapMutations + } from 'vuex' + // import { deepCopy } from '@/utils/utils' + // let subMenuUrls = []; // 存储所有二级菜单对象 + // sideMenu.forEach(side => { + // side.subMenu.forEach(sub => { + // const {label, url} = sub; + // subMenuUrls.push({label, url}); + // }); + // }); -{{/unless}} -export default { - name: 'App'{{#router}}{{else}}, - components: { - HelloWorld - }{{/router}} -} + export default { + name: "App", + data() { + return { + include: [], // 缓存组件的name数组 + isRouterAlive: true // 实现reload刷新组件的方法 + } + }, + methods: { + ...mapMutations(['setRole', 'setTopMenuActive']), + handleTabsChange(param) { + // let meta = this.$route.meta + // let routeParams = this.StoreService.routeParams[param.url] || {} + // 如果是侧边栏或者首页才跳路由 如果是属于相同path下的详情页则不跳转 + // console.log(this.$route.path, param.url) + this.$router.push(param.url) + }, + handleTabsDataChange(tabs) { + this.include = tabs.filter(el => el.name).map(el => el.name) + }, + handleCollapseChange() { + setTimeout(() => this.$bus.$emit('dolayout'), 300) + }, + handleSelectSideMenu(data) { + // if (data.url === this.$route.name) { + // console.log('重新刷新页面') + // this.reload() + // } + }, + handleSelectTopMenu({url}) { + if (url !== '/') { + let target = window.location.origin + url + window.location.href = target + } + }, + handleBreadcrumbChange(name) { + name && this.$router.push({ + name + }) + }, + handleCommand(command) { // 切换角色操作 + this.setRole(command) + this.$router.replace('/') + this.reload() + }, + reload() { // 实现reload刷新组件的方法 + this.isRouterAlive = false + this.$nextTick(() => (this.isRouterAlive = true)) + }, + goBack() { // 2018-6-1 16:13:17 增加返回上级操作 + let back = this.$route.meta.back + if (back === 'back') { + this.$router.back() + } else { + this.$router.push({ + name: back + }) + } + } + }, + computed: { + topMenuActive() { + let topMenuActive = this.$route.meta.topMenu || '/' + this.setTopMenuActive(topMenuActive) + return topMenuActive + }, + sideMenuActive() { + return this.$route.path || this.$route.meta.name || "/"; + }, + ...mapState(['breadcrumb', 'loading', 'roles', 'role', 'topMenu']), + ...mapGetters(['sideMenu', 'navNoPermission']) + }, + watch: { + '$route'(to, from) { + // console.log(to); + this.$nextTick(() => { + let $layout = this.$refs.layout; + //记录活跃路由名称 + if ($layout) { // layout出来之后再处理 + // 记录路由最近一次打开的的参数 + this.StoreService.setRouteParams(to) + // 路由跳转之后tab激活也跟着变化 + if (to.name === '/') { // 首页比较特殊 + $layout.handleSideMenuSelect({ + label: '首页', + url: '/' + }) + } + /* else { + $layout.handleSideMenuSelect({label: to.meta.name, url: to.name }) + }*/ + // let len = result.length; + // if(len > 0) { // 取最后一个当前激活状态,如果有跳转说明tab也需要激活, 暂不需要 + // let {label, to} = result[len - 1] ; + // to && $layout.handleSideMenuSelect({label, url: to.name}); + // } + // 二级菜单里有路由name的话,说明tab也需要激活 layout已实现不需要了 + // let activeTab = subMenuUrls.find(sub => sub.url === to.name); + // activeTab && $layout.handleSideMenuSelect({label: activeTab.label, url: activeTab.url}); + } + }); + } + } + }; + /* eslint-disable */ </script> - -<style> -#app { - font-family: 'Avenir', Helvetica, Arial, sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - text-align: center; - color: #2c3e50; - margin-top: 60px; -} +<style lang="stylus"> + .pagoda-layout-purchase + .collapse-icon { + &.icon-shensuocaidan, &.icon-shensuocaidan1 { + font-size 12px + right 2px !important + } + } + // 模拟面包屑可激活的状态 + .el-breadcrumb__item.is-link + .el-breadcrumb__inner + font-weight 700 + text-decoration: none + transition color .2s cubic-bezier(.645, .045, .355, 1) + color #303133 + &:hover + color #409eff + cursor: pointer + /* 下拉角色菜单 */ + .el-dropdown + line-height 16px + .logo + background-color: #002140; + text-align: center; + color: #fff; + h3 + margin: 0; </style> diff --git a/template/src/assets/packages/draggable/index.js b/template/src/assets/packages/draggable/index.js new file mode 100644 index 0000000000..6494542e21 --- /dev/null +++ b/template/src/assets/packages/draggable/index.js @@ -0,0 +1,229 @@ +var Sortable = require('sortablejs') +if (!Array.from) { + Array.from = function (object) { + return [].slice.call(object) + } +} + +function buildAttribute (object, propName, value) { + if (value === undefined || value === 'undefined') { + return object + } + object = (object === null) ? {} : object + object[propName] = value + return object +} + +function removeNode (node) { + node.parentElement.removeChild(node) +} + +function insertNodeAt (fatherNode, node, position) { + const refNode = (position === 0) ? fatherNode.children[0] : fatherNode.children[position - 1].nextSibling + fatherNode.insertBefore(node, refNode) +} + +// function computeVmIndex (vnodes, element) { +// return vnodes.map(elt => elt.elm).indexOf(element) +// } + +// function computeIndexes (slots, children, isTransition) { +// console.log('----computeIndexes ____', slots) +// if (!slots) { +// return [] +// } + +// const elmFromNodes = slots.map(elt => elt.elm) +// console.log('----elmFromNodes ____', elmFromNodes) +// const rawIndexes = [...children].map(elt => elmFromNodes.indexOf(elt)) +// console.log('----rawIndexes ____', rawIndexes) +// return isTransition ? rawIndexes.filter(ind => ind !== -1) : rawIndexes +// } + +function emit (evtName, evtData) { + this.$nextTick(() => this.$emit(evtName.toLowerCase(), evtData)) +} + +function delegateAndEmit (evtName) { + return (evtData) => { + if (this.realList !== null) { + this['onDrag' + evtName](evtData) + } + emit.call(this, evtName, evtData) + } +} + +const eventsListened = ['Start', 'Add', 'Remove', 'Update', 'End'] +const eventsToEmit = ['Choose', 'Sort', 'Filter', 'Clone'] +const readonlyProperties = ['Move', ...eventsListened, ...eventsToEmit].map(evt => 'on' + evt) + +const props = { + options: Object, + list: { + type: Array, + required: false, + default: null + }, + value: { + type: Array, + required: false, + default: null + }, + noTransitionOnDrag: { + type: Boolean, + default: false + }, + clone: { + type: Function, + default: (original) => { return original } + }, + element: { + type: String, + default: 'div' + }, + move: { + type: Function, + default: null + }, + + dragSelector: { + type: String, + default: null + } +} + +export default { + name: 'td-draggable', + props, + data () { + return { + transitionMode: false, + noneFunctionalComponentMode: false, + init: false + } + }, + + render (h) { + const slots = this.$slots.default + if (slots && slots.length === 1) { + const child = slots[0] + if (child.componentOptions && child.componentOptions.tag === 'transition-group') { + this.transitionMode = true + } + } + let children = slots + const { footer } = this.$slots + if (footer) { + children = slots ? [...slots, ...footer] : [...footer] + } + var attributes = null + const update = (name, value) => { attributes = buildAttribute(attributes, name, value) } + update('attrs', this.$attrs) + + return h(this.element, attributes, children) + }, + + mounted () { + this.noneFunctionalComponentMode = this.element.toLowerCase() !== this.$el.nodeName.toLowerCase() + + if (this.noneFunctionalComponentMode && this.transitionMode) { + throw new Error(`Transition-group inside component is not supported. Please alter element value or remove transition-group. Current element value: ${this.element}`) + } + var optionsAdded = {} + eventsListened.forEach(elt => { + optionsAdded['on' + elt] = delegateAndEmit.call(this, elt) + }) + + eventsToEmit.forEach(elt => { + optionsAdded['on' + elt] = emit.bind(this, elt) + }) + + const options = Object.assign({}, this.options, optionsAdded, { onMove: (evt, originalEvent) => { return this.onDragMove(evt, originalEvent) } }) + !('draggable' in options) && (options.draggable = '>*') + this._sortable = new Sortable(this.rootContainer, options) + // this.computeIndexes() + }, + + beforeDestroy () { + this._sortable.destroy() + }, + + computed: { + rootContainer () { + return this.transitionMode ? this.$el.children[0] : (this.dragSelector ? this.$el.querySelector(this.dragSelector) : this.$el) + }, + realList () { + return (this.list) ? this.list : this.value + } + }, + + watch: { + options: { + handler (newOptionValue) { + for (var property in newOptionValue) { + if (readonlyProperties.indexOf(property) === -1) { + this._sortable.option(property, newOptionValue[property]) + } + } + }, + deep: true + } + }, + + methods: { + getUnderlyingVm (evt) { + if (!evt) { + return null + } + let index = evt.oldIndex + if (typeof (index) === 'undefined' || index === -1) { + return null + } + const element = this.realList[index] + return { index, element } + }, + emitChanges (evt) { + this.$nextTick(() => { + this.$emit('change', evt) + }) + }, + alterList (onList) { + if (this.list) { + onList(this.list) + } else { + const newList = [...this.value] + onList(newList) + this.$emit('input', newList) + } + }, + spliceList () { + const spliceList = list => list.splice(...arguments) + this.alterList(spliceList) + }, + updatePosition (oldIndex, newIndex) { + const updatePosition = list => list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]) + this.alterList(updatePosition) + }, + onDragStart (evt) { + this.context = this.getUnderlyingVm(evt) + // const element = this.realList[evt.oldIndex] + if (this.context) { + evt.item._underlying_vm_ = this.clone(this.context.element) + } + }, + onDragMove (evt) { + // console.log("onDragMove: ", evt) + }, + onDragUpdate (evt) { + removeNode(evt.item) + insertNodeAt(evt.from, evt.item, evt.oldIndex) + const oldIndex = this.context.index + const newIndex = evt.newIndex + this.updatePosition(evt.oldIndex, evt.newIndex) + const moved = { element: this.context.element, oldIndex, newIndex } + this.emitChanges({ moved }) + }, + onDragEnd (evt) { + } + } +} diff --git a/template/src/assets/packages/index.js b/template/src/assets/packages/index.js new file mode 100644 index 0000000000..cd4d9ef690 --- /dev/null +++ b/template/src/assets/packages/index.js @@ -0,0 +1,15 @@ +import TdDraggable from './draggable/index' // 引入表格拖拽插件 + +const components = [ + TdDraggable +] + +const install = function (Vue, options) { + components.map(component => { + Vue.component(component.name, component) + }) +} + +export default { + install +} diff --git a/template/src/assets/stylus/animate.styl b/template/src/assets/stylus/animate.styl new file mode 100644 index 0000000000..9df6319333 --- /dev/null +++ b/template/src/assets/stylus/animate.styl @@ -0,0 +1,149 @@ +// 过渡动画 横向渐变 +.fade-transverse-leave-active, +.fade-transverse-enter-active { + transition: all .5s; +} +.fade-transverse-enter { + opacity: 0; + transform: translateX(-30px); +} +.fade-transverse-leave-to { + opacity: 0; + transform: translateX(30px); +} + +// 过渡动画 缩放渐变 +.fade-scale-leave-active, +.fade-scale-enter-active { + transition: all .5s; +} +.fade-scale-enter { + opacity: 0; + transform: scale(1.2); +} +.fade-scale-leave-to { + opacity: 0; + transform: scale(0.8); +} +.animated { + animation-duration: 1s; + animation-fill-mode: both; +} + +.animated.infinite { + animation-iteration-count: infinite; +} + +.animated.hinge { + animation-duration: 2s; +} + +.animated.flipOutX, +.animated.flipOutY, +.animated.bounceIn, +.animated.bounceOut { + animation-duration: .75s; +} + +@keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +.fadeIn { + animation-name: fadeIn; +} +/* shake */ +@keyframes shake { + from, + to { + transform: translate3d(0, 0, 0); + } + + 10%, + 30%, + 50%, + 70%, + 90% { + transform: translate3d(-10px, 0, 0); + } + + 20%, + 40%, + 60%, + 80% { + transform: translate3d(10px, 0, 0); + } +} + +.shake { + animation-name: shake; +} +@keyframes rollIn { + from { + opacity: 0; + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + to { + opacity: 1; + transform: translate3d(0, 0, 0); + } +} + +.rollIn { + animation-name: rollIn; +} +@keyframes pulse { + from { + transform: scale3d(1, 1, 1); + } + + 50% { + transform: scale3d(1.05, 1.05, 1.05); + } + + to { + transform: scale3d(1, 1, 1); + } +} + +.pulse { + animation-name: pulse; +} +.animated.rollIn + animation-duration: .75s +/* slideIn and slideOut */ +@keyframes slideInRight { + from { + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + to { + transform: translate3d(0, 0, 0); + } +} + +.slideInRight { + animation-name: slideInRight; +} +@keyframes slideOutRight { + from { + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + transform: translate3d(100%, 0, 0); + } +} + +.slideOutRight { + animation-name: slideOutRight; +} diff --git a/template/src/assets/stylus/base.styl b/template/src/assets/stylus/base.styl new file mode 100644 index 0000000000..c089606ea3 --- /dev/null +++ b/template/src/assets/stylus/base.styl @@ -0,0 +1,15 @@ +body + font-family: "Avenir", Helvetica, Arial, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #2c3e50; + margin: 0; + padding: 0; +html, body + min-height 700px + min-width 1290px + overflow auto !important +*, *:before, *:after + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; diff --git a/template/src/assets/stylus/common.styl b/template/src/assets/stylus/common.styl new file mode 100644 index 0000000000..737a543aad --- /dev/null +++ b/template/src/assets/stylus/common.styl @@ -0,0 +1,144 @@ +@import "./variable" + +.clearfix:before, .clearfix:after + content "" + display block + clear both +.clearfix + zoom 1 + +.flex-block + display flex + +.flex + flex 1 + flex-basis auto + +.flex-middle + align-items center + +.left + float left +.right + float right +.por + position relative +.poa + position absolute +.mask + left 0 + top 0 + right 0 + bottom 0 +.block + display block +.inline-block + display inline-block +.vertical-middle + vertical-align middle +.pointer + cursor: pointer + +.center-h, .center, .txt-center, .align-center + text-align center +.txt-right, .align-right, .text-right + text-align right +.txt-left, .align-left, .text-left + text-align left +.text-center + text-align center +.text-overflow + text-overflow ellipsis + white-space nowrap + overflow hidden!important +.text-wrap + word-wrap break-word + word-break break-all +.text-clip + text-overflow clip +.margin-left-10, .ml-10 + margin-left 10px +.margin-right-10, .mr-10 + margin-right 10px + +.margin-left-20, .ml-20 + margin-left 20px +.margin-right-20, .mr-20 + margin-right 20px + +.margin-top-10, .mt-10 + margin-top 10px +.margin-bottom-10, .mb-10 + margin-bottom 10px + +.margin-top-20, .mt-20 + margin-top 20px +.margin-bottom-20, .mb-20 + margin-bottom 20px + +.p0 + padding 0!important +.plr-15 + padding-left 15px + padding-right: 15px +.padding-left-10, .pl-10 + padding-left 10px +.padding-right-10, .pr-10 + padding-right 10px + +.padding-left-20, .pl-20 + padding-left 20px +.padding-right-20, .pr-20 + padding-right 20px + +.padding-top-10, .pt-10 + padding-top 10px +.padding-bottom-10, .pb-10 + padding-bottom 10px + +.padding-top-20, .pt-20 + padding-top 20px +.padding-bottom-20, .pb-20 + padding-bottom 20px + +.fz12 + font-size 12px +.fz13 + font-size 13px +.fz14 + font-size 14px +.fz16 + font-size 16px + +.no-margin + margin 0!important + +.no-padding + padding 0!important + +.no-border + border 0!important +/* 圆润字体 */ +.ff-consolas + font-family consolas +._table-cell + display table-cell + vertical-align middle + word-wrap break-word + word-break break-all +.text-blue + color $blue-color +.text-green + color $green-color +.text-danger + color $danger-color +.text-gray + color $gray-color +.text-warn + color $warning-color +/* 表格内的工具提示默认宽高限制 */ +.table-tooltip-box + width 175px + min-height 60px + word-wrap break-word + word-break break-all diff --git a/template/src/assets/stylus/index.styl b/template/src/assets/stylus/index.styl new file mode 100644 index 0000000000..38c25985bb --- /dev/null +++ b/template/src/assets/stylus/index.styl @@ -0,0 +1,4 @@ +//@import "./base" +@import "./common" +// @import "./ui-reset" +@import "./animate" diff --git a/template/src/assets/stylus/mixin.styl b/template/src/assets/stylus/mixin.styl new file mode 100644 index 0000000000..319b27650c --- /dev/null +++ b/template/src/assets/stylus/mixin.styl @@ -0,0 +1,106 @@ +// 背景图片地址和大小 +bis($url) { + background-image: url($url); + background-repeat: no-repeat; + background-size: 100% 100%; +} + +borderRadius($radius) { + -webkit-border-radius: $radius; + -moz-border-radius: $radius; + -ms-border-radius: $radius; + -o-border-radius: $radius; + border-radius: $radius; +} +//定位全屏 +allcover(){ + position:absolute; + top:0; + right:0; +} + +//定位上下左右居中 +center() { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +//定位上下居中 +ct() { + position: absolute; + top: 50%; + transform: translateY(-50%); +} + +//定位左右居中 +cl() { + position: absolute; + left: 50%; + transform: translateX(-50%); +} + +//宽高 +wh($width, $height){ + width: $width; + height: $height; +} + +//字体大小,颜色 +sc($size, $color){ + font-size: $size; + color: $color; +} + +//flex 布局和 子元素 对其方式 +fj($type = space-between){ + display: flex; + justify-content: $type; +} +// 给border设置颜色 配合类名使用 +bt-1($color) + &:after + border-top: 1px solid $color +br-1($color) + &:after + border-right: 1px solid $color + +bb-1($color) + &:after + border-bottom: 1px solid $color + +bl-1($color) + &:after + border-left: 1px solid $color + +b-1($color = #ccc, $radius = 0px, $style = solid) + position: relative + &:after + content: "" + pointer-events: none // 解决iphone上的点击无效Bug + display: block + position: absolute + left: 0 + top: 0 + transform-origin: 0 0 + border-radius: $radius + box-sizing border-box + width 100% + height 100% + @media (-webkit-min-device-pixel-ratio: 2), (min-device-pixel-ratio: 2) + width: 200% + height: 200% + border-radius: $radius * 2 + transform: scale(.5) translateZ(0) + @media (-webkit-min-device-pixel-ratio: 3), (min-device-pixel-ratio: 3) + width: 300% + height: 300% + border-radius: $radius * 3 + transform: scale(.33) translateZ(0) + +border-none() + &:before + display: none + &:after + display: none diff --git a/template/src/assets/stylus/ui-reset.styl b/template/src/assets/stylus/ui-reset.styl new file mode 100644 index 0000000000..4e6c031027 --- /dev/null +++ b/template/src/assets/stylus/ui-reset.styl @@ -0,0 +1,165 @@ +@import "./variable" +// 重置ui框架相关的样式 +.logo + background-color: #002140; + text-align: center; + color: #fff; + h3 + margin: 0; +.pagoda-layout__main + display: flex; + display: -webkit-flex; + flex-direction: column; + +.el + // &-breadcrumb + // margin-bottom: 20px; + &-tree-node__content + height: 40px; + /* form 下面表单元素统一样式 */ + &-form + .el-select + width: 220px; + .el-form-item__content + width: 220px; + // reset 时间段选择的宽度 + .el-range-editor + width 100% + .el-range-separator + width: auto + &-input.el-input--small + height: 32px; + /* 优化弹窗样式 */ + &-dialog + box-shadow $box-shadow + border-radius 6px + border 1px solid rgba(0,0,0,.2) + .el-dialog__headerbtn .el-dialog__close + font-size 23px + &-dialog__body + padding 20px + /* 侧边栏 */ + &-aside .el-menu + border-right 0 + /* tooltip样式 */ + &-tooltip__popper.is-light + border-color #d1d1d1 + border-radius 10px + box-shadow $box-shadow-2 + opacity .9 + &[x-placement^=top] .popper__arrow + border-top-color #d1d1d1 + &[x-placement^=left] .popper__arrow + border-left-color #d1d1d1 + &[x-placement^=right] .popper__arrow + border-right-color #d1d1d1 + &[x-placement^=bottom] .popper__arrow + border-bottom-color #d1d1d1 + /* 表格行下面的按钮样式 */ + &-table__row + .el-button + margin 0 5px 5px 0 + +.grid-btns-wrapper + display: flex; + display: -webkit-flex; + margin-top: 20px; + +.cascade-select + width: 49%; + .el-select + width: 100%; + +.erp + &-view + flex: 1; + -webkit-box-flex: 1; + overflow-y: auto; + .el-main.erp-view-main + background-color: #ffffff; + &-dialog-wrapper + display: flex; + display: -webkit-flex; + justify-content: center; + margin-top: 10px; + margin-bottom: 40px; + &:last-of-type + margin-top: 0; + margin-bottom: 0; + + &>table + border: 1px solid #ccc; + border-collapse: collapse; + td + padding: 2px; + line-height: 32px; + text-align: center; + min-width: 100px; + /* table表格样式 */ + &-table.pagoda-table .el-table + tr td + font-size 13px + +/* 2018-6-7 10:11:43 表单元素占的宽度太小不好编辑和显示,移入时放大 */ +scale($width, $offset) + position relative + z-index 2 + width $width + transform translateX($offset) +.erp-table.scale .el-table + /* 过滤icon始终在表头上层 */ + .table-column-filter + z-index 3 + /* 表头字段悬浮展示全部 */ + .el-table__row .cell + overflow visible + &:hover + .pagoda-table-edit + scale(200px, -25%) + .table-edit-input + scale(180px, -25%) + /* 行中的表单悬浮时放大 */ + .el-table__header + th:hover + overflow visible + text-overflow unset + .cell, .table-header-content + overflow visible + text-overflow unset + .table-header-content + scale(auto, 0%) + +/* table表格表头的下拉菜单 */ +.drop-down.table-filter-list + z-index: 9999 + +/* 基础数据下拉组件 */ +// .pagoda-bdc-select +// .el-select +// .el-select__tags +// & > span +// position absolute +// top -24px +// width 215px +// .el-select__input +// width 175px !important +// .el-select__tags-text:first-of-type +// display inline-block +// max-width 130px +// text-overflow ellipsis +// white-space nowrap +// overflow hidden!important +// .el-tag__close +// top -6px +// margin-left: -10px + +::-webkit-scrollbar + width: 6px; + height: 6px; + border-radius: 3px; + &-thumb + width: 6px; + border-radius: 3px; + background-color: #ddd; + &:hover + background-color: #999; diff --git a/template/src/assets/stylus/variable.styl b/template/src/assets/stylus/variable.styl new file mode 100644 index 0000000000..a5b9436bd0 --- /dev/null +++ b/template/src/assets/stylus/variable.styl @@ -0,0 +1,37 @@ +//Color +$blue-color = #409EFF; +$green-color = #5fbeaa +$success-color = #67C23A; +$warning-color = #EB9E05; +$danger-color = #FA5555; +$gray-color = #a9a9a9 +$info-color = #878D99; + +//Font color +$font-color-main = #2D2F33; +$font-color-normal = #5A5E66; +$font-color-sub = #878D99; +$font-color-low = #B4BCCC; + +//Border color +$border-color-main = #D8DCE5; +$border-color-normal = #D8DCE5; +$border-color-sub = #E6EBF5; +$border-color-low = #EDF2FC; + +//Font size +$font-size-x-large = 20px; +$font-size-large = 18px; +$font-size-medium = 16px; +$font-size-small = 14px; +$font-size-x-small = 13px; +$font-size-xx-small = 12px; + +// 阴影 +$box-shadow = 0 5px 15px rgba(0,0,0,.5) +$box-shadow-1 = 0 2px 1px -1px rgba(0,0,0,.2), 0 1px 1px 0 rgba(0,0,0,.14), 0 1px 3px 0 rgba(0,0,0,.12) +$box-shadow-2 = 0 3px 1px -2px rgba(0,0,0,.2), 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12) +$box-shadow-3 = 0 3px 3px -2px rgba(0,0,0,.2), 0 3px 4px 0 rgba(0,0,0,.14), 0 1px 8px 0 rgba(0,0,0,.12) +$box-shadow-4 = 0 2px 4px -1px rgba(0,0,0,.2), 0 4px 5px 0 rgba(0,0,0,.14), 0 1px 10px 0 rgba(0,0,0,.12) +$box-shadow-5 = 0 3px 5px -1px rgba(0,0,0,.2), 0 5px 8px 0 rgba(0,0,0,.14), 0 1px 14px 0 rgba(0,0,0,.12) +$box-shadow-inset = inset 0 3px 1px -2px rgba(0,0,0,.2), inset 0 2px 2px 0 rgba(0,0,0,.14), inset 0 1px 5px 0 rgba(0,0,0,.12) \ No newline at end of file diff --git a/template/src/components/HelloWorld.vue b/template/src/components/HelloWorld.vue deleted file mode 100644 index ce0edd8ac1..0000000000 --- a/template/src/components/HelloWorld.vue +++ /dev/null @@ -1,113 +0,0 @@ -<template> - <div class="hello"> - <h1>\{{ msg }}</h1> - <h2>Essential Links</h2> - <ul> - <li> - <a - href="https://vuejs.org" - target="_blank" - > - Core Docs - </a> - </li> - <li> - <a - href="https://forum.vuejs.org" - target="_blank" - > - Forum - </a> - </li> - <li> - <a - href="https://chat.vuejs.org" - target="_blank" - > - Community Chat - </a> - </li> - <li> - <a - href="https://twitter.com/vuejs" - target="_blank" - > - Twitter - </a> - </li> - <br> - <li> - <a - href="http://vuejs-templates.github.io/webpack/" - target="_blank" - > - Docs for This Template - </a> - </li> - </ul> - <h2>Ecosystem</h2> - <ul> - <li> - <a - href="http://router.vuejs.org/" - target="_blank" - > - vue-router - </a> - </li> - <li> - <a - href="http://vuex.vuejs.org/" - target="_blank" - > - vuex - </a> - </li> - <li> - <a - href="http://vue-loader.vuejs.org/" - target="_blank" - > - vue-loader - </a> - </li> - <li> - <a - href="https://github.com/vuejs/awesome-vue" - target="_blank" - > - awesome-vue - </a> - </li> - </ul> - </div> -</template> - -<script> -export default { - name: 'HelloWorld', - data () { - return { - msg: 'Welcome to Your Vue.js App' - } - } -} -</script> - -<!-- Add "scoped" attribute to limit CSS to this component only --> -<style scoped> -h1, h2 { - font-weight: normal; -} -ul { - list-style-type: none; - padding: 0; -} -li { - display: inline-block; - margin: 0 10px; -} -a { - color: #42b983; -} -</style> diff --git a/template/src/components/advanced-search-groups.vue b/template/src/components/advanced-search-groups.vue new file mode 100644 index 0000000000..6aa0c4ab13 --- /dev/null +++ b/template/src/components/advanced-search-groups.vue @@ -0,0 +1,271 @@ +<template> + <div class="advanced-search-groups"> + <el-card v-if="isEdit"> + <div> + 分组内容: + <el-input + style="width: 400px;" + class="vertical-middle" + type="textarea" + :rows="4" + resize="none" + v-model="editGroup.value"> + </el-input> + </div> + <div class="mt-10"> + 分组名称: + <el-input + style="width: auto;" + v-model="editGroup.title"> + </el-input> + <pagoda-row-btns class="row-btns_pl mt-10" :btns="editGroupBtns" :visibles="['save']" :scope="editGroup"></pagoda-row-btns> + <div class="fz12 text-gray">使用英文标点 ; 分割,如(11;22;33)【仅保存在浏览器缓存中,更换浏览器需重新导入或新增】</div> + </div> + </el-card> + <h3 style="margin-bottom: 0;">分组快速筛选 + <div class="inline-block ml-20"> + <el-upload + class="upload-demo inline-block" + ref="upload" + action="none" + :file-list="fileList" + :on-change="uploadChange" + :show-file-list="false" + :auto-upload="false"> + <el-button slot="trigger" size="small">导入</el-button> + </el-upload> + <pagoda-row-btns class="inline-block ml-10" :btns="importBtns" :visibles="['export']"></pagoda-row-btns> + </div> + </h3> + <pagoda-table + class="mt-10" + :request="request" + selection-column="single" + @selection-change="handleSelectChange" + ref="selectTable" + max-height="300" + > + <template slot-scope="scope" slot="value"> + <el-tooltip popper-class="table-tooltip-box" :content="scope.row.value" placement="top" effect="light"> + <div class="text-overflow fz12">{{scope.row.value}}</div> + </el-tooltip> + </template> + <template slot-scope="scope" slot="operate"> + <pagoda-row-btns class="text-center" :btns="groupBtns" :visibles="['edit', 'del']" :scope="scope"></pagoda-row-btns> + </template> + </pagoda-table> + <pagoda-row-btns class="text-center mt-20" :btns="rowBtnsTmpl" :visibles="btnVisibles"></pagoda-row-btns> + </div> +</template> + +<script> +import FileSaver from 'file-saver' +import { formatDate } from '@/utils/utils' +export default { + name: 'advanced-search-groups', + data () { + return { + rowBtnsTmpl: { + confirm: { + type: 'primary', + text: '确定', + onClick: () => { + this.$emit('confirm', this.cleanValue2Array(this.editGroup.value)) + } + }, + cancel: { + text: '取消', + onClick: () => { + this.$emit('cancel') + } + } + }, + /* 分组筛选相关 start */ + groups: this.getGroupByStorage(), + editGroup: {value: ''}, // 新增和编辑时需要的对象 + isEdit: true, + selectIndex: null, + groupBtns: { + edit: { + type: 'primary', + text: '编辑', + props: { + size: 'mini' + }, + onClick: this.handleEditRow + }, + del: { + text: '删除', + type: 'danger', + props: { + size: 'mini' + }, + confirm: '确定删除吗?', + onClick: (btns, scope) => { + this.$refs.selectTable.delRows([scope.row.$index]) + this.updateGroup() + this.initSelect() + } + } + }, + editGroupBtns: { + save: { + type: 'success', + text: '保存', + onClick: (btns, scope) => { + let editGroup = this.editGroup + // 分组名称 + if (!editGroup.title) { + this.$message.error('请填写分组名称') + return + } + if (!editGroup.value) { + this.$message.error('请填写分组内容') + return + } + let selectGroup = this.groups[editGroup.index] // 原来修改前的数据 + if (this.groups.length === 0 || editGroup.title !== selectGroup.title) { + this.$refs.selectTable.newRows([editGroup]) + editGroup.index = this.groups.length + this.setCurrentRow(this.groups.length) + } else { + selectGroup.value = this.cleanValue2Array(editGroup.value).join(';') + selectGroup.title = editGroup.title + } + this.updateGroup() + } + }, + cancel: { + text: '取消', + type: 'text', + onClick: (btns, scope) => { + } + } + }, + importBtns: { + // import: { + // text: '导入', + // tooltip: '仅支持从该处导出的文件', + // onClick: (btns, scope) => { + // console.log('导入') + // } + // }, + export: { + text: '导出', + tooltip: '备份分组数据,用于下次导入', + onClick: (btns, scope) => { + console.log('导出') + if (this.groups.length <= 0) { + this.$message.warning('暂无数据可导出') + return + } + let blob = new Blob([JSON.stringify(this.groups)], {type: 'text/plain;charset=utf-8'}) + FileSaver.saveAs(blob, `分组数据信息${formatDate()}.txt`) + } + } + }, + /* 导入导出 */ + fileList: [] + } + }, + props: { + title: String, + rowBtns: Object, + btnVisibles: { + type: Array, + default: () => { + return ['confirm', 'cancel'] + } + } + }, + created () { + if (this.rowBtns) { + this.rowBtnsTmpl = this.this.rowBtns + } + }, + mounted () { + this.initSelect() + }, + methods: { + request (tableFilterData) { + return new Promise(resolve => { + resolve({ + head: [ + {label: '分组名称', prop: 'title'}, + {label: '分组内容', prop: 'value'}, + {label: '操作', prop: 'operate'} + ], + data: this.groups + }) + }) + }, + getGroupByStorage () { + // console.log(JSON.parse(localStorage.getItem('pagoda_group_data') || []) || []) + return JSON.parse(localStorage.getItem('pagoda_group_data')) || [] + }, + initSelect () { + if (this.groups.length !== 0) { + setTimeout(() => { + this.handleSelectChange([Object.assign(this.groups[0], {$index: 0})]) + }, 0) + } else { + this.selectIndex = null + this.editGroup = {value: ''} + } + }, + handleSelectChange (selection) { + this.handleEditRow({}, {row: selection[0]}) + }, + setCurrentRow (rowIndex) { // 单选时设置某行为选中状态 + this.$refs.selectTable.setCurrentRow(rowIndex) + this.selectIndex = rowIndex + }, + handleEditRow (btns, scope) { + this.editGroup = { + title: scope.row.title, + value: scope.row.value, + index: scope.row.$index, + action: 'edit' + } + this.setCurrentRow(scope.row.$index) + }, + updateGroup () { // 外部数组和表格数组实时同步 + this.groups = this.$refs.selectTable.getTableData() + localStorage.setItem('pagoda_group_data', JSON.stringify(this.groups)) + }, + /* 导入导出 */ + uploadChange (file, fileList) { + console.log(file, fileList) + let reader = new FileReader() + // 将文件以文本形式读入页面 + reader.readAsText(file.raw, 'gb2312') + reader.onload = (e) => { + let fileText = e.target.result + let fileGroup = JSON.parse(fileText) + this.$refs.upload.clearFiles() + // 以分组名称title为唯一标识,只追加新的title + let titleArr = this.groups.map(group => group.title) + let appendArr = fileGroup.filter(group => titleArr.indexOf(group.title) === -1) + this.$refs.selectTable.newRows(appendArr) + this.updateGroup() + if (appendArr.length === this.groups.length) { // 如果原来没数据直接导入就默认选中第一个 + this.initSelect() + } + } + }, + /* 工具类方法 */ + cleanValue2Array (value) { + return value.split(';').map(el => el.trim()).filter(el => !!el) + } + }, + computed: { + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="stylus"> +.advanced-search-groups + .row-btns_pl + padding-left: 73px +</style> diff --git a/template/src/components/index.js b/template/src/components/index.js new file mode 100644 index 0000000000..4b482f6e9c --- /dev/null +++ b/template/src/components/index.js @@ -0,0 +1,11 @@ +import tableComponents from "./table"; +import advancedSearchGroups from "./advanced-search-groups"; + +const install = Vue => { + Vue.use(tableComponents); + Vue.component(advancedSearchGroups.name, advancedSearchGroups); +}; + +export default { + install +}; diff --git a/template/src/components/input-range.vue b/template/src/components/input-range.vue new file mode 100644 index 0000000000..866d3845b0 --- /dev/null +++ b/template/src/components/input-range.vue @@ -0,0 +1,103 @@ +<template> + <div + class="pagoda-input-range" + :class="{ + 'pagoda-input-range--focus': isFocus + }"> + <el-input + :value="value[0]" + :clearable="false" + @input="$emit('input', [arguments[0], value[1]])" + @focus="focus('startInput')" + @blur="blur('startInput')"> + </el-input> + <span class="range-separator">{{rangeSeparator}}</span> + <el-input + :value="value[1]" + :clearable="false" + @input="$emit('input', [value[0], arguments[0]])" + @focus="focus('endInput')" + @blur="blur('endInput')"> + </el-input> + <span class="el-input__suffix el-input__suffix-loading" @click="$emit('input', [])" v-if="clearable"> + <span class="el-input__suffix-inner"> + <i class="el-select__caret el-input__icon el-icon-circle-close"></i> + </span> + </span> + </div> +</template> + +<script> +export default { + name: 'input-range', + data () { + return { + startInputFocus: false, + endInputFocus: false, + isFocus: false + } + }, + props: { + value: { + type: null, + default: [] + }, + rangeSeparator: { + type: String, + default: '至' + }, + clearable: { + type: Boolean, + default: true + } + }, + created () { + }, + mounted () { + }, + watch: { + }, + methods: { + focus (Input) { + this[`${Input}Focus`] = true + this.isFocus = true + }, + blur (Input) { + this[`${Input}Focus`] = false + + this.$nextTick(() => { + if (!this.startInputFocus && !this.endInputFocus) { + this.isFocus = false + } + }) + } + }, + computed: { + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="stylus"> + .pagoda-input-range + border 1px solid #dcdfe6 + border-radius 4px + + &--focus + border-color #00C587 + &:hover + .el-icon-circle-close + display block + + .el-input + width 90px + input + border none + .range-separator + vertical-align middle + font-size 12px + .el-icon-circle-close + display none + line-height normal + cursor pointer +</style> diff --git a/template/src/components/table/index.js b/template/src/components/table/index.js new file mode 100644 index 0000000000..f72f812a1e --- /dev/null +++ b/template/src/components/table/index.js @@ -0,0 +1,16 @@ +import simpleTable from './simple-table' +import simpleTableSort from './simple-table-sort' + +let components = { + simpleTable, + simpleTableSort +} + +const install = Vue => { + for (const component of Object.values(components)) { + Vue.component(component.name, component) + } +} +export default { + install +} diff --git a/template/src/components/table/simple-table-sort.vue b/template/src/components/table/simple-table-sort.vue new file mode 100644 index 0000000000..63ff7b3e17 --- /dev/null +++ b/template/src/components/table/simple-table-sort.vue @@ -0,0 +1,62 @@ +<template> +<td-draggable element="div" :list="$attrs.data" dragSelector="tbody" :options="{draggable: '.el-table__row'}"> + <simple-table v-on="$listeners" v-bind="$attrs" :head-data="handleHeadData"> + <template slot="index" slot-scope="scope"> + <div> + <span class="mr-10">{{scope.row.index + 1}}</span> + <span class="text-green ff-consolas right" v-if="scope.row.index !== scope.$index" + :class="{'text-green': !getIsUp(scope), 'text-danger': getIsUp(scope)}" + > + {{getIsUp(scope) ? '↑' : '↓'}} + {{Math.abs(scope.$index - scope.row.index)}} + </span> + </div> + </template> + <template :slot="prop" slot-scope="scope" v-for="(value, prop) in $scopedSlots"> + <slot :name="prop" v-bind="scope"></slot> + </template> + </simple-table> +</td-draggable> +</template> + +<script> +import Vue from 'vue' +import vuePlugIn from '@/assets/packages' +import { + deepCopy +} from '../../utils/utils' +Vue.use(vuePlugIn) // 2018-5-29 10:02:58 测试拖拽表格 +export default { + name: 'simple-table-sort', // 带排序功能的简单表格 + data() { + this.$attrs.data.forEach((row, index) => { + row.index = index + }) + return { + templateData: deepCopy(this.$attrs.data), + handleHeadData: [{ + label: '序号', + prop: 'index' + }, ...this.$attrs['head-data']] + } + }, + props: {}, + created() {}, + mounted() {}, + watch: {}, + methods: { + getIsUp(scope) { + return scope.row.index > scope.$index + }, + cancel() { // 对外提供一个数据复原的功能 + this.$attrs.data.splice(0, this.$attrs.data.length) // 清空数组 + this.$attrs.data.push(...this.templateData) + } + }, + computed: {} +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="stylus"> +</style> diff --git a/template/src/components/table/simple-table.vue b/template/src/components/table/simple-table.vue new file mode 100644 index 0000000000..8b591b4733 --- /dev/null +++ b/template/src/components/table/simple-table.vue @@ -0,0 +1,43 @@ +<template> +<el-table :data="data" v-on="$listeners" v-bind="$attrs" class="simple-table"> + <el-table-column v-bind="head.props" v-on="head.on" :key="index" v-for="(head, index) in headData" :label="head.label" :prop="head.prop" :width="head.width"> + <template slot-scope="scope"> + <template v-if="!$scopedSlots[head.prop]" class="cell-content">{{scope.row[head.prop]}}</template> + <slot v-else :name="head.prop" v-bind="scope"></slot> + </template> + </el-table-column> +</el-table> +</template> + +<script> +export default { + name: 'simple-table', // 封装数组驱动完成基本功能的表格 + data() { + return {} + }, + props: { + data: Array, + headData: Array + }, + created() { + // this.$options.components.simpleTable = simpleTable + }, + mounted() { + // console.log(this.$scopedSlots) + }, + watch: {}, + methods: {}, + computed: {} +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="stylus"> +.simple-table + .cell + font-size 13px + .el-table th>.cell + font-size 14px + .el-table__footer-wrapper tbody td + background-color oldlace +</style> diff --git a/template/src/main.js b/template/src/main.js index 48833b5ab7..8ca9f213b0 100644 --- a/template/src/main.js +++ b/template/src/main.js @@ -1,26 +1,92 @@ -{{#if_eq build "standalone"}} // The Vue build version to load with the `import` command // (runtime-only or standalone) has been set in webpack.base.conf with an alias. -{{/if_eq}} +import 'babel-polyfill' import Vue from 'vue' import App from './App' -{{#router}} +import store from './store' import router from './router' -{{/router}} +import utils from './utils/index' +import viewConfig from './table-config/index' +import services from '@/services' +import ElementUI from 'element-ui' +// 新ui引入后旧版的样式可以不引人 +// import 'element-ui/lib/theme-chalk/index.css' +import pagodaComponents from 'pagoda-ui' +import commonComponents from 'components' +import inputRange from '@/components/input-range' +// 2018-5-7 11:13:59 新增mock本地开发调试 +import 'mock-data' +// 引入公用样式 +import '@/assets/stylus/index.styl' + +// 引入主题和样式重置的ui +import 'pagoda-ui/src/style/reset.styl' +import 'pagoda-ui/src/components/erp/element-ui-reset.scss' + + +pagodaComponents.rowBtns.config = { + default: { + type: 'info', + props: { + plain: true + } + }, + '查询': { + type: 'primary' + }, + '保存': { + type: 'primary' + } +} + +pagodaComponents.formGroup.registerComponents({ + 'bdc-select': { + component: pagodaComponents.bdcSelect + }, + 'input-range': { + component: inputRange + } +}) + +pagodaComponents.editItem.registerComponents({ + 'remark': { + component: pagodaComponents.remarkCell, + validateEvent: 'change', // 设置默认触发校验事件 + getDefaultProps () { // 设置默认props + return { + editable: false + } // 设置默认props + } + }, + 'bdc-select': { + component: pagodaComponents.bdcSelect + } +}) + +pagodaComponents.tableEditItem.registerComponents({ + 'bdc-select': { + component: pagodaComponents.bdcSelect + } +}) + +Vue.use(utils) // http 请求相关 +Vue.use(services) // 公用业务逻辑service 请求相关 +Vue.use(ElementUI, { size: 'mini' }) +pagodaComponents.erpTable.redirectUrl = 'xxx' // 登录超时,跳转单点登录链接 +pagodaComponents.erpForm.projectName = pagodaComponents.erpTable.projectName = 'erp_store' // project名称 +pagodaComponents.bdcSelect.redirectUrl = 'xxx' // 登录超时,跳转单点登录链接 +Vue.use(pagodaComponents) +Vue.use(commonComponents) // 公用的组件 Vue.config.productionTip = false +Vue.prototype.$viewConfig = viewConfig + /* eslint-disable no-new */ new Vue({ el: '#app', - {{#router}} router, - {{/router}} - {{#if_eq build "runtime"}} - render: h => h(App) - {{/if_eq}} - {{#if_eq build "standalone"}} + store, components: { App }, template: '<App/>' - {{/if_eq}} }) diff --git a/template/src/mixins/formSearchCommon.js b/template/src/mixins/formSearchCommon.js new file mode 100644 index 0000000000..7e07456927 --- /dev/null +++ b/template/src/mixins/formSearchCommon.js @@ -0,0 +1,27 @@ +import formGroupBtns from "@/views/common/form-group-btns"; +import {formLabelWidth} from "@/utils/default-setting"; +// 表单筛选默认数据 +export default { + data() { + return { + formLabelWidth + }; + }, + components: { + formGroupBtns // 筛选组件 + }, + methods: { + /* 按钮组业务逻辑 start */ + // 有些操作不能在编辑状态下执行,需要先提示用户保存再给提交 + handleOperate(cb, ids, tips) { + if (ids.length === 0) { + this.$alert(`请至少选择一条要进行操作的数据`); + return; + } + this.$confirm(tips).then(() => { + cb(); + }); + } + /* 按钮组业务逻辑 end */ + } +}; diff --git a/template/src/mockData/base/detail.js b/template/src/mockData/base/detail.js new file mode 100644 index 0000000000..f1c1a13b59 --- /dev/null +++ b/template/src/mockData/base/detail.js @@ -0,0 +1,167 @@ +// 表头 +const tableHead = { + resultCode: 0, + head: [ + { + name: 'a1', + nameCN: '序号', + visible: true, + readOnly: true, + canQuery: false + }, + { + 'canQuery': true, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 64, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'metaId': '', + 'name': 'goodsName', + 'nameCN': '商品名称', + 'nameEN': 'goodsName', + 'pageTotal': false, + 'persistent': true, + 'readOnly': false, + 'required': true, + 'scene': '', + 'sensitive': true, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': '枚举', + 'visible': true + }, + { + name: 'a3', + nameCN: '商品代码', + visible: true, + readOnly: true, + canQuery: false + }, + { + name: 'a4', + nameCN: '等级', + visible: true, + readOnly: true, + canQuery: false + }, + { + name: 'a5', + nameCN: '规格', + visible: true, + readOnly: true, + canQuery: false + }, + { + name: 'a6', + nameCN: '基本单位', + visible: true, + readOnly: true, + canQuery: false + }, + { + name: 'reqPurchaseNum', + nameCN: '请购数量', + visible: true, + type: '整型', + required: true, + canQuery: false + }, + { + name: 'danjia', + nameCN: '库存单位', + visible: true, + readOnly: true, + canQuery: false + }, + { + name: 'reqPurchaseAmount', + nameCN: '请购金额', + visible: true, + readOnly: true, + canQuery: false + }, + { + name: 'arrivalDate', + nameCN: '应到货日期', + visible: true, + readOnly: false, + canQuery: false, + type: '日期' + }, + { + name: 'a10', + nameCN: '备注', + visible: true, + canQuery: false + } + ], + tableMultiSelect: true +} + +// table内容 +const tableData = { + resultCode: 0, + data: { + content: [ + { + id: '123', + a1: 1, + goodsName: '', + a3: '', + a4: '', + a5: '', + a6: '', + reqPurchaseNum: '', + danjia: '', + reqPurchaseAmount: '', + arrivalDate: '', + a10: '我是备注' + } + ] + } +} + +export default [ + // head 头数据 + { + url: /\/base\/metadata\/addDTO/, + type: 'get', + data: tableHead + }, + // body 行数据 + { + url: /\/base\/addService\/findBy/, + type: 'post', + data: tableData + }, + // head 头数据 + { + url: /\/base\/metadata\/editDTO/, + type: 'get', + data: tableHead + }, + // body 行数据 + { + url: /\/base\/editService\/findBy/, + type: 'post', + data: tableData + }, + // head 头数据 + { + url: /\/base\/metadata\/detailDTO/, + type: 'get', + data: tableHead + }, + // body 行数据 + { + url: /\/base\/detailService\/findBy/, + type: 'post', + data: tableData + } +] diff --git a/template/src/mockData/base/handle.js b/template/src/mockData/base/handle.js new file mode 100644 index 0000000000..fc904e416c --- /dev/null +++ b/template/src/mockData/base/handle.js @@ -0,0 +1,153 @@ +// 表头 +const tableHead = { + resultCode: 0, + head: [ + { + name: 'a1', + nameCN: '序号', + visible: true, + readOnly: true, + canQuery: false + }, + { + 'canQuery': true, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 64, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'metaId': '', + 'name': 'goodsName', + 'nameCN': '商品名称', + 'nameEN': 'goodsName', + 'pageTotal': false, + 'persistent': true, + 'readOnly': true, + 'required': true, + 'scene': '', + 'sensitive': true, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': '枚举', + 'visible': true + }, + { + name: 'a3', + nameCN: '商品代码', + visible: true, + readOnly: true, + canQuery: false + }, + { + name: 'a4', + nameCN: '等级', + visible: true, + readOnly: true, + canQuery: false + }, + { + name: 'a5', + nameCN: '规格', + visible: true, + readOnly: true, + canQuery: false + }, + { + name: 'a6', + nameCN: '基本单位', + visible: true, + readOnly: true, + canQuery: false + }, + { + name: 'reqPurchaseNum', + nameCN: '请购数量', + visible: true, + type: '整型', + required: true, + readOnly: true, + canQuery: false + }, + { + name: 'danjia', + nameCN: '库存单价', + visible: true, + readOnly: true, + canQuery: false + }, + { + name: 'confirmNum', + nameCN: '确认数量', + visible: true, + type: '整型', + required: true, + canQuery: false + }, + { + name: 'reqPurchaseAmount', + nameCN: '请购金额', + visible: true, + readOnly: true, + canQuery: false + }, + { + name: 'arrivalDate', + nameCN: '应到货日期', + visible: true, + readOnly: true, + canQuery: false, + type: '日期' + }, + { + name: 'a10', + nameCN: '备注', + visible: true, + canQuery: false + } + ], + tableMultiSelect: true +} + +// table内容 +const tableData = { + resultCode: 0, + data: { + content: [ + { + id: '123', + a1: 1, + goodsName: 'a级东方红苹果(大)', + a3: '10103311', + a4: 'a级', + a5: '800', + a6: 'kg', + reqPurchaseNum: '500', + danjia: '6.8', + confirmNum: 400, + reqPurchaseAmount: 3400, + arrivalDate: '2018-05-01', + a10: '我是备注' + } + ] + } +} + +export default [ + // head 头数据 + { + url: /\/base\/metadata\/handleDTO/, + type: 'get', + data: tableHead + }, + // body 行数据 + { + url: /\/base\/handleService\/findBy/, + type: 'post', + data: tableData + } +] diff --git a/template/src/mockData/base/index.js b/template/src/mockData/base/index.js new file mode 100644 index 0000000000..06d78f402b --- /dev/null +++ b/template/src/mockData/base/index.js @@ -0,0 +1,9 @@ +import listdata from './list' +import detaildata from './detail' +import handledata from './handle' + +export default [ + ...listdata, + ...detaildata, + ...handledata +] diff --git a/template/src/mockData/base/list.js b/template/src/mockData/base/list.js new file mode 100644 index 0000000000..f466f48a40 --- /dev/null +++ b/template/src/mockData/base/list.js @@ -0,0 +1,129 @@ +// 表头 +const tableHead = { + resultCode: 0, + head: [ + { + name: '序号', + nameCN: '序号', + visible: true, + canQuery: true + }, { + name: 'XX单号', + nameCN: 'XX单号', + visible: true, + canQuery: true, + sortable: true + }, { + name: 'XX金额', + nameCN: 'XX金额', + visible: true, + canQuery: true, + sortable: true + }, { + name: 'XX数量', + nameCN: 'XX数量', + visible: true, + canQuery: true, + sortable: true + }, { + name: '重量', + nameCN: '重量', + visible: true, + canQuery: true, + sortable: true + }, { + name: '税率', + nameCN: '税率', + visible: true, + canQuery: true, + sortable: true + }, { + name: '备注', + nameCN: '备注', + visible: true, + canQuery: true, + sortable: true + }, { + name: '最后修改人', + nameCN: '最后修改人', + visible: true, + canQuery: true, + sortable: true + }, { + name: '最后修改时间', + nameCN: '最后修改时间', + visible: true, + canQuery: true, + sortable: true + } + ], + tableMultiSelect: true +} + +// table内容 +const tableData = { + resultCode: 0, + data: { + 'number': 0, + numberOfElements: 3, + totalElements: 3, + 'total': 3, + 'last': true, + 'size': 0, + 'totalPages': 1, + 'first': true, + pageable: { + offset: 0, + pageNumber: 0, + pageSize: 10 + }, + content: [ + { + '序号': 1, + 'XX单号': 'QG2018050112001034', + 'XX金额': '10.2000', + 'XX数量': '12.50', + '重量': '5.00', + '税率': '5%', + '备注': '我是备注我是备注我是备注我是备注', + '最后修改人': '管理员', + '最后修改时间': '2018-01-08 07:28:11' + }, { + '序号': 2, + 'XX单号': '', + 'XX金额': '靠右对齐', + 'XX数量': '靠右对齐', + '重量': '靠右对齐', + '税率': '靠右对齐', + '备注': '', + '最后修改人': '', + '最后修改时间': '' + }, { + '序号': 3, + 'XX单号': '一般根据单据代码规则自动生成。', + 'XX金额': '前端显示保留4位小数,后端保存10位小数四舍五入每个功能做系统参数配置', + 'XX数量': '根据商品的计量单位校验是否需要保留小数。如果保留小数,前端显示保留2位小数,后端保存2位小数。件数、个数为整数,公斤可保留小数。', + '重量': '如果保留小数,前端显示保留2位小数,后端保存2位小数。', + '税率': '靠右对齐', + '备注': '内容超出列宽,截短用省略号…形式展示,鼠标移中再显示完整信息。Config文件统一为200字符', + '最后修改人': '管理员', + '最后修改时间': '2018-01-08 07:28:11' + } + ] + } +} + +export default [ + // head 头数据 + { + url: /\/base\/metadata\/listDTO/, + type: 'get', + data: tableHead + }, + // body 请购单列表行数据 + { + url: /\/base\/listService\/findBy/, + type: 'post', + data: tableData + } +] diff --git a/template/src/mockData/classifyMenu.json b/template/src/mockData/classifyMenu.json new file mode 100644 index 0000000000..cbf0837559 --- /dev/null +++ b/template/src/mockData/classifyMenu.json @@ -0,0 +1,40 @@ +[ + { + "label": "一级 1", + "key": "1", + "children": [ + { + "label": "二级 1-1", + "key": "1-1", + "children": [ + { + "label": "三级 1-1-1", + "key": "1-1-1" + }, + { + "label": "三级 1-1-2", + "key": "1-1-2" + } + ] + }, + { + "label": "二级 1-2", + "key": "1-2", + "children": [ + { + "label": "三级 2-1", + "key": "1-2-1" + }, + { + "label": "三级 2-2", + "key": "1-2-2" + } + ] + } + ] + }, + { + "label": "一级 2", + "key": "2" + } +] \ No newline at end of file diff --git a/template/src/mockData/common/demo.js b/template/src/mockData/common/demo.js new file mode 100644 index 0000000000..59fde5a312 --- /dev/null +++ b/template/src/mockData/common/demo.js @@ -0,0 +1,199 @@ +// 表头 +const tableHead = { + resultCode: 0, + head: [ + { + name: 'a1', + nameCN: '序号', + visible: true, + readOnly: true, + canQuery: false + }, + { + 'canQuery': true, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 64, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'metaId': '', + 'name': 'goodsName', + 'nameCN': '商品名称', + 'nameEN': 'goodsName', + 'pageTotal': false, + 'persistent': true, + 'readOnly': false, + 'required': true, + 'scene': '', + 'sensitive': true, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': '枚举', + 'visible': true + }, + { + name: 'a3', + nameCN: '商品代码', + visible: true, + readOnly: true, + canQuery: false + }, + { + name: 'a4', + nameCN: '等级', + visible: true, + readOnly: true, + canQuery: false + }, + { + name: 'a5', + nameCN: '规格', + visible: true, + readOnly: true, + canQuery: false + }, + { + name: 'a6', + nameCN: '基本单位', + visible: true, + readOnly: true, + canQuery: false + }, + { + name: 'reqPurchaseNum', + nameCN: '请购数量', + visible: true, + type: '整型', + required: true, + canQuery: false + }, + { + name: 'danjia', + nameCN: '库存单位', + visible: true, + readOnly: true, + canQuery: false + }, + { + name: 'reqPurchaseAmount', + nameCN: '请购金额', + visible: true, + readOnly: true, + canQuery: false + }, + { + name: 'arrivalDate', + nameCN: '应到货日期', + visible: true, + readOnly: false, + canQuery: false, + type: '日期' + }, + { + name: 'a10', + nameCN: '备注', + visible: true, + canQuery: false + }, + { + name: 'a11', + nameCN: '转采购数量', + visible: true, + canQuery: false, + readOnly: true + }, + { + name: 'a12', + nameCN: '采购订单号', + visible: true, + canQuery: false, + readOnly: true + }, + { + name: 'a13', + nameCN: '转调拨数量', + visible: true, + canQuery: false, + readOnly: true + }, + { + name: 'a14', + nameCN: '内部调拨单号', + visible: true, + canQuery: false, + readOnly: true + }, + { + name: 'a15', + nameCN: '未发货数量', + visible: true, + canQuery: false, + readOnly: true + }, + { + name: 'a16', + nameCN: '折扣方式', + visible: true, + canQuery: false, + readOnly: true + }, + { + name: 'a17', + nameCN: '折扣额度', + visible: true, + canQuery: false, + readOnly: true + } + ], + tableMultiSelect: true +} + +// table内容 +const tableData = { + resultCode: 0, + data: { + content: [ + { + id: '123', + a1: 1, + goodsName: '', + a3: '', + a4: '', + a5: '', + a6: '', + reqPurchaseNum: '', + danjia: '', + reqPurchaseAmount: '', + arrivalDate: '', + a10: '', + a11: '', + a12: '', + a13: '', + a14: '', + a15: '', + a16: '', + a17: '' + } + ] + } +} + +export default [ + // head 头数据 + { + url: /\/login\/metadata\/demoDTO/, + type: 'get', + data: tableHead + }, + // body 行数据 + { + url: /\/login\/demoService\/findBy/, + type: 'post', + data: tableData + } +] diff --git a/template/src/mockData/common/food.json b/template/src/mockData/common/food.json new file mode 100644 index 0000000000..e73adcfd9c --- /dev/null +++ b/template/src/mockData/common/food.json @@ -0,0 +1,224 @@ +{ + "data": [{ + "code": "100021", + "name": "B级-青苹果(中)", + "typeCode": "10117", + "typeName": "青苹果", + "topTypeCode": "1", + "purUnitCode": "kg", + "saleUnitCode": "kg", + "invUnitCodeHan": "公斤", + "purUnitCodeHan": "公斤", + "saleUnitCodeHan": "公斤" + }, { + "code": "100022", + "name": "B级-青苹果(小)", + "typeCode": "10117", + "typeName": "青苹果", + "topTypeCode": "1", + "purUnitCode": "kg", + "saleUnitCode": "kg", + "invUnitCodeHan": "公斤", + "purUnitCodeHan": "公斤", + "saleUnitCodeHan": "公斤" + }, { + "code": "100041", + "name": "招牌-东方红苹果(大)", + "typeCode": "10101", + "typeName": "东方红苹果", + "topTypeCode": "1", + "purUnitCode": "kg", + "saleUnitCode": "kg", + "invUnitCodeHan": "公斤", + "purUnitCodeHan": "公斤", + "saleUnitCodeHan": "公斤" + }, { + "code": "100042", + "name": "招牌-东方红苹果(中)", + "typeCode": "10101", + "typeName": "东方红苹果", + "topTypeCode": "1", + "purUnitCode": "kg", + "saleUnitCode": "kg", + "invUnitCodeHan": "公斤", + "purUnitCodeHan": "公斤", + "saleUnitCodeHan": "公斤" + }, { + "code": "100043", + "name": "招牌-东方红苹果(小)", + "typeCode": "10101", + "typeName": "东方红苹果", + "topTypeCode": "1", + "purUnitCode": "kg", + "saleUnitCode": "kg", + "invUnitCodeHan": "公斤", + "purUnitCodeHan": "公斤", + "saleUnitCodeHan": "公斤" + }, { + "code": "100051", + "name": "B级-红将军苹果(大)", + "typeCode": "10102", + "typeName": "红将军苹果", + "topTypeCode": "1", + "purUnitCode": "kg", + "saleUnitCode": "kg", + "invUnitCodeHan": "公斤", + "purUnitCodeHan": "公斤", + "saleUnitCodeHan": "公斤" + }, { + "code": "100052", + "name": "B级-红将军苹果(中)", + "typeCode": "10102", + "typeName": "红将军苹果", + "topTypeCode": "1", + "purUnitCode": "kg", + "saleUnitCode": "kg", + "invUnitCodeHan": "公斤", + "purUnitCodeHan": "公斤", + "saleUnitCodeHan": "公斤" + }, { + "code": "100053", + "name": "B级-红将军苹果(小)", + "typeCode": "10102", + "typeName": "红将军苹果", + "topTypeCode": "1", + "purUnitCode": "kg", + "saleUnitCode": "kg", + "invUnitCodeHan": "公斤", + "purUnitCodeHan": "公斤", + "saleUnitCodeHan": "公斤" + }, { + "code": "100063", + "name": "C级-水晶富士", + "typeCode": "10103", + "typeName": "水晶富士", + "topTypeCode": "1", + "purUnitCode": "kg", + "saleUnitCode": "kg", + "invUnitCodeHan": "公斤", + "purUnitCodeHan": "公斤", + "saleUnitCodeHan": "公斤" + }, { + "code": "100071", + "name": "A级-红玫瑰苹果(大)", + "typeCode": "10106", + "typeName": "红玫瑰苹果", + "topTypeCode": "1", + "purUnitCode": "kg", + "saleUnitCode": "kg", + "invUnitCodeHan": "公斤", + "purUnitCodeHan": "公斤", + "saleUnitCodeHan": "公斤" + }, { + "code": "100072", + "name": "A级-红玫瑰苹果(中)", + "typeCode": "10106", + "typeName": "红玫瑰苹果", + "topTypeCode": "1", + "purUnitCode": "kg", + "saleUnitCode": "kg", + "invUnitCodeHan": "公斤", + "purUnitCodeHan": "公斤", + "saleUnitCodeHan": "公斤" + }, { + "code": "100073", + "name": "A级-红玫瑰苹果(小)", + "typeCode": "10106", + "typeName": "红玫瑰苹果", + "topTypeCode": "1", + "purUnitCode": "kg", + "saleUnitCode": "kg", + "invUnitCodeHan": "公斤", + "purUnitCodeHan": "公斤", + "saleUnitCodeHan": "公斤" + }, { + "code": "100074", + "name": "A级-樱桃小苹果(3个装)", + "typeCode": "10121", + "typeName": "樱桃小苹果", + "topTypeCode": "1", + "purUnitCode": "tiao", + "saleUnitCode": "tiao", + "invUnitCodeHan": "条", + "purUnitCodeHan": "条", + "saleUnitCodeHan": "条" + }, { + "code": "100075", + "name": "A级-樱桃小苹果(4个装)", + "typeCode": "10121", + "typeName": "樱桃小苹果", + "topTypeCode": "1", + "purUnitCode": "tiao", + "saleUnitCode": "tiao", + "invUnitCodeHan": "条", + "purUnitCodeHan": "条", + "saleUnitCodeHan": "条" + }, { + "code": "100076", + "name": "A级-樱桃小苹果(5个装)", + "typeCode": "10121", + "typeName": "樱桃小苹果", + "topTypeCode": "1", + "purUnitCode": "tiao", + "saleUnitCode": "tiao", + "invUnitCodeHan": "条", + "purUnitCodeHan": "条", + "saleUnitCodeHan": "条" + }, { + "code": "100077", + "name": "A级-樱桃小苹果(6个装)", + "typeCode": "10121", + "typeName": "樱桃小苹果", + "topTypeCode": "1", + "purUnitCode": "tiao", + "saleUnitCode": "tiao", + "invUnitCodeHan": "条", + "purUnitCodeHan": "条", + "saleUnitCodeHan": "条" + }, { + "code": "100078", + "name": "A级-樱桃小苹果(2个装)", + "typeCode": "10121", + "typeName": "樱桃小苹果", + "topTypeCode": "1", + "purUnitCode": "tiao", + "saleUnitCode": "tiao", + "invUnitCodeHan": "条", + "purUnitCodeHan": "条", + "saleUnitCodeHan": "条" + }, { + "code": "100122", + "name": "B级-阿克苏苹果(中)", + "typeCode": "10104", + "typeName": "阿克苏苹果", + "topTypeCode": "1", + "purUnitCode": "kg", + "saleUnitCode": "kg", + "invUnitCodeHan": "公斤", + "purUnitCodeHan": "公斤", + "saleUnitCodeHan": "公斤" + }, { + "code": "100126", + "name": "B级-阿克苏苹果(礼盒)", + "typeCode": "10104", + "typeName": "阿克苏苹果", + "topTypeCode": "1", + "purUnitCode": "he", + "saleUnitCode": "he", + "invUnitCodeHan": "盒", + "purUnitCodeHan": "盒", + "saleUnitCodeHan": "盒" + }, { + "code": "100131", + "name": "A级-红旗坡蜜心富士(大)", + "typeCode": "10104", + "typeName": "阿克苏苹果", + "topTypeCode": "1", + "purUnitCode": "kg", + "saleUnitCode": "kg", + "invUnitCodeHan": "公斤", + "purUnitCodeHan": "公斤", + "saleUnitCodeHan": "公斤" + }], + "resultCode": 0 +} \ No newline at end of file diff --git a/template/src/mockData/common/goodsdetail.js b/template/src/mockData/common/goodsdetail.js new file mode 100644 index 0000000000..771b2318d3 --- /dev/null +++ b/template/src/mockData/common/goodsdetail.js @@ -0,0 +1,125 @@ +// 表头 +const tableHead = { + resultCode: 0, + head: [ + { + name: 'a1', + nameCN: '商品代码', + visible: true, + readOnly: true, + canQuery: false + }, { + name: 'a2', + nameCN: '商品名称', + visible: true, + readOnly: true, + canQuery: false + }, { + name: 'a3', + nameCN: '等级', + visible: true, + readOnly: true, + canQuery: false + }, { + name: 'a4', + nameCN: '规格', + visible: true, + readOnly: true, + canQuery: false + }, { + name: 'a5', + nameCN: '基本单位', + visible: true, + readOnly: true, + canQuery: false + }, { + name: 'a6', + nameCN: '需求数量', + visible: true, + readOnly: true, + canQuery: false + }, { + name: 'a7', + nameCN: '请购数量', + visible: true, + readOnly: true, + canQuery: false + }, { + name: 'a8', + nameCN: '库存单价', + visible: true, + readOnly: true, + canQuery: false + }, { + name: 'a9', + nameCN: '需求金额', + visible: true, + readOnly: true, + canQuery: false + }, { + name: 'a10', + nameCN: '应到货日期', + visible: true, + readOnly: true, + canQuery: false + }, { + name: 'a11', + nameCN: '备注', + visible: true, + readOnly: true, + canQuery: false + } + ], + tableMultiSelect: true +} + +// table内容 +const tableData = { + resultCode: 0, + data: { + content: [ + { + id: '11', + a1: 10103311, + a2: 'a级东方红苹果(大)', + a3: 'a级', + a4: '800', + a5: 'kg', + a6: '400', + a7: '500', + a8: '6.8', + a9: '3400', + a10: '2018-05-01', + a11: 'test' + }, { + id: '11', + a1: 10103311, + a2: 'a级东方红苹果(大)', + a3: 'a级', + a4: '800', + a5: 'kg', + a6: '400', + a7: '500', + a8: '6.8', + a9: '3400', + a10: '2018-05-01', + a11: 'test' + } + ] + } +} + +export default [ + // head 头数据 + { + url: /\/order\/metadata\/goods_detailDTO/, + type: 'get', + data: tableHead + }, + // body 行数据 + { + url: /\/order\/goods_detailService\/findBy/, + type: 'post', + data: tableData + } +] diff --git a/template/src/mockData/common/index.js b/template/src/mockData/common/index.js new file mode 100644 index 0000000000..99d58cc4b8 --- /dev/null +++ b/template/src/mockData/common/index.js @@ -0,0 +1,38 @@ +import goodsdetail from './goodsdetail' // 商品详情 +import demo from './demo' // 商品详情 +export default [ + // 公用head 头数据 + // { + // url: /undefined(.)*DTO/, + // type: 'get', + // data: require('../common/table-head-json').default + // }, + // // 公用body 行数据 + // { + // url: /undefined(.)*findBy/, + // type: 'post', + // data: require('../common/table-body-json').default + // }, + // 公用商品名称数据 + { + url: /order\/tb_req_orderService\/goods\/list/, + type: 'get', + data: require('../common/food.json') + }, + // 2018-5-31 15:59:33 状态options 未提交 待审核 请购完成 已作废 + { + url: /\/mock\/get_status/, + type: 'get', + data: { + resultCode: 0, + data: [ + {name: '未提交'}, + {name: '待审核'}, + {name: '请购完成'}, + {name: '已作废'} + ] + } + }, + ...goodsdetail, + ...demo +] diff --git a/template/src/mockData/common/table-body-json.js b/template/src/mockData/common/table-body-json.js new file mode 100644 index 0000000000..7948df4002 --- /dev/null +++ b/template/src/mockData/common/table-body-json.js @@ -0,0 +1,147 @@ +export default { + 'data': { + 'number': 0, + 'total': 9, + 'numberOfElements': 9, + 'last': true, + 'size': 0, + 'totalPages': 1, + 'first': true, + 'content': [{ + 'lastModifiedAt': '2018-04-13 14:38:19', + 'lastModifiedBy': 'unknown_user', + 'goodsCategory': '10102', + 'enabled': true, + 'createdAt': '2018-04-13 14:38:19', + 'deleted': false, + 'createdBy': 'unknown_user', + 'goodsCode': '102', + 'id': 1, + 'goodsName': '苹果' + }, { + 'lastModifiedAt': '2018-04-13 14:41:56', + 'lastModifiedBy': 'unknown_user', + 'goodsCategory': '10102', + 'enabled': true, + 'createdAt': '2018-04-13 14:41:56', + 'deleted': false, + 'createdBy': 'unknown_user', + 'goodsCode': '102', + 'id': 2, + 'goodsName': '苹果' + }, { + 'reqPurchaseNum': 123, + 'lastModifiedAt': '2018-04-13 15:55:58', + 'level': 10, + 'goodsCategoryLink': '', + 'lastModifiedBy': 'unknown_user', + 'goodsCategory': '', + 'reqOrderCode': 'o1523606060661', + 'remark': '12', + 'enabled': true, + 'spec': 10, + 'creatorOrgCode': '', + 'createdAt': '2018-04-13 15:55:58', + 'unit': 10, + 'deleted': false, + 'createdBy': 'unknown_user', + 'reqOrderId': 4, + 'goodsCode': '100051', + 'id': 21, + 'modifierOrgCode': '', + 'goodsName': 'B级-红将军苹果(大)', + 'reqPurchaseAmount': 1230 + }, { + 'reqPurchaseNum': 12, + 'lastModifiedAt': '2018-04-13 15:55:58', + 'level': 10, + 'goodsCategoryLink': '', + 'lastModifiedBy': 'unknown_user', + 'goodsCategory': '', + 'reqOrderCode': 'o1523606060661', + 'remark': '1', + 'enabled': true, + 'spec': 10, + 'creatorOrgCode': '', + 'createdAt': '2018-04-13 15:55:58', + 'unit': 10, + 'deleted': false, + 'createdBy': 'unknown_user', + 'reqOrderId': 4, + 'goodsCode': '100051', + 'id': 22, + 'modifierOrgCode': '', + 'goodsName': 'B级-红将军苹果(大)', + 'reqPurchaseAmount': 120 + }, { + 'reqPurchaseNum': 12, + 'lastModifiedAt': '2018-04-13 16:27:13', + 'level': 10, + 'goodsCategoryLink': '', + 'lastModifiedBy': 'unknown_user', + 'goodsCategory': '', + 'reqOrderCode': 'o1523607490540', + 'remark': '1', + 'enabled': true, + 'spec': 10, + 'creatorOrgCode': '', + 'createdAt': '2018-04-13 16:27:13', + 'unit': 10, + 'deleted': false, + 'createdBy': 'unknown_user', + 'reqOrderId': 6, + 'goodsCode': '100021', + 'id': 23, + 'modifierOrgCode': '', + 'goodsName': 'B级-青苹果(中)', + 'reqPurchaseAmount': 120 + }, { + 'lastModifiedAt': '2018-04-19 16:39:35', + 'lastModifiedBy': 'unknown_user', + 'goodsCategory': '10102', + 'enabled': true, + 'createdAt': '2018-04-19 16:39:35', + 'deleted': false, + 'createdBy': 'unknown_user', + 'goodsCode': '102', + 'id': 29, + 'goodsName': '苹果' + }, { + 'lastModifiedAt': '2018-04-19 17:03:17', + 'lastModifiedBy': 'unknown_user', + 'goodsCategory': '10102', + 'enabled': true, + 'createdAt': '2018-04-19 17:03:17', + 'deleted': false, + 'createdBy': 'unknown_user', + 'goodsCode': '102', + 'id': 39, + 'goodsName': '苹果' + }, { + 'lastModifiedAt': '2018-04-25 15:29:35', + 'lastModifiedBy': 'unknown_user', + 'goodsCategory': '10102', + 'reqOrderCode': '001', + 'enabled': true, + 'createdAt': '2018-04-25 15:29:35', + 'deleted': false, + 'createdBy': 'unknown_user', + 'reqOrderId': 1, + 'goodsCode': '10222', + 'id': 42 + }, { + 'lastModifiedAt': '2018-04-25 15:29:44', + 'lastModifiedBy': 'unknown_user', + 'goodsCategory': '10102', + 'enabled': true, + 'createdAt': '2018-04-25 15:29:44', + 'deleted': false, + 'createdBy': 'unknown_user', + 'goodsCode': '102', + 'id': 43, + 'goodsName': '苹果' + }], + 'totalElements': 9 + }, + 'resultCode': 0 +} diff --git a/template/src/mockData/common/table-head-json.js b/template/src/mockData/common/table-head-json.js new file mode 100644 index 0000000000..90fbf05834 --- /dev/null +++ b/template/src/mockData/common/table-head-json.js @@ -0,0 +1,572 @@ +export default { + 'head': [{ + 'canQuery': false, // 是否能查询 + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 1, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': -1, + 'metaId': '', + 'name': 'id', // 标题key + 'nameCN': '主键id', // 标题value + 'nameEN': '', + 'pageTotal': false, + 'persistent': true, + 'readOnly': true, // 是否只读 + 'required': true, // 是否必须 + 'scene': '', + 'sensitive': false, + 'sortable': false, // 是否可排序 + 'tag': '', + 'total': false, + 'type': 'integer', // 字段类型 + 'visible': false + }, { + 'canQuery': false, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 1, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': -1, + 'metaId': '', + 'name': 'deleted', + 'nameCN': '软删除标记', + 'nameEN': '', + 'pageTotal': false, + 'persistent': true, + 'readOnly': true, + 'required': true, + 'scene': '', + 'sensitive': false, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': 'boolean', + 'visible': false + }, { + 'canQuery': false, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 1, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': -1, + 'metaId': '', + 'name': 'enabled', + 'nameCN': '是否启用', + 'nameEN': '', + 'pageTotal': false, + 'persistent': true, + 'readOnly': false, + 'required': true, + 'scene': '', + 'sensitive': false, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': 'boolean', + 'visible': true + }, { + 'canQuery': false, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 1, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': -1, + 'metaId': '', + 'name': 'createdAt', + 'nameCN': '创建时间', + 'nameEN': '', + 'pageTotal': false, + 'persistent': true, + 'readOnly': true, + 'required': true, + 'scene': '', + 'sensitive': false, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': 'datetime', + 'visible': true + }, { + 'canQuery': false, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 1, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': -1, + 'metaId': '', + 'name': 'createdBy', + 'nameCN': '创建人', + 'nameEN': '', + 'pageTotal': false, + 'persistent': true, + 'readOnly': true, + 'required': true, + 'scene': '', + 'sensitive': false, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': 'string', + 'visible': true + }, { + 'canQuery': false, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 1, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': -1, + 'metaId': '', + 'name': 'creatorOrgCode', + 'nameCN': '创建人所属部门', + 'nameEN': '', + 'pageTotal': false, + 'persistent': true, + 'readOnly': true, + 'required': true, + 'scene': '', + 'sensitive': false, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': 'string', + 'visible': true + }, { + 'canQuery': false, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 1, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': -1, + 'metaId': '', + 'name': 'lastModifiedAt', + 'nameCN': '最近修改时间', + 'nameEN': '', + 'pageTotal': false, + 'persistent': true, + 'readOnly': true, + 'required': true, + 'scene': '', + 'sensitive': false, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': 'datetime', + 'visible': true + }, { + 'canQuery': false, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 1, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': -1, + 'metaId': '', + 'name': 'lastModifiedBy', + 'nameCN': '最近修改人', + 'nameEN': '', + 'pageTotal': false, + 'persistent': true, + 'readOnly': true, + 'required': true, + 'scene': '', + 'sensitive': false, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': 'string', + 'visible': true + }, { + 'canQuery': false, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 1, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': -1, + 'metaId': '', + 'name': 'modifierOrgCode', + 'nameCN': '修改人所属部门', + 'nameEN': '', + 'pageTotal': false, + 'persistent': true, + 'readOnly': true, + 'required': true, + 'scene': '', + 'sensitive': false, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': 'string', + 'visible': true + }, { + 'canQuery': true, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 64, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': 0, + 'metaId': '', + 'name': 'goodsCode', + 'nameCN': '商品代码', + 'nameEN': 'goodsCode', + 'pageTotal': false, + 'persistent': true, + 'readOnly': true, + 'required': true, + 'scene': '', + 'sensitive': true, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': '字符串', + 'visible': true + }, { + 'canQuery': true, + 'constraint': 'md_goods', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 64, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': 0, + 'metaId': '', + 'name': 'goodsName', + 'nameCN': '商品名称', + 'nameEN': 'goodsName', + 'pageTotal': false, + 'persistent': true, + 'readOnly': false, + 'required': true, + 'scene': '', + 'sensitive': true, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': '枚举', + 'visible': true + }, { + 'canQuery': true, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 64, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': 0, + 'metaId': '', + 'name': 'goodsCategory', + 'nameCN': '商品品类', + 'nameEN': 'goodsCategory', + 'pageTotal': false, + 'persistent': true, + 'readOnly': true, + 'required': true, + 'scene': '', + 'sensitive': true, + 'sortable': true, + 'tag': '', + 'total': false, + 'type': '字符串', + 'visible': true + }, { + 'canQuery': true, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 5000, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': 0, + 'metaId': '', + 'name': 'goodsCategoryLink', + 'nameCN': '商品品类链', + 'nameEN': 'goodsCategoryLink', + 'pageTotal': false, + 'persistent': true, + 'readOnly': true, + 'required': true, + 'scene': '', + 'sensitive': true, + 'sortable': true, + 'tag': '', + 'total': false, + 'type': '字符串', + 'visible': true + }, { + 'canQuery': true, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 4, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': 0, + 'metaId': '', + 'name': 'level', + 'nameCN': '等级', + 'nameEN': 'level', + 'pageTotal': false, + 'persistent': true, + 'readOnly': true, + 'required': true, + 'scene': '', + 'sensitive': false, + 'sortable': true, + 'tag': '', + 'total': false, + 'type': '整型', + 'visible': true + }, { + 'canQuery': false, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 4, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': 0, + 'metaId': '', + 'name': 'spec', + 'nameCN': '规格', + 'nameEN': 'spec', + 'pageTotal': false, + 'persistent': true, + 'readOnly': true, + 'required': true, + 'scene': '', + 'sensitive': false, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': '整型', + 'visible': true + }, { + 'canQuery': false, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 4, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': 0, + 'metaId': '', + 'name': 'unit', + 'nameCN': '单位', + 'nameEN': 'unit', + 'pageTotal': false, + 'persistent': true, + 'readOnly': true, + 'required': true, + 'scene': '', + 'sensitive': false, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': '整型', + 'visible': true + }, { + 'canQuery': false, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 255, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': 0, + 'metaId': '', + 'name': 'remark', + 'nameCN': '备注', + 'nameEN': 'remark', + 'pageTotal': false, + 'persistent': true, + 'readOnly': false, + 'required': true, + 'scene': '', + 'sensitive': false, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': '字符串', + 'visible': true + }, { + 'canQuery': true, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 1, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': 0, + 'metaId': '', + 'name': 'reqOrderId', + 'nameCN': '请购单id', + 'nameEN': 'reqOrderId', + 'pageTotal': false, + 'persistent': true, + 'readOnly': true, + 'required': true, + 'scene': '', + 'sensitive': false, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': '长整型', + 'visible': true + }, { + 'canQuery': true, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 64, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': 0, + 'metaId': '', + 'name': 'reqOrderCode', + 'nameCN': '请购单code', + 'nameEN': 'reqOrderCode', + 'pageTotal': false, + 'persistent': true, + 'readOnly': true, + 'required': true, + 'scene': '', + 'sensitive': false, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': '字符串', + 'visible': true + }, { + 'canQuery': true, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 1, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '11.2', + 'index': 0, + 'metaId': '', + 'name': 'reqPurchaseAmount', + 'nameCN': '请购金额', + 'nameEN': 'reqPurchaseAmount', + 'pageTotal': false, + 'persistent': true, + 'readOnly': true, + 'required': true, + 'scene': '', + 'sensitive': false, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': '整数钱', + 'visible': true + }, { + 'canQuery': true, + 'constraint': '', + 'constraintParams': '', + 'constraintParamsExtra': '', + 'defaultValue': '', + 'displayLen': 1, + 'enumerationType': false, + 'fixed': '', + 'formSize': '', + 'format': '', + 'index': 0, + 'metaId': '', + 'name': 'reqPurchaseNum', + 'nameCN': '请购数量', + 'nameEN': 'reqPurchaseNum', + 'pageTotal': false, + 'persistent': true, + 'readOnly': false, + 'required': true, + 'scene': '', + 'sensitive': false, + 'sortable': false, + 'tag': '', + 'total': false, + 'type': '整型', + 'visible': true + }], + 'tableMultiSelect': true, // 是否能多选 + 'requestUrl': '/order/com.pagoda.order.api.tb_req_goodsService/findBy' +} diff --git a/template/src/mockData/index.js b/template/src/mockData/index.js new file mode 100644 index 0000000000..19dbd924b3 --- /dev/null +++ b/template/src/mockData/index.js @@ -0,0 +1,25 @@ +import Mock from 'mockjs' +// 一些正则匹配的公用拦截 +import commonMock from './common' +// 单据 +import baseMock from './base' + +const HOST = '' + +const mockArr = [ + ...baseMock, + ...commonMock +] + +Mock.setup({ + timeout: 200 +}) +mockArr.forEach(mockItem => { + let rurl = mockItem.url + Mock.mock( + // 兼容正则匹配 + typeof rurl === 'string' ? HOST + rurl : rurl, + mockItem.type, + mockItem.data + ) +}) diff --git a/template/src/mockData/no-mock.js b/template/src/mockData/no-mock.js new file mode 100644 index 0000000000..c215a9b1fc --- /dev/null +++ b/template/src/mockData/no-mock.js @@ -0,0 +1 @@ +console.log('no-mock') diff --git a/template/src/mockData/sideMenu.json.js b/template/src/mockData/sideMenu.json.js new file mode 100644 index 0000000000..06f108fd14 --- /dev/null +++ b/template/src/mockData/sideMenu.json.js @@ -0,0 +1,94 @@ +export default roleName => { + return [ + { + icon: "el-icon-tickets", + label: "门店费用管理", + subMenu: [ + { + label: "收款人信息维护", + url: "/expenses/payee", + name: "payee" + }, + { + label: "费用类别维护", + url: "/expenses/classes", + name: "classes" + }, + { + label: "门店费用申请", + url: "/expenses/requisition", + name: "requisition" + } + ] + }, + { + icon: "el-icon-tickets", + label: "POS用户管理", + subMenu: [ + { + label: "角色定义", + url: "/role/definition" + }, + { + label: "POS用户定义", + url: "/pos/user" + } + ] + }, + { + icon: "el-icon-tickets", + label: "营业款管理", + subMenu: [ + { + label: "门店存款银行账户", + url: "/business/bankAccount", + name: 'bankAccount' + }, + { + label: "营业款实收录入", + url: "/business/received", + name: 'business-received' + }, + { + label: "营业款实存录入", + url: "/business/saved", + name: 'business-saved' + }, + { + label: "营业款审核", + url: "/business/businessAudit", + name: 'business-audit' + }, + { + label: "门店实存金额审核", + url: "/business/storeSavedAudit", + name: 'store-saved-audit' + } + ] + }, + { + icon: "el-icon-tickets", + label: "销售目标管理", + subMenu: [ + { + label: "销售目标查看", + url: "/sales/target" + } + ] + }, + { + icon: "el-icon-tickets", + label: "银行存款", + subMenu: [ + { + label: "银行存款管理", + url: "/bank/deposit" + }, + { + label: "银行存款账户维护", + url: "/bank/account" + } + ] + } + ]; +}; diff --git a/template/src/mockData/topMenu.json.js b/template/src/mockData/topMenu.json.js new file mode 100644 index 0000000000..8375b8e94a --- /dev/null +++ b/template/src/mockData/topMenu.json.js @@ -0,0 +1,34 @@ +export default [ + { + 'label': '基础数据', + 'url': '/basedata' + }, + { + 'label': '采购管理', + 'url': '/*' + }, + { + 'label': '销售管理', + 'url': '/price' + }, + { + 'label': '门店运营', + 'url': '/store' + }, + { + 'label': '库存管理', + 'url': '/stock' + }, + { + 'label': '应收应付', + 'url': '/*' + }, + { + 'label': '存货管理', + 'url': '/' + }, + { + 'label': '加盟商管理', + 'url': '/*' + } +] diff --git a/template/src/router/index.js b/template/src/router/index.js index 5fa7f9d319..b7c58b9474 100644 --- a/template/src/router/index.js +++ b/template/src/router/index.js @@ -1,15 +1,57 @@ -import Vue from 'vue' -import Router from 'vue-router' -import HelloWorld from '@/components/HelloWorld' - -Vue.use(Router) - -export default new Router({ - routes: [ - { - path: '/', - name: 'HelloWorld', - component: HelloWorld - } - ] -}) +import Vue from "vue"; +import store from "../store"; +import Router from "vue-router"; +import {deepCopy} from "@/utils/utils"; +import Home from "@/views/home"; +// import { Message } from 'element-ui' +import expenses from "./views/expenses"; +import businese from "./views/businese"; + +Vue.use(Router); + +const home = [ + { + path: "/", + name: "/", + component: Home + }, + { + name: "404", + path: "*", + redirect: "/" + } +]; + +const router = new Router({ + routes: home.concat(expenses, businese) +}); +router.beforeResolve((to, from, next) => { + // 全局解析守卫 + next(); +}); +router.afterEach((to, from) => { + // 全局后置钩子 + // 设置面包屑 + let $route = to; + let result; + try { + let path = $route.meta && $route.meta.path; + if (path) { + result = + typeof path === "string" + ? path.split("/").map(label => { + return {label}; + }) + : deepCopy(path); + + // 加入首页 + result.unshift({label: "门店运营", name: "/"}); + } else { + throw new Error(); + } + } catch (e) { + result = []; + } + store.commit("setBreadcrumb", result); // 通过vuex设置 +}); +export default router; diff --git a/template/src/router/views/businese.js b/template/src/router/views/businese.js new file mode 100644 index 0000000000..5fdeaa3457 --- /dev/null +++ b/template/src/router/views/businese.js @@ -0,0 +1,95 @@ +const currentStr = "营业款管理"; +const current = {label: currentStr}; + +export default [ + // 收款人信息维护 + { + path: "/business/bankAccount", + name: "businessBankAccount", + meta: { + name: "门店存款银行账户", + path: `${currentStr}/门店存款银行账户` + }, + component: resolve => require(["@/views/business/bankAccount"], resolve) + }, + { + path: "/business/bankAccount/add", + name: "bankAccountAdd", + meta: { + name: "门店存款银行账户", + path: [ + {...current}, + {label: "门店存款银行账户", name: "businessBankAccount"}, + {label: "新增"} + ], + back: "businessBankAccount" + }, + component: resolve => require(["@/views/business/bankAccount/add"], resolve) + }, + { + path: "/business/bankAccount/detail/:id", + name: "bankAccountDetail", + meta: { + name: "门店存款银行账户", + path: [ + {...current}, + {label: "门店存款银行账户", name: "businessBankAccount"}, + {label: "详情"} + ], + back: "businessBankAccount" + }, + component: resolve => + require(["@/views/business/bankAccount/detail"], resolve) + }, + { + path: "/business/bankAccount/update/:id", + name: "bankAccountUpdate", + meta: { + name: "门店存款银行账户", + path: [ + {...current}, + {label: "门店存款银行账户", name: "businessBankAccount"}, + {label: "修改"} + ], + back: "businessBankAccount" + }, + component: resolve => + require(["@/views/business/bankAccount/update"], resolve) + }, + { + path: "/business/received", + name: "businessReceived", + meta: { + name: "营业款实收录入", + path: `${currentStr}/营业款实收录入` + }, + component: resolve => require(["@/views/business/received"], resolve) + }, + { + path: "/business/saved", + name: "businessSaved", + meta: { + name: "营业款实存录入", + path: `${currentStr}/营业款实存录入` + }, + component: resolve => require(["@/views/business/saved"], resolve) + }, + { + path: "/business/businessAudit", + name: "businessAudit", + meta: { + name: "营业款审核", + path: `${currentStr}/营业款审核` + }, + component: resolve => require(["@/views/business/businessAudit"], resolve) + }, + { + path: "/business/storeSavedAudit", + name: "storeSavedAudit", + meta: { + name: "门店实存金额审核", + path: `${currentStr}/门店实存金额审核` + }, + component: resolve => require(["@/views/business/storeSavedAudit"], resolve) + } +]; diff --git a/template/src/router/views/expenses.js b/template/src/router/views/expenses.js new file mode 100644 index 0000000000..7162f65168 --- /dev/null +++ b/template/src/router/views/expenses.js @@ -0,0 +1,119 @@ +const currentStr = "门店费用管理"; +const current = {label: currentStr}; + +export default [ + // 收款人信息维护 + { + path: '/expenses/payee', + name: 'expensesPayee', + meta: { + name: '收款人信息维护', + path: `${currentStr}/收款人信息维护` + }, + component: (resolve) => require(['@/views/expenses/payee'], resolve) + }, + { + path: '/expenses/payee/add', + name: 'payeeAdd', + meta: { + name: '收款人信息维护', + path: [ + {...current}, + {label: '收款人信息维护', name: 'expensesPayee'}, + {label: '新增'} + ], + back: 'expensesPayee' + }, + component: (resolve) => require(['@/views/expenses/payee/add'], resolve) + }, + { + path: '/expenses/payee/detail/:id', + name: 'payeeDetail', + meta: { + name: '收款人信息维护', + path: [ + {...current}, + {label: '收款人信息维护', name: 'expensesPayee'}, + {label: '详情'} + ], + back: 'expensesPayee' + }, + component: (resolve) => require(['@/views/expenses/payee/detail'], resolve) + }, + { + path: '/expenses/payee/update/:id', + name: 'payeeUpdate', + meta: { + name: '收款人信息维护', + path: [ + {...current}, + {label: '收款人信息维护', name: 'expensesPayee'}, + {label: '修改'} + ], + back: 'expensesPayee' + }, + component: (resolve) => require(['@/views/expenses/payee/update'], resolve) + }, + // 费用类别维护 + { + path: '/expenses/classes', + name: 'expensesClasses', + meta: { + name: '费用类别维护', + path: `${currentStr}/费用类别维护` + }, + component: (resolve) => require(['@/views/expenses/classes'], resolve) + }, + // 门店费用申请单 + { + path: '/expenses/requisition', + name: 'expensesRequisition', + meta: { + name: '门店费用申请单', + path: `${currentStr}/门店费用申请单` + }, + component: (resolve) => require(['@/views/expenses/requisition'], resolve) + }, + { + path: '/expenses/requisition/add', + name: 'requisitionAdd', + meta: { + name: '门店费用申请单', + path: [ + {...current}, + {label: '门店费用申请单', name: 'expensesRequisition'}, + {label: '新增'} + ], + back: 'expensesRequisition' + }, + component: (resolve) => require(['@/views/expenses/requisition/add'], resolve) + }, + { + path: '/expenses/requisition/detail/:id', + name: 'requisitionDetail', + meta: { + name: '门店费用申请单', + path: [ + {...current}, + {label: '门店费用申请单', name: 'expensesRequisition'}, + {label: '详情'} + ], + back: 'expensesRequisition' + }, + component: (resolve) => require(['@/views/expenses/requisition/detail'], resolve) + }, + { + path: '/expenses/requisition/update/:id', + name: 'requisitionUpdate', + meta: { + name: '门店费用申请单', + path: [ + {...current}, + {label: '门店费用申请单', name: 'expensesRequisition'}, + {label: '修改'} + ], + back: 'expensesRequisition' + }, + component: (resolve) => require(['@/views/expenses/requisition/update'], resolve) + } +] diff --git a/template/src/services/ajax.service.js b/template/src/services/ajax.service.js new file mode 100644 index 0000000000..f42a2d0c79 --- /dev/null +++ b/template/src/services/ajax.service.js @@ -0,0 +1,171 @@ +/** + * 这是ajax请求相关的服务 + */ +import axios from "axios"; +import {Message} from "element-ui"; +import {isArray, isObject, isString} from "@/utils/utils"; +import store from "@/store"; +const baseUrl = "/erp_store"; +/* 2018-8-13 16:35:39 增加环境配置host */ +const config = { + development: { + // devUrl1: "http://192.168.2.25:8080" + baseUrl, // 曾文基本机ip + // devUrl2: "http://192.168.2.77:8080" + baseUrl, // 刘婷婷本机ip + // devUrl1: "http://192.168.7.25:8080" + baseUrl, // 谢翔 + // devUrl2: "http://192.168.7.25:8080" + baseUrl // 谢翔 + devUrl1: "http://erp2.hwdev.pagoda.com.cn" + baseUrl, // 测试 + devUrl2: "http://erp2.hwdev.pagoda.com.cn" + baseUrl // 测试 + }, + // 线上不存在跨域问题,都是当前域名 + production: { + devUrl1: baseUrl, + devUrl2: baseUrl + } +}; +const env = config[process.env.NODE_ENV] || config["production"]; + +// 1.0 创建axiox实例 +export const instance = axios.create({ + baseURL: "", + timeout: 30000, + withCredentials: true, + headers: {"Content-Type": "application/json;charset=UTF-8"} +}); +instance.interceptors.response.use( + function(response) { + // console.log(response) + if ( + response.headers.sessionstatus === "timeout" || + response.headers.Sessionstatus === "timeout" + ) { + window.location.href = window.location.origin + "/rbac-backend/login"; // 登录超时,跳转单点登录链接 + } + // Do something with response data + return response; + }, + function(error) { + // Do something with response error + Message.error("网络异常,请重试"); + return Promise.reject(error); + } +); + +export default class AjaxService { + name = "AjaxService"; + xhrQueue = {}; // ajax请求队列 + $store = store; // vuex对象 + baseUrl = env.baseUrl; + devUrl1 = env.devUrl1; // 万桥本机ip + devUrl2 = env.devUrl2; // 郑灿标本机ip + constructor() { + console.log(this.devUrl2); + } + /* 公用业务处理 start */ + queue(source) { + // 负责存队列 + const _id = `${+new Date()}${Math.ceil(Math.random() * 10000)}`; + this.xhrQueue[_id] = source; + return _id; + } + queueCleaner(id) { + // 删除队列中某个source + delete this.xhrQueue[id]; + } + xhrCancel() { + // 清除所有队列 + Object.keys(this.xhrQueue).forEach(id => { + let source = this.xhrQueue[id]; + source.cancel(); // 退订 + }); + } + // 对Object/Array的数据递归去空格,用了递归小心爆炸(*  ̄3)(ε ̄ *) + trimParams(data) { + if (!data) return; + Object.keys(data).forEach(key => { + if (isString(data[key])) { + // string + data[key] = data[key].trim(); + } + if (isObject(data[key]) || isArray(data[key])) { + // obejct or array + this.trimParams(data[key]); + } + }); + } + /* 公用业务处理 end */ + request({method, url, params = null, options = {}}) { + // 默认执行去空格 可通过options屏蔽 + if (!options.noTrim) { + this.trimParams(params); + } + // 是否需要loading + if (options.loading) { + this.$store.commit("setLoading", true); // 通过vuex设置 + } + if (method === "GET") { + options.params = params; + } else { + options.data = params; + } + const config = Object.assign( + { + url, + method + }, + options + ); + return new Promise((resolve, reject) => { + let source = axios.CancelToken.source(); + config.cancelToken = source.token; + const queueId = this.queue(source); // 存进队列 + instance + .request(config) + .then(res => { + switch (res.data.resultCode) { + case 0: + resolve(res.data); + break; + case 401: + Message.error("登录已过期,需重新登录"); + reject(res.data); + // go login + break; + default: + // 限制错误提示长度,避免过长占满整个屏幕 + Message.error( + res.data.errorMsg && res.data.errorMsg.substr(0, 200) + ); + reject(res.data); + break; + } + }) + .catch(error => { + console.dir(error); + reject(error); + }) + .finally(() => { + this.queueCleaner(queueId); // 释放队列中的subscription + if (options.loading) { + // 请求完成取消loading + this.$store.commit("setLoading", false); // 通过vuex设置 + } + }); + }); + } + + ajax(method, url, params, options) { + return this.request({method, url, params, options}); + } + + get(url, params, options) { + return this.request({method: "GET", url, params, options}); + } + + post(url, params, options) { + return this.request({method: "POST", url, params, options}); + } + + setHeaderAuthorization(token) { + instance.defaults.headers.common["Authorization"] = `Bearer ${token}`; + } +} diff --git a/template/src/services/business.service.js b/template/src/services/business.service.js new file mode 100644 index 0000000000..fd3ea529c3 --- /dev/null +++ b/template/src/services/business.service.js @@ -0,0 +1,147 @@ +/** + * 这是营业款管理子项目采购订单模块内的公用业务逻辑的服务 + * 可引用AjaxService, StoreService, CommonService 的功能 + */ +import {isArray} from "@/utils/utils"; +export default class BusinessService { + name = "BusinessService"; + constructor(AjaxService, StoreService, CommonService) { + const {baseUrl, devUrl1, devUrl2} = AjaxService; + Object.assign( + this, + { + AjaxService, + StoreService, + CommonService + }, + { + baseUrl, + devUrl1, + devUrl2 + } + ); + } + + /* api公用定义 */ + //----------------------------------存款银行账户--------------------------------------------- + // 门店运营-营业款管理-门店存款银行账户-启用 + accountServiceStart(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl2}/BasStoreAccountService/batchStart`, + params, + {loading: isShow} + ); + } + // 门店运营-营业款管理-门店存款银行账户-禁用 + accountServiceStop(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl2}/BasStoreAccountService/batchStop`, + params, + {loading: isShow} + ); + } + // 门店运营-营业款管理-门店存款银行账户-添加 + addAccount(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl1}/BasStoreAccountService/create`, + params, + {loading: isShow} + ); + } + //-------------------------------------门店费用管理--------------------------------------- + // 门店运营门-店费用管理-费用类别-编辑类型 + editAccount(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl2}/BasStoreAccountService/update`, + params, + {loading: isShow} + ); + } + // 门店运营-门店费用管理-收款人信息维护-通过ID查询收款人 + checkAccountById(params = {}, isShow = false) { + return this.AjaxService.get( + `${this.devUrl1}/BasStoreAccountService/getById`, + params, + {loading: isShow} + ); + } + //-------------------------------实存------------------------------------------------ + // 门店运营-门店费用管理-营业款实存录入-添加 + addBusinessSaved(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl1}/StoreBusinessMoneyService/addSave`, + params, + {loading: isShow} + ); + } + + // 门店运营-门店费用管理-营业款实存录入-编辑 + editBusinessSaved(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl1}/StoreBusinessMoneyService/editSave`, + params, + {loading: isShow} + ); + } + + + // 门店运营-门店费用管理-收款人信息维护-通过ID查询收款人 + checkAccountById(params = {}, isShow = false) { + return this.AjaxService.get( + `${this.devUrl1}/BasStoreAccountService/getById`, + params, + {loading: isShow} + ); + } + + // 门店运营-门店费用管理-营业款实存录入-添加 + addBusinessSaved(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl1}/StoreBusinessMoneyService/addSave`, + params, + {loading: isShow} + ); + } + //----------------------------------------实收-------------------------------------------- + // 门店运营-门店费用管理-营业款实收录入-编辑 + editBusinessReceived(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl1}/StoreBusinessMoneyService/editRec`, + params, + {loading: isShow} + ); + } + // 门店运营-门店费用管理-营业款实收录入-新增保存 + addBusinessReceived(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl1}/StoreBusinessMoneyService/addRec`, + params, + {loading: isShow} + ); + } + // 门店运营-门店费用管理-营业款实收录入-删除 + delBusinessReceived(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl1}/StoreBusinessMoneyService/logicalDeleteById`, + params, + {loading: isShow} + ); + } + //-------------------------------实收实入公用------------------------------------------------- + // 门店运营-门店费用管理-营业款实收实存录入-修改状态(提交) + setBusinessStatus(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl1}/StoreBusinessMoneyService/changeStatus`, + params, + {loading: isShow} + ); + } + // 门店运营-门店费用管理-营业款实收实存录入-删除 + deleteBusinessReceivedOrSaved(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl1}/StoreBusinessMoneyService/logicalDeleteById`, + params, + {loading: isShow} + ); + } +} diff --git a/template/src/services/common.service.js b/template/src/services/common.service.js new file mode 100644 index 0000000000..242bd5b550 --- /dev/null +++ b/template/src/services/common.service.js @@ -0,0 +1,24 @@ +/** + * 这是所有模块公用业务逻辑的服务 (也可以设置公用配置) + * 可引用AjaxService, StoreService的功能 + */ +import {Message} from "element-ui"; +export default class CommonService { + name = "CommonService"; + constructor(AjaxService, StoreService) { + Object.assign(this, { + AjaxService, + StoreService + }); + console.log(this.name, this.AjaxService.name, this.StoreService.name); + } + + /* 公用业务处理 start */ + // 校验参数通用方法 + check(flag, tips) { + if (flag) { + Message.error(tips); + } + return flag; + } +} diff --git a/template/src/services/index.js b/template/src/services/index.js new file mode 100644 index 0000000000..fce54ef61a --- /dev/null +++ b/template/src/services/index.js @@ -0,0 +1,31 @@ +import AjaxService from "./ajax.service"; +import StoreService from "./store.service"; +import CommonService from "./common.service"; +import PayeeService from "./payee.service"; +import BusinessService from './business.service' + +export default { + install(Vue) { + /** + * 注册service, 维护公用业务逻辑 + */ + let ajaxService = new AjaxService(); + let storeService = new StoreService(ajaxService); + let commonService = new CommonService(ajaxService, storeService); + let payeeService = new PayeeService( + ajaxService, + storeService, + commonService + ); + let businessService = new BusinessService( + ajaxService, + storeService, + commonService + ); + Vue.prototype.AjaxService = ajaxService; + Vue.prototype.StoreService = storeService; + Vue.prototype.CommonService = commonService; + Vue.prototype.PayeeService = payeeService; + Vue.prototype.BusinessService = businessService + } +}; diff --git a/template/src/services/payee.service.js b/template/src/services/payee.service.js new file mode 100644 index 0000000000..4f227bf507 --- /dev/null +++ b/template/src/services/payee.service.js @@ -0,0 +1,133 @@ +/** + * 这是门店费用管理子项目采购订单模块内的公用业务逻辑的服务 + * 可引用AjaxService, StoreService, CommonService 的功能 + */ +import {isArray} from "@/utils/utils"; +export default class PayeeService { + name = "PayeeService"; + constructor(AjaxService, StoreService, CommonService) { + const {baseUrl, devUrl1, devUrl2} = AjaxService; + Object.assign( + this, + { + AjaxService, + StoreService, + CommonService + }, + { + baseUrl, + devUrl1, + devUrl2 + } + ); + } + + /* api公用定义 */ + // 门店运营/门店费用管理/收款人信息维护-禁用/启用 + payeeEnabled(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl1}/BasPayeeDefService/editEnabled`, + params, + {loading: isShow} + ); + } + // 门店运营/门店费用管理/收款人信息维护-添加收款人 + addPayee(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl1}/BasPayeeDefService/addPayee`, + params, + {loading: isShow} + ); + } + // 门店运营/门店费用管理/收款人信息维护-通过ID查询收款人 + checkPayeeById(params = {}, isShow = false) { + return this.AjaxService.get( + `${this.devUrl1}/BasPayeeDefService/getById`, + params, + {loading: isShow} + ); + } + // 门店运营/门店费用管理/收款人信息维护-编辑收款人 + editPayee(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl1}/BasPayeeDefService/editPayee`, + params, + {loading: isShow} + ); + } + + // 门店运营/门店费用管理/费用类别-添加类型 + addClass(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl1}/BasCostCatService/batchCreate`, + params, + {loading: isShow} + ); + } + + // 门店运营门/店费用管理/费用类别-编辑类型 + editClass(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl2}/BasCostCatService/batchUpdate`, + params, + {loading: isShow} + ); + } + // 门店运营/门店费用管理/费用类别-启用 + classesServiceStart(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl2}/BasCostCatService/batchStart`, + params, + {loading: isShow} + ); + } + // 门店运营/门店费用管理/费用类别-禁用 + classesServiceStop(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl2}/BasCostCatService/batchStop`, + params, + {loading: isShow} + ); + } + // 门店运营/门店费用管理/费用类别-通过类别获得 + checkRequisitionByType(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl2}/BasCostCatService/findByPreParam`, + params, + {loading: isShow} + ); + } + + // 门店运营/门店费用管理/门店费用申请单-修改状态 + setRequisitionStatus(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl1}/StoreCostAppHeadService/editStatus`, + params, + {loading: isShow} + ); + } + // 门店运营/门店费用管理/门店费用申请单-新增 + addRequisition(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl1}/StoreCostAppHeadService/addCost`, + params, + {loading: isShow} + ); + } + // 门店运营/门店费用管理/门店费用申请单-编辑 + editRequisition(params = {}, isShow = false) { + return this.AjaxService.post( + `${this.devUrl1}/StoreCostAppHeadService/editCost`, + params, + {loading: isShow} + ); + } + // 门店运营/门店费用管理/门店费用申请单-通过ID查询 + checkRequisitionById(params = {}, isShow = false) { + return this.AjaxService.get( + `${this.devUrl1}/StoreCostAppHeadService/viewDetail`, + params, + {loading: isShow} + ); + } +} diff --git a/template/src/services/store.service.js b/template/src/services/store.service.js new file mode 100644 index 0000000000..f199dfc840 --- /dev/null +++ b/template/src/services/store.service.js @@ -0,0 +1,24 @@ +/** + * 这是负责储存公用数据的服务 (一些页面过渡需要短暂缓存或者公用请求需要共享的数据可以放这里) + * 可引用AjaxService 的功能 + */ + +export default class StoreService { + name = "StoreService"; + // 记录每个路由最近一次的params和query {路由名字: {query: {}, params: {}}...} + routeParams = {}; + constructor(AjaxService) { + Object.assign(this, { + AjaxService + }); + } + + setRouteParams(route) { + // 记录最近一次路由的params和query + console.log("-----通过StoreService储存最近一次路由的params和query-----"); + this.routeParams[route.name] = { + query: route.query, + params: route.params + }; + } +} diff --git a/template/src/store/action.js b/template/src/store/action.js new file mode 100644 index 0000000000..03048022aa --- /dev/null +++ b/template/src/store/action.js @@ -0,0 +1,3 @@ +export default { + +} diff --git a/template/src/store/getters.js b/template/src/store/getters.js new file mode 100644 index 0000000000..7d47acf037 --- /dev/null +++ b/template/src/store/getters.js @@ -0,0 +1,16 @@ +import getSideMenu from '@/mockData/sideMenu.json' +export default { + sideMenu: state => { // 侧边栏菜单根据role变化 + return getSideMenu(state.role.name) + }, + // 2018-5-22 11:24:26 过滤子菜单数组对象,获取所有菜单没有权限的对象{'菜单路由name': disabled} + navNoPermission: (state, getters) => { + let navNoPermission = {} + getters.sideMenu.forEach(side => { + side.subMenu.forEach(sub => { + navNoPermission[sub.url] = sub.disabled + }) + }) + return navNoPermission + } +} diff --git a/template/src/store/index.js b/template/src/store/index.js new file mode 100644 index 0000000000..7dd6fc51a4 --- /dev/null +++ b/template/src/store/index.js @@ -0,0 +1,39 @@ +import Vue from 'vue' +import Vuex from 'vuex' +import mutations from './mutations' +import actions from './action' +import getters from './getters' +import topMenu from '@/mockData/topMenu.json' + +Vue.use(Vuex) + +const state = { + breadcrumb: [], // 面包屑数组 + loading: { + show: false, // 主体路由内容的遮罩显示控制 + fullShow: false // layout全局内容的遮罩是否显示 (也可以用vue实例的$loading) + }, + roles: [ + {id: 1, name: '采购文员', img: '/static/imgs/采购文员2.png'}, // 84ebcfd4a5f22c7b3ec55038d961a91e + {id: 2, name: '采购经理', img: '/static/imgs/采购经理.png'}, + {id: 3, name: '采购总监', img: '/static/imgs/采购总监.png'}, + {id: 4, name: '仓管', img: '/static/imgs/仓管.png'}, + {id: 5, name: '仓管主管', img: '/static/imgs/仓管主管.png'}, + {id: 6, name: '供应商', img: '/static/imgs/供应商.png'}, + {id: 7, name: '店长', img: '/static/imgs/店长.png'}, + {id: 8, name: '会计', img: '/static/imgs/会计.png'}, + {id: 9, name: '出纳', img: '/static/imgs/出纳.png'} + ], + role: JSON.parse(localStorage.getItem('erp_role')) || { // 存储角色权限资料 + id: 1, + name: '采购文员', // 采购文员 采购经理 采购总监 仓管 仓管主管 + img: '/static/imgs/采购文员2.png' + }, + topMenu // 顶级菜单 +} +export default new Vuex.Store({ + state, + getters, + actions, + mutations +}) diff --git a/template/src/store/mutations.js b/template/src/store/mutations.js new file mode 100644 index 0000000000..45caa654f0 --- /dev/null +++ b/template/src/store/mutations.js @@ -0,0 +1,31 @@ +export default { + setBreadcrumb(state, breadcrumb) { + // 动态设置面包屑 + state.breadcrumb = breadcrumb; + }, + setLoading(state, boolean) { + // 动态设置路由页面内容的loading + state.loading.show = boolean; + }, + setLoadingFull(state, boolean) { + // 动态设置整个页面的的loading遮罩 + state.loading.fullShow = boolean; + }, + setRole(state, role) { + // 2018-5-31 14:49:05提供实时切换角色功能,方便开发测试 + state.role = role; + // 2018-6-6 15:56:37 记录最近一次设置的角色,便于本地调试 + localStorage.setItem("erp_role", JSON.stringify(role)); + }, + setRouteParams(state, route) { + // 记录最近一次路由的params和query + state.routeParams[route.name] = { + query: route.query, + params: route.params + }; + }, + setTopMenuActive(state, topMenuActive) { + // console.log(topMenuActive) + state.topMenuActive = topMenuActive; + } +}; diff --git a/template/src/table-config/index.js b/template/src/table-config/index.js new file mode 100644 index 0000000000..b92b760c28 --- /dev/null +++ b/template/src/table-config/index.js @@ -0,0 +1,9 @@ +let viewConfig = {}; + +(r => r.keys().map(sourcePath => { + const viewName = sourcePath.replace('./', '').replace('.json', '') + + viewConfig[viewName] = r(sourcePath) +}))(require.context('./', false, /\.json$/)) + +export default viewConfig diff --git a/template/src/table-config/payee_classes_maintenance.json b/template/src/table-config/payee_classes_maintenance.json new file mode 100644 index 0000000000..da9f322279 --- /dev/null +++ b/template/src/table-config/payee_classes_maintenance.json @@ -0,0 +1 @@ +{"index":true,"metaData":[{"componentsProps":"","fixed":"","name":"类别代码","pageTotal":false,"prop":"code","readOnly":false,"selectOptions":"","sortable":false,"type":"input","validate":["required"],"width":""},{"componentsProps":"","fixed":"","name":"费用类别","pageTotal":false,"prop":"name","readOnly":false,"selectOptions":"","sortable":false,"type":"input","validate":["required"],"width":""},{"componentsProps":"","fixed":"","name":"费用类型","pageTotal":false,"prop":"costTypeName","readOnly":false,"selectOptions":"[\n {\n \"label\": \"门店费用\",\n \"value\": \"门店费用\"\n },\n {\n \"label\": \"宿舍费用\",\n \"value\": \"宿舍费用\"\n }\n]","sortable":false,"type":"select","validate":["required"],"width":""},{"componentsProps":"","fixed":"","name":"状态","pageTotal":false,"prop":"isEnabled","readOnly":false,"selectOptions":"[\n\t{\n \t\"label\": \"启用\",\n \"value\": 1\n },\n {\n \t\"label\": \"关闭\",\n \"value\": 0\n }\n]","sortable":false,"type":"select","validate":["required"],"width":""},{"name":"录入人","pageTotal":false,"prop":"creatorName","readOnly":true,"sortable":false},{"name":"录入时间","pageTotal":false,"prop":"lastModifiedAt","readOnly":true,"sortable":false},{"componentsProps":"","fixed":"","name":"备注","pageTotal":false,"prop":"remark","readOnly":false,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"200"}],"modifiedAt":"2018-09-25 19:13:39","name":"payee_classes_maintenance","operatedType":"update","preVersion":1,"tableMultiSelect":true,"version":2} \ No newline at end of file diff --git a/template/src/table-config/payee_cost_classes_subitem.json b/template/src/table-config/payee_cost_classes_subitem.json new file mode 100644 index 0000000000..9f90e70400 --- /dev/null +++ b/template/src/table-config/payee_cost_classes_subitem.json @@ -0,0 +1 @@ +{"index":true,"metaData":[{"name":"费用类别","pageTotal":false,"prop":"costCatName","readOnly":true,"sortable":false,"width":""},{"componentsProps":"","fixed":"","name":"本期起始日期","pageTotal":false,"prop":"periorBegin","readOnly":false,"selectOptions":"","sortable":false,"type":"date-picker","validate":["required"]},{"componentsProps":"","fixed":"","name":"本期截止日期","pageTotal":false,"prop":"periorEnd","readOnly":false,"selectOptions":"","sortable":false,"type":"date-picker","validate":["required"]},{"associationQuery":"","associationQueryFiled":"","componentsProps":"","fixed":"","name":"金额","pageTotal":true,"prop":"amount","readOnly":false,"selectOptions":"","sortable":false,"type":"input","validate":["required"]},{"associationQuery":"","associationQueryFiled":"","componentsProps":"","fixed":"","name":"备注","pageTotal":false,"prop":"remark","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[]}],"modifiedAt":"2018-09-20 14:38:28","name":"payee_cost_classes_subitem","operatedType":"update","preVersion":6,"tableMultiSelect":true,"version":7} \ No newline at end of file diff --git a/template/src/table-config/payee_cost_requisition.json b/template/src/table-config/payee_cost_requisition.json new file mode 100644 index 0000000000..1d02ea05f9 --- /dev/null +++ b/template/src/table-config/payee_cost_requisition.json @@ -0,0 +1 @@ +{"index":true,"metaData":[{"name":"申请单号","pageTotal":false,"prop":"costApplyNo","readOnly":true,"sortable":false,"width":"150"},{"name":"客户代码","pageTotal":false,"prop":"cusOrgCode","readOnly":true,"sortable":false,"width":"150"},{"name":"客户名称","pageTotal":false,"prop":"cusOrgName","readOnly":true,"sortable":false,"width":"150"},{"associationQuery":"","associationQueryFiled":"","componentsProps":"","fixed":"","name":"费用类型","pageTotal":false,"prop":"costTypeName","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"name":"收款人","pageTotal":false,"prop":"payeeName","readOnly":true,"sortable":false,"width":"150"},{"componentsProps":"","fixed":"","name":"地址","pageTotal":false,"prop":"addr","readOnly":false,"selectOptions":"","sortable":false,"type":"remark","validate":["required"],"width":"300"},{"name":"开户银行","pageTotal":false,"prop":"bankName","readOnly":true,"sortable":false,"width":"150"},{"name":"银行支行","pageTotal":false,"prop":"registerBank","readOnly":false,"sortable":false,"type":"remark","validate":["required"],"width":"200"},{"name":"账号","pageTotal":false,"prop":"bankAccountNo","readOnly":true,"sortable":false,"width":"150"},{"componentsProps":"","fixed":"","name":"合计金额","pageTotal":true,"prop":"sum","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"name":"录入人","pageTotal":false,"prop":"creatorName","readOnly":true,"sortable":false,"width":"150"},{"name":"录入日期","pageTotal":false,"prop":"createdAt","readOnly":true,"sortable":false,"width":"150"},{"componentsProps":"","fixed":"","name":"单据状态","pageTotal":false,"prop":"status","readOnly":false,"selectOptions":"[\n {\n \"label\": \"未提交\",\n \"value\": 10\n },\n {\n \"label\": \"待审核\",\n \"value\": 20\n },\n {\n \"label\": \"待付款\",\n \"value\": 30\n },\n {\n \"label\": \"已完成\",\n \"value\": 40\n },\n {\n \"label\": \"已拒绝\",\n \"value\": 50\n }\n]","sortable":false,"type":"select","validate":["required"],"width":"150"},{"name":"备注","pageTotal":false,"prop":"remark","readOnly":true,"sortable":false,"width":"200"},{"componentsProps":"","fixed":"","name":"拒绝原因","pageTotal":false,"prop":"rejectReason","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"200"},{"componentsProps":"","fixed":"","name":"拒绝付款原因","pageTotal":false,"prop":"rejectPayReason","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"200"}],"modifiedAt":"2018-10-08 16:27:26","name":"payee_cost_requisition","operatedType":"update","preVersion":6,"tableMultiSelect":true,"version":7} \ No newline at end of file diff --git a/template/src/table-config/payee_info_maintenance.json b/template/src/table-config/payee_info_maintenance.json new file mode 100644 index 0000000000..58ddc07004 --- /dev/null +++ b/template/src/table-config/payee_info_maintenance.json @@ -0,0 +1 @@ +{"index":false,"metaData":[{"componentsProps":"","fixed":"","name":"收款人代码","pageTotal":false,"prop":"code","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"收款人","pageTotal":false,"prop":"payeeName","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"开户银行","pageTotal":false,"prop":"bankName","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"associationQuery":"","associationQueryFiled":"","componentsProps":"","fixed":"","name":"开户支行","pageTotal":false,"prop":"registerBank","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"200"},{"componentsProps":"","fixed":"","name":"银行帐号","pageTotal":false,"prop":"bankAccountNo","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"200"},{"componentsProps":"","fixed":"","name":"所在省份","pageTotal":false,"prop":"province","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"城市","pageTotal":false,"prop":"city","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"associationQuery":"","associationQueryFiled":"","componentsProps":"","fixed":"","name":"地址","pageTotal":false,"prop":"addr","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"300"},{"componentsProps":"","fixed":"","name":"客户代码","pageTotal":false,"prop":"cusOrgCode","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"客户名称","pageTotal":false,"prop":"cusOrgName","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"录入人","pageTotal":false,"prop":"creatorName","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"录入时间","pageTotal":false,"prop":"createdAt","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"状态","pageTotal":false,"prop":"isEnabled","readOnly":false,"selectOptions":"[\n\t{\n \t\"label\": \"启用\",\n \"value\": 1\n },\n {\n \t\"label\": \"关闭\",\n \"value\": 0\n }\n]","sortable":false,"type":"select","validate":["required"],"width":"100"}],"modifiedAt":"2018-09-29 14:20:12","name":"payee_info_maintenance","operatedType":"update","preVersion":1,"requestUrl":"order/BasPayeeDefService/viewList","tableMultiSelect":true,"version":2} \ No newline at end of file diff --git a/template/src/table-config/store_business_account.json b/template/src/table-config/store_business_account.json new file mode 100644 index 0000000000..2d3489af3a --- /dev/null +++ b/template/src/table-config/store_business_account.json @@ -0,0 +1 @@ +{"index":true,"metaData":[{"componentsProps":"","fixed":"","name":"客户代码","pageTotal":false,"prop":"cusOrgCode","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"客户名称","pageTotal":false,"prop":"cusOrgName","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"存款银行","pageTotal":false,"prop":"bankName","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"存款银行支行","pageTotal":false,"prop":"registerBank","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"200"},{"componentsProps":"","fixed":"","name":"存款银行账户名称","pageTotal":false,"prop":"bankAccName","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"存款银行帐号","pageTotal":false,"prop":"bankAccNo","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"摘要","pageTotal":false,"prop":"remark","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"200"},{"componentsProps":"","fixed":"","name":"录入日期","pageTotal":false,"prop":"createdAt","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"状态","pageTotal":false,"prop":"isEnabled","readOnly":false,"selectOptions":"[\n\t{\n \t\"label\": \"启用\",\n \"value\": 1\n },\n {\n \t\"label\": \"关闭\",\n \"value\": 0\n }\n]","sortable":false,"type":"select","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"最后修改人","pageTotal":false,"prop":"modifierName","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"最后修改时间","pageTotal":false,"prop":"lastModifiedAt","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"}],"modifiedAt":"2018-09-27 14:48:52","name":"store_business_account","operatedType":"update","preVersion":1,"tableMultiSelect":true,"version":2} \ No newline at end of file diff --git a/template/src/table-config/store_business_edit_received.json b/template/src/table-config/store_business_edit_received.json new file mode 100644 index 0000000000..47a88e2777 --- /dev/null +++ b/template/src/table-config/store_business_edit_received.json @@ -0,0 +1 @@ +{"index":false,"metaData":[{"componentsProps":"","fixed":"","name":"类型","pageTotal":false,"prop":"type","readOnly":false,"selectOptions":"[\n {\n \"label\": \"实收\", \n \"value\": 10\n }, \n {\n \"label\": \"实存\", \n \"value\": 20\n }\n]","sortable":false,"type":"select","validate":[]},{"componentsProps":"","fixed":"","name":"营业日期","pageTotal":false,"prop":"businessDate","readOnly":false,"selectOptions":"","sortable":false,"type":"date-picker","validate":["required"],"width":"200"},{"componentsProps":"{\n\t\"labelKey\": \"code\",\n \"valueKey\": \"code\",\n \"url\": \"/erp_store/GeneralService/selectOrgCusVenInfoByAuthority\",\n \"params\": {\n \"type\": 35\n },\n \"method\": \"get\",\n \"remote\": \"cusOrgCode\",\n \"clearable\": true\n}","fixed":"","name":"客户代码","pageTotal":false,"prop":"cusOrgCode","readOnly":false,"selectOptions":"","sortable":false,"type":"bdc-select","width":"200"},{"componentsProps":"","fixed":"","name":"客户名称","pageTotal":false,"prop":"cusOrgName","readOnly":true,"selectOptions":"","sortable":false,"type":"","width":"150"},{"componentsProps":"","fixed":"","name":"收银员代码","pageTotal":false,"prop":"cashierUserCode","readOnly":false,"selectOptions":"","sortable":false,"type":"input","validate":["required"],"width":"150"},{"componentsProps":"","fixed":"","name":"收银员","pageTotal":false,"prop":"cashierUserName","readOnly":false,"selectOptions":"","sortable":false,"type":"input","validate":["required"],"width":"150"},{"componentsProps":"","fixed":"","name":"收银员员工代码","pageTotal":false,"prop":"cashierEmpNo","readOnly":false,"selectOptions":"","sortable":false,"type":"","validate":["required"],"width":"150"},{"componentsProps":"{\n\t\"labelKey\": \"name\",\n \"valueKey\": \"name\",\n \"url\": \"/erp_store/GeneralService/getEmpByName\",\n \"params\": {\n \"name\": \"\",\n \"pageNo\":0,\n \"pageSize\":10\n },\n \"method\": \"get\",\n \"clearable\": true\n}","fixed":"","name":"收银员员工名称","pageTotal":false,"prop":"cashierEmpName","readOnly":false,"selectOptions":"","sortable":false,"type":"bdc-select","validate":["required"],"width":"150"},{"componentsProps":"","fixed":"","name":"缴款单图片","pageTotal":false,"prop":"payInImage","readOnly":true,"selectOptions":"","sortable":false,"type":"","width":"200"},{"componentsProps":"","fixed":"","name":"实收现金","pageTotal":true,"prop":"recAmt","readOnly":false,"selectOptions":"","sortable":false,"type":"input","validate":["required"],"width":"150"},{"componentsProps":"","fixed":"","name":"实收礼券","pageTotal":true,"prop":"realTicketAmt","readOnly":false,"selectOptions":"","sortable":false,"type":"input","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"限用礼券","pageTotal":true,"prop":"limitTicketAmt","readOnly":false,"selectOptions":"","sortable":false,"type":"input","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"赠送礼券","pageTotal":true,"prop":"largessTickAmt","readOnly":false,"selectOptions":"","sortable":false,"type":"input","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"月结外单款","pageTotal":true,"prop":"monAmt","readOnly":false,"selectOptions":"","sortable":false,"type":"input","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"收回月结外单款","pageTotal":true,"prop":"recMonAmt","readOnly":false,"selectOptions":"","sortable":false,"type":"input","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"存款对应营业日期","pageTotal":false,"prop":"corSalesDate","readOnly":true,"selectOptions":"","sortable":false,"type":"","width":"200"},{"associationQuery":"","associationQueryFiled":"","componentsProps":"","fixed":"","name":"状态","pageTotal":false,"prop":"status","readOnly":false,"selectOptions":"[\n {\n \"label\": \"未提交\",\n \"value\": 10\n }, \n {\n \"label\": \"已完成\",\n \"value\": 20\n }, \n {\n \"label\": \"实收审核\",\n \"value\": 30\n }, \n {\n \"label\": \"实存审核\",\n \"value\": 40\n }\n]","sortable":false,"type":"select","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"备注","pageTotal":false,"prop":"remark","readOnly":false,"selectOptions":"","sortable":false,"type":"input","width":"200"}],"modifiedAt":"2018-09-29 18:13:24","name":"store_business_edit_received","operatedType":"update","preVersion":50,"tableMultiSelect":true,"version":51} \ No newline at end of file diff --git a/template/src/table-config/store_business_edit_saved.json b/template/src/table-config/store_business_edit_saved.json new file mode 100644 index 0000000000..8c00b75c94 --- /dev/null +++ b/template/src/table-config/store_business_edit_saved.json @@ -0,0 +1 @@ +{"index":true,"metaData":[{"componentsProps":"","fixed":"","name":"类型","pageTotal":false,"prop":"type","readOnly":false,"selectOptions":"[\n {\n \"label\": \"实收\", \n \"value\": 10\n }, \n {\n \"label\": \"实存\", \n \"value\": 20\n }\n]","sortable":false,"type":"select","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"营业日期","pageTotal":false,"prop":"businessDate","readOnly":false,"selectOptions":"","sortable":false,"type":"date-picker","validate":["required"],"width":"150"},{"associationQuery":"","componentsProps":"{\n\t\"labelKey\": \"code\",\n \"valueKey\": \"code\",\n \"url\": \"/erp_store/GeneralService/selectOrgCusVenInfoByAuthority?type=35\",\n \"method\": \"get\",\n \"remote\": \"cusOrgName\",\n \"clearable\": true\n}","fixed":"","name":"客户代码","pageTotal":false,"prop":"cusOrgCode","readOnly":false,"selectOptions":"","sortable":false,"type":"bdc-select","validate":["required"],"width":"150"},{"associationQuery":"","associationQueryFiled":"","componentsProps":"","fixed":"","name":"客户名称","pageTotal":false,"prop":"cusOrgName","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"月结外单款","pageTotal":true,"prop":"monAmt","readOnly":false,"selectOptions":"","sortable":false,"type":"input","validate":["required"],"width":"150"},{"componentsProps":"","fixed":"","name":"收回月结外单款","pageTotal":true,"prop":"recMonAmt","readOnly":false,"selectOptions":"","sortable":false,"type":"input","validate":["required"],"width":"150"},{"componentsProps":"","fixed":"","name":"实存金额","pageTotal":true,"prop":"savAmt","readOnly":false,"selectOptions":"","sortable":false,"type":"input","validate":["required"],"width":"150"},{"componentsProps":"{\n\t\"labelKey\": \"bankAccName\",\n \"valueKey\": \"bankAccName\",\n \"url\": \"/erp_store/BasStoreAccountService/selectBankAccNoAndName\",\n \"params\": {\n \"orgOrgId\": \"\"\n },\n \"method\": \"get\",\n \"remote\": \"bankAccName\",\n \"clearable\": true\n}","fixed":"","name":"存款银行帐号名称","pageTotal":false,"prop":"bankAccName","readOnly":false,"selectOptions":"","sortable":false,"type":"bdc-select","validate":["required"],"width":"200"},{"componentsProps":"","fixed":"","name":"存款对应营业日期","pageTotal":false,"prop":"corSalesDate","readOnly":false,"selectOptions":"","sortable":false,"type":"date-picker","validate":["required"],"width":"200"},{"componentsProps":"","fixed":"","name":"状态","pageTotal":false,"prop":"status","readOnly":false,"selectOptions":"[\n {\n \"label\": \"未提交\",\n \"value\": 10\n }, \n {\n \"label\": \"已完成\",\n \"value\": 20\n }, \n {\n \"label\": \"实收审核\",\n \"value\": 30\n }, \n {\n \"label\": \"实存审核\",\n \"value\": 40\n }\n]","sortable":false,"type":"select","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"备注","pageTotal":false,"prop":"remark","readOnly":false,"selectOptions":"","sortable":false,"type":"input","validate":[],"width":"200"}],"modifiedAt":"2018-09-29 15:49:17","name":"store_business_edit_saved","operatedType":"update","preVersion":61,"tableMultiSelect":true,"version":62} \ No newline at end of file diff --git a/template/src/table-config/store_business_saved.json b/template/src/table-config/store_business_saved.json new file mode 100644 index 0000000000..df676411b0 --- /dev/null +++ b/template/src/table-config/store_business_saved.json @@ -0,0 +1 @@ +{"index":true,"metaData":[{"componentsProps":"","fixed":"","name":"类型","pageTotal":false,"prop":"type","readOnly":false,"selectOptions":"[\n {\n \"label\": \"实收\", \n \"value\": 10\n }, \n {\n \"label\": \"实存\", \n \"value\": 20\n }\n]","sortable":false,"type":"select","validate":[],"width":"100"},{"componentsProps":"","fixed":"","name":"营业日期","pageTotal":false,"prop":"businessDate","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"客户代码","pageTotal":false,"prop":"cusOrgCode","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"客户名称","pageTotal":false,"prop":"cusOrgName","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"收银员代码","pageTotal":false,"prop":"cashierUserCode","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"收银员","pageTotal":false,"prop":"cashierUserName","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"收银员员工代码","pageTotal":false,"prop":"cashierEmpNo","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"收银员员工名称","pageTotal":false,"prop":"cashierEmpName","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"200"},{"componentsProps":"","fixed":"","name":"缴存单图片","pageTotal":false,"prop":"payInImage","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"200"},{"componentsProps":"","fixed":"","name":"实收业务款","pageTotal":false,"prop":"1","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"实收现金","pageTotal":true,"prop":"recAmt","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"实收礼券","pageTotal":true,"prop":"realTicketAmt","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"网上支付","pageTotal":false,"prop":"3","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"限用礼券","pageTotal":true,"prop":"limitTicketAmt","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"购物卡","pageTotal":false,"prop":"4","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"赠送礼券","pageTotal":true,"prop":"largessTickAmt","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"银联卡","pageTotal":false,"prop":"5","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"平安会员宝","pageTotal":false,"prop":"6","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"120"},{"componentsProps":"","fixed":"","name":"储值卡","pageTotal":false,"prop":"7","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"电子果币支付","pageTotal":false,"prop":"8","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"120"},{"componentsProps":"","fixed":"","name":"储值卡充值","pageTotal":false,"prop":"9","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"储值卡套","pageTotal":false,"prop":"10","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"健康卡销售","pageTotal":false,"prop":"11","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"支付宝","pageTotal":false,"prop":"12","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"微支付","pageTotal":false,"prop":"13","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"代客送","pageTotal":false,"prop":"14","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"预售提货","pageTotal":false,"prop":"15","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"预售首款","pageTotal":false,"prop":"16","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"月结支付","pageTotal":false,"prop":"17","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"优惠支付","pageTotal":false,"prop":"19","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"线上百果园支付","pageTotal":false,"prop":"20","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"130"},{"componentsProps":"","fixed":"","name":"线上钱包支付","pageTotal":false,"prop":"21","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"果币分摊","pageTotal":false,"prop":"22","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"电子券支付","pageTotal":false,"prop":"23","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"翼支付","pageTotal":false,"prop":"24","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"旺POS支付","pageTotal":false,"prop":"25","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"瞬间退款","pageTotal":false,"prop":"26","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"线上退款","pageTotal":false,"prop":"27","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"月结外单款","pageTotal":true,"prop":"monAmt","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"收回月结外单款","pageTotal":true,"prop":"recMonAmt","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"实存金额","pageTotal":true,"prop":"savAmt","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"存款银行帐号名称","pageTotal":false,"prop":"bankAccName","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"200"},{"componentsProps":"","fixed":"","name":"存款对应营业日期","pageTotal":false,"prop":"corSalesDate","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"状态","pageTotal":false,"prop":"status","readOnly":false,"selectOptions":"[\n {\n \"label\": \"未提交\",\n \"value\": 10\n }, \n {\n \"label\": \"已完成\",\n \"value\": 20\n }, \n {\n \"label\": \"实收审核\",\n \"value\": 30\n }, \n {\n \"label\": \"实存审核\",\n \"value\": 40\n }\n]","sortable":false,"type":"select","validate":[],"width":"150"},{"componentsProps":"","fixed":"","name":"备注","pageTotal":false,"prop":"remark","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"200"},{"componentsProps":"","fixed":"","name":"财务注明","pageTotal":false,"prop":"appRemark","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"200"},{"componentsProps":"","fixed":"","name":"录入时间","pageTotal":false,"prop":"createdAt","readOnly":true,"selectOptions":"","sortable":false,"type":"","validate":[],"width":"150"}],"modifiedAt":"2018-09-29 16:30:38","name":"store_business_saved","operatedType":"update","preVersion":41,"tableMultiSelect":true,"version":42} \ No newline at end of file diff --git a/template/src/utils/bus.js b/template/src/utils/bus.js new file mode 100644 index 0000000000..a8b329ac0e --- /dev/null +++ b/template/src/utils/bus.js @@ -0,0 +1,2 @@ +import Vue from 'Vue' +export default new Vue() diff --git a/template/src/utils/default-setting.js b/template/src/utils/default-setting.js new file mode 100644 index 0000000000..f4807f3438 --- /dev/null +++ b/template/src/utils/default-setting.js @@ -0,0 +1,109 @@ +export const storeRemotePrefix = 'erp_store' +// 2018-5-23 09:35:03 表单筛选 datePicker为daterange时间段时,props的默认设置 +export const daterangeProps = { + type: 'daterange', + 'range-separator': '至', + 'unlink-panels': true, + 'value-format': 'yyyy-MM-dd', + 'start-placeholder': '开始日期', + 'end-placeholder': '结束日期' +} +// 2018-7-7 16:51:46 表单筛选 datePicker为范围约,props的默认设置 +export const monthrangeProps = { + type: 'daterange', + 'range-separator': '至', + 'unlink-panels': true, + 'value-format': 'yy-MM-dd', + 'start-placeholder': '开始月份', + 'end-placeholder': '结束月份' + // 'picker-options': { + // disabledDate (time) { + // let lastDate = new Date(time.getFullYear(), time.getMonth(), 0) + // let lastDay = lastDate.getDate() + // console.log(lastDay) + // let day = time.getDate() + // return day !== 1 && day !== lastDay + // } + // } +} +// 表单筛选默认labelWidth +export const formLabelWidth = '110px' +// 备注默认字数限制 +export const remarkMaxlength = '200' +// 2018-8-23 17:05:01 给每个路由组件统一增加前缀命名 +export const prefix = 'erp-store' +// 商品名称表单通用 props 设置 +export const goodsNameProps = { + labelKey: 'name', + valueKey: 'name', + placeholder: '', + params: { + }, + clearable: true, + remote: 'key', + url: '/order/tb_req_orderService/goods/list' +} +// 可搜索下拉框多选功能 props 设置 +export const getSearchSelectProps = (props) => { + return Object.assign({ + labelKey: 'id', + valueKey: 'id', + placeholder: '', + multiple: true, + 'reserve-keyword': true, // 多选且可搜索时,是否在选中一个选项后保留当前的搜索关键词 + 'collapse-tags': true, + clearable: true, + remote: 'key' + }, props) +} + +export const getErpTableProps = (props) => { + return Object.assign({ + 'column-filter': false, + 'grid-custom-btns-size': 'small', + 'remenber-column-width': true, + 'validate-msg': false, + 'double-click-edit': false, + 'max-height': '480', + size: 'mini', + layout: 'total, sizes, prev, pager, next, jumper' + }, props) +} + +// 分类select-tree 默认数据 +export const getSelectTreeData = () => { + return [{ + label: '全部', + children: [{ + label: '一级 1', + children: [{ + label: '二级 1-1', + children: [{ + label: '三级 1-1-1', + value: 0 + }, { + label: '三级 1-1-2', + value: 1 + }] + }] + }, { + label: '一级 2', + children: [{ + label: '二级 2-1', + value: 2 + }, { + label: '二级 2-2', + value: 3 + }] + }, { + label: '一级 3', + children: [{ + label: '二级 3-1', + value: 4 + }, { + label: '二级 3-2', + value: 5 + }] + }] + }] +} diff --git a/template/src/utils/dom.js b/template/src/utils/dom.js new file mode 100644 index 0000000000..7d36cd3b49 --- /dev/null +++ b/template/src/utils/dom.js @@ -0,0 +1,194 @@ +/* istanbul ignore next */ +/* eslint-disable */ +import Vue from 'vue'; + +const isServer = Vue.prototype.$isServer; +const SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g; +const MOZ_HACK_REGEXP = /^moz([A-Z])/; +const ieVersion = isServer ? 0 : Number(document.documentMode); + +/* istanbul ignore next */ +const trim = function(string) { + return (string || '').replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, ''); +}; +/* istanbul ignore next */ +const camelCase = function(name) { + return name.replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { + return offset ? letter.toUpperCase() : letter; + }).replace(MOZ_HACK_REGEXP, 'Moz$1'); +}; + +/* istanbul ignore next */ +export const on = (function() { + if (!isServer && document.addEventListener) { + return function(element, event, handler) { + if (element && event && handler) { + element.addEventListener(event, handler, false); + } + }; + } else { + return function(element, event, handler) { + if (element && event && handler) { + element.attachEvent('on' + event, handler); + } + }; + } +})(); + +/* istanbul ignore next */ +export const off = (function() { + if (!isServer && document.removeEventListener) { + return function(element, event, handler) { + if (element && event) { + element.removeEventListener(event, handler, false); + } + }; + } else { + return function(element, event, handler) { + if (element && event) { + element.detachEvent('on' + event, handler); + } + }; + } +})(); + +/* istanbul ignore next */ +export const once = function(el, event, fn) { + var listener = function() { + if (fn) { + fn.apply(this, arguments); + } + off(el, event, listener); + }; + on(el, event, listener); +}; + +/* istanbul ignore next */ +export function hasClass(el, cls) { + if (!el || !cls) return false; + if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.'); + if (el.classList) { + return el.classList.contains(cls); + } else { + return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1; + } +}; + +/* istanbul ignore next */ +export function addClass(el, cls) { + if (!el) return; + var curClass = el.className; + var classes = (cls || '').split(' '); + + for (var i = 0, j = classes.length; i < j; i++) { + var clsName = classes[i]; + if (!clsName) continue; + + if (el.classList) { + el.classList.add(clsName); + } else if (!hasClass(el, clsName)) { + curClass += ' ' + clsName; + } + } + if (!el.classList) { + el.className = curClass; + } +}; + +/* istanbul ignore next */ +export function removeClass(el, cls) { + if (!el || !cls) return; + var classes = cls.split(' '); + var curClass = ' ' + el.className + ' '; + + for (var i = 0, j = classes.length; i < j; i++) { + var clsName = classes[i]; + if (!clsName) continue; + + if (el.classList) { + el.classList.remove(clsName); + } else if (hasClass(el, clsName)) { + curClass = curClass.replace(' ' + clsName + ' ', ' '); + } + } + if (!el.classList) { + el.className = trim(curClass); + } +}; + +/* istanbul ignore next */ +export const getStyle = ieVersion < 9 ? function(element, styleName) { + if (isServer) return; + if (!element || !styleName) return null; + styleName = camelCase(styleName); + if (styleName === 'float') { + styleName = 'styleFloat'; + } + try { + switch (styleName) { + case 'opacity': + try { + return element.filters.item('alpha').opacity / 100; + } catch (e) { + return 1.0; + } + default: + return (element.style[styleName] || element.currentStyle ? element.currentStyle[styleName] : null); + } + } catch (e) { + return element.style[styleName]; + } +} : function(element, styleName) { + if (isServer) return; + if (!element || !styleName) return null; + styleName = camelCase(styleName); + if (styleName === 'float') { + styleName = 'cssFloat'; + } + try { + var computed = document.defaultView.getComputedStyle(element, ''); + return element.style[styleName] || computed ? computed[styleName] : null; + } catch (e) { + return element.style[styleName]; + } +}; + +/* istanbul ignore next */ +export function setStyle(element, styleName, value) { + if (!element || !styleName) return; + + if (typeof styleName === 'object') { + for (var prop in styleName) { + if (styleName.hasOwnProperty(prop)) { + setStyle(element, prop, styleName[prop]); + } + } + } else { + styleName = camelCase(styleName); + if (styleName === 'opacity' && ieVersion < 9) { + element.style.filter = isNaN(value) ? '' : 'alpha(opacity=' + value * 100 + ')'; + } else { + element.style[styleName] = value; + } + } +}; +// 获取元素离浏览器距离 +export const getOffsetLeft = function (obj) { + let tmp = obj.offsetLeft; + let val = obj.offsetParent; + while (val != null) { + tmp += val.offsetLeft; + val = val.offsetParent; + } + return tmp; +} + +export const getOffsetTop = function (obj) { + let tmp = obj.offsetTop; + let val = obj.offsetParent; + while (val != null) { + tmp += val.offsetTop; + val = val.offsetParent; + } + return tmp; +} diff --git a/template/src/utils/http.js b/template/src/utils/http.js new file mode 100644 index 0000000000..17935313f1 --- /dev/null +++ b/template/src/utils/http.js @@ -0,0 +1,94 @@ +import axios from "axios"; +import {Message} from "element-ui"; + +const config = { + BasicUrl: "" +}; +export const instance = axios.create({ + baseURL: config.BasicUrl, + timeout: 30000, + withCredentials: true, + headers: {"Content-Type": "application/json;charset=UTF-8"} +}); +instance.interceptors.response.use( + function(response) { + console.log(response); + if ( + response.headers.sessionstatus === "timeout" || + response.headers.Sessionstatus === "timeout" + ) { + window.location.href = window.location.origin + "/rbac-backend/login"; // 登录超时,跳转单点登录链接 + } + // Do something with response data + return response; + }, + function(error) { + // Do something with response error + Message.error("网络异常,请重试"); + return Promise.reject(error); + } +); + +let xhrQueue = {}; +const queue = source => { + // 负责存队列 + const _id = `${+new Date()}${Math.ceil(Math.random() * 10000)}`; + xhrQueue[_id] = source; + return _id; +}; +const queueCleaner = id => { + // 删除队列中某个source + delete xhrQueue[id]; +}; +export const xhrCancel = () => { + // 清除所有队列 + Object.keys(xhrQueue).forEach(id => { + let source = xhrQueue[id]; + source.cancel(); // 退订 + }); +}; +export const $request = ({method, url, params = null, options}) => { + if (method === "GET") { + options.params = params; + } else { + options.data = params; + } + const config = Object.assign( + { + url, + method + }, + options + ); + return new Promise((resolve, reject) => { + let source = instance.CancelToken.source(); + config.cancelToken = source.token; + const queueId = queue(source); // 存进队列 + instance + .request(config) + .then(res => { + resolve(res); + queueCleaner(queueId); // 释放队列中的subscription + }) + .catch(error => { + reject(error); + queueCleaner(queueId); // 释放队列中的subscription + }); + }); +}; + +export const $ajax = (method, url, params, options) => { + return $request({method, url, params, options}); +}; + +export const $get = (url, params, options) => { + return $request({method: "GET", url, params, options}); +}; + +export const $post = (url, params, options) => { + return $request({method: "POST", url, params, options}); +}; + +export const setHeaderAuthorization = token => { + instance.defaults.headers.common["Authorization"] = `Bearer ${token}`; +}; diff --git a/template/src/utils/index.js b/template/src/utils/index.js new file mode 100644 index 0000000000..6783e0fd85 --- /dev/null +++ b/template/src/utils/index.js @@ -0,0 +1,12 @@ +import { instance, $ajax, $get, $post } from './http' +export default { + install (Vue, options) { + /** + * 注册http + */ + Vue.prototype.$http = instance + Vue.prototype.$ajax = $ajax + Vue.prototype.$get = $get + Vue.prototype.$post = $post + } +} diff --git a/template/src/utils/utils.js b/template/src/utils/utils.js new file mode 100644 index 0000000000..002670ce60 --- /dev/null +++ b/template/src/utils/utils.js @@ -0,0 +1,118 @@ +import moment from 'moment' +export const deepCopy = (data) => JSON.parse(JSON.stringify(data)) + +export const noop = () => () => { } + +export const isArray = (target) => { + return toString.call(target) === '[object Array]' +} + +export const isObject = (target) => { + return toString.call(target) === '[object Object]' +} + +export const isPromise = (target) => { + return toString.call(target) === '[object Promise]' +} + +export const isString = (target) => { + return toString.call(target) === '[object String]' +} + +export const isNumber = function (val) { + let isNumberRes = true + + if (Number.isNaN(val)) { + isNumberRes = false + } else if (typeof val !== 'number') { + isNumberRes = false + } + + return isNumberRes +} + +export const isUndefined = (target) => { + return toString.call(target) === '[object Undefined]' +} + +export const isFunction = (target) => { + return toString.call(target) === '[object Function]' +} + +export const isEmpty = (target) => { + if (isUndefined(target)) { + return true + } else if (isString(target)) { + return target.trim().length === 0 + } else if (isObject(target)) { + return Object.keys(target).length === 0 + } else if (isArray) { + return target.length === 0 + } + return false +} + +export const getDate = () => { + let now = new Date() + return `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}` +} + +export const getLocation = () => { + return new Promise((resolve, reject) => { + if (navigator.geolocation) { + navigator.geolocation.getCurrentPosition(param => { + resolve(param) + }) + } else { + reject() + } + }) +} +export const preArrayMultiple = (srcArr, column = 3, defaultValue = {}) => { + let bigArr = [] + srcArr.forEach((el, i) => { // 把大数组分割成多个数组,每个数组有n项 + let index = parseInt(i / column) + bigArr[index] = bigArr[index] ? bigArr[index] : [] + bigArr[index].push(el) + }) + let last = bigArr.length - 1 + while (bigArr[last] && bigArr[last].length < column) { // 把最后一数组填满n项 + bigArr[bigArr.length - 1].push(defaultValue) // 默认填充 + } + return bigArr +} +export const formatDate = (date, type) => { + const typeObj = { + 'default': 'YYYY-MM-DD', + 'full': 'YYYY-MM-DD HH:mm:ss', + 'cn': 'YYYY年MM月DD日' + } + const formatValue = typeObj[type || 'default'] + return moment(date || new Date()).format(formatValue) +} +// 根据key从数组中筛选对象 +export const findObjFromArray = (arr, key, keyName) => { + return arr.find(item => item[keyName] === key) +} +// 格式化金额 +export const formatMoney = (number, places, thousand, decimal) => { + number = number || 0; + places = !isNaN(places = Math.abs(places)) ? places : 2; + thousand = thousand || ','; + decimal = decimal || '.'; + var negative = number < 0 ? '-' : '', + i = parseInt(number = Math.abs(+number || 0).toFixed(places), 10) + '', + j = (j = i.length) > 3 ? j % 3 : 0; + return negative + (j ? i.substr(0, j) + thousand : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, '$1' + thousand) + (places ? decimal + Math.abs(number - i).toFixed(places).slice(2) : ''); +} +// 金钱转数字 +export const formatMoneyToNumber = (money) => { + if (!isNumber(money)) { + if (money.indexOf(',') > 0) { + var reg = new RegExp(',', 'g'); // g,表示全部替换。 + money = money.replace(reg, '') + } + return parseFloat(money) + } + return money +} diff --git a/template/src/views/business/bankAccount.vue b/template/src/views/business/bankAccount.vue new file mode 100644 index 0000000000..a447c13f48 --- /dev/null +++ b/template/src/views/business/bankAccount.vue @@ -0,0 +1,244 @@ +<template> +<pagoda-erp-form-table v-model="formData" :form-options="formOptions" :label-width="formLabelWidth" ref="erpFormTabel" @submit="submit"> + <template slot="table-btns"> + <pagoda-row-btns :btns="rowBtns" :visibles="getBtnVisibles()"></pagoda-row-btns> + </template> + <template slot="table" slot-scope="scope"> + <pagoda-erp-table-v2 + project-name="ERP2_New" + view="store_business_account" + :config="$viewConfig['store_business_account']" + :request-url="tableRequestUrl" + :empty="query" + :edit-column-config="editColumnConfig" + :table-filter-data="filterForm" + :head-selection="false" + :pageSize="10" + ref="erpTable" + :height="scope.height" + size="mini" + class="base-list" + > + <template slot="registerBank" slot-scope="scope"> + <pagoda-remark-cell :maxlength="150" :editable="false" v-model="scope.row['registerBank']"></pagoda-remark-cell> + </template> + </pagoda-erp-table-v2> + </template> +</pagoda-erp-form-table> +</template> + +<script> +import { + mapState +} from 'vuex' +import searchCommon from '@/mixins/formSearchCommon' +import publicChoice from '@/views/expenses/publicChoice' +import { + formLabelWidth +} from '@/utils/default-setting' +import { + formatDate +} from '@/utils/utils' + +export default { + name: 'bankAccount', + mixins: [searchCommon], + components: {}, + data() { + return { + tableRequestUrl: `${this.AjaxService.devUrl2}/BasStoreAccountService/findByPreParam`, + formLabelWidth, + formData: {}, + formOptions: [{ + label: '客户代码', + type: 'bdc-select', + key: 'cusOrgCode', + props: { + url: `${this.AjaxService.devUrl2}/BasStoreAccountService/selectCusOrg`, + labelKey: 'code', + valueKey: 'code', + clearable: true, + remote: 'cusOrgCode' + } + }, + { + label: '存款银行', + type: 'bdc-select', + key: 'bankName', + props: { + url: `${this.AjaxService.devUrl2}/BasStoreAccountService/findBankName`, + labelKey: 'name', + valueKey: 'name', + clearable: true, + remote: 'bankName' + } + }, + { + label: '存款银行账号', + type: 'input', + key: 'bankAccNo' + }, + { + label: '录入人', + type: 'input', + key: 'creatorName' + }, + { + label: '录入日期', + type: 'date-picker', + key: 'createDateTime' + }, + { + label: '状态', + type: 'select', + key: 'isEnabled', + options: publicChoice.stateOptions, + props: { + clearable: true + } + } + ], + filterForm: {}, + editColumnConfig: { + label: '操作', + width: '150', + fixed: 'right', + setBtnGroup: this.setBtnGroup + }, + rowBtns: { + // 表格上方操作按钮 + add: { + text: '新增', + onClick: () => { + this.$router.push({ + name: 'bankAccountAdd' + }) + } + }, + enable: { + text: '启用', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + const params = [] + if (selection.length > 0) { + for (let i = 0; i < selection.length; i++) { + params.push({ + id: selection[i].id, + bankAccNo: selection[i].bankAccNo, + cusOrgCode: selection[i].cusOrgCode, + isEnabled: 1 + }) + } + this.BusinessService.accountServiceStart(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('批量启用成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量启用失败:${msg}` : `批量启用失败`) + } + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + } else { + this.$message.error('请选择项目') + } + } + }, + disable: { + text: '禁用', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + const params = [] + if (selection.length > 0) { + for (let i = 0; i < selection.length; i++) { + params.push({ + id: selection[i].id, + isEnabled: 0 + }) + } + this.BusinessService.accountServiceStop(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('批量关闭成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量关闭失败:${msg}` : `批量关闭失败`) + } + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + } else { + this.$message.error('请选择') + } + } + } + }, + gridBtns: [], + query: true + } + }, + mounted() { + this.doLayout() + }, + methods: { + doLayout() { + this.$refs.erpFormTabel.doLayout() + }, + submit() { + if (this.query) { + this.query = false + this.$refs.erpTable.refreshCurrentPage() + } + // table筛选 + let reqData = { + cusOrgCode: this.formData.cusOrgCode, //客户代码 + bankName: this.formData.bankName, //存款银行 + bankAccNo: this.formData.bankAccNo, //存款银行帐号 + creatorName: this.formData.creatorName, //录入人 + createdAt: formatDate(this.formData.createdAt, 'date'), //录入日期 + isEnabled: this.formData.isEnabled //状态 + } + this.filterForm = Object.assign({}, reqData) + }, + setBtnGroup(row) { + let editBtn = { + text: '修改', + type: 'text', + props: { + disabled: row.data.isEnabled === 1 ? true : false + }, + onClick: (e, btnSelf, currentRowBtns) => { + this.$router.push({ + name: 'bankAccountUpdate', + params: { + id: row.data.id + } + }) + } + } + let checkBtn = { + text: '详情', + type: 'text', + onClick: (e, btnSelf, currentRowBtns) => { + this.$router.push({ + name: 'bankAccountDetail', + params: { + id: row.data.id + } + }) + } + } + return [checkBtn, editBtn] + }, + getBtnVisibles() { + return ['add', 'enable', 'disable'] + } + }, + computed: { + ...mapState(['role']) + } +} +</script> +<style lang="stylus"> +</style> diff --git a/template/src/views/business/bankAccount/add.vue b/template/src/views/business/bankAccount/add.vue new file mode 100644 index 0000000000..1432e5f3fe --- /dev/null +++ b/template/src/views/business/bankAccount/add.vue @@ -0,0 +1,230 @@ +<template> +<div class="payee_add"> + <pagoda-row-btns class="mb-10" :btns="rowBtns" :visibles="btnVisibles"> + </pagoda-row-btns> + <pagoda-edit-form-table ref="editFormTable" :form-options="tableData" :editable="editable" :config="config"> + <template slot="cusOrgCode" slot-scope="scope"> + <span style="float: left; font-size: 13px; margin-right: 15px;">{{ scope.code }}</span> + <span style="float: right; color: #8492a6;">{{ scope.name }}</span> + </template> + </pagoda-edit-form-table> +</div> +</template> + +<script> +import publicChoice from '@/views/expenses/publicChoice' +import { + remarkMaxlength, +} from '@/utils/default-setting' + +export default { + name: 'payee_add', + data() { + return { + remarkMaxlength, + loading: true, + rowBtns: { + cancel: { + text: '取消', + onClick: this.handleCancel, + confirm: '当前界面操作数据不保留,是否取消,确认后返回列表!' + }, + save: { + text: '保存', + onClick: this.handleSave + } + }, + tableData: [], // createTable详情单table专用 + config: { + column: 3 // 一行放3列(label+value) + }, + editable: true, + tableObjData: null, + cusOrg: {} // 存储选中的客户信息 + } + }, + mounted() { + // 初始化 + this.setTableData() + }, + methods: { + setTableData() { + this.loading = false + // 第一行 + let cusOrgCode = { + title: '客户代码', + value: '', + type: 'bdc-select', + key: 'cusOrgCode', + required: true, + rules: { + required: true, + msg: '请输入客户代码' + }, + props: { + url: `${this.AjaxService.devUrl2}/BasStoreAccountService/selectCusOrg`, + labelKey: 'code', + valueKey: 'code', + clearable: true, + remote: 'cusOrgCode' + }, + on: { + input: (name, selectData) => { + if (name && name !== '') { + this.cusOrg = { + cusOrgId: selectData.id, + cusOrgCode: selectData.code, + cusOrgName: selectData.name + } + if (cusOrgName) { + cusOrgName.value = selectData.name + } + } else { + this.cusOrg = {} + cusOrgName.value = '选择客户代码自动带出' + } + } + } + + } + let cusOrgName = { + title: '客户名称', + value: '选择客户代码自动带出', + type: 'text', + key: 'cusOrgName' + } + let bankName = { + title: '存款银行', + value: '', + type: 'bdc-select', + key: 'bankName', + required: true, + rules: { + required: true, + msg: '请选择存款银行' + }, + props: { + url: `${this.AjaxService.devUrl2}/BasStoreAccountService/findBankName`, + labelKey: 'name', + valueKey: 'name', + clearable: true + } + } + // 第二行 + let registerBank = { + title: '存款银行支行', + value: '', + type: 'remark', + key: 'registerBank', + required: true, + rules: { + required: true, + msg: '请输入款银行支行' + }, + props: { + text: '修改银行支行', + editable: true, + maxlength: remarkMaxlength + } + } + let bankAccName = { + title: '存款银行账户名称', + value: '', + type: 'input', + key: 'bankAccName', + required: true, + rules: { + required: true, + msg: '请选择存款银行账户名称' + } + } + let bankAccNo = { + title: '存款银行帐号', + value: '', + type: 'input', + key: 'bankAccNo', + required: true, + rules: { + required: true, + msg: '请输入存款银行帐号' + } + } + // 第三行 + let isEnabled = { + title: '状态', + value: '', + type: 'select', + key: 'isEnabled', + required: true, + rules: { + required: true, + msg: '请选择状态' + }, + options: publicChoice.stateOptions, + props: { + clearable: true + } + } + // 第四行 + let remark = { + title: '摘要', + value: '', + type: 'remark', + key: 'remark', + props: { + text: '修改摘要', + editable: true, + maxlength: remarkMaxlength + } + } + + let tableData + tableData = [cusOrgCode, cusOrgName, bankName, registerBank, bankAccName, bankAccNo, isEnabled, remark] + this.tableData = tableData + this.$refs.editFormTable.init() // 延迟加载必须调用init方法 + this.tableObjData = this.$refs.editFormTable.getObjData(tableData) // 因为直接获取有延迟,所以传入数组能实时拿到最新数组 + }, + handleCancel() { + this.$router.push({ + name: 'businessBankAccount' + }) + }, + handleSave() { + this.$refs.editFormTable.validateForm().then(() => { // 方式二: 通过Promise形式处理结果 + this.$refs.editFormTable.initResetValueData() // 记录重置默认值,this.$refs.editFormTable.reset()会重置为此刻的值 + const params = this.$refs.editFormTable.resetValueData + // code自动生成,可以移出 + delete params.code + params.cusOrgCode = this.cusOrg.cusOrgCode //客户代码 + params.cusOrgName = this.cusOrg.cusOrgName //客户名称 + params.cusOrgId = this.cusOrg.cusOrgId //客户ID + // 发送新增请求 + this.BusinessService.addAccount(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('新增成功') + setTimeout(() => { + this.$router.push({ + name: 'businessBankAccount' + }) + }, 2000) + } else { + const msg = res.errorMsg + this.$message.error(msg ? `新增失败:${msg}` : `新增失败`) + } + }) + }, (error) => { + let msgs = error.msgs.map((msg, i) => { + return error.items[i].title + msg + }) + this.$message.error('校验不通过,' + msgs.join('、')) + }) + } + }, + created() {}, + computed: { + btnVisibles() { + return ['cancel', 'save'] + } + } +} +</script> diff --git a/template/src/views/business/bankAccount/detail.vue b/template/src/views/business/bankAccount/detail.vue new file mode 100644 index 0000000000..411ff5212d --- /dev/null +++ b/template/src/views/business/bankAccount/detail.vue @@ -0,0 +1,148 @@ +<template> +<div class="payee_detail"> + <pagoda-row-btns :btns="rowBtns" :visibles="btnVisibles"> + </pagoda-row-btns> + <pagoda-edit-form-table ref="editFormTable" :form-options="tableData" :editable="editable" :config="config"> + </pagoda-edit-form-table> +</div> +</template> + +<script> +export default { + name: 'payee_detail', + data() { + return { + loading: true, + rowBtns: { + update: { + text: '修改', + onClick: this.handleEdit + }, + cancel: { + text: '取消', + onClick: this.handleCancel + } + }, + tableData: [], // createTable详情单table专用 + config: { + column: 3 // 一行放3列(label+value) + }, + editable: true, + tableObjData: null + } + }, + mounted() { + if (this.$route.params.id) { + this.setTableData(this.$route.params.id) + } + }, + methods: { + setTableData(id) { + this.BusinessService.checkAccountById({ + id: id + }, true).then((res) => { + this.loading = false + if (res.resultCode === 0) { + const data = res.data + // 第一行 + let cusOrgCode = { + title: '客户代码', + value: data.cusOrgCode, + type: 'text', + key: '客户代码' + } + let cusOrgName = { + title: '客户名称', + value: data.cusOrgName, + type: 'text', + key: '客户名称' + } + let bankName = { + title: '存款银行', + value: data.bankName, + type: 'text', + key: '存款银行' + } + // 第二行 + let registerBank = { + title: '存款银行支行', + value: data.registerBank, + type: 'remark', + key: '存款银行支行' + } + let bankAccName = { + title: '存款银行账户名称', + value: data.bankAccName, + type: 'text', + key: '存款银行账户名称' + } + let bankAccNo = { + title: '存款银行帐号', + value: data.bankAccNo, + type: 'text', + key: '存款银行帐号' + } + // 第三行 + this.isEnabled = data.isEnabled === 1 ? true : false + let isEnabled = { + title: '状态', + value: data.isEnabled === 1 ? '启用' : '关闭', + type: 'text', + key: '状态' + } + let remark = { + title: '摘要', + value: data.remark, + type: 'remark', + key: '摘要' + } + let creatorName = { + title: '录入人', + value: data.creatorName, + type: 'text', + key: '录入人' + } + // 第四行 + let createdAt = { + title: '录入日期', + value: data.createdAt, + type: 'remark', + key: '录入日期' + } + let tableData + tableData = [cusOrgCode, cusOrgName, bankName, registerBank, bankAccName, bankAccNo, isEnabled, remark, creatorName, createdAt] + this.tableData = tableData + this.$refs.editFormTable.init() // 延迟加载必须调用init方法 + this.tableObjData = this.$refs.editFormTable.getObjData(tableData) // 因为直接获取有延迟,所以传入数组能实时拿到最新数组 + } + }) + }, + handleCancel() { + this.$router.push({ + name: 'businessBankAccount' + }) + }, + handleEdit() { + // 判断该项目是否被引用 + if (this.isEnabled) { + this.$message({ + message: `该项目已启用,无法修改!`, + type: 'warning' + }) + } else { + this.$router.push({ + name: 'bankAccountUpdate', + params: { + id: this.$route.params.id + } + }) + } + } + }, + computed: { + btnVisibles() { + return ['cancel', 'update'] + } + } +} +</script> diff --git a/template/src/views/business/bankAccount/update.vue b/template/src/views/business/bankAccount/update.vue new file mode 100644 index 0000000000..ef07220d2e --- /dev/null +++ b/template/src/views/business/bankAccount/update.vue @@ -0,0 +1,225 @@ +<template> + <div class="payee_update"> + <pagoda-row-btns :btns="rowBtns" :visibles="btnVisibles"> + </pagoda-row-btns> + <pagoda-edit-form-table ref="editFormTable" :form-options="tableData" :editable="editable" :config="config"> + <template slot="cusOrgCode" slot-scope="scope"> + <span style="float: left; font-size: 13px; margin-right: 15px;">{{ scope.code }}</span> + <span style="float: right; color: #8492a6;">{{ scope.name }}</span> + </template> + </pagoda-edit-form-table> + </div> +</template> + +<script> + import { + remarkMaxlength, + } from '@/utils/default-setting' + import publicChoice from '@/views/expenses/publicChoice' + + export default { + name: 'payee_update', + data() { + return { + remarkMaxlength, + loading: true, + rowBtns: { + cancel: { + text: '取消', + onClick: this.handleCancel, + confirm: '当前界面操作数据不保留,是否取消,确认后返回详情!' + }, + save: { + text: '保存', + onClick: this.handleSave + } + }, + tableData: [], // createTable详情单table专用 + config: { + column: 3 // 一行放3列(label+value) + }, + editable: true, + tableObjData: null, + id: null, + cusOrg: {}, + version: 0 + } + }, + mounted() { + if (this.$route.params.id) { + this.setTableData(this.$route.params.id) + } + }, + methods: { + setTableData(id) { + this.BusinessService.checkAccountById({ + id: id + }, true).then((res) => { + this.loading = false + if (res.resultCode === 0) { + const data = res.data + this.cusOrg = { + cusOrgId: data.cusOrgId, + cusOrgCode: data.cusOrgCode, + cusOrgName: data.cusOrgName + } + this.id = data.id + this.version = data.version + let cusOrgCode = { + title: '客户代码', + value: data.cusOrgCode, + type: 'text', + key: '客户代码' + } + let cusOrgName = { + title: '客户名称', + value: data.cusOrgName, + type: 'text', + key: '客户名称' + } + let bankName = { + title: '存款银行', + value: data.bankName, + type: 'bdc-select', + key: 'bankName', + required: true, + rules: { + required: true, + msg: '请选择存款银行' + }, + props: { + url: `${this.AjaxService.devUrl2}/BasStoreAccountService/findBankName`, + labelKey: 'name', + valueKey: 'name', + editable: true, + clearable: true + } + } + //2 + let registerBank = { + title: '存款银行支行', + value: data.registerBank, + type: 'remark', + key: 'registerBank', + required: true, + rules: { + required: true, + msg: '请输入款银行支行' + }, + props: { + text: '修改银行支行', + editable: true, + maxlength: remarkMaxlength + } + } + let bankAccName = { + title: '存款银行账户名称', + value: data.bankAccName, + type: 'input', + key: 'bankAccName', + required: true, + rules: { + required: true, + msg: '请选择存款银行账户名称' + }, + props: { + clearable: true + } + } + let bankAccNo = { + title: '存款银行帐号', + value: data.bankAccNo, + type: 'input', + key: 'bankAccNo', + required: true, + rules: { + required: true, + msg: '请输入存款银行帐号' + }, + props: { + clearable: true + } + } + //3 + let isEnabled = { + title: '状态', + value: data.isEnabled, + type: 'select', + key: 'isEnabled', + required: true, + rules: { + required: true, + msg: '请选择状态' + }, + options: publicChoice.stateOptions, + props: { + clearable: true + } + } + let remark = { + title: '摘要', + value: data.remark, + type: 'remark', + key: '摘要', + props: { + text: '修改摘要', + editable: true, + maxlength: remarkMaxlength + } + } + + let tableData + tableData = [cusOrgCode, cusOrgName, bankName, registerBank, bankAccName, bankAccNo, isEnabled, remark] + this.tableData = tableData + this.$refs.editFormTable.init() // 延迟加载必须调用init方法 + this.tableObjData = this.$refs.editFormTable.getObjData(tableData) // 因为直接获取有延迟,所以传入数组能实时拿到最新数组 + } + }) + }, + handleSave() { + this.$refs.editFormTable.validateForm().then(() => { // 方式二: 通过Promise形式处理结果 + this.$refs.editFormTable.initResetValueData() // 记录重置默认值,this.$refs.editFormTable.reset()会重置为此刻的值 + const params = this.$refs.editFormTable.resetValueData + // 移除干扰参数 + delete params.creatorName + delete params.createdAt + // 添加ID + params.id = this.id + // 格式化客户信息 + params.cusOrgId = this.cusOrg.cusOrgId //客户id + params.version = this.version //版本 + params.cusOrgCode = this.cusOrg.cusOrgCode //客户代码 + // 发送修改请求 + this.BusinessService.editAccount(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('修改成功') + setTimeout(() => { + this.$router.push({ + name: 'businessBankAccount' + }) + }, 2000) + } else { + const msg = res.errorMsg + this.$message.error(msg ? `修改失败:${msg}` : `修改失败`) + } + }) + }, (error) => { + let msgs = error.msgs.map((msg, i) => { + return error.items[i].title + msg + }) + this.$message.error('校验不通过,' + msgs.join('、')) + }) + }, + handleCancel() { + this.$router.push({ + name: 'businessBankAccount' + }) + } + }, + computed: { + btnVisibles() { + return ['cancel', 'save'] + } + } + } +</script> diff --git a/template/src/views/business/businessAudit.vue b/template/src/views/business/businessAudit.vue new file mode 100644 index 0000000000..be1bc4b5c7 --- /dev/null +++ b/template/src/views/business/businessAudit.vue @@ -0,0 +1,272 @@ +<template> + <pagoda-erp-form-table + v-model="formData" + :form-options="formOptions" + :label-width="formLabelWidth" + ref="erpFormTabel" + @submit="submit" + > + <template slot="table-btns"> + <pagoda-row-btns :btns="rowBtns" :visibles="btnVisibles"></pagoda-row-btns> + </template> + <template slot="table" slot-scope="scope"> + <pagoda-erp-table-v2 + dev + project-name="ERP2_New" + view="store_business_audit" + :config="$viewConfig['store_business_audit']" + :request-url="tableRequestUrl" + :empty="query" + :table-filter-data="filterForm" + :summaryMethod="summaryMethod" + :head-selection="false" + :pageSize="10" + ref="erpTable" + :height="scope.height" + size="mini" + class="base-list" + > + <template slot="savAmt" slot-scope="scope"> + {{ formatMoney(scope.row['savAmt'], 4) }} + </template> + <template slot="remark" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="false" v-model="scope.row['remark']"></pagoda-remark-cell> + </template> + <template slot="appRemark" slot-scope="scope"> + <pagoda-remark-cell text="编辑财务注明" :maxlength="remarkMaxlength" :editable="scope.row['status'] === 20 ? true : false" v-model="scope.row['appRemark']"></pagoda-remark-cell> + </template> + </pagoda-erp-table-v2> + </template> + </pagoda-erp-form-table> +</template> + +<script> + import {mapState} from 'vuex' + import searchCommon from '@/mixins/formSearchCommon' + import publicChoice from '@/views/business/publicChoice' + import { formLabelWidth, remarkMaxlength } from '@/utils/default-setting' + import { formatDate, formatMoney, formatMoneyToNumber } from '@/utils/utils' + + export default { + name: 'business-audit', + mixins: [searchCommon], + components: { + }, + data () { + return { + tableRequestUrl: `${this.AjaxService.devUrl1}/StoreBusinessMoneyService/viewRecAuditList`, + formLabelWidth, + remarkMaxlength, + formatMoney, + formData: {}, + formOptions: [ + { + label: '客户代码', + type: 'bdc-select', + key: 'cusOrgCode', + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectOrgCusVenInfoByAuthority?type=35`, + labelKey: 'code', + valueKey: 'code', + clearable: true, + remote: 'cusOrgName' + } + }, + { + label: '营业日期', + type: 'date-picker', + key: 'date', + props: { + type: 'daterange' + } + }, + { + label: '是否有图', + type: 'select', + key: 'existPicture', + options: publicChoice.hasPic, + props: { + clearable: true + } + }, + { + label: '状态', + type: 'select', + key: 'status', + options: publicChoice.documentStatusOptions, + props: { + clearable: true + } + }, + { + label: '存款银行账户名称', + type: 'bdc-select', + key: 'bankAccName', + props: { + url: `${this.AjaxService.devUrl2}/BasStoreAccountService/selectBankAccNoAndName`, + labelKey: 'bankAccName', + valueKey: 'bankAccName', + clearable: true, + remote: 'bankAccName' + } + }, + { + label: '差额', + type: 'input-range', + key: 'difference', + props: { + clearable: true + } + }, + ], + filterForm: {}, + rowBtns: { + audit: { + text: '审核', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + if (!selection || selection.length === 0) { + this.$message.error('请选择项目') + } else { + if (selection.filter(item => item.status === 20).length === selection.length) { + const editList = [] + selection.forEach(item => { + editList.push({ + id: item.id, + appRemark: item.appRemark, + newStatus: 30 + }) + }) + const params = { + editList: editList + } + this.BusinessService.setBusinessStatus(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('批量审核操作成功!') + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量审核操作失败:${msg}` : `批量审核操作失败`) + } + }) + } else { + this.$message.error('只能选择一种状态:已完成') + } + } + } + }, + cancelAudit: { + text: '取消审核', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + if (!selection || selection.length === 0) { + this.$message.error('请选择项目') + } else { + if (selection.filter(item => item.status === 30).length === selection.length) { + const editList = [] + selection.forEach(item => { + editList.push({ + id: item.id, + appRemark: '', + newStatus: 20 + }) + }) + const params = { + editList: editList + } + this.BusinessService.setBusinessStatus(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('批量取消审核操作成功!') + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量取消审核操作失败:${msg}` : `批量取消审核操作失败`) + } + }) + } else { + this.$message.error('只能选择一种状态:实收审核') + } + } + } + }, + GSsrjhsk: { + text: 'GS收入及好食卡', + onClick: () => { + this.$message.success(`GS收入及好食卡!`) + } + }, + GSzbjmdck: { + text: 'GS总部及门店存款', + onClick: () => { + this.$message.success(`GS总部及门店存款!`) + } + }, + GScssr: { + text: 'GS重算收入', + onClick: () => { + this.$message.success(`GS重算收入!`) + } + } + }, + tableData: {}, + summaryMethod: {}, + query: true + } + }, + created () { + }, + mounted () { + this.doLayout() + const props = ['savAmt'] + const summaryMethod = {} + props.forEach(item => { + // 添加列表小计方法 + summaryMethod[item] = (tableData) => { + return this.summaryFunction(tableData, item) + } + }) + this.summaryMethod = summaryMethod + }, + methods: { + doLayout () { + this.$refs.erpFormTabel.doLayout() + }, + submit () { + if (this.query) { + this.query = false + this.$refs.erpTable.refreshCurrentPage() + } + // table筛选 + let reqData = { + bankAccName: this.formData.bankAccName, + businessDateStrat: this.formData.date ? formatDate(this.formData.date[0], 'startTime') : undefined, + businessDateEnd: this.formData.date ? formatDate(this.formData.date[1], 'endTime') : undefined, + cusOrgCode: this.formData.cusOrgCode, + status: this.formData.status, + existPicture: this.formData.existPicture, + difference: this.formData.difference + } + this.filterForm = Object.assign({}, reqData) + }, + summaryFunction(tableData, key) { + let sum = 0 + tableData.forEach(item => { + sum += formatMoneyToNumber(item[key]) + }) + return formatMoney(sum, 4) + } + }, + computed: { + ...mapState(['role']), + btnVisibles () { + return ['audit', 'cancelAudit', 'GSsrjhsk', 'GSzbjmdck', 'GScssr'] + } + } + } +</script> +<style lang="stylus"> +</style> diff --git a/template/src/views/business/publicChoice.vue b/template/src/views/business/publicChoice.vue new file mode 100644 index 0000000000..06d45c6ab7 --- /dev/null +++ b/template/src/views/business/publicChoice.vue @@ -0,0 +1,50 @@ +<script> + export default { + classesTypeOptions: [ + { + label: '门店费用', + value: 1 + }, { + label: '宿舍费用', + value: 2 + } + ], + stateOptions: [ + { + label: '启用', + value: 1 + }, { + label: '关闭', + value: 0 + } + ], + hasPic: [ + { + label: '是', + value: 1 + }, + { + label: '否', + value: 0 + }, + ], + documentStatusOptions: [ + { + label: '未提交', + value: 10 + }, + { + label: '已完成', + value: 20 + }, + { + label: '实收审核', + value: 30 + }, + { + label: '实存审核', + value: 40 + } + ] + } +</script> diff --git a/template/src/views/business/received.vue b/template/src/views/business/received.vue new file mode 100644 index 0000000000..fb0a0a0eba --- /dev/null +++ b/template/src/views/business/received.vue @@ -0,0 +1,503 @@ +<template> + <pagoda-erp-form-table v-model="formData" :form-options="formOptions" :label-width="formLabelWidth" ref="erpFormTabel" @submit="submit"> + <template slot="table-btns"> + <pagoda-row-btns :btns="rowBtns" :visibles="btnVisibles"></pagoda-row-btns> + </template> + <!-- add --> + <template slot="table" slot-scope="scope"> + <pagoda-erp-table-v2 + v-show="action === 'add'" + dev + project-name="ERP2_New" + view="store_business_add_received" + :edit-item-input="editItemInput" + :summaryMethod="summaryMethod" + :default-data="[]" + :default-editing="true" + :head-selection="false" + :pagination="false" + ref="erpTableAdd" + :height="scope.height" + size="mini" + class="base-list" + :column-filter="false" + :on="onMethod" + > + <template slot="remark" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="true" v-model="scope.row['remark']"></pagoda-remark-cell> + </template> + </pagoda-erp-table-v2> + <!-- edit --> + <pagoda-erp-table-v2 + dev v-show="action === 'edit'" + :empty="true" + :summaryMethod="summaryMethod" + project-name="ERP2_New" + view="store_business_edit_received" + :edit-item-input="editItemInput" + :head-selection="false" + :pagination="false" + ref="erpTableEdit" + :height="scope.height" + size="mini" + class="base-list" + :column-filter="false" + :on="onMethod" + > + <template slot="remark" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" dev :editable="true" v-model="scope.row['remark']"></pagoda-remark-cell> + </template> + </pagoda-erp-table-v2> + <!-- default --> + <pagoda-erp-table-v2 + dev v-show="action === 'default'" + :summaryMethod="summaryMethod" + project-name="ERP2_New" + view="store_business_received" + :request-url="tableRequestUrl" + :empty="query" + :table-filter-data="filterForm" + :edit-item-input="editItemInput" + :head-selection="false" + :pageSize="10" + ref="erpTable" + :height="scope.height" + size="mini" + class="business-received-default" + > + <template slot="savAmt" slot-scope="scope"> + {{ formatMoney(scope.row['savAmt'], 4) }} + </template> + <template slot="realTicketAmt" slot-scope="scope"> + {{ formatMoney(scope.row['realTicketAmt'], 4) }} + </template> + <template slot="limitTicketAmt" slot-scope="scope"> + {{ formatMoney(scope.row['limitTicketAmt'], 4) }} + </template> + <template slot="largessTickAmt" slot-scope="scope"> + {{ formatMoney(scope.row['largessTickAmt'], 4) }} + </template> + <template slot="recAmt" slot-scope="scope"> + {{ formatMoney(scope.row['recAmt'], 4) }} + </template> + <template slot="monAmt" slot-scope="scope"> + {{ formatMoney(scope.row['monAmt'], 4) }} + </template> + <template slot="recMonAmt" slot-scope="scope"> + {{ formatMoney(scope.row['recMonAmt'], 4) }} + </template> + <template slot="remark" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="false" v-model="scope.row['remark']"></pagoda-remark-cell> + </template> + <template slot="appRemark" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="false" v-model="scope.row['appRemark']"></pagoda-remark-cell> + </template> + </pagoda-erp-table-v2> + </template> + </pagoda-erp-form-table> +</template> + +<script> + import { mapState } from 'vuex' + import searchCommon from '@/mixins/formSearchCommon' + import publicChoice from '@/views/business/publicChoice' + import { formLabelWidth, remarkMaxlength} from '@/utils/default-setting' + import { formatDate, formatMoney, formatMoneyToNumber } from '@/utils/utils' + + export default { + name: 'business-received', + mixins: [searchCommon], + components: {}, + data() { + return { + tableRequestUrl: `${this.AjaxService.devUrl1}/StoreBusinessMoneyService/viewList`, + formLabelWidth, + remarkMaxlength, + formatMoney, + action: 'default', + tableData: {}, + formData: {}, + formOptions: [{ + label: '客户代码', + type: 'bdc-select', + key: 'cusOrgCode', + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectOrgCusVenInfoByAuthority?type=35`, + labelKey: 'code', + valueKey: 'code', + clearable: true, + remote: 'cusOrgName' + } + }, { + label: '营业日期', + type: 'date-picker', + key: 'date', + props: { + type: 'daterange' + } + }, { + label: '是否有图', + type: 'select', + key: 'existPicture', + options: publicChoice.hasPic, + props: { + clearable: true + } + }, { + label: '状态', + type: 'select', + key: 'status', + options: publicChoice.documentStatusOptions, + props: { + clearable: true + } + }, { + label: '存款银行账户名称', + type: 'bdc-select', + key: 'bankAccName', + props: { + url: `${this.AjaxService.devUrl2}/BasStoreAccountService/selectBankAccNoAndName`, + labelKey: 'bankAccName', + valueKey: 'bankAccName', + clearable: true, + remote: 'bankAccName' + } + } + ], + filterForm: {}, + editItemInput: { + cusOrgCode: function (value, selectData, rowData) { + rowData.cusOrgName = selectData.name + rowData.cusOrgId = selectData.id + }, + cashierEmpName: function (value, selectData, rowData) { + rowData.cashierEmpNo = selectData.code + } + }, + rowBtns: { + // 表格上方新增按钮 + add: { + text: '新增', + onClick: () => { + this.action = 'add' + this.$refs.erpTableAdd.refreshCurrentPage() + this.$nextTick(() => { + this.$refs.erpTableAdd.newRows([{ + businessDate: new Date(), + monAmt: '0.0000', + recAmt: '0.0000', + recMonAmt: '0.0000', + savAmt: '0.0000', + realTicketAmt: '0.0000', + limitTicketAmt: '0.0000', + largessTickAmt: '0.0000' + }]) + }) + } + }, + // 表格上方修改按钮 + edit: { + text: '修改', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + let _sLength = selection.length + const indexs = [] + if (_sLength > 0) { + for (let i = 0; i < _sLength; i++) { + if (selection[i].type != 10) { + this.$message.error('您没有修改类型不是实收的权限') + return + } + if (selection[i].status != 10) { + this.$message.error('您没有修改状态不是未提交的权限') + return + } + } + this.action = 'edit' + const props = ['type', 'cusOrgCode', 'status'] + this.$refs.erpTableEdit.refreshCurrentPage() + this.$nextTick(() => { + this.$refs.erpTableEdit.$refs.tableRef.tableData.head.forEach((item) => { + if (props.includes(item.prop)) { + item.constraint = '' + } + }) + selection.forEach(item => { + item.recAmt = formatMoney(item.recAmt, 4) + item.realTicketAmt = formatMoney(item.realTicketAmt, 4) + item.limitTicketAmt = formatMoney(item.limitTicketAmt, 4) + item.largessTickAmt = formatMoney(item.largessTickAmt, 4) + item.monAmt = formatMoney(item.monAmt, 4) + item.recMonAmt = formatMoney(item.recMonAmt, 4) + }) + this.$refs.erpTableEdit.newRows(selection) + }) + // 打开选中行可编辑行 + table.editRows(indexs) + // 打开选中行可编辑行 + this.$refs.erpTableEdit.refreshCurrentPage() + } else { + this.$message.error('请选择项目') + } + } + }, + // 表格上方删除按钮 + delete: { + text: '删除', + onClick: () => { + const selection = this.$refs.erpTable.getSelection() + let _sLength = selection.length + let ids = [] + if (_sLength > 0) { + this.$confirm('确定要删除吗?').then(() => { + for (let i = 0; i < _sLength; i++) { + if (selection[i].type != 10) { + this.$message.error('您没有删除类型是实存的权限') + return + } + ids.push(selection[i].id) + } + const params = { + idList: ids + } + this.BusinessService.deleteBusinessReceivedOrSaved(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('删除成功!') + setTimeout(() => { + this.$refs.erpTable.refreshCurrentPage() + }, 2000) + } else { + const msg = res.errorMsg + this.$message.error(msg ? `删除失败:${msg}` : `删除失败`) + } + }) + }) + } else { + this.$message.error('请至少选择一项项目') + } + } + }, + //新增,修改上方保存按钮 + save: { + text: '保存', + onClick: () => { + if (this.action === 'add') { + const table = this.$refs.erpTableAdd + let _vailResult = table.validateEditingItems() + if (!_vailResult) return + const params = {} + const list = table.$refs.tableRef.tableData.data + list.map((item) => { + const tempObj = { + // const params = { + businessDate: formatDate(item.businessDate), //销售日期 + cusOrgCode: item.cusOrgCode, //客户代码 + cusOrgId: item.cusOrgId, //客户ID + cusOrgName: item.cusOrgName, //客户名称 + cashierEmpName: item.cashierEmpName, //收银员员工姓名 + cashierEmpNo: item.cashierEmpNo, //收银员员工工号 + cashierUserCode: item.cashierUserCode, //收银员帐号 + cashierUserName: item.cashierUserName, // 收银员名称 + recAmt: formatMoneyToNumber(item.recAmt), //实收金额 + // 可选参数 + realTicketAmt: formatMoneyToNumber(item.realTicketAmt), //实收礼券 + limitTicketAmt: formatMoneyToNumber(item.limitTicketAmt), //限用礼券 + largessTickAmt: formatMoneyToNumber(item.largessTickAmt), //赠送礼券 + monAmt: formatMoneyToNumber(item.monAmt), //月结外单款 + recMonAmt: formatMoneyToNumber(item.recMonAmt), //收回月结外单款 + remark: item.remark //备注 + } + Object.assign(params, tempObj) + }) + this.BusinessService.addBusinessReceived(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('保存成功!') + this.handleRefresh() + } else { + const msg = res.errorMsg + this.$message.error(msg ? `保存失败:${msg}` : `保存失败`) + } + }) + } else if (this.action === 'edit') { + const table = this.$refs.erpTableEdit + let _vailResult = table.validateEditingItems() + if (!_vailResult) return + const list = table.$refs.tableRef.tableData.data + let params = {} + let editList = [] + const tempArr = [] + list.map((item) => { + tempArr.push({ + businessDate: formatDate(item.businessDate), //销售日期 + cusOrgId: item.cusOrgId, //客户ID + cashierEmpName: item.cashierEmpName, //收银员员工姓名 + cashierEmpNo: item.cashierEmpNo, //收银员员工工号 + cashierUserCode: item.cashierUserCode, //收银员帐号 + cashierUserName: item.cashierUserName, // 收银员名称 + recAmt: formatMoneyToNumber(item.recAmt), //实收金额 + id: item.id, //id + // 可选参数 + payInImage: item.payInImage, //实收缴款单图片 + realTicketAmt: formatMoneyToNumber(item.realTicketAmt), //实收礼券 + limitTicketAmt: formatMoneyToNumber(item.limitTicketAmt), //限用礼券 + largessTickAmt: formatMoneyToNumber(item.largessTickAmt), //赠送礼券 + monAmt: formatMoneyToNumber(item.monAmt), //月结外单款 + recMonAmt: formatMoneyToNumber(item.recMonAmt), //收回月结外单款 + remark: item.remark, //备注 + appRemark: item.appRemark, // 财务注明 + }) + Object.assign(editList, tempArr) + params = { + editList + } + }) + this.BusinessService.editBusinessReceived(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('保存成功!') + this.handleRefresh() + } else { + const msg = res.errorMsg + this.$message.error(msg ? `保存失败:${msg}` : `保存失败`) + } + }) + } + } + }, + //新增,修改上方提交按钮 + btnSubmit: { + text: '提交', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + let _sLength = selection.length + const editList = [] + if (_sLength > 0) { + for (let i = 0; i < _sLength; i++) { + if (selection[i].type != 10) { + this.$message.error('您没有提交类型不是实收的权限') + return + } + if (selection[i].status != 10) { + this.$message.error('您没有提交状态不是未提交的权限') + return + } + editList.push({ + id: selection[i].id, + newStatus: 20 + }) + const params = { + editList + } + this.BusinessService.setBusinessStatus(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('提交成功!') + setTimeout(() => { + this.$refs.erpTable.refreshCurrentPage() + }, 2000) + } else { + const msg = res.errorMsg + this.$message.error(msg ? `提交失败:${msg}` : `提交失败`) + } + }) + } + } else { + this.$message.error('请选择一项'); + } + } + }, + cancel: { + text: '取消', + confirm: '当前界面操作数据不保留,是否取消,确认后返回列表!', + onClick: () => { + this.handleRefresh() + } + }, + }, + query: true, + summaryMethod: {} + } + }, + created () { + }, + mounted () { + this.doLayout() + const props = ['recAmt', 'realTicketAmt', 'limitTicketAmt', 'largessTickAmt', 'savAmt', 'monAmt', 'recMonAmt'] + const summaryMethod = {} + const onMethod = {} + props.forEach(item => { + // 添加列表小计方法 + summaryMethod[item] = (tableData) => { + return this.summaryFunction(tableData, item) + } + onMethod[item] = { + blur: (event) => { + let value = event.target.value + // 格式化输入的值 + value = parseFloat(formatMoneyToNumber(value), 10) + event.target.value = formatMoney(value, 4) + // 重新计算合计 + if (this.action === 'add') { + this.$refs.erpTableAdd.pageTotal() + } else if (this.action === 'edit') { + this.$refs.erpTableEdit.pageTotal() + } + } + } + }) + this.summaryMethod = summaryMethod + this.onMethod = onMethod + }, + methods: { + doLayout () { + this.$refs.erpFormTabel.doLayout() + }, + submit() { + if (this.query) { + this.query = false + this.$refs.erpTable.refreshCurrentPage() + } + // table筛选 + let reqData = { + cusOrgCode: this.formData.cusOrgCode, + bankAccName: this.formData.bankAccName, + businessDateStrat: this.formData.date ? formatDate(this.formData.date[0], 'startTime') : '', + businessDateEnd: this.formData.date ? formatDate(this.formData.date[1], 'endTime') : '', + existPicture: this.formData.existPicture, + status: this.formData.status + } + this.filterForm = Object.assign({}, reqData) + }, + handleRefresh() { + this.action = 'default' + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }, + summaryFunction(tableData, key) { + let sum = 0 + tableData.forEach(item => { + sum += formatMoneyToNumber(item[key]) + }) + return formatMoney(sum, 4) + } + }, + computed: { + ...mapState(['role']), + btnVisibles() { + let btnsObj = { + 'add': ['cancel', 'save',], + 'edit': ['cancel', 'save'], + 'default': ['add', 'edit', 'delete', 'btnSubmit'] + } + return btnsObj[this.action] + } + } + } +</script> +<style lang="stylus"> + .business-received-default { + .rec-amt, .real-ticket-amt, .limit-ticket-amt, .largess-tick-amt, .mon-amt, .rec-mon-amt, .sav-amt { + text-align right + } + } +</style> diff --git a/template/src/views/business/saved.vue b/template/src/views/business/saved.vue new file mode 100644 index 0000000000..1fdec8cb90 --- /dev/null +++ b/template/src/views/business/saved.vue @@ -0,0 +1,727 @@ +<template> + <pagoda-erp-form-table + v-model="formData" + :form-options="formOptions" + :label-width="formLabelWidth" + ref="erpFormTabel" + @submit="submit" + > + <template slot="table-btns"> + <pagoda-row-btns :btns="rowBtns" :visibles="btnVisibles"></pagoda-row-btns> + </template> + <template slot="table" slot-scope="scope"> + <pagoda-erp-table-v2 + v-show="action === 'add'" + project-name="ERP2_New" + view="store_business_edit_saved" + :config="$viewConfig['store_business_edit_saved']" + :edit-column-config="editColumnConfig" + :edit-item-input="editItemInput" + :default-data="[]" + :summaryMethod="summaryMethod" + :default-editing="true" + :head-selection="false" + :pagination="false" + ref="erpTableAdd" + :height="scope.height" + size="mini" + class="base-list" + :column-filter="false" + :on="onMethod" + > + <template slot="cusOrgCode-slot" slot-scope="scope"> + <span style="float: left; font-size: 13px; margin-right: 15px;">{{ scope.code }}</span> + <span style="float: right; color: #8492a6;">{{ scope.name }}</span> + </template> + <template slot="bankAccName-slot" slot-scope="scope"> + <span style="float: left; font-size: 13px; margin-right: 15px;">{{ scope.bankAccNo }}</span> + <span style="float: right; color: #8492a6;">{{ scope.bankAccName }}</span> + </template> + <template slot="remark" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="true" v-model="scope.row['remark']"></pagoda-remark-cell> + </template> + </pagoda-erp-table-v2> + <pagoda-erp-table-v2 + v-show="action === 'edit-saved'" + project-name="ERP2_New" + view="store_business_edit_saved" + :config="$viewConfig['store_business_edit_saved']" + empty + :edit-item-input="editItemInput" + :summaryMethod="summaryMethod" + :default-editing="true" + :head-selection="false" + :pagination="false" + ref="erpTableEditSaved" + :height="scope.height" + size="mini" + class="base-list" + :column-filter="false" + :on="onMethod" + > + <template slot="cusOrgCode-slot" slot-scope="scope"> + <span style="float: left; font-size: 13px; margin-right: 15px;">{{ scope.code }}</span> + <span style="float: right; color: #8492a6;">{{ scope.name }}</span> + </template> + <template slot="bankAccName-slot" slot-scope="scope"> + <span style="float: left; font-size: 13px; margin-right: 15px;">{{ scope.bankAccNo }}</span> + <span style="float: right; color: #8492a6;">{{ scope.bankAccName }}</span> + </template> + <template slot="remark" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="true" v-model="scope.row['remark']"></pagoda-remark-cell> + </template> + </pagoda-erp-table-v2> + <pagoda-erp-table-v2 + v-show="action === 'edit-received'" + dev + project-name="ERP2_New" + view="store_business_edit_received" + :config="$viewConfig['store_business_edit_received']" + empty + :edit-item-input="editItemInput" + :summaryMethod="summaryMethod" + :default-editing="true" + :head-selection="false" + :pagination="false" + ref="erpTableEditReceived" + :height="scope.height" + size="mini" + class="base-list" + :column-filter="false" + :on="onMethod" + > + <template slot="cusOrgCode-slot" slot-scope="scope"> + <span style="float: left; font-size: 13px; margin-right: 15px;">{{ scope.code }}</span> + <span style="float: right; color: #8492a6;">{{ scope.name }}</span> + </template> + <template slot="bankAccName-slot" slot-scope="scope"> + <span style="float: left; font-size: 13px; margin-right: 15px;">{{ scope.bankAccNo }}</span> + <span style="float: right; color: #8492a6;">{{ scope.bankAccName }}</span> + </template> + <template slot="remark" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="true" v-model="scope.row['remark']"></pagoda-remark-cell> + </template> + </pagoda-erp-table-v2> + <pagoda-erp-table-v2 + dev + v-show="action === 'default'" + project-name="ERP2_New" + view="store_business_saved" + :config="$viewConfig['store_business_saved']" + :request-url="tableRequestUrl" + :empty="query" + :table-filter-data="filterForm" + :edit-item-input="editItemInput" + :summaryMethod="summaryMethod" + :head-selection="false" + :pageSize="10" + ref="erpTable" + :height="scope.height" + size="mini" + class="business-saved-default" + > + <template slot="savAmt" slot-scope="scope"> + {{ formatMoney(scope.row['savAmt'], 4) }} + </template> + <template slot="realTicketAmt" slot-scope="scope"> + {{ formatMoney(scope.row['realTicketAmt'], 4) }} + </template> + <template slot="limitTicketAmt" slot-scope="scope"> + {{ formatMoney(scope.row['limitTicketAmt'], 4) }} + </template> + <template slot="largessTickAmt" slot-scope="scope"> + {{ formatMoney(scope.row['largessTickAmt'], 4) }} + </template> + <template slot="recAmt" slot-scope="scope"> + {{ formatMoney(scope.row['recAmt'], 4) }} + </template> + <template slot="monAmt" slot-scope="scope"> + {{ formatMoney(scope.row['monAmt'], 4) }} + </template> + <template slot="recMonAmt" slot-scope="scope"> + {{ formatMoney(scope.row['recMonAmt'], 4) }} + </template> + <template slot="remark" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="false" v-model="scope.row['remark']"></pagoda-remark-cell> + </template> + <template slot="appRemark" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="false" v-model="scope.row['appRemark']"></pagoda-remark-cell> + </template> + </pagoda-erp-table-v2> + </template> + </pagoda-erp-form-table> +</template> + +<script> + import {mapState} from 'vuex' + import searchCommon from '@/mixins/formSearchCommon' + import publicChoice from '@/views/business/publicChoice' + import { formLabelWidth, remarkMaxlength } from '@/utils/default-setting' + import { formatDate, formatMoney, formatMoneyToNumber } from '@/utils/utils' + + export default { + name: 'business-saved', + mixins: [searchCommon], + components: { + }, + data () { + return { + tableRequestUrl: `${this.AjaxService.devUrl1}/StoreBusinessMoneyService/viewList`, + formLabelWidth, + remarkMaxlength, + formatMoney, + formData: {}, + formOptions: [ + { + label: '客户代码', + type: 'bdc-select', + key: 'cusOrgCode', + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectOrgCusVenInfoByAuthority?type=35`, + labelKey: 'code', + valueKey: 'code', + clearable: true, + remote: 'cusOrgName' + } + }, + { + label: '营业日期', + type: 'date-picker', + key: 'date', + props: { + type: 'daterange' + } + }, + { + label: '是否有图', + type: 'select', + key: 'existPicture', + options: publicChoice.hasPic, + props: { + clearable: true + } + }, + { + label: '状态', + type: 'select', + key: 'status', + options: publicChoice.documentStatusOptions, + props: { + clearable: true + } + }, + { + label: '存款银行账户名称', + type: 'bdc-select', + key: 'bankAccName', + props: { + url: `${this.AjaxService.devUrl2}/BasStoreAccountService/selectBankAccNoAndName`, + labelKey: 'bankAccName', + valueKey: 'bankAccName', + clearable: true, + remote: 'bankAccName' + } + } + ], + filterForm: {}, + editColumnConfig: { + label: '操作', + width: '150', + fixed: 'right' + }, + editItemInput: { + businessDate: function (value, rowData) { + if (value !== '') { + rowData.corSalesDate = formatDate(value.getTime() - 24*60*60*1000) + } + }, + cusOrgCode: function (value, selectData, rowData) { + rowData.cusOrgName = selectData.name + rowData.cusOrgId = selectData.id + }, + bankAccName: function (value, selectData, rowData) { + rowData.accountId = selectData.id + rowData.bankAccNo = selectData.bankAccNo + } + }, + rowBtns: { + // 表格上方操作按钮 + add: { + text: '新增', + onClick: () => { + // 切换按钮状态 + this.action = 'add' + this.$refs.erpTableAdd.refreshCurrentPage() + this.$nextTick(() => { + this.editColumnConfig.setBtnGroup = (row) => { + return [{ + type: 'text', + text: '删除', + onClick: () => { + this.$refs.erpTableAdd.delRows(row.$index) + } + }] + } + const props = ['type', 'status'] + setTimeout(() => { + this.$refs.erpTableAdd.$refs.tableRef.tableData.head.forEach((item) => { + if (props.includes(item.prop)) { + item.constraint = '' + } + }) + }, 0) + this.$refs.erpTableAdd.newRows([{ + businessDate: new Date(), + monAmt: '0.0000', + savAmt: '0.0000', + recMonAmt: '0.0000', + corSalesDate: new Date(new Date().getTime() - 24*60*60*1000) + }]) + }) + } + }, + save: { + text: '保存', + onClick: () => { + let params = {} + if (this.action === 'add') { + const addList = [] + const table = this.$refs.erpTableAdd + // 校验是否为空 + if (table.validateEditingItems()) { + // 构造请求参数 + const list = table.$refs.tableRef.tableData.data + list.map((item) => { + const obj = { + accountId: item.accountId, + bankAccName: item.bankAccName, + bankAccNo: item.bankAccNo, + businessDate: formatDate(item.businessDate), + corSalesDate: formatDate(item.corSalesDate), + cusOrgCode: item.cusOrgCode, + cusOrgId: item.cusOrgId, + cusOrgName: item.cusOrgName, + monAmt: item.monAmt, + savAmt: item.savAmt, + recMonAmt: item.recMonAmt, + remark: item.remark + } + addList.push(obj) + }) + params = { + addList: addList + } + this.BusinessService.addBusinessSaved(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('新增成功!') + // 重新刷新表格 + this.handleRefresh() + } else { + const msg = res.errorMsg + this.$message.error(msg ? `新增失败:${msg}` : `新增失败`) + } + }) + } else { + this.$message.error('请填写完整必填信息!') + } + } else if (this.action === 'edit-received') { + const editList = [] + const table = this.$refs.erpTableEditReceived + // 校验是否为空 + if (table.validateEditingItems()) { + // 构造请求参数 + const list = table.$refs.tableRef.tableData.data + list.map((item) => { + const obj = { + id: item.id, + accountId: item.accountId, + bankAccName: item.bankAccName, + bankAccNo: item.bankAccNo, + businessDate: formatDate(item.businessDate), + corSalesDate: formatDate(item.corSalesDate), + cashierEmpName: item.cashierEmpName, + cashierEmpNo: item.cashierEmpNo, + cashierUserCode: item.cashierUserCode, + cashierUserName: item.cashierUserName, + payInImage: item.payInImage, + realTicketAmt: formatMoneyToNumber(item.realTicketAmt), + limitTicketAmt: formatMoneyToNumber(item.limitTicketAmt), + largessTickAmt: formatMoneyToNumber(item.largessTickAmt), + cusOrgCode: item.cusOrgCode, + cusOrgId: item.cusOrgId, + cusOrgName: item.cusOrgName, + monAmt: formatMoneyToNumber(item.monAmt), + recAmt: formatMoneyToNumber(item.recAmt), + recMonAmt: formatMoneyToNumber(item.recMonAmt), + remark: item.remark + } + editList.push(obj) + }) + params = { + editList: editList + } + this.BusinessService.editBusinessReceived(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('修改成功!') + // 重新刷新表格 + this.handleRefresh() + } else { + const msg = res.errorMsg + this.$message.error(msg ? `修改失败:${msg}` : `修改失败`) + } + }) + } + }else if (this.action === 'edit-saved') { + const editList = [] + const table = this.$refs.erpTableEditSaved + // 校验是否为空 + if (table.validateEditingItems()) { + // 构造请求参数 + const list = table.$refs.tableRef.tableData.data + list.map((item) => { + const obj = { + id: item.id, + accountId: item.accountId, + bankAccName: item.bankAccName, + bankAccNo: item.bankAccNo, + businessDate: formatDate(item.businessDate), + corSalesDate: formatDate(item.corSalesDate), + cusOrgCode: item.cusOrgCode, + cusOrgId: item.cusOrgId, + cusOrgName: item.cusOrgName, + monAmt: formatMoneyToNumber(item.monAmt), + savAmt: formatMoneyToNumber(item.savAmt), + recMonAmt: formatMoneyToNumber(item.recMonAmt), + remark: item.remark + } + editList.push(obj) + }) + params = { + editList: editList + } + this.BusinessService.editBusinessSaved(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('修改成功!') + // 重新刷新表格 + this.handleRefresh() + } else { + const msg = res.errorMsg + this.$message.error(msg ? `修改失败:${msg}` : `修改失败`) + } + }) + } else { + this.$message.error('请填写完整必填信息!') + } + } + } + }, + cancel: { + text: '取消', + confirm: '当前界面操作数据不保留,是否取消,确认后返回列表!', + onClick: () => { + this.handleRefresh() + } + }, + addCol: { + text: '新增行', + onClick: () => { + // 添加一行可编辑行 + const table = this.$refs.erpTableAdd.$refs.tableRef + this.$nextTick(() => { + table.newRows([{ + businessDate: new Date(), + monAmt: '0.0000', + savAmt: '0.0000', + recMonAmt: '0.0000', + corSalesDate: new Date(new Date().getTime() - 24*60*60*1000) + }]) + }) + } + }, + delCol: { + text: '删除行', + onClick: () => { + const table = this.$refs.erpTableAdd.$refs.tableRef + const selection = table.selection + if (!selection || selection.length === 0) { + this.$message.error('请选择项目') + } else { + const indexs = [] + for (let i = 0; i < selection.length; i++) { + indexs.push(selection[i].$index) + } + table.delRows(indexs) + } + } + }, + edit: { + text: '修改', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + if (selection.length > 0) { + if (selection.filter(item => item.status > 20).length > 0) { + this.$message.error('只能修改已完成状态和未提交状态的项目') + return + } + // 三种选择状态 + // 全为实收 + if (selection.filter(item => item.type === '10').length === selection.length) { + selection.forEach(item => { + item.recAmt = formatMoney(item.recAmt, 4) + item.realTicketAmt = formatMoney(item.realTicketAmt, 4) + item.limitTicketAmt = formatMoney(item.limitTicketAmt, 4) + item.largessTickAmt = formatMoney(item.largessTickAmt, 4) + item.monAmt = formatMoney(item.monAmt, 4) + item.recMonAmt = formatMoney(item.recMonAmt, 4) + }) + // 切换按钮状态 + this.action = 'edit-received' + // 打开选中行可编辑行 + // 去除编辑时无需修改项的规则 + const props = ['type', 'cusOrgCode', 'cashierUserCode', 'cashierUserName', 'cashierEmpNo', 'cashierEmpName', 'status'] + this.$refs.erpTableEditReceived.refreshCurrentPage() + this.$nextTick(() => { + this.$refs.erpTableEditReceived.$refs.tableRef.tableData.head.forEach((item) => { + if (props.includes(item.prop)) { + item.constraint = '' + } + }) + this.$refs.erpTableEditReceived.newRows(selection) + }) + } else if (selection.filter(item => item.type === '20').length === selection.length) { + selection.forEach(item => { + item.savAmt = formatMoney(item.savAmt, 4) + item.monAmt = formatMoney(item.monAmt, 4) + item.recMonAmt = formatMoney(item.recMonAmt, 4) + }) + // 切换按钮状态 + this.action = 'edit-saved' + // 打开选中行可编辑行 + // 去除编辑时无需修改项的规则 + const props = ['type', 'cusOrgCode', 'status'] + this.$refs.erpTableEditSaved.refreshCurrentPage() + this.$nextTick(() => { + this.$refs.erpTableEditSaved.$refs.tableRef.tableData.head.forEach((item) => { + if (props.includes(item.prop)) { + item.constraint = '' + } + }) + this.$refs.erpTableEditSaved.newRows(selection) + }) + } else { + this.$message.error('只能选择一种类型:实收或实存') + } + } else { + this.$message.error('请选择项目') + } + } + }, + delete: { + text: '删除', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + if (!selection || selection.length === 0) { + this.$message.error('请选择项目') + } else { + const idList = [] + selection.forEach(item => { + idList.push(item.id) + }) + const params = { + idList: idList + } + this.BusinessService.deleteBusinessReceivedOrSaved(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('删除成功!') + // 重新刷新表格 + this.handleRefresh() + } else { + const msg = res.errorMsg + this.$message.error(msg ? `删除失败:${msg}` : `删除失败`) + } + }) + } + } + }, + import: { + text: '导入', + onClick: () => { + this.$message.success(`导入成功!`) + } + }, + export: { + text: '导出', + onClick: () => { + this.$message.success(`导出成功!`) + } + }, + complete: { + text: '完成', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + if (!selection || selection.length === 0) { + this.$message.error('请选择项目') + } else { + if (selection.filter(item => item.status === 10).length === selection.length) { + const editList = [] + selection.forEach(item => { + editList.push({ + id: item.id, + newStatus: 20 + }) + }) + const params = { + editList: editList + } + this.BusinessService.setBusinessStatus(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('完成操作成功!') + // 重新刷新表格 + this.handleRefresh() + } else { + const msg = res.errorMsg + this.$message.error(msg ? `完成操作失败:${msg}` : `完成操作失败`) + } + }) + } else { + this.$message.error('只能修改未提交状态的项目的状态') + } + } + } + }, + cancelComplete: { + text: '取消完成', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + if (!selection || selection.length === 0) { + this.$message.error('请选择项目') + } else { + if (selection.filter(item => item.status === 20).length === selection.length) { + const editList = [] + selection.forEach(item => { + editList.push({ + id: item.id, + newStatus: 10 + }) + }) + const params = { + editList: editList + } + this.BusinessService.setBusinessStatus(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('取消完成操作成功!') + // 重新刷新表格 + this.handleRefresh() + } else { + const msg = res.errorMsg + this.$message.error(msg ? `取消完成操作失败:${msg}` : `取消完成操作失败`) + } + }) + } else { + this.$message.error('只能修改已完成状态的项目的状态') + } + } + } + }, + }, + action: 'default', + query: true, + tableData: {}, + summaryMethod: {}, + onMethod: {} + } + }, + created () { + }, + mounted () { + this.doLayout() + const props = ['recAmt', 'realTicketAmt', 'limitTicketAmt', 'largessTickAmt', 'savAmt', 'monAmt', 'recMonAmt'] + const summaryMethod = {} + const onMethod = {} + props.forEach(item => { + // 添加列表小计方法 + summaryMethod[item] = (tableData) => { + return this.summaryFunction(tableData, item) + } + onMethod[item] = { + blur: (event) => { + let value = event.target.value + // 格式化输入的值 + value = parseFloat(formatMoneyToNumber(value), 10) + event.target.value = formatMoney(value, 4) + // 重新计算合计 + if (this.action === 'add') { + this.$refs.erpTableAdd.pageTotal() + } else if (this.action === 'edit-received') { + this.$refs.erpTableEditReceived.pageTotal() + } else if (this.action === 'edit-saved') { + this.$refs.erpTableEditSaved.pageTotal() + } + } + } + }) + this.summaryMethod = summaryMethod + this.onMethod = onMethod + }, + methods: { + doLayout () { + this.$refs.erpFormTabel.doLayout() + }, + submit () { + if (this.query) { + this.query = false + this.$refs.erpTable.refreshCurrentPage() + } + // table筛选 + let reqData = { + bankAccName: this.formData.bankAccName, + businessDateStrat: this.formData.date ? formatDate(this.formData.date[0], 'startTime') : undefined, + businessDateEnd: this.formData.date ? formatDate(this.formData.date[1], 'endTime') : undefined, + cusOrgCode: this.formData.cusOrgCode, + status: this.formData.status, + existPicture: this.formData.existPicture + } + this.filterForm = Object.assign({}, reqData) + }, + handleRefresh () { + // 切换按钮状态 + this.action = 'default' + // 重新刷新表格 + this.editColumnConfig.setBtnGroup = (row) => { + return [] + } + this.$refs.erpTable.refreshCurrentPage() + }, + summaryFunction(tableData, key) { + let sum = 0 + tableData.forEach(item => { + sum += formatMoneyToNumber(item[key]) + }) + return formatMoney(sum, 4) + } + }, + computed: { + ...mapState(['role']), + btnVisibles () { + let btnsObj = { + 'add': ['cancel', 'save', 'addCol', 'delCol'], + 'edit-saved': ['cancel', 'save'], + 'edit-received': ['cancel', 'save'], + 'default': ['add', 'edit', 'delete', 'import', 'export', 'complete', 'cancelComplete'] + } + return btnsObj[this.action] + } + } + } +</script> +<style lang="stylus"> + .business-saved-default { + .rec-amt, .real-ticket-amt, .limit-ticket-amt, .largess-tick-amt, .mon-amt, .rec-mon-amt, .sav-amt { + text-align right + } + } +</style> diff --git a/template/src/views/business/storeSavedAudit.vue b/template/src/views/business/storeSavedAudit.vue new file mode 100644 index 0000000000..2c528195e1 --- /dev/null +++ b/template/src/views/business/storeSavedAudit.vue @@ -0,0 +1,273 @@ +<template> + <pagoda-erp-form-table + v-model="formData" + :form-options="formOptions" + :label-width="formLabelWidth" + ref="erpFormTabel" + @submit="submit" + > + <template slot="monthDifference"> + <div slot="prepend">大于</div> + </template> + <template slot="table-btns"> + <pagoda-row-btns :btns="rowBtns" :visibles="btnVisibles"></pagoda-row-btns> + </template> + <template slot="table" slot-scope="scope"> + <pagoda-erp-table-v2 + dev + project-name="ERP2_New" + view="store_saved_audit" + :config="$viewConfig['store_saved_audit']" + :request-url="tableRequestUrl" + :empty="query" + :table-filter-data="filterForm" + :summaryMethod="summaryMethod" + :head-selection="false" + :pageSize="10" + ref="erpTable" + :height="scope.height" + size="mini" + class="store-saved-audit-list" + > + <template slot="monAmt" slot-scope="scope"> + {{ formatMoney(scope.row['monAmt'], 4) }} + </template> + <template slot="recMonAmt" slot-scope="scope"> + {{ formatMoney(scope.row['recMonAmt'], 4) }} + </template> + <template slot="savAmt" slot-scope="scope"> + {{ formatMoney(scope.row['savAmt'], 4) }} + </template> + <template slot="remark" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="false" v-model="scope.row['remark']"></pagoda-remark-cell> + </template> + <template slot="appRemark" slot-scope="scope"> + <pagoda-remark-cell text="编辑财务注明" :maxlength="remarkMaxlength" :editable="scope.row['status'] === 20 ? true : false" v-model="scope.row['appRemark']"></pagoda-remark-cell> + </template> + </pagoda-erp-table-v2> + </template> + </pagoda-erp-form-table> +</template> + +<script> + import {mapState} from 'vuex' + import searchCommon from '@/mixins/formSearchCommon' + import publicChoice from '@/views/business/publicChoice' + import { formLabelWidth, remarkMaxlength } from '@/utils/default-setting' + import { formatDate, formatMoney, formatMoneyToNumber } from '@/utils/utils' + + export default { + name: 'store-saved-audit', + mixins: [searchCommon], + components: { + }, + data () { + return { + tableRequestUrl: `${this.AjaxService.devUrl1}/StoreBusinessMoneyService/viewSaveAuditList`, + formLabelWidth, + remarkMaxlength, + formatMoney, + formData: {}, + formOptions: [ + { + label: '客户代码', + type: 'bdc-select', + key: 'cusOrgCode', + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectOrgCusVenInfoByAuthority?type=35`, + labelKey: 'code', + valueKey: 'code', + clearable: true, + remote: 'cusOrgName' + } + }, + { + label: '营业日期', + type: 'date-picker', + key: 'date', + props: { + type: 'daterange' + } + }, + { + label: '实存金额', + type: 'input-range', + key: 'savAmt', + props: { + clearable: true + } + }, + { + label: '存款银行账户名称', + type: 'bdc-select', + key: 'bankAccName', + props: { + url: `${this.AjaxService.devUrl2}/BasStoreAccountService/selectBankAccNoAndName`, + labelKey: 'bankAccName', + valueKey: 'bankAccName', + clearable: true, + remote: 'bankAccName' + } + }, + { + label: '实存差额', + type: 'input-range', + key: 'difference', + props: { + clearable: true + } + }, + { + label: '月累计实存差额 ', + type: 'input', + key: 'monthDifference' + }, + { + label: '状态', + type: 'select', + key: 'status', + options: publicChoice.documentStatusOptions, + props: { + clearable: true + } + } + ], + filterForm: {}, + rowBtns: { + audit: { + text: '审核', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + if (!selection || selection.length === 0) { + this.$message.error('请选择项目') + } else { + if (selection.filter(item => item.status === 20).length === selection.length) { + const editList = [] + selection.forEach(item => { + editList.push({ + id: item.id, + appRemark: item.appRemark, + newStatus: 40 + }) + }) + const params = { + editList: editList + } + this.BusinessService.setBusinessStatus(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('批量审核操作成功!') + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量审核操作失败:${msg}` : `批量审核操作失败`) + } + }) + } else { + this.$message.error('只能选择一种状态:已完成') + } + } + } + }, + cancelAudit: { + text: '取消审核', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + if (!selection || selection.length === 0) { + this.$message.error('请选择项目') + } else { + if (selection.filter(item => item.status === 40).length === selection.length) { + const editList = [] + selection.forEach(item => { + editList.push({ + id: item.id, + appRemark: '', + newStatus: 20 + }) + }) + const params = { + editList: editList + } + this.BusinessService.setBusinessStatus(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('批量取消审核操作成功!') + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量取消审核操作失败:${msg}` : `批量取消审核操作失败`) + } + }) + } else { + this.$message.error('只能选择一种状态:实存审核') + } + } + } + } + }, + tableData: {}, + summaryMethod: {}, + query: true + } + }, + created () { + }, + mounted () { + this.doLayout() + const props = ['savAmt', 'monAmt', 'recMonAmt'] + const summaryMethod = {} + props.forEach(item => { + // 添加列表小计方法 + summaryMethod[item] = (tableData) => { + return this.summaryFunction(tableData, item) + } + }) + this.summaryMethod = summaryMethod + }, + methods: { + doLayout () { + this.$refs.erpFormTabel.doLayout() + }, + submit () { + if (this.query) { + this.query = false + this.$refs.erpTable.refreshCurrentPage() + } + // table筛选 + let reqData = { + bankAccName: this.formData.bankAccName, + businessDateStrat: this.formData.date ? formatDate(this.formData.date[0], 'startTime') : undefined, + businessDateEnd: this.formData.date ? formatDate(this.formData.date[1], 'endTime') : undefined, + cusOrgCode: this.formData.cusOrgCode, + status: this.formData.status, + savAmtMax: this.formData.savAmt ? this.formData.savAmt[0] : undefined, + savAmtMin: this.formData.savAmt ? this.formData.savAmt[0] : undefined, + difference: this.formData.difference + } + this.filterForm = Object.assign({}, reqData) + }, + summaryFunction(tableData, key) { + let sum = 0 + tableData.forEach(item => { + sum += formatMoneyToNumber(item[key]) + }) + return formatMoney(sum, 4) + } + }, + computed: { + ...mapState(['role']), + btnVisibles () { + return ['audit', 'cancelAudit'] + } + } + } +</script> +<style lang="stylus"> + .store-saved-audit-list { + .mon-amt, .rec-mon-amt, .sav-amt { + text-align right + } + } +</style> diff --git a/template/src/views/common/advanced-search-common.vue b/template/src/views/common/advanced-search-common.vue new file mode 100644 index 0000000000..d58731fb55 --- /dev/null +++ b/template/src/views/common/advanced-search-common.vue @@ -0,0 +1,91 @@ +<template> +<!-- 该组件仅做demo展示,具体视场景进行封装改良 --> +<el-tabs v-model="activeTab" type="card"> + <el-tab-pane label="条件查询" name="1"> + <pagoda-form-group :form-options="formOptions" v-model="formData" inline> + <el-button type="primary" @click="tableFilterData = Object.assign({}, formData)">查询</el-button> + </pagoda-form-group> + <pagoda-table :request="request" selection-column="single" :table-filter-data="tableFilterData" @selection-change="handleSelectChange" ref="selectGoodsTable"> + </pagoda-table> + <div class="fz12 text-gray">是否多选视场景而定</div> + <pagoda-row-btns class="text-center mt-20" :btns="rowBtnsTmpl" :visibles="btnVisibles"></pagoda-row-btns> + </el-tab-pane> + <el-tab-pane label="分组筛选" name="2"> + <advanced-search-groups @confirm="$emit('confirm', $event)" @cancel="$emit('cancel')"></advanced-search-groups> + </el-tab-pane> +</el-tabs> +</template> + +<script> +export default { + data() { + return { + activeTab: '1', + formData: {}, + tableFilterData: {}, + selection: null, + formOptions: [{ + label: '商品名称', + key: 'key', + type: 'input' + }], + rowBtnsTmpl: { + confirm: { + type: 'primary', + text: '确定', + onClick: () => { + // console.log(this.selection) + if (!this.selection || this.selection.length === 0) { + this.$message.error('请选择') + return + } + this.$emit('confirm', this.selection.map(el => el.code)) + } + }, + cancel: { + text: '取消', + onClick: () => { + this.$emit('cancel') + } + } + }, + btnVisibles: ['confirm', 'cancel'] + } + }, + props: {}, + created() {}, + mounted() { + + }, + watch: {}, + methods: { + request(tableFilterData) { + return new Promise(resolve => { + this.AjaxService.get('order/tb_req_orderService/goods/list?resourceTagCode=purchaseGoods&key=' + (tableFilterData.key || '')) + .then(res => { + console.log(res) + resolve({ + head: [{ + label: '商品代码', + prop: 'code' + }, { + label: '商品名称', + prop: 'name' + }], + data: res.data.slice(0, 10) + }) + }) + }) + }, + handleSelectChange(selection) { + console.log(selection) + this.selection = selection + } + }, + computed: {} +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="stylus"> +</style> diff --git a/template/src/views/common/dialog-remark.vue b/template/src/views/common/dialog-remark.vue new file mode 100644 index 0000000000..09c964ae38 --- /dev/null +++ b/template/src/views/common/dialog-remark.vue @@ -0,0 +1,80 @@ +<template> + <el-dialog v-bind="$attrs" :title="title" :visible.sync="visibleTmpl" :before-close="beforeClose"> + <el-input + type="textarea" + :rows="4" + resize="none" + v-model="remark"> + </el-input> + <pagoda-row-btns class="text-center mt-10" :btns="rowBtnsTmpl" :visibles="btnVisibles"></pagoda-row-btns> + </el-dialog> +</template> + +<script> +export default { + data () { + return { + remark: '', + visibleTmpl: this.visible, + rowBtnsTmpl: { + save: { + type: 'primary', + text: '保存', + onClick: () => { + this.$emit('save', this.remark) + } + }, + cancel: { + text: '取消', + type: 'text', + onClick: () => { + this.$emit('update:visible', false) + this.$emit('cancel', this.remark) + } + } + } + } + }, + props: { + title: String, + visible: { + type: Boolean, + default: false + }, + rowBtns: Object, + btnVisibles: { + type: Array, + default: () => { + return ['save', 'cancel'] + } + } + }, + created () { + if (this.rowBtns) { + this.rowBtnsTmpl = this.this.rowBtns + } + }, + mounted () { + }, + watch: { + visible (n) { + console.log(n) + this.remark = '' + this.visibleTmpl = n + } + }, + methods: { + beforeClose (done) { + console.log('要关闭了') + this.$emit('update:visible', false) + done() + } + }, + computed: { + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="stylus"> +</style> diff --git a/template/src/views/common/form-group-btns.vue b/template/src/views/common/form-group-btns.vue new file mode 100644 index 0000000000..c629bc1012 --- /dev/null +++ b/template/src/views/common/form-group-btns.vue @@ -0,0 +1,34 @@ +<template> + <div class="form-group-btns mb-20" :style="{'padding-left': formLabelWidth}"> + <el-button type="primary" @click="submit">查询</el-button> + <el-button type="warning" @click="reset">重置</el-button> + </div> +</template> + +<script> +import { formLabelWidth } from '@/utils/default-setting' +export default { + data () { + return { + formLabelWidth + } + }, + methods: { + submit () { + this.$emit('submit') + }, + reset () { + this.$emit('reset') + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="stylus"> +// 筛选表单按钮组统一样式 +.form-group-btns + text-align left + padding 0px 0 15px 40px + border-bottom 1px solid #ebeff2 +</style> diff --git a/template/src/views/common/goods-detail.vue b/template/src/views/common/goods-detail.vue new file mode 100644 index 0000000000..986a77f338 --- /dev/null +++ b/template/src/views/common/goods-detail.vue @@ -0,0 +1,42 @@ +<template> + <div> + <pagoda-erp-table + service="order" + model="goods_detail" + :head-selection="false" + :selection-column="false" + ref="erpTable" + :fit="true" + size="mini" + :table-filter-data="filterData" + > + </pagoda-erp-table> + </div> +</template> + +<script> +export default { + data () { + return { + } + }, + props: { + filterData: null + }, + created () { + }, + mounted () { + + }, + watch: { + }, + methods: { + }, + computed: { + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="stylus"> +</style> diff --git a/template/src/views/expenses/classes.vue b/template/src/views/expenses/classes.vue new file mode 100644 index 0000000000..90fd55f96a --- /dev/null +++ b/template/src/views/expenses/classes.vue @@ -0,0 +1,445 @@ +<template> + <pagoda-erp-form-table + v-model="formData" + :form-options="formOptions" + :label-width="formLabelWidth" + ref="erpFormTabel" + @submit="submit" + > + <template slot="table-btns"> + <pagoda-row-btns :btns="rowBtns" :visibles="btnVisibles"></pagoda-row-btns> + </template> + <template slot="table" slot-scope="scope"> + <pagoda-erp-table-v2 + v-show="action === 'add'" + project-name="ERP2_New" + view="payee_classes_maintenance" + :config="$viewConfig['payee_classes_maintenance']" + :default-data="[]" + :default-editing="true" + :edit-column-config="editColumnConfig" + :edit-item-input="editItemInput" + :head-selection="false" + :pagination="false" + ref="erpTableAdd" + :column-filter="false" + :height="scope.height" + size="mini" + class="base-list" + > + <template slot="remark" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="true" v-model="scope.row['remark']"></pagoda-remark-cell> + </template> + </pagoda-erp-table-v2> + <pagoda-erp-table-v2 + v-show="action === 'edit'" + project-name="ERP2_New" + view="payee_classes_maintenance" + :config="$viewConfig['payee_classes_maintenance']" + empty + :edit-item-input="editItemInput" + :head-selection="false" + :pagination="false" + ref="erpTableEdit" + :height="scope.height" + size="mini" + class="base-list" + :column-filter="false" + > + <template slot="remark" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="true" v-model="scope.row['remark']"></pagoda-remark-cell> + </template> + </pagoda-erp-table-v2> + <pagoda-erp-table-v2 + v-show="action === 'default'" + project-name="ERP2_New" + view="payee_classes_maintenance" + :config="$viewConfig['payee_classes_maintenance']" + :request-url="tableRequestUrl" + :empty="query" + :table-filter-data="filterForm" + :edit-item-input="editItemInput" + :head-selection="false" + :pageSize="10" + ref="erpTable" + :height="scope.height" + size="mini" + class="base-list" + > + <template slot="remark" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="false" v-model="scope.row['remark']"></pagoda-remark-cell> + </template> + </pagoda-erp-table-v2> + <el-dialog :title="dialog.title" :visible.sync="dialog.show" width="600px"> + <h4 v-if="dialog.note !== ''">{{dialog.note}}</h4> + <el-table :data="dialog.data" border> + <el-table-column property="name" label="费用类型" width="150"></el-table-column> + <el-table-column property="result" label="失败原因"></el-table-column> + </el-table> + </el-dialog> + </template> + </pagoda-erp-form-table> +</template> + +<script> +import {mapState} from 'vuex' +import searchCommon from '@/mixins/formSearchCommon' +import publicChoice from '@/views/expenses/publicChoice' +import { formLabelWidth, remarkMaxlength } from '@/utils/default-setting' +import { formatDate } from '@/utils/utils' + +export default { + name: 'classes', + mixins: [searchCommon], + components: { + }, + data () { + return { + tableRequestUrl: `${this.AjaxService.devUrl2}/BasCostCatService/findByPreParam`, + formLabelWidth, + remarkMaxlength, + formData: {}, + formOptions: [ + { + label: '类别代码', + type: 'input', + key: 'code' + }, + { + label: '费用类别', + type: 'input', + key: 'name' + }, + { + label: '费用类型', + type: 'select', + key: 'costType', + options: publicChoice.classesTypeOptions, + props: { + clearable: true + } + }, + { + label: '状态', + type: 'select', + key: 'isEnabled', + options: publicChoice.stateOptions, + props: { + clearable: true + } + }, + { + label: '录入日期', + type: 'date-picker', + key: 'date', + props: { + type: 'daterange' + } + } + ], + filterForm: {}, + editColumnConfig: { + label: '操作', + width: '150', + fixed: 'right' + }, + editItemInput: { + costTypeName: function (value, rowData) { + rowData.costType = publicChoice.classesTypeOptions.filter(item => item.label === value)[0].value + } + }, + rowBtns: { + // 表格上方操作按钮 + add: { + text: '新增', + onClick: () => { + // 切换按钮状态 + this.action = 'add' + this.$refs.erpTableAdd.refresh() + this.$nextTick(() => { + this.editColumnConfig.setBtnGroup = (row) => { + return [{ + type: 'text', + text: '删除', + onClick: () => { + this.$refs.erpTableAdd.delRows(row.$index) + } + }] + } + this.$refs.erpTableAdd.newRows([{}]) + }) + } + }, + save: { + text: '保存', + onClick: () => { + const params = [] + if (this.action === 'add') { + const table = this.$refs.erpTableAdd + // 校验是否为空 + if (table.validateEditingItems()) { + // 构造请求参数 + const list = table.$refs.tableRef.tableData.data + list.map((item) => { + const obj = { + code: item.code, + costType: item.costType, + createdAt: formatDate(new Date()), + isEnabled: item.isEnabled, + name: item.name, + remark: item.remark, + lastModifiedAt: formatDate(new Date()), + costTypeName: item.costTypeName + } + params.push(obj) + }) + this.PayeeService.addClass(params, true).then((res) => { + console.log(res.resultCode) + if (res.resultCode === 0) { + this.$message.success('添加成功!') + // 重新刷新表格 + this.handleRefresh() + } else { + const msg = res.errorMsg + this.$message.error(msg ? `添加失败:${msg}` : `添加失败`) + } + }) + } else { + this.$message.error('请填写完整必填信息!') + } + } else if (this.action === 'edit') { + const table = this.$refs.erpTableEdit + // 校验是否为空 + if (table.validateEditingItems()) { + const list = table.$refs.tableRef.tableData.data + list.forEach(item => { + // 排除所有引用项目 + if (item.isEnabled !== 1) { + // 构造请求参数 + const obj = { + id: item.id, + code: item.code, + costType: item.costType, + createdAt: item.createdAt, + isEnabled: item.isEnabled, + name: item.name, + version: item.version, + remark: item.remark, + lastModifiedAt: formatDate(new Date()), + costTypeName: item.costTypeName + } + params.push(obj) + } + }) + this.PayeeService.editClass(params, true).then((res) => { + console.log(res.resultCode) + if (res.resultCode === 0) { + this.$message.success('修改成功!') + // 重新刷新表格 + this.handleRefresh() + } else { + const msg = res.errorMsg + this.$message.error(msg ? `修改失败:${msg}` : `修改失败`) + } + }) + } else { + this.$message.error('请填写完整必填信息!') + } + } + } + }, + cancel: { + text: '取消', + confirm: '当前界面操作数据不保留,是否取消,确认后返回列表!', + onClick: () => { + this.handleRefresh() + } + }, + addCol: { + text: '新增行', + onClick: () => { + // 添加一行可编辑行 + const table = this.$refs.erpTableAdd.$refs.tableRef + this.$nextTick(() => { + table.newRows([{code: '', name: '', costTypeName: '', isEnabled: '', remark: ''}]) + }) + } + }, + delCol: { + text: '删除行', + onClick: () => { + const table = this.$refs.erpTableAdd.$refs.tableRef + const selection = table.selection + if (!selection || selection.length === 0) { + this.$message.error('请选择项目') + } else { + const indexs = [] + for (let i = 0; i < selection.length; i++) { + indexs.push(selection[i].$index) + } + table.delRows(indexs) + } + } + }, + edit: { + text: '修改', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + if (selection.length > 0) { + // 判断是否存在启用 + let data = [] + selection.forEach((item) => { + if (item.isEnabled === 1) { + data.push({ + name: item.name, + result: '该项目在其他环境已被启用,无法进行操作!' + }) + } + }) + if (data.length !== 0) { + this.dialog = { + title: '失败结果', + show: true, + note: '以下项目操作失败:', + data: data + } + } else { + // 切换按钮状态 + this.action = 'edit' + // 打开选中行可编辑行 + this.$refs.erpTableEdit.refresh() + this.$nextTick(() => { + this.$refs.erpTableEdit.newRows(selection) + }) + } + } else { + this.$message.error('请选择项目') + } + } + }, + enable: { + text: '启用', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + const params = [] + if (selection.length > 0) { + for (let i = 0; i < selection.length; i++) { + params.push({ + id: selection[i].id, + version: selection[i].version, + isEnabled: 1 + }) + } + this.PayeeService.classesServiceStart(params, true).then((res) => { + console.log(res.resultCode) + if (res.resultCode === 0) { + this.$message.success('批量启用成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量启用失败:${msg}` : `批量启用失败`) + } + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + } else { + this.$message.error('请选择项目') + } + } + }, + disable: { + text: '禁用', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + const params = [] + if (selection.length > 0) { + for (let i = 0; i < selection.length; i++) { + params.push({ + id: selection[i].id, + version: selection[i].version, + isEnabled: 0 + }) + } + this.PayeeService.classesServiceStop(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('批量禁用成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量禁用失败:${msg}` : `批量禁用失败`) + } + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + } else { + this.$message.error('请选择项目') + } + } + } + }, + action: 'default', + query: true, + tableData: {}, + // 失败提示弹窗 + dialog: { + title: '', + show: false, + note: '', + data: [] + } + } + }, + created () { + }, + mounted () { + this.doLayout() + }, + methods: { + doLayout () { + this.$refs.erpFormTabel.doLayout() + }, + submit () { + if (this.query) { + this.query = false + this.$refs.erpTable.refreshCurrentPage() + } + // table筛选 + let reqData = { + code: this.formData.code, + name: this.formData.name, + costType: this.formData.costType, + isEnabled: this.formData.isEnabled, + reqDate1: this.formData.date ? formatDate(this.formData.date[0], 'startTime') : '', + reqDate2: this.formData.date ? formatDate(this.formData.date[1], 'endTime') : '' + } + this.filterForm = Object.assign({}, reqData) + console.log(this.formData) + }, + handleRefresh () { + // 切换按钮状态 + this.action = 'default' + // 重新刷新表格 + this.editColumnConfig.setBtnGroup = (row) => { + return [] + } + this.$nextTick(() => { + this.$refs.erpTable.refreshCurrentPage() + }) + } + }, + computed: { + ...mapState(['role']), + btnVisibles () { + let btnsObj = { + 'add': ['cancel', 'save', 'addCol', 'delCol'], + 'edit': ['cancel', 'save'], + 'default': ['add', 'edit', 'enable', 'disable'] + } + return btnsObj[this.action] + } + } +} +</script> +<style lang="stylus"> +</style> diff --git a/template/src/views/expenses/payee.vue b/template/src/views/expenses/payee.vue new file mode 100644 index 0000000000..fcd5675edc --- /dev/null +++ b/template/src/views/expenses/payee.vue @@ -0,0 +1,305 @@ +<template> + <pagoda-erp-form-table + v-model="formData" + :form-options="formOptions" + :label-width="formLabelWidth" + ref="erpFormTabel" + @submit="submit" + > + <template slot="table-btns"> + <pagoda-row-btns :btns="rowBtns" :visibles="btnVisibles"></pagoda-row-btns> + </template> + <template slot="table" slot-scope="scope"> + <pagoda-erp-table-v2 + dev + project-name="ERP2_New" + view="payee_info_maintenance" + :config="$viewConfig['payee_info_maintenance']" + :request-url="tableRequestUrl" + :empty="query" + :edit-column-config="editColumnConfig" + :table-filter-data="filterForm" + :head-selection="false" + :pageSize="10" + ref="erpTable" + :height="scope.height" + size="mini" + class="base-list" + > + <template slot="registerBank" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="false" v-model="scope.row['registerBank']"></pagoda-remark-cell> + </template> + <template slot="addr" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="false" v-model="scope.row['addr']"></pagoda-remark-cell> + </template> + </pagoda-erp-table-v2> + </template> + </pagoda-erp-form-table> +</template> + +<script> +import {mapState} from 'vuex' +import searchCommon from '@/mixins/formSearchCommon' +import publicChoice from '@/views/expenses/publicChoice' +import { formLabelWidth, remarkMaxlength } from '@/utils/default-setting' +import { formatDate } from '@/utils/utils' + +export default { + name: 'payee', + mixins: [searchCommon], + components: { + }, + data () { + return { + tableRequestUrl: `${this.AjaxService.devUrl1}/BasPayeeDefService/viewList`, + formLabelWidth, + remarkMaxlength, + formData: {}, + formOptions: [ + { + label: '收款人', + type: 'input', + key: 'payeeName' + }, + { + label: '开户银行', + type: 'bdc-select', + key: 'bankName', + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectLookupValueByTypeCode?code=BAS_BANK_LIST`, + labelKey: 'value', + valueKey: 'value', + clearable: true + } + }, + { + label: '省份', + type: 'bdc-select', + key: 'province', + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectDistrictLikeName?pCode=0&levelType=10`, + labelKey: 'name', + valueKey: 'name', + clearable: true, + remote: 'name' + }, + 'on': { + input: (name, selectData) => { + this.formData.city = '' + if (selectData) { + this.$nextTick(() => { + this.formOptions[3].props.params.pCode = selectData.code + this.formOptions[3].props.disabled = false + }) + } else { + this.$nextTick(() => { + this.formOptions[3].props.params.pCode = '0' + this.formOptions[3].props.disabled = true + }) + } + } + } + }, + { + label: '城市', + type: 'bdc-select', + key: 'city', + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectDistrictLikeName?levelType=20`, + params: { + pCode: '0' + }, + labelKey: 'name', + valueKey: 'name', + clearable: true, + remote: 'name', + disabled: true + } + }, + { + label: '银行账号', + type: 'bdc-select', + key: 'bankAccountNo', + props: { + url: `${this.AjaxService.devUrl1}/BasPayeeDefService/findBankAccountNoByFuzzy`, + labelKey: 'bankAccountNo', + valueKey: 'bankAccountNo', + clearable: true, + remote: 'bankAccountNo' + } + }, + { + label: '录入人', + type: 'input', + key: 'creatorName' + }, + { + label: '录入日期', + type: 'date-picker', + key: 'createdAt' + }, + { + label: '客户名称', + type: 'bdc-select', + key: 'cusOrgName', + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectOrgCusVenInfoByAuthority?type=35`, + labelKey: 'name', + valueKey: 'name', + clearable: true, + remote: 'cusOrgName' + } + }, + { + label: '状态', + type: 'select', + key: 'isEnabled', + options: publicChoice.stateOptions, + props: { + clearable: true + } + } + ], + filterForm: {}, + editColumnConfig: { + label: '操作', + width: '150', + fixed: 'right', + setBtnGroup: this.setBtnGroup + }, + rowBtns: { + // 表格上方操作按钮 + add: { + text: '新增', + onClick: () => { + this.$router.push({name: 'payeeAdd'}) + } + }, + enable: { + text: '启用', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + const ids = [] + if (selection.length > 0) { + for (let i = 0; i < selection.length; i++) { + ids.push({ + id: selection[i].id, + code: selection[i].code, + version: selection[i].version + }) + } + const params = { + idList: ids, + status: 1 + } + this.PayeeService.payeeEnabled(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('批量启用成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量启用失败:${msg}` : `批量启用失败`) + } + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + } else { + this.$message.error('请选择项目') + } + } + }, + disable: { + text: '禁用', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + const ids = [] + if (selection.length > 0) { + for (let i = 0; i < selection.length; i++) { + ids.push({ + id: selection[i].id, + code: selection[i].code, + version: selection[i].version + }) + } + const params = { + idList: ids, + status: 0 + } + this.PayeeService.payeeEnabled(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('批量禁用成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量禁用失败:${msg}` : `批量禁用失败`) + } + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + } else { + this.$message.error('请选择项目') + } + } + } + }, + gridBtns: [], + query: true + } + }, + mounted () { + this.doLayout() + }, + methods: { + doLayout () { + this.$refs.erpFormTabel.doLayout() + }, + submit () { + if (this.query) { + this.query = false + this.$refs.erpTable.refreshCurrentPage() + } + // table筛选 + let reqData = { + payeeName: this.formData.payeeName, + bankName: this.formData.bankName, + province: this.formData.province, + city: this.formData.city, + bankAccountNo: this.formData.bankAccountNo, + creatorName: this.formData.creatorName, + createdAt: this.formData.createdAt === '' ? formatDate(this.formData.createdAt) : undefined, + cusOrgName: this.formData.cusOrgName, + isEnabled: this.formData.isEnabled + } + this.filterForm = Object.assign({}, reqData) + }, + setBtnGroup (row) { + let editBtn = { + text: '修改', + type: 'text', + props: { + disabled: row.data.isEnabled === 1 ? true : false + }, + onClick: (e, btnSelf, currentRowBtns) => { + this.$router.push({name: 'payeeUpdate', params: {id: row.data.id}}) + } + } + let checkBtn = { + text: '详情', + type: 'text', + onClick: (e, btnSelf, currentRowBtns) => { + this.$router.push({ name: 'payeeDetail', params: {id: row.data.id} }) + } + } + return [checkBtn, editBtn] + } + }, + computed: { + ...mapState(['role']), + btnVisibles () { + return ['add', 'enable', 'disable'] + } + } +} +</script> +<style lang="stylus"> +</style> diff --git a/template/src/views/expenses/payee/add.vue b/template/src/views/expenses/payee/add.vue new file mode 100644 index 0000000000..95a103e04e --- /dev/null +++ b/template/src/views/expenses/payee/add.vue @@ -0,0 +1,282 @@ +<template> +<div class="payee_add"> + <pagoda-row-btns class="mb-10" :btns="rowBtns" :visibles="btnVisibles"> + </pagoda-row-btns> + <pagoda-edit-form-table ref="editFormTable" :form-options="tableData" :editable="editable" :config="config"> + </pagoda-edit-form-table> +</div> +</template> + +<script> +import { + remarkMaxlength, +} from '@/utils/default-setting' +import publicChoice from '@/views/expenses/publicChoice' + +export default { + name: 'payee_add', + data() { + return { + remarkMaxlength, + loading: true, + rowBtns: { + cancel: { + text: '取消', + onClick: this.handleCancel, + confirm: '当前界面操作数据不保留,是否取消,确认后返回列表!' + }, + save: { + text: '保存', + onClick: this.handleSave + } + }, + tableData: [], // createTable详情单table专用 + config: { + column: 3 // 一行放3列(label+value) + }, + editable: true, + tableObjData: null, + cusOrg: {} // 存储选中的客户信息 + } + }, + mounted() { + // 初始化 + this.setTableData() + }, + methods: { + setTableData() { + this.loading = false + // 第一行 + let code = { + title: '收款人代码', + value: '自动生成', + type: 'text', + key: 'code' + } + let payeeName = { + title: '收款人', + value: '', + type: 'input', + key: 'payeeName', + required: true, + rules: { + required: true, + msg: '请输入收款人' + } + } + let bankName = { + title: '开户银行', + value: '', + type: 'bdc-select', + key: 'bankName', + required: true, + rules: { + required: true, + msg: '请选择开户银行' + }, + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectLookupValueByTypeCode?code=BAS_BANK_LIST`, + labelKey: 'value', + valueKey: 'value', + clearable: true + } + } + // 第二行 + let registerBank = { + title: '银行支行', + value: '', + type: 'remark', + key: 'registerBank', + required: true, + rules: { + required: true, + msg: '请输入银行支行' + }, + props: { + text: '修改银行支行', + editable: true, + maxlength: remarkMaxlength + } + } + let province = { + title: '所在省份', + value: '', + type: 'bdc-select', + key: 'province', + required: true, + rules: { + required: true, + msg: '请选择所在省份' + }, + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectDistrictLikeName?pCode=0&levelType=10`, + labelKey: 'name', + valueKey: 'name', + clearable: true, + remote: 'name' + }, + 'on': { + input: (name, selectData) => { + if (city) { + city.value = '' + if (selectData) { + this.$nextTick(() => { + city.props.params.pCode = selectData.code + city.props.disabled = false + }) + } else { + city.props.params.pCode = '0' + city.props.disabled = true + } + } + } + } + } + let city = { + title: '城市', + value: '', + type: 'bdc-select', + key: 'city', + required: true, + rules: { + required: true, + msg: '请选择城市' + }, + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectDistrictLikeName?levelType=20`, + params: { + pCode: '0' + }, + labelKey: 'name', + valueKey: 'name', + clearable: true, + remote: 'name', + disabled: true + } + } + // 第三行 + let bankAccountNo = { + title: '银行账号', + value: '', + type: 'input', + key: 'bankAccountNo', + required: true, + rules: { + required: true, + msg: '请输入银行账号' + } + } + let cusOrgName = { + title: '所属客户', + value: '', + type: 'bdc-select', + key: 'cusOrgName', + required: true, + rules: { + required: true, + msg: '请选择所属客户' + }, + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectOrgCusVenInfoByAuthority?type=35`, + labelKey: 'name', + valueKey: 'name', + clearable: true, + remote: 'cusOrgName' + }, + on: { + input: (value, selectData) => { + if (value && value !== '') { + this.cusOrg = { + cusOrgId: selectData.id, + cusOrgCode: selectData.code, + cusOrgName: selectData.name + } + } else { + this.cusOrg = {} + } + } + } + } + let isEnabled = { + title: '状态', + value: '', + type: 'select', + key: 'isEnabled', + required: true, + rules: { + required: true, + msg: '请选择状态' + }, + options: publicChoice.stateOptions, + props: { + clearable: true + } + } + // 第四行 + let addr = { + title: '地址', + value: '', + type: 'remark', + key: 'addr', + required: true, + rules: { + required: true, + msg: '请输入地址' + }, + props: { + text: '修改地址', + editable: true, + maxlength: remarkMaxlength + } + } + + let tableData + tableData = [code, payeeName, bankName, registerBank, province, city, bankAccountNo, cusOrgName, isEnabled, addr] + this.tableData = tableData + this.$refs.editFormTable.init() // 延迟加载必须调用init方法 + this.tableObjData = this.$refs.editFormTable.getObjData(tableData) // 因为直接获取有延迟,所以传入数组能实时拿到最新数组 + }, + handleCancel() { + this.$router.push({ + name: 'expensesPayee' + }) + }, + handleSave() { + this.$refs.editFormTable.validateForm().then(() => { // 方式二: 通过Promise形式处理结果 + this.$refs.editFormTable.initResetValueData() // 记录重置默认值,this.$refs.editFormTable.reset()会重置为此刻的值 + const params = this.$refs.editFormTable.resetValueData + // code自动生成,可以移出 + delete params.code + params.cusOrgId = this.cusOrg.cusOrgId + params.cusOrgCode = this.cusOrg.cusOrgCode + params.cusOrgName = this.cusOrg.cusOrgName + // 发送新增请求 + this.PayeeService.addPayee(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('新增成功') + setTimeout(() => { + this.$router.push({ + name: 'expensesPayee' + }) + }, 2000) + } else { + const msg = res.errorMsg + this.$message.error(msg ? `新增失败:${msg}` : `新增失败`) + } + }) + }, (error) => { + let msgs = error.msgs.map((msg, i) => { + return error.items[i].title + msg + }) + this.$message.error('校验不通过,' + msgs.join('、')) + }) + } + }, + created() {}, + computed: { + btnVisibles() { + return ['cancel', 'save'] + } + } +} +</script> diff --git a/template/src/views/expenses/payee/detail.vue b/template/src/views/expenses/payee/detail.vue new file mode 100644 index 0000000000..79b4ba4130 --- /dev/null +++ b/template/src/views/expenses/payee/detail.vue @@ -0,0 +1,167 @@ +<template> + <div class="payee_detail"> + <pagoda-row-btns :btns="rowBtns" :visibles="btnVisibles"> + </pagoda-row-btns> + <pagoda-edit-form-table ref="editFormTable" :form-options="tableData" :editable="editable" :config="config"> + </pagoda-edit-form-table> + </div> +</template> + +<script> + export default { + name: 'payee_detail', + data() { + return { + loading: true, + rowBtns: { + update: { + text: '修改', + onClick: this.handleEdit + }, + cancel: { + text: '取消', + onClick: this.handleCancel + } + }, + tableData: [], // createTable详情单table专用 + isEnabled: true, + config: { + column: 3 // 一行放3列(label+value) + }, + editable: true, + tableObjData: null + } + }, + mounted() { + if (this.$route.params.id) { + this.setTableData(this.$route.params.id) + } + }, + methods: { + setTableData(id) { + this.PayeeService.checkPayeeById({id: id}, true).then((res) => { + this.loading = false + if (res.resultCode === 0) { + const data = res.data + // 第一行 + let code = { + title: '收款人代码', + value: data.code, + type: 'text', + key: '收款人代码' + } + let payeeName = { + title: '收款人', + value: data.payeeName, + type: 'text', + key: '收款人' + } + let bankName = { + title: '开户银行', + value: data.bankName, + type: 'text', + key: '开户银行' + } + // 第二行 + let registerBank = { + title: '银行支行', + value: data.registerBank, + type: 'remark', + key: '银行支行' + } + let province = { + title: '所在省份', + value: data.province, + type: 'text', + key: '所在省份' + } + let city = { + title: '城市', + value: data.city, + type: 'text', + key: '城市' + } + // 第三行 + let bankAccountNo = { + title: '银行账号', + value: data.bankAccountNo, + type: 'text', + key: '银行账号' + } + let cusOrgName = { + title: '所属客户', + value: data.cusOrgName, + type: 'text', + key: '所属客户' + } + let cusOrgCode = { + title: '客户代码', + value: data.cusOrgCode, + type: 'text', + key: '客户代码' + } + // 第四行 + let addr = { + title: '地址', + value: data.addr, + type: 'remark', + key: '地址' + } + let creatorName = { + title: '录入人', + value: data.creatorName, + type: 'text', + key: '录入人' + } + let createdAt = { + title: '录入时间', + value: data.createdAt, + type: 'text', + key: '录入时间' + } + // 第五行 + this.isEnabled = data.isEnabled === 1 ? true : false + let isEnabled = { + title: '状态', + value: data.isEnabled === 1 ? '启用' : '关闭', + type: 'text', + key: '状态' + } + + let tableData + tableData = [code, payeeName, bankName, registerBank, province, city, bankAccountNo, cusOrgName, cusOrgCode, addr, creatorName, createdAt, isEnabled] + this.tableData = tableData + this.$refs.editFormTable.init() // 延迟加载必须调用init方法 + this.tableObjData = this.$refs.editFormTable.getObjData(tableData) // 因为直接获取有延迟,所以传入数组能实时拿到最新数组 + } + }) + }, + handleCancel() { + this.$router.push({ + name: 'expensesPayee' + }) + }, + handleEdit() { + // 判断该项目是否被引用 + if (this.isEnabled) { + this.$message({ + message: `该项目已启用,无法修改!`, + type: 'warning' + }) + } else { + this.$router.push({ + name: 'payeeUpdate', + params: { + id: this.$route.params.id + } + }) + } + } + }, + computed: { + btnVisibles() { + return this.isEnabled ? ['cancel'] : ['cancel', 'update'] + } + } + } +</script> diff --git a/template/src/views/expenses/payee/update.vue b/template/src/views/expenses/payee/update.vue new file mode 100644 index 0000000000..16d205af8c --- /dev/null +++ b/template/src/views/expenses/payee/update.vue @@ -0,0 +1,313 @@ +<template> +<div class="payee_update"> + <pagoda-row-btns :btns="rowBtns" :visibles="btnVisibles"> + </pagoda-row-btns> + <pagoda-edit-form-table ref="editFormTable" :form-options="tableData" :editable="editable" :config="config"> + </pagoda-edit-form-table> +</div> +</template> + +<script> +import { + remarkMaxlength, +} from '@/utils/default-setting' +import publicChoice from '@/views/expenses/publicChoice' +export default { + name: 'payee_update', + data() { + return { + remarkMaxlength, + loading: true, + rowBtns: { + cancel: { + text: '取消', + onClick: this.handleCancel, + confirm: '当前界面操作数据不保留,是否取消,确认后返回详情!' + }, + save: { + text: '保存', + onClick: this.handleSave + } + }, + tableData: [], // createTable详情单table专用 + config: { + column: 3 // 一行放3列(label+value) + }, + editable: true, + tableObjData: null, + id: null, + cusOrg: {}, + version: 0 + } + }, + mounted() { + if (this.$route.params.id) { + this.setTableData(this.$route.params.id) + } + }, + methods: { + setTableData(id) { + this.PayeeService.checkPayeeById({id: id}, true).then((res) => { + this.loading = false + if (res.resultCode === 0) { + const data = res.data + this.cusOrg = { + cusOrgId: data.cusOrgId, + cusOrgCode: data.cusOrgCode, + cusOrgName: data.cusOrgName + } + this.id = data.id + this.version = data.version + // 第一行 + let code = { + title: '收款人代码', + value: data.code, + type: 'text', + key: 'code' + } + let payeeName = { + title: '收款人', + value: data.payeeName, + type: 'input', + key: 'payeeName', + required: true, + rules: { + required: true, + msg: '请输入收款人' + } + } + let bankName = { + title: '开户银行', + value: data.bankName, + type: 'bdc-select', + key: 'bankName', + required: true, + rules: { + required: true, + msg: '请选择开户银行' + }, + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectLookupValueByTypeCode?code=BAS_BANK_LIST`, + labelKey: 'value', + valueKey: 'value', + clearable: true + } + } + // 第二行 + let registerBank = { + title: '银行支行', + value: data.registerBank, + type: 'remark', + key: 'registerBank', + required: true, + rules: { + required: true, + msg: '请输入银行支行' + }, + props: { + text: '修改银行支行', + editable: true, + maxlength: 150 + } + } + let province = { + title: '所在省份', + value: data.province, + type: 'bdc-select', + key: 'province', + required: true, + rules: { + required: true, + msg: '请选择所在省份' + }, + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectDistrictLikeName?pCode=0&levelType=10`, + labelKey: 'name', + valueKey: 'name', + clearable: true, + remote: 'name' + }, + 'on': { + input: (name, selectData) => { + if (city) { + city.value = '' + if (selectData) { + this.$nextTick(() => { + city.props.params.pCode = selectData.code + city.props.disabled = false + }) + } else { + city.props.params.pCode = '0' + city.props.disabled = true + } + } + } + } + } + let city = { + title: '城市', + value: data.city, + type: 'bdc-select', + key: 'city', + required: true, + rules: { + required: true, + msg: '请选择城市' + }, + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectDistrictLikeName?levelType=20`, + params: { + pCode: '0' + }, + labelKey: 'name', + valueKey: 'name', + clearable: true, + remote: 'name', + disabled: data.city !== '' ? false : true + } + } + // 第三行 + let bankAccountNo = { + title: '银行账号', + value: data.bankAccountNo, + type: 'input', + key: 'bankAccountNo', + required: true, + rules: { + required: true, + msg: '请输入银行账号' + } + } + let cusOrgName = { + title: '所属客户', + value: data.cusOrgName, + type: 'bdc-select', + key: 'cusOrgName', + required: true, + rules: { + required: true, + msg: '请选择所属客户' + }, + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectOrgCusVenInfoByAuthority?type=35`, + labelKey: 'name', + valueKey: 'name', + clearable: true, + remote: 'cusOrgName' + }, + on: { + input: (name, selectData) => { + if (name && name !== '') { + this.cusOrg = { + cusOrgId: selectData.id, + cusOrgCode: selectData.code, + cusOrgName: selectData.name + } + } else { + this.cusOrg = {} + } + } + } + } + // 第四行 + let addr = { + title: '地址', + value: data.addr, + type: 'remark', + key: 'addr', + required: true, + rules: { + required: true, + msg: '请输入地址' + }, + props: { + text: '修改地址', + editable: true, + maxlength: remarkMaxlength + } + } + let creatorName = { + title: '录入人', + value: data.creatorName, + type: 'text', + key: 'creatorName' + } + let createdAt = { + title: '录入时间', + value: data.createdAt, + type: 'text', + key: 'createdAt' + } + // 第五行 + let isEnabled = { + title: '状态', + value: data.isEnabled, + type: 'select', + key: 'isEnabled', + required: true, + rules: { + required: true, + msg: '请选择状态' + }, + options: publicChoice.stateOptions, + props: { + clearable: true + } + } + let tableData + tableData = [code, payeeName, bankName, registerBank, province, city, bankAccountNo, cusOrgName, addr, creatorName, createdAt, isEnabled] + this.tableData = tableData + this.$refs.editFormTable.init() // 延迟加载必须调用init方法 + this.tableObjData = this.$refs.editFormTable.getObjData(tableData) // 因为直接获取有延迟,所以传入数组能实时拿到最新数组 + } + }) + }, + handleSave() { + this.$refs.editFormTable.validateForm().then(() => { // 方式二: 通过Promise形式处理结果 + this.$refs.editFormTable.initResetValueData() // 记录重置默认值,this.$refs.editFormTable.reset()会重置为此刻的值 + const params = this.$refs.editFormTable.resetValueData + // 移除干扰参数 + delete params.creatorName + delete params.createdAt + // 添加ID + params.id = this.id + // 格式化客户信息 + params.cusOrgId = this.cusOrg.cusOrgId + params.cusOrgCode = this.cusOrg.cusOrgCode + params.cusOrgName = this.cusOrg.cusOrgName + params.version = this.version + // 发送修改请求 + console.log(params) + this.PayeeService.editPayee(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('修改成功') + setTimeout(() => { + this.$router.push({ + name: 'payeeDetail' + }) + }, 2000) + } else { + const msg = res.errorMsg + this.$message.error(msg ? `修改失败:${msg}` : `修改失败`) + } + }) + }, (error) => { + let msgs = error.msgs.map((msg, i) => { + return error.items[i].title + msg + }) + this.$message.error('校验不通过,' + msgs.join('、')) + }) + }, + handleCancel() { + this.$router.push({ + name: 'payeeDetail' + }) + } + }, + computed: { + btnVisibles() { + return ['cancel', 'save'] + } + } +} +</script> diff --git a/template/src/views/expenses/publicChoice.vue b/template/src/views/expenses/publicChoice.vue new file mode 100644 index 0000000000..8241f5cde0 --- /dev/null +++ b/template/src/views/expenses/publicChoice.vue @@ -0,0 +1,44 @@ +<script> +export default { + classesTypeOptions: [ + { + label: '门店费用', + value: 1 + }, { + label: '宿舍费用', + value: 2 + } + ], + stateOptions: [ + { + label: '启用', + value: 1 + }, { + label: '关闭', + value: 0 + } + ], + documentStatusOptions: [ + { + label: '未提交', + value: 10 + }, + { + label: '待审核', + value: 20 + }, + { + label: '待付款', + value: 30 + }, + { + label: '已完成', + value: 40 + }, + { + label: '已拒绝', + value: 50 + } + ] +} +</script> diff --git a/template/src/views/expenses/requisition.vue b/template/src/views/expenses/requisition.vue new file mode 100644 index 0000000000..5524ac7965 --- /dev/null +++ b/template/src/views/expenses/requisition.vue @@ -0,0 +1,661 @@ +<template> + <pagoda-erp-form-table + v-model="formData" + :form-options="formOptions" + :label-width="formLabelWidth" + ref="erpFormTabel" + @submit="submit" + > + <template slot="table-btns"> + <pagoda-row-btns :btns="rowBtns" :visibles="btnVisibles"></pagoda-row-btns> + </template> + <template slot="table" slot-scope="scope"> + <pagoda-erp-table-v2 + dev + project-name="ERP2_New" + view="payee_cost_requisition" + :config="$viewConfig['payee_cost_requisition']" + :request-url="tableRequestUrl" + :empty="query" + :edit-column-config="editColumnConfig" + :table-filter-data="filterForm" + :summaryMethod="summaryMethod" + :head-selection="false" + :pageSize="10" + ref="erpTable" + :height="scope.height" + size="mini" + class="cost_requisition-list" + > + <template slot="registerBank" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="false" + v-model="scope.row['registerBank']"></pagoda-remark-cell> + </template> + <template slot="addr" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="false" v-model="scope.row['addr']"></pagoda-remark-cell> + </template> + <template slot="sum" slot-scope="scope"> + {{ formatMoney(scope.row['sum'], 4) }} + </template> + <template slot="remark" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="false" v-model="scope.row['remark']"></pagoda-remark-cell> + </template> + <template slot="rejectReason" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="false" + v-model="scope.row['rejectReason']"></pagoda-remark-cell> + </template> + <template slot="rejectPayReason" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="false" + v-model="scope.row['rejectPayReason']"></pagoda-remark-cell> + </template> + </pagoda-erp-table-v2> + <el-dialog class="dialog-view" title="拒绝原因" :visible.sync="rejectReason.show" width="300px"> + <el-form ref="form"> + <el-form-item style="width: 100%"> + <el-input type="textarea" v-model="rejectReason.reason"></el-input> + </el-form-item> + <el-form-item style="width: 100%"> + <el-button type="primary" @click="submitRejectReason">确定</el-button> + <el-button @click="cancelRejectReason">取消</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog class="dialog-view" title="拒绝付款原因" :visible.sync="rejectPayReason.show" width="300px"> + <el-form ref="form"> + <el-form-item> + <el-input type="textarea" v-model="rejectPayReason.reason"></el-input> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="submitRejectPayReason">确定</el-button> + <el-button @click="cancelRejectPayReason">取消</el-button> + </el-form-item> + </el-form> + </el-dialog> + </template> + </pagoda-erp-form-table> +</template> + +<script> + import { formLabelWidth, remarkMaxlength } from '@/utils/default-setting' + import searchCommon from '@/mixins/formSearchCommon' + import publicChoice from '@/views/expenses/publicChoice' + import {mapState} from 'vuex' + import { formatMoney, formatMoneyToNumber } from '@/utils/utils' + + export default { + name: 'requisition', + mixins: [searchCommon], + components: {}, + data() { + return { + tableRequestUrl: `${this.AjaxService.devUrl1}/StoreCostAppHeadService/viewList`, + formLabelWidth, + remarkMaxlength, + formatMoney, + formData: {}, + formOptions: [ + { + label: '申请单号', + type: 'input', + key: 'costApplyNo' + }, + { + label: '客户名称', + type: 'bdc-select', + key: 'cusOrgName', + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectOrgCusVenInfoByAuthority?type=35`, + labelKey: 'name', + valueKey: 'name', + clearable: true, + remote: 'cusOrgName' + } + }, + { + label: '录入人', + type: 'input', + key: 'creatorName' + }, + { + label: '费用类型', + type: 'select', + key: 'costType', + options: publicChoice.classesTypeOptions, + props: { + clearable: true + } + }, + { + label: '开户银行', + type: 'bdc-select', + key: 'bankName', + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectLookupValueByTypeCode?code=BAS_BANK_LIST`, + labelKey: 'value', + valueKey: 'value', + clearable: true + } + }, + { + label: '录入日期', + type: 'date-picker', + key: 'date', + props: { + type: 'daterange' + } + }, + { + label: '单据状态', + type: 'select', + key: 'status', + options: publicChoice.documentStatusOptions, + props: { + clearable: true + } + } + ], + filterForm: {}, + editColumnConfig: { + label: '操作', + width: '150', + fixed: 'right', + collapse: true, + setBtnGroup: this.setBtnGroup + }, + rowBtns: { + // 表格上方操作按钮 + add: { + text: '新增', + onClick: () => { + this.$router.push({name: 'requisitionAdd'}) + } + }, + submit: { + text: '提交', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + if (!selection || selection.length === 0) { + this.$message.error('请选择项目') + } else { + const headList = [] + for (let i = 0; i < selection.length; i++) { + headList.push({ + id: selection[i].id, + costApplyNo: selection[i].costApplyNo, + rejectPayReason: '', + rejectReason: '' + }) + } + const params = { + headList: headList, + newStatus: 20 + } + this.PayeeService.setRequisitionStatus(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('批量提交成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量提交失败:${msg}` : `批量提交失败`) + } + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + } + } + }, + resolve: { + text: '同意', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + if (!selection || selection.length === 0) { + this.$message.error('请选择项目') + } else { + const headList = [] + for (let i = 0; i < selection.length; i++) { + headList.push({ + id: selection[i].id, + costApplyNo: selection[i].costApplyNo, + rejectPayReason: '', + rejectReason: '' + }) + } + const params = { + headList: headList, + newStatus: 30 + } + this.PayeeService.setRequisitionStatus(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('批量提交成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量提交失败:${msg}` : `批量提交失败`) + } + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + } + } + }, + reject: { + text: '拒绝', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + if (!selection || selection.length === 0) { + this.$message.error('请选择项目') + } else { + // 打开原因显示 + this.rejectReason = { + selection: selection, + reason: '', + show: true + } + } + } + }, + pay: { + text: '付款', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + if (!selection || selection.length === 0) { + this.$message.error('请选择项目') + } else { + const headList = [] + for (let i = 0; i < selection.length; i++) { + headList.push({ + id: selection[i].id, + costApplyNo: selection[i].costApplyNo, + rejectPayReason: '', + rejectReason: '' + }) + } + const params = { + headList: headList, + newStatus: 40 + } + this.PayeeService.setRequisitionStatus(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('批量提交成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量提交失败:${msg}` : `批量提交失败`) + } + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + } + } + }, + dishonour: { + text: '拒绝付款', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + if (!selection || selection.length === 0) { + this.$message.error('请选择项目') + } else { + // 打开原因显示 + this.rejectPayReason = { + selection: selection, + reason: '', + show: true + } + } + } + }, + cancelAudit: { + text: '取消审核', + onClick: () => { + const table = this.$refs.erpTable.$refs.tableRef + const selection = table.selection + if (!selection || selection.length === 0) { + this.$message.error('请选择项目') + } else { + const headList = [] + for (let i = 0; i < selection.length; i++) { + headList.push({ + id: selection[i].id, + costApplyNo: selection[i].costApplyNo, + rejectPayReason: '', + rejectReason: '' + }) + } + const params = { + headList: headList, + newStatus: 20 + } + this.PayeeService.setRequisitionStatus(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('批量提交成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量提交失败:${msg}` : `批量提交失败`) + } + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + } + } + } + }, + summaryMethod: { + sum: function (tableData) { + let sum = 0 + tableData.forEach(item => { + sum += formatMoneyToNumber(item.sum) + }) + return formatMoney(sum, 4) + } + }, + query: true, + dialogVisible: false, + rejectReason: { + selection: [], + reason: '', + show: false + }, + rejectPayReason: { + selection: [], + reason: '', + show: false + } + } + }, + mounted () { + this.doLayout() + }, + methods: { + doLayout () { + this.$refs.erpFormTabel.doLayout() + }, + submit() { + if (this.query) { + this.query = false + this.$refs.erpTable.refreshCurrentPage() + } + // table筛选 + let reqData = { + costApplyNo: this.formData.costApplyNo, + cusOrgName: this.formData.cusOrgName, + creatorName: this.formData.creatorName, + costType: this.formData.costType, + bankName: this.formData.bankName, + startDate: this.formData.date ? this.formData.date[0] : '', + endDate: this.formData.date ? this.formData.date[1] : '', + status: this.formData.status + } + this.filterForm = Object.assign({}, reqData) + }, + setBtnGroup(row) { + let editBtn = { + text: '修改', + props: { + disabled: row.data.status !== 10 + }, + onClick: (e, btnSelf, currentRowBtns) => { + if (this.role.name !== '店长') { + this.$message({ + message: `您的角色权限有限,无法进行修改操作!`, + type: 'warning' + }) + } else { + this.$router.push({name: 'requisitionUpdate', params: {id: row.data.id}}) + } + } + } + let checkBtn = { + text: '详情', + onClick: (e, btnSelf, currentRowBtns) => { + this.$router.push({name: 'requisitionDetail', params: {id: row.data.id}}) + } + } + let submitBtn = { + text: '提交', + props: { + disabled: row.data.status !== 10 + }, + onClick: (e, btnSelf, currentRowBtns) => { + const params = { + headList: [{ + id: row.data.id, + costApplyNo: row.data.costApplyNo, + rejectPayReason: '', + rejectReason: '' + }], + newStatus: 20 + } + this.PayeeService.setRequisitionStatus(params, true).then((res) => { + console.log(res.resultCode) + if (res.resultCode === 0) { + this.$message.success('提交成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `提交失败:${msg}` : `提交失败`) + } + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + }, + } + let resolveBtn = { + text: '同意', + props: { + disabled: row.data.status !== 20 + }, + onClick: (e, btnSelf, currentRowBtns) => { + const params = { + headList: [{ + id: row.data.id, + costApplyNo: row.data.costApplyNo, + rejectPayReason: '', + rejectReason: '' + }], + newStatus: 30 + } + this.PayeeService.setRequisitionStatus(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('批量提交成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量提交失败:${msg}` : `批量提交失败`) + } + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + } + } + + let rejectBtn = { + text: '拒绝', + props: { + disabled: row.data.status !== 20 + }, + onClick: (e, btnSelf, currentRowBtns) => { + // 打开原因显示 + this.rejectReason = { + selection: [row.data], + reason: '', + show: true + } + } + } + + let payBtn = { + text: '付款', + props: { + disabled: row.data.status !== 30 + }, + onClick: (e, btnSelf, currentRowBtns) => { + const params = { + headList: [{ + id: row.data.id, + costApplyNo: row.data.costApplyNo, + rejectPayReason: '', + rejectReason: '' + }], + newStatus: 40 + } + this.PayeeService.setRequisitionStatus(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('批量提交成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量提交失败:${msg}` : `批量提交失败`) + } + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + } + } + + let dishonourBtn = { + text: '拒绝付款', + props: { + disabled: row.data.status !== 30 + }, + onClick: (e, btnSelf, currentRowBtns) => { + // 打开原因显示 + this.rejectPayReason = { + selection: [row.data], + reason: '', + show: true + } + } + } + + let cancelAuditBtn = { + text: '取消审核', + props: { + disabled: row.data.status !== 20 && row.data.status !== 30 + }, + onClick: (e, btnSelf, currentRowBtns) => { + const params = { + headList: [{ + id: row.data.id, + costApplyNo: row.data.costApplyNo, + rejectPayReason: '', + rejectReason: '' + }], + newStatus: 20 + } + this.PayeeService.setRequisitionStatus(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('批量提交成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量提交失败:${msg}` : `批量提交失败`) + } + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + } + } + + let btnsObj = { + '店长': [editBtn, checkBtn, submitBtn], + '会计': [checkBtn, resolveBtn, rejectBtn, cancelAuditBtn], + // '出纳': [checkBtn, payBtn, dishonourBtn, cancelAuditBtn] + '出纳': [checkBtn, payBtn, dishonourBtn] + } + if (btnsObj[this.role.name]) { + return btnsObj[this.role.name] + } else { + return [checkBtn] + } + }, + submitRejectReason() { + const headList = [] + for (let i = 0; i < this.rejectReason.selection.length; i++) { + headList.push({ + id: this.rejectReason.selection[i].id, + costApplyNo: this.rejectReason.costApplyNo, + rejectPayReason: '', + rejectReason: this.rejectReason.reason + }) + } + const params = { + headList: headList, + newStatus: 50 + } + this.PayeeService.setRequisitionStatus(params, true).then((res) => { + this.cancelRejectReason() + if (res.resultCode === 0) { + this.$message.success('批量拒绝成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量拒绝失败:${msg}` : `批量拒绝失败`) + } + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + }, + cancelRejectReason() { + this.rejectReason = { + selection: [], + reason: '', + show: false + } + }, + submitRejectPayReason() { + const headList = [] + for (let i = 0; i < this.rejectPayReason.selection.length; i++) { + headList.push({ + id: this.rejectPayReason.selection[i].id, + costApplyNo: this.rejectPayReason.costApplyNo, + rejectPayReason: this.rejectPayReason.reason, + rejectReason: '' + }) + } + const params = { + headList: headList, + newStatus: 50 + } + this.PayeeService.setRequisitionStatus(params, true).then((res) => { + this.cancelRejectPayReason() + if (res.resultCode === 0) { + this.$message.success('批量拒绝付款成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量拒绝付款失败:${msg}` : `批量拒绝付款失败`) + } + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + }, + cancelRejectPayReason() { + this.rejectPayReason = { + selection: [], + reason: '', + show: false + } + } + }, + computed: { + ...mapState(['role']), + btnVisibles() { // 设置操作按钮数组 + let btnsObj = { + '店长': ['add', 'submit'], + '会计': ['resolve', 'reject', 'cancelAudit'], + '出纳': ['pay', 'dishonour'] + } + if (btnsObj[this.role.name]) { + return btnsObj[this.role.name] + } else { + return [] + } + } + } + } +</script> +<style lang="css"> + .dialog-view .el-form .el-form-item__content { + width: 100%; + text-align: center; + } + .cost_requisition-list .sum{ + text-align: right; + } +</style> diff --git a/template/src/views/expenses/requisition/add.vue b/template/src/views/expenses/requisition/add.vue new file mode 100644 index 0000000000..d6a28d32e7 --- /dev/null +++ b/template/src/views/expenses/requisition/add.vue @@ -0,0 +1,367 @@ +<template> + <div class="requisition_detail"> + <pagoda-row-btns :btns="rowBtns" :visibles="btnVisibles"> + </pagoda-row-btns> + <pagoda-edit-form-table ref="editFormTable" :form-options="tableData" :editable="editable" :config="config"> + <template slot="cusOrgCode" slot-scope="scope"> + <span style="float: left; font-size: 13px; margin-right: 15px;">{{ scope.code }}</span> + <span style="float: right; color: #8492a6;">{{ scope.name }}</span> + </template> + </pagoda-edit-form-table> + <el-tabs type="card"> + <el-tab-pane label="费用明细"> + <pagoda-erp-table-v2 + project-name="ERP2_New" + view="payee_cost_classes_subitem" + :config="$viewConfig['payee_cost_classes_subitem']" + :defaultData="classesTableData" + ref="erpTable" + :summaryMethod="summaryMethod" + v-loading="tableLoading" + :on="onMethod" + > + <template slot="remark" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="true" v-model="scope.row['remark']"></pagoda-remark-cell> + </template> + </pagoda-erp-table-v2> + </el-tab-pane> + </el-tabs> + </div> +</template> + +<script> +import { formatDate, formatMoney, formatMoneyToNumber, isEmpty } from '@/utils/utils' +import { remarkMaxlength } from '@/utils/default-setting' +import publicChoice from '@/views/expenses/publicChoice' + +export default { + name: 'requisition_detail', + data () { + return { + remarkMaxlength, + loading: true, + rowBtns: { + save: { text: '保存', onClick: this.handleSave}, + cancel: { text: '取消', onClick: this.handleCancel, confirm: '当前界面操作数据不保留,是否取消,确认后返回列表!' } + }, + tableData: [], // createTable详情单table专用 + config: { + column: 3 // 一行放3列(label+value) + }, + editable: true, + tableObjData: null, + cusOrg: {}, + costType: {}, + payee: {}, + classesTableData: [], + summaryMethod: { + amount: function (tableData) { + let sum = 0 + tableData.forEach(item => { + sum += formatMoneyToNumber(item.amount) + }) + return formatMoney(sum, 4) + } + }, + tableLoading: false, + onMethod: { + amount: { + blur: (event) => { + let value = event.target.value + // 格式化输入的值 + value = parseFloat(formatMoneyToNumber(value), 10) + event.target.value = formatMoney(value, 4) + // 重新计算合计 + this.$refs.erpTable.pageTotal() + } + } + } + } + }, + mounted () { + this.setTableData() + }, + methods: { + setTableData (id) { + // 第一行 + let costApplyNo = { title: '申请单号', value: '自动生成', type: 'text', key: 'costApplyNo' } + let cusOrgCode = { + title: '客户代码', + value: '', + type: 'bdc-select', + key: 'cusOrgCode', + required: true, + rules: { + required: true, + msg: '请选择客户代码' + }, + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectOrgCusVenInfoByAuthority?type=35`, + labelKey: 'code', + valueKey: 'code', + clearable: true, + remote: 'cusOrgName' + }, + on: { + input: (value, selectData) => { + if (value && value !== '') { + this.cusOrg = { + cusOrgId: selectData.id, + cusOrgCode: selectData.code, + cusOrgName: selectData.name + } + if (cusOrgName) { + cusOrgName.value = selectData.name + } + } else { + this.cusOrg = {} + cusOrgName.value = '选择客户代码自动带出' + } + } + } + } + let cusOrgName = { title: '客户名称', value: '选择客户代码自动带出', type: 'text', key: 'cusOrgName' } + // 第二行 + let costTypeName = { + title: '费用类型', + value: '', + type: 'select', + required: true, + rules: { + required: true, + msg: '请选择状态' + }, + options: publicChoice.classesTypeOptions, + key: 'costTypeName', + on: { + change: (value) => { + if (value && value !== '') { + this.costType = { + name: publicChoice.classesTypeOptions.filter(item => item.value === value)[0].label, + value: value + } + } else { + this.costType = {} + } + } + } + } + let payeeName = { + title: '收款人', + value: '', + type: 'text', + key: '收款人', + type: 'bdc-select', + key: 'payeeName', + required: true, + rules: { + required: true, + msg: '请选择收款人' + }, + props: { + url: `${this.AjaxService.devUrl1}/BasPayeeDefService/findByPayeeName`, + labelKey: 'payeeName', + valueKey: 'payeeName', + clearable: true, + remote: 'payeeName' + }, + on: { + input: (value, selectData) => { + if (value && value !== '') { + this.payee = { + id: selectData.id, + payeeName: selectData.payeeName, + bankName: selectData.bankName, + registerBank: selectData.registerBank, + bankAccountNo: selectData.bankAccountNo, + province: selectData.province, + city: selectData.city, + addr: selectData.addr + } + if (bankName) { + bankName.value = selectData.bankName + } + if (registerBank) { + registerBank.value = selectData.registerBank + } + if (bankAccountNo) { + bankAccountNo.value = selectData.bankAccountNo + } + if (province) { + province.value = selectData.province + } + if (city) { + city.value = selectData.city + } + if (addr) { + addr.value = selectData.addr + } + } else { + this.payee = {} + bankName.value = '根据收款人自动带出' + registerBank.value = '根据收款人自动带出' + bankAccountNo.value = '根据收款人自动带出' + province.value = '根据收款人自动带出' + city.value = '根据收款人自动带出' + addr.value = '根据收款人自动带出' + } + } + } + } + let bankName = { title: '开户银行', value: '根据收款人自动带出', type: 'text', key: 'bankName' } + // 第三行 + let registerBank = { title: '银行支行', value: '根据收款人自动带出', type: 'remark', key: 'registerBank' } + let bankAccountNo = { title: '银行账号', value: '根据收款人自动带出', type: 'text', key: 'bankAccountNo' } + let province = { title: '省份', value: '根据收款人自动带出', type: 'text', key: 'province' } + // 第四行 + let city = { title: '城市', value: '根据收款人自动带出', type: 'text', key: 'city' } + let addr = { title: '地址', value: '根据收款人自动带出', type: 'remark', key: 'addr' } + let status = { title: '单证状态', value: '未提交', type: 'text', key: 'status' } + // 第五行 + let image = { title: '图片上传', value: '', type: 'text', key: 'image' } + let remark = { + title: '备注', + value: '', + type: 'remark', + key: 'remark', + props: { + text: '修改备注', + editable: true, + maxlength: remarkMaxlength + } + } + + let tableData + tableData = [costApplyNo, cusOrgCode, cusOrgName, costTypeName, payeeName, bankName, registerBank, bankAccountNo, province, city, addr, status, image, remark] + this.tableData = tableData + this.$refs.editFormTable.init() // 延迟加载必须调用init方法 + this.tableObjData = this.$refs.editFormTable.getObjData(tableData) // 因为直接获取有延迟,所以传入数组能实时拿到最新数组 + // 默认选择门店 + this.$nextTick(() => { + costTypeName.value = 1 + this.costType = { + name: '门店费用', + value: 1 + } + }) + }, + handleCancel () { + this.$router.push({name: 'expensesRequisition'}) + }, + handleSave () { + this.$refs.editFormTable.validateForm().then(() => { // 方式二: 通过Promise形式处理结果 + this.$refs.editFormTable.initResetValueData() // 记录重置默认值,this.$refs.editFormTable.reset()会重置为此刻的值 + const formData = this.$refs.editFormTable.resetValueData + // 判断以下关键字段是否为空 + if (isEmpty(this.cusOrg)) { + this.$message.error('请重新选择客户代码!') + return + } + if (isEmpty(this.costType)) { + this.$message.error('请重新选择费用类型!') + return + } + if (isEmpty(this.payee)) { + this.$message.error('请重新选择收款人!') + return + } + const table = this.$refs.erpTable + if (table.validateEditingItems()) { + // 构造请求参数 + const detailList = [] + const list = table.$refs.tableRef.tableData.data + list.forEach(item => { + detailList.push({ + amount: formatMoneyToNumber(item.amount), + costCatId: item.costCatId, + costCatName: item.costCatName, + periorBegin: `${ item.periorBegin } 00:00:00`, + periorEnd: `${ item.periorEnd } 23:59:59`, + remark: item.remark + }) + }) + const params = { + addr: this.payee.addr, + bankAccountNo: this.payee.bankAccountNo, + bankName: this.payee.bankName, + city: this.payee.city, + costType: this.costType.value, + costTypeName: this.costType.name, + cusOrgCode: this.cusOrg.cusOrgCode, + cusOrgId: this.cusOrg.cusOrgId, + cusOrgName: this.cusOrg.cusOrgName, + detailList: detailList, + imageUrl: formData.image, + payeeId: this.payee.id, + payeeName: this.payee.payeeName, + province: this.payee.province, + registerBank: this.payee.registerBank, + remark: formData.remark, + } + this.PayeeService.addRequisition(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('新增成功') + setTimeout(() => { + this.$router.push({ + name: 'expensesRequisition' + }) + }, 2000) + } else { + const msg = res.errorMsg + this.$message.error(msg ? `新增失败:${msg}` : `新增失败`) + } + }) + } else { + this.$message.error('请填写完整必填信息!') + } + }, (error) => { + let msgs = error.msgs.map((msg, i) => { + return error.items[i].title + msg + }) + this.$message.error('校验不通过,' + msgs.join('、')) + }) + }, + getClassesTableData(value) { + this.tableLoading = true + this.PayeeService.checkRequisitionByType({ costType: value }).then((res) => { + this.tableLoading = false + if (res.resultCode === 0) { + const data = res.data + data.content.forEach(item => { + // 列表添加 + const table = this.$refs.erpTable + this.$nextTick(() => { + table.newRows([{ + costCatId: item.id, + costCatName: item.name, + amount: '0.0000', + periorBegin: formatDate(new Date(), 'date'), + periorEnd: formatDate(new Date(), 'date'), + remark: '' + }]) + }) + }) + } + }) + } + }, + computed: { + btnVisibles () { + return ['cancel', 'save'] + } + }, + watch: { + costType: { + handler(newName, oldName) { + // 清空表格 + this.$refs.erpTable.$refs.tableRef.tableData.data = [] + if (newName.value) { + // 根据费用类型显示不同的费用明细 + this.getClassesTableData(newName.value) + } + }, + deep: true + } + } +} +</script> diff --git a/template/src/views/expenses/requisition/detail.vue b/template/src/views/expenses/requisition/detail.vue new file mode 100644 index 0000000000..3a3a6bce02 --- /dev/null +++ b/template/src/views/expenses/requisition/detail.vue @@ -0,0 +1,399 @@ +<template> + <div class="requisition_detail"> + <pagoda-row-btns :btns="rowBtns" :visibles="btnVisibles"> + </pagoda-row-btns> + <pagoda-edit-form-table ref="editFormTable" :form-options="tableData" :editable="editable" :config="config"> + </pagoda-edit-form-table> + <el-tabs type="card"> + <el-tab-pane label="费用明细"> + <pagoda-erp-table-v2 + project-name="ERP2_New" + view="payee_cost_requisition_subitem" + :config="$viewConfig['payee_cost_classes_subitem']" + :defaultData="classesTableData" + ref="erpTable" + :summaryMethod="summaryMethod" + class="cost_requisition_subitem_list" + > + <template slot="amount" slot-scope="scope"> + {{ formatMoney(scope.row['amount'], 4) }} + </template> + <template slot="remark" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="false" v-model="scope.row['remark']"></pagoda-remark-cell> + </template> + </pagoda-erp-table-v2> + </el-tab-pane> + </el-tabs> + <el-dialog class="dialog-view" title="拒绝原因" :visible.sync="rejectReason.show" width="300px"> + <el-form ref="form"> + <el-form-item style="width: 100%"> + <el-input type="textarea" v-model="rejectReason.reason"></el-input> + </el-form-item> + <el-form-item style="width: 100%"> + <el-button type="primary" @click="submitRejectReason">确定</el-button> + <el-button @click="cancelRejectReason">取消</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog class="dialog-view" title="拒绝付款原因" :visible.sync="rejectPayReason.show" width="300px"> + <el-form ref="form"> + <el-form-item> + <el-input type="textarea" v-model="rejectPayReason.reason"></el-input> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="submitRejectPayReason">确定</el-button> + <el-button @click="cancelRejectPayReason">取消</el-button> + </el-form-item> + </el-form> + </el-dialog> + </div> +</template> + +<script> + import {mapState} from 'vuex' + import {remarkMaxlength,} from '@/utils/default-setting' + import publicChoice from '@/views/expenses/publicChoice' + import { formatMoney, formatMoneyToNumber } from '@/utils/utils' + + export default { + name: 'requisition_detail', + data() { + return { + remarkMaxlength, + formatMoney, + loading: true, + gridBtns: [], + rowBtns: { + update: { + text: '修改', + onClick: this.handleEdit + }, + cancel: {text: '取消', onClick: this.handleCancel}, + submit: { + text: '提交', + onClick: this.handleSubmit + }, + resolve: { + text: '同意', + onClick: this.handleResolve + }, + reject: { + text: '拒绝', + onClick: this.handleReject + }, + pay: { + text: '付款', + onClick: this.handlePay + }, + dishonour: { + text: '拒绝付款', + onClick: this.handleDishonour + }, + cancelAudit: { + text: '取消审核', + onClick: this.handleCancelAudit + } + }, + tableData: [], // createTable详情单table专用 + config: { + column: 3 // 一行放3列(label+value) + }, + summaryMethod: { + amount: function (tableData) { + let sum = 0 + tableData.forEach(item => { + sum += formatMoneyToNumber(item.amount) + }) + return formatMoney(sum, 4) + } + }, + editable: false, + tableObjData: null, + costApplyNo: '', + status: 0, + classesTableData: [], + rejectReason: { + selection: [], + reason: '', + show: false + }, + rejectPayReason: { + selection: [], + reason: '', + show: false + } + } + }, + mounted() { + if (this.$route.params.id) { + this.setTableData(this.$route.params.id) + } + }, + methods: { + setTableData(id) { + this.PayeeService.checkRequisitionById({id: id}, true).then((res) => { + this.loading = false + if (res.resultCode === 0) { + const data = res.data + // 第一行 + let costApplyNo = {title: '申请单号', value: data.costApplyNo, type: 'text', key: '申请单号'} + this.costApplyNo = data.costApplyNo + let cusOrgCode = {title: '客户代码', value: data.cusOrgCode, type: 'text', key: '客户代码'} + let cusOrgName = {title: '客户名称', value: data.cusOrgName, type: 'text', key: '客户名称'} + // 第二行 + let costTypeName = {title: '费用类型', value: data.costTypeName, type: 'text', key: '费用类型'} + let payeeName = {title: '收款人', value: data.payeeName, type: 'text', key: '收款人'} + let bankName = {title: '开户银行', value: data.bankName, type: 'text', key: '开户银行'} + // 第三行 + let registerBank = {title: '银行支行', value: data.registerBank, type: 'remark', key: '银行支行'} + let bankAccountNo = {title: '银行账号', value: data.bankAccountNo, type: 'text', key: '银行账号'} + let province = {title: '省份', value: data.province, type: 'text', key: '省份'} + // 第四行 + let city = {title: '城市', value: data.city, type: 'text', key: '城市'} + let addr = {title: '地址', value: data.addr, type: 'remark', key: '地址'} + let status = {title: '单证状态', value: this.getStatusLabel(data.status), type: 'text', key: '单证状态'} + this.status = data.status + // 第五行 + let image = {title: '图片上传', value: data.image, type: 'text', key: '图片上传'} + let remark = {title: '备注', value: data.remark, type: 'remark', key: '备注'} + + let tableData + tableData = [costApplyNo, cusOrgCode, cusOrgName, costTypeName, payeeName, bankName, registerBank, bankAccountNo, province, city, addr, status, image, remark] + this.tableData = tableData + this.$refs.editFormTable.init() // 延迟加载必须调用init方法 + this.tableObjData = this.$refs.editFormTable.getObjData(tableData) // 因为直接获取有延迟,所以传入数组能实时拿到最新数组 + // 格式化 + if (data.detailList.length > 0) { + data.detailList.forEach(item => { + item.amount = parseFloat(item.amount).toFixed(2) + }) + } + // 提取费用类型,存入erp-table-v2 + this.classesTableData = data.detailList + // 刷新表格 + this.$refs.erpTable.refreshCurrentPage() + } + }) + }, + handleCancel() { + this.$router.push({name: 'expensesRequisition'}) + }, + handleEdit() { + this.$router.push({name: 'requisitionUpdate', params: {id: this.$route.params.id}}) + }, + handleSubmit() { + const params = { + headList: [{ + id: this.$route.params.id, + costApplyNo: this.costApplyNo, + rejectPayReason: '', + rejectReason: '' + }], + newStatus: 20 + } + this.PayeeService.setRequisitionStatus(params, true).then((res) => { + console.log(res.resultCode) + if (res.resultCode === 0) { + this.$message.success('提交成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `提交失败:${msg}` : `提交失败`) + } + // 重新刷新 + this.setTableData(this.$route.params.id) + // 刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + }, + handleResolve() { + const params = { + headList: [{ + id: this.$route.params.id, + costApplyNo: this.costApplyNo, + rejectPayReason: '', + rejectReason: '' + }], + newStatus: 30 + } + this.PayeeService.setRequisitionStatus(params, true).then((res) => { + console.log(res.resultCode) + if (res.resultCode === 0) { + this.$message.success('同意成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `同意失败:${msg}` : `同意失败`) + } + // 重新刷新 + this.setTableData(this.$route.params.id) + // 刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + }, + handleReject() { + // 打开原因显示 + this.rejectReason = { + selection: [{ + id: this.$route.params.id, + costApplyNo: this.costApplyNo + }], + reason: '', + show: true + } + }, + handleCancelAudit() { + const params = { + headList: [{ + id: this.$route.params.id, + costApplyNo: this.costApplyNo, + rejectPayReason: '', + rejectReason: '' + }], + newStatus: 20 + } + this.PayeeService.setRequisitionStatus(params, true).then((res) => { + console.log(res.resultCode) + if (res.resultCode === 0) { + this.$message.success('取消审核成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `取消审核失败:${msg}` : `取消审核失败`) + } + // 重新刷新 + this.setTableData(this.$route.params.id) + // 刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + }, + handlePay() { + const params = { + headList: [{ + id: this.$route.params.id, + costApplyNo: this.costApplyNo, + rejectPayReason: '', + rejectReason: '' + }], + newStatus: 40 + } + this.PayeeService.setRequisitionStatus(params, true).then((res) => { + console.log(res.resultCode) + if (res.resultCode === 0) { + this.$message.success('付款成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `付款失败:${msg}` : `付款失败`) + } + // 重新刷新 + this.setTableData(this.$route.params.id) + // 刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + }, + handleDishonour() { + // 打开原因显示 + this.rejectPayReason = { + selection: [{ + id: this.$route.params.id, + costApplyNo: this.costApplyNo + }], + reason: '', + show: true + } + }, + getStatusLabel(value) { + return publicChoice.documentStatusOptions.filter(item => item.value === value)[0].label + }, + submitRejectReason() { + const headList = [] + for (let i = 0; i < this.rejectReason.selection.length; i++) { + headList.push({ + id: this.rejectReason.selection[i].id, + costApplyNo: this.rejectReason.selection[i].costApplyNo, + rejectPayReason: '', + rejectReason: this.rejectReason.reason + }) + } + const params = { + headList: headList, + newStatus: 50 + } + this.PayeeService.setRequisitionStatus(params, true).then((res) => { + this.cancelRejectReason() + if (res.resultCode === 0) { + this.$message.success('批量拒绝成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量拒绝失败:${msg}` : `批量拒绝失败`) + } + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + }, + cancelRejectReason() { + this.rejectReason = { + selection: [], + reason: '', + show: false + } + }, + submitRejectPayReason() { + const headList = [] + for (let i = 0; i < this.rejectPayReason.selection.length; i++) { + headList.push({ + id: this.rejectPayReason.selection[i].id, + costApplyNo: this.rejectPayReason.selection[i].costApplyNo, + rejectPayReason: this.rejectPayReason.reason, + rejectReason: '' + }) + } + const params = { + headList: headList, + newStatus: 50 + } + this.PayeeService.setRequisitionStatus(params, true).then((res) => { + this.cancelRejectPayReason() + if (res.resultCode === 0) { + this.$message.success('批量拒绝付款成功!') + } else { + const msg = res.errorMsg + this.$message.error(msg ? `批量拒绝付款失败:${msg}` : `批量拒绝付款失败`) + } + // 重新刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }) + }, + cancelRejectPayReason() { + this.rejectPayReason = { + selection: [], + reason: '', + show: false + } + } + }, + computed: { + ...mapState(['role']), + btnVisibles() { + let btnsObj = { + '店长': this.status === 10 ? ['cancel', 'update', 'submit'] : ['cancel'], + '会计': this.status === 20 ? ['cancel', 'resolve', 'reject', 'cancelAudit'] : ['cancel'], + '出纳': this.status === 30 ? ['pay', 'dishonour'] : ['cancel'] + } + if (btnsObj[this.role.name]) { + return btnsObj[this.role.name] + } else { + return [] + } + }, + } + } +</script> + +<style lang="css"> + .dialog-view .el-form .el-form-item__content { + width: 100%; + text-align: center; + } + .cost_requisition_subitem_list .amount { + text-align: right; + } +</style> + diff --git a/template/src/views/expenses/requisition/update.vue b/template/src/views/expenses/requisition/update.vue new file mode 100644 index 0000000000..0e0f2ecd9e --- /dev/null +++ b/template/src/views/expenses/requisition/update.vue @@ -0,0 +1,472 @@ +<template> + <div class="requisition_detail"> + <pagoda-row-btns :btns="rowBtns" :visibles="btnVisibles"> + </pagoda-row-btns> + <pagoda-edit-form-table ref="editFormTable" :form-options="tableData" :editable="editable" :config="config"> + <template slot="cusOrgCode" slot-scope="scope"> + <span style="float: left; font-size: 13px; margin-right: 15px;">{{ scope.code }}</span> + <span style="float: right; color: #8492a6;">{{ scope.name }}</span> + </template> + </pagoda-edit-form-table> + <el-tabs type="card"> + <el-tab-pane label="费用明细"> + <pagoda-erp-table-v2 + project-name="ERP2_New" + view="payee_cost_classes_subitem" + :config="$viewConfig['payee_cost_classes_subitem']" + :defaultData="classesTableData" + ref="erpTable" + :summaryMethod="summaryMethod" + :validate="tableValidate" + v-loading="tableLoading" + :default-editing="true" + :on="onMethod" + > + <template slot="remark" slot-scope="scope"> + <pagoda-remark-cell :maxlength="remarkMaxlength" :editable="true" v-model="scope.row['remark']"></pagoda-remark-cell> + </template> + </pagoda-erp-table-v2> + </el-tab-pane> + </el-tabs> + </div> +</template> + +<script> + import { formatDate, formatMoney, formatMoneyToNumber, isEmpty } from '@/utils/utils' + import { remarkMaxlength } from '@/utils/default-setting' + import publicChoice from '@/views/expenses/publicChoice' + + export default { + name: 'requisition_detail', + data() { + return { + remarkMaxlength, + loading: true, + rowBtns: { + update: { + text: '保存', + onClick: this.handleSave + }, + cancel: { + text: '取消', + onClick: this.handleCancel, + confirm: '当前界面操作数据不保留,是否取消,确认后返回列表!' + } + }, + tableData: [], // createTable详情单table专用 + config: { + column: 3 // 一行放3列(label+value) + }, + editable: true, + tableObjData: null, + cusOrg: {}, + costType: {}, + payee: {}, + classesTableData: [], + summaryMethod: { + amount: function (tableData) { + let sum = 0 + tableData.forEach(item => { + sum += formatMoneyToNumber(item.amount) + }) + return formatMoney(sum, 4) + } + }, + tableLoading: false, + version: 0, + onMethod: { + amount: { + blur: (event) => { + let value = event.target.value + // 格式化输入的值 + value = parseFloat(formatMoneyToNumber(value), 10) + event.target.value = formatMoney(value, 4) + // 重新计算合计 + this.$refs.erpTable.pageTotal() + } + } + } + } + }, + mounted() { + if (this.$route.params.id) { + this.setTableData(this.$route.params.id) + } + }, + methods: { + setTableData(id) { + this.PayeeService.checkRequisitionById({ + id: id + }, true).then((res) => { + this.loading = false + if (res.resultCode === 0) { + const data = res.data + // 充实特殊对象 + this.cusOrg = { + cusOrgId: data.cusOrgId, + cusOrgCode: data.cusOrgCode, + cusOrgName: data.cusOrgName + } + this.costType = { + name: data.costTypeName, + value: data.costType + } + this.payee = { + id: data.payeeId, + payeeName: data.payeeName, + bankName: data.bankName, + registerBank: data.registerBank, + bankAccountNo: data.bankAccountNo, + province: data.province, + city: data.city, + addr: data.addr + } + this.version = data.version + // 第一行 + let costApplyNo = { + title: '申请单号', + value: data.costApplyNo, + type: 'text', + key: 'costApplyNo' + } + let cusOrgCode = { + title: '客户代码', + value: data.cusOrgCode, + type: 'bdc-select', + key: 'cusOrgCode', + required: true, + rules: { + required: true, + msg: '请选择客户代码' + }, + props: { + url: `${this.AjaxService.devUrl1}/GeneralService/selectOrgCusVenInfoByAuthority?type=35`, + labelKey: 'code', + valueKey: 'code', + clearable: true, + remote: 'cusOrgName' + }, + on: { + input: (value, selectData) => { + if (value && value !== '') { + this.cusOrg = { + cusOrgId: selectData.id, + cusOrgCode: selectData.code, + cusOrgName: selectData.name + } + if (cusOrgName) { + cusOrgName.value = selectData.name + } + } else { + this.cusOrg = {} + cusOrgName.value = '选择客户代码自动带出' + } + } + } + } + let cusOrgName = { + title: '客户名称', + value: data.cusOrgName, + type: 'text', + key: 'cusOrgName' + } + // 第二行 + let costTypeName = { + title: '费用类型', + value: data.costTypeName, + type: 'select', + required: true, + rules: { + required: true, + msg: '请选择状态' + }, + options: publicChoice.classesTypeOptions, + key: 'costTypeName', + on: { + change: (value) => { + if (value && value !== '') { + this.costType = { + name: publicChoice.classesTypeOptions.filter(item => item.value === value)[0].label, + value: value + } + } else { + this.costType = {} + } + } + } + } + let payeeName = { + title: '收款人', + value: data.payeeName, + type: 'text', + key: '收款人', + type: 'bdc-select', + key: 'payeeName', + required: true, + rules: { + required: true, + msg: '请选择收款人' + }, + props: { + url: `${this.AjaxService.devUrl1}/BasPayeeDefService/findByPayeeName`, + labelKey: 'payeeName', + valueKey: 'payeeName', + clearable: true, + remote: 'payeeName' + }, + on: { + input: (value, selectData) => { + if (value && value !== '') { + this.payee = { + id: selectData.id, + payeeName: selectData.payeeName, + bankName: selectData.bankName, + registerBank: selectData.registerBank, + bankAccountNo: selectData.bankAccountNo, + province: selectData.province, + city: selectData.city, + addr: selectData.addr + } + if (bankName) { + bankName.value = selectData.bankName + } + if (registerBank) { + registerBank.value = selectData.registerBank + } + if (bankAccountNo) { + bankAccountNo.value = selectData.bankAccountNo + } + if (province) { + province.value = selectData.province + } + if (city) { + city.value = selectData.city + } + if (addr) { + addr.value = selectData.addr + } + } else { + this.payee = {} + bankName.value = '根据收款人自动带出' + registerBank.value = '根据收款人自动带出' + bankAccountNo.value = '根据收款人自动带出' + province.value = '根据收款人自动带出' + city.value = '根据收款人自动带出' + addr.value = '根据收款人自动带出' + } + } + } + } + let bankName = { + title: '开户银行', + value: data.bankName, + type: 'text', + key: 'bankName' + } + // 第三行 + let registerBank = { + title: '银行支行', + value: data.registerBank, + type: 'remark', + key: 'registerBank' + } + let bankAccountNo = { + title: '银行账号', + value: data.bankAccountNo, + type: 'text', + key: 'bankAccountNo' + } + let province = { + title: '省份', + value: data.province, + type: 'text', + key: 'province' + } + // 第四行 + let city = { + title: '城市', + value: data.city, + type: 'text', + key: 'city' + } + let addr = { + title: '地址', + value: data.addr, + type: 'remark', + key: 'addr' + } + let status = { + title: '单证状态', + value: this.getStatusLabel(data.status), + type: 'text', + key: 'status' + } + // 第五行 + let image = { + title: '图片上传', + value: data.image, + type: 'text', + key: 'image' + } + let remark = { + title: '备注', + value: data.remark, + type: 'remark', + key: 'remark', + props: { + text: '修改备注', + editable: true, + maxlength: remarkMaxlength + } + } + + let tableData + tableData = [costApplyNo, cusOrgCode, cusOrgName, costTypeName, payeeName, bankName, registerBank, bankAccountNo, province, city, addr, status, image, remark] + this.tableData = tableData + this.$refs.editFormTable.init() // 延迟加载必须调用init方法 + this.tableObjData = this.$refs.editFormTable.getObjData(tableData) // 因为直接获取有延迟,所以传入数组能实时拿到最新数组 + setTimeout(() => { + // 清空表格 + this.$refs.erpTable.$refs.tableRef.tableData.data = [] + // 格式化 + if (data.detailList.length > 0) { + data.detailList.forEach(item => { + item.amount = formatMoney(item.amount, 4) + }) + } + // 提取费用类型,存入erp-table-v2 + this.classesTableData = data.detailList + // 刷新表格 + this.$refs.erpTable.refreshCurrentPage() + }, 500) + } + }) + }, + handleCancel() { + this.$router.push({name: 'expensesRequisition'}) + }, + handleSave() { + this.$refs.editFormTable.validateForm().then(() => { // 方式二: 通过Promise形式处理结果 + this.$refs.editFormTable.initResetValueData() // 记录重置默认值,this.$refs.editFormTable.reset()会重置为此刻的值 + const formData = this.$refs.editFormTable.resetValueData + // 判断以下关键字段是否为空 + if (isEmpty(this.cusOrg)) { + this.$message.error('请重新选择客户代码!') + return + } + if (isEmpty(this.costType)) { + this.$message.error('请重新选择费用类型!') + return + } + if (isEmpty(this.payee)) { + this.$message.error('请重新选择收款人!') + return + } + const table = this.$refs.erpTable + if (table.validateEditingItems()) { + // 构造请求参数 + const detailList = [] + const list = table.$refs.tableRef.tableData.data + list.forEach(item => { + detailList.push({ + id: item.id, + amount: formatMoneyToNumber(item.amount), + costCatId: item.costCatId, + costCatName: item.costCatName, + periorBegin: `${ item.periorBegin } 00:00:00`, + periorEnd: `${ item.periorEnd } 23:59:59`, + remark: item.remark, + }) + }) + const params = { + id: parseInt(this.$route.params.id, 10), + costApplyNo: formData.costApplyNo, + addr: this.payee.addr, + bankAccountNo: this.payee.bankAccountNo, + bankName: this.payee.bankName, + city: this.payee.city, + costType: this.costType.value, + costTypeName: this.costType.name, + cusOrgCode: this.cusOrg.cusOrgCode, + cusOrgId: this.cusOrg.cusOrgId, + cusOrgName: this.cusOrg.cusOrgName, + detailList: detailList, + imageUrl: formData.image, + payeeId: this.payee.id, + payeeName: this.payee.payeeName, + province: this.payee.province, + registerBank: this.payee.registerBank, + remark: formData.remark, + version: this.version + } + this.PayeeService.editRequisition(params, true).then((res) => { + if (res.resultCode === 0) { + this.$message.success('修改成功') + setTimeout(() => { + this.$router.push({ + name: 'expensesRequisition' + }) + }, 2000) + } else { + const msg = res.errorMsg + this.$message.error(msg ? `修改失败:${msg}` : `修改失败`) + } + }) + } else { + this.$message.error('请填写完整必填信息!') + } + }, (error) => { + let msgs = error.msgs.map((msg, i) => { + return error.items[i].title + msg + }) + this.$message.error('校验不通过,' + msgs.join('、')) + }) + }, + getStatusLabel(value) { + return publicChoice.documentStatusOptions.filter(item => item.value === value)[0].label + }, + getClassesTableData(value) { + this.tableLoading = true + this.PayeeService.checkRequisitionByType({costType: value}).then((res) => { + this.tableLoading = false + if (res.resultCode === 0) { + const data = res.data + data.content.forEach(item => { + console.log(item) + // 列表添加 + const table = this.$refs.erpTable + this.$nextTick(() => { + table.newRows([{ + costCatId: item.id, + costCatName: item.name, + amount: '0.0000', + periorBegin: formatDate(new Date(), 'date'), + periorEnd: formatDate(new Date(), 'date'), + remark: '' + }]) + }) + }) + } + }) + } + }, + computed: { + btnVisibles() { + return ['cancel', 'update'] + } + }, + watch: { + costType: { + handler(newName, oldName) { + // 清空表格 + this.$refs.erpTable.$refs.tableRef.tableData.data = [] + if (newName.value) { + // 根据费用类型显示不同的费用明细 + this.getClassesTableData(newName.value) + } + }, + deep: true + } + } + } +</script> diff --git a/template/src/views/home.vue b/template/src/views/home.vue new file mode 100644 index 0000000000..6ad8efc358 --- /dev/null +++ b/template/src/views/home.vue @@ -0,0 +1,119 @@ +<template> + <div class="Home"> + <h1> + <img class="vertical-middle" :src="role.img" width="50" height="50" alt="ddd"> + 欢迎 <span class="text-blue">{{role.name}}</span> 使用百果园ERP——管理系统 + </h1> + <div class="backlog_list clearfix"> + <div class="backlog_item animated" + :class="{'shake': backlog.count > 0 && backlog.shake, 'shadow-5 pointer': backlog.count > 0}" + @click="backlog.count > 0 && $router.push(backlog.to)" v-for="(backlog, index) in backlogData" :key="index"> + <div class="_title">{{backlog.title}}</div> + <div class="_bottom"> + <div class="inline-block" :class="'_icon-' + index"></div> + <div class="_count inline-block" :class="{'text-danger': backlog.count > 0}">{{backlog.count}}</div> + <span class="_detail" v-if="backlog.count > 0">详情</span> + </div> + </div> + </div> + + <!-- <router-link to="editItemTest">测试edit-item</router-link> + <br> + <router-link to="editFormTest">测试edit-form</router-link> + <br> + <router-link to="sortTableTest">测试sortTableTest</router-link> + <div style="margin-left: 500px;width: 80px"> + <remark-cell v-model="remark"></remark-cell> + </div> --> + </div> +</template> + +<script> +import { mapState } from 'vuex' +export default { + name: 'Home', + data () { + return { + remark: '这是备注', + backlogData: [ + {title: '请购单待办', count: 0, to: {name: 'purchasePending'}, shake: false}, + {title: '采购订单待办', count: 0, to: {name: 'orderPending'}, shake: false}, + {title: '待办业务3', count: 0, to: {name: 'purchasePending'}, shake: false}, + {title: '待办业务4', count: 0, to: {name: 'purchasePending'}, shake: false} + ], + timerIds: [] + } + }, + created () { + const timeoutTodo = (index, time) => { + let timerId = setTimeout(() => { + this.backlogData[index].shake = true + this.backlogData[index].count += 1 + this.$message.warning('你收到新的待办任务,请及时处理!') + setTimeout(() => { + this.backlogData[index].shake = false + }, 900) + }, time) + this.timerIds.push(timerId) + } + timeoutTodo(1, 100000) + // timeoutTodo(0, 1000) + // timeoutTodo(1, 5000) + // timeoutTodo(3, 3000) + }, + computed: { + ...mapState(['role']) + }, + beforeDestroy () { + this.timerIds.forEach(timerId => { + clearTimeout(timerId) + }) + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style scoped lang="stylus"> +@import "../assets/stylus/variable" +iconCommon($left, $top) + display inline-block + width 60px + height 60px + margin-right 16px + background-size 240px 60px + background-position $left $top + background-repeat no-repeat + background-image url('data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAICAgICAgICAgIDAgICAwQDAgIDBAUEBAQEBAUGBQUFBQUFBgYHBwgHBwYJCQoKCQkMDAwMDAwMDAwMDAwMDAwBAwMDBQQFCQYGCQ0LCQsNDw4ODg4PDwwMDAwMDw8MDAwMDAwPDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/CABEIADwA8AMBEQACEQEDEQH/xAAbAAACAwEBAQAAAAAAAAAAAAAABwUGCAQCA//aAAgBAQAAAAB1AAREQABsIABCIUABwhbakEREDDlIteGwg7ub3zoRCyDSp1OBwyrMlYmn0+IiGJXq5appd7Cv0Jb7Cn/nnVC6OhbStlWOEcyZcyZIiJeKNBsqbYQ16/o/JtryKqGy4k9OZmHDLMmuMhUVKIlbzQax2NBR7CG1EWuDiMkoXRvRal8gRwnrc2PqwRHBphfTtViaHsI+73TDkQiEQowKroWrI1wgAREZ9LNU/IbCDu4e7hQiFA6OqNcIAEREAAbCAAQiFAA//8QAGwEAAQUBAQAAAAAAAAAAAAAAAAMEBQYHAgH/2gAIAQIQAAAA1MADNMzAAugAGmaWABSwbOQzTMx13w1LoHoeaZpacQ+ehS049NV05zTM3SSSyjW6KeddJeaXpdZXaScuUsipWKlTNMzkY4HzG6C3Llp1pGhQ0LNIWkpabBdhJOc0zpw2R6eMboLc98+aRpdZ5ZyViKWFPtDgzTNJdqqhw2uh6uis30zSyOd1t3P0sADNM0FkALoHvnvmmaWBzwrSwAM0zMAC6AAaZpYAH//EABwBAAIDAQEBAQAAAAAAAAAAAAAGBAUIAwcCAf/aAAgBAxAAAADHAADS1AAbpAAz3nsABLC3qAaWosevKuN0hx6fPTPee+txBgAlymaXDqKdparGPGl9q7dNFNqYDZ9eBZ7ao82pphLHNMc0waWq9ogt6jdIrz/PfUqvxjwa6vaKQpCXLZK5kU6lpdZ9fF+7So3SK0qrmy/Fs9tX1Nq1oSz99y8gqxpbGeukROMDdJ8JDepPGe89lnDZ4a6lgANLX+yoYG6Q49uPbPeewPv74pYADS1AAbpAAz3nsAD/xAAyEAABBAIAAggGAgEFAAAAAAAFAgMEBgEHABAREhMUQ0aChBUWICEwMRckIiUzNTZV/9oACAEBAAESAPrK+B6vz7v8se9/GIqqi1UuFoxOwwmpKHJXC5lfA9XMDrgqVGN2EuQgVCsOqylg5ip6rznsv5cew7+u2sOtzAUZmwjZsG2VbC8IXYfpbFknYbpFodJdHs56r09hh+S83HjMrkSHlYQyxLhy4D6os6K9CkoxjK4/G7/LHveUMQWIx50seLlzootvtiUmqatgFq8IsNpskqqxrIcwCrjJShWkdaTdRYCzipYG/IafZzjOM5xnHRnH2zjmEHxipWEOllI4WPLc6jhSLpmwYOLgl58EdX4sLJSbcGrVqELCJ1oeEsxcMWyxguSMazYJxhR3Wkx+ygjMxI7EO31L5PkQ4D54aXJuNqUSh8FfA9XLXQMWQIFDtiay9WKbBUVMxrTajFwLPFzD+FuqxhuJE4qFvL0sugoLWlxtxOWSYzZNdGBi8EnXcKxVrbBbMV9vkEonxkZGJfMokf3nr/1LNWCFWmtRJy2X0SWsPxJerzbDBCXWCfQsTZW8x1N1OspppKz2M4jOYtW67I5UyVOPlnpT2e2nlZHT1SgueFnvjCbHdp0bq9uxu/yx73lEtpao6XopWvkpFVOMWYmmKxVQFp3jLsRSxbERGerEZM93EwptKmTqaAsWzJTmvT5CK+OvG78uK2xesuiGwisE3Edy+gH2i9IXdA/pzJasA5Z3HGue0RRdwOS+nAXIeKhfMr4Hq4xjOc4xjHTnP6w7XCFToW0AMxbfxWLMqzxdnnbc5/ivUSXf97tbCpn6LB/rOtaoWx/m+DfcGyc0GLJlmH8RQUc+8zGy6mNZmixAWMY+WIhvL+MOkoIX/mxP26P7zH22l/3s77Xjd/lj3vFOIDRNuqpUyz3kOMMQZZWPulBIm5Xrk5fXNj1Yy/Ojh51zJano15E7GGhSgCbEYSRqgsAmbdtO3wHBaTNMV+wxrTHC7YsMRmhxKKW2GnZNuHHI8vE3mDOFa2ViGwkvMEpBypUSUN3Ld5B+LNsE5uyxJDChhETs8COrN9soIQ0pkaPk4TEZ2JZyGvyACn0rCK+NAMxC/bWq9Wu7LhLtBdRVQ7DiYWeCvgerihNxXbzS2p3VzBcOjkzMR7IyO2LfYFwU78Ft0wiKtarVUy1QJZHk0JcZeTh4WU4ixHJHWdyh1MJhbeJ03dHWhW1iuR2uxA1UZDH1nPOhN5PVi31FKk5lyW25wtn+Krz/AOQjg/V9iWAcCGyK9GYaAsdhHcFaxukYmOkPCkIZYlMuOr2Y80/eDq2XEuowphGVbv8ALHveVYRT7RqsRVJd3HUlkMblGb0y2vYWvxQLGvNkQLVSLQXyNBpNgZL9idK0QmJEbyoqcvWUDYq4I2eGn32hwGxlnFt5f2Dr/wChC1NrQ4jPVWjOFJzTj5K7VtNlfZIEpLXWQbmXGyzbbYSBudJzKW+rDUd3kV8D1cRWpL0qMzDStcx11CIqNr6ptpe2Sp0KFBcOPwIbhQbXZ2zAbeao5TpdjFKdyrNPs2atUFQ8HNShopuUjLrgNzcF0ZUw0BkRKkJjZVlqv3i+zb4oE8REjh0sHBwOS9ziqUmQxlD+YqsrTjvBsQzHh2SI3AJi2gEJMkfaohEi/KjMOmJTDTzqEOP2EU0wPszKBxMKiutNrHWD9/fP743f5Y97zqO0rxRoL42tGEQ4EiTiaqK2dMtG/mRolIaPd7zP+LDCEvYElrYGvnMV7dVcxmYeAblCQURKVd2gCqcXvcaY+fqH4Cvgerhp11h1t9hxTLzKsLZedlypElcx+S69McX2jkvN/veYvcs3U9mF0dXuilKUrKlZypSs9KlfU6UJvxWoL5GU9BY6Oxh8PlCcqMzDkkZUiHH6Owi8bv8ALHvfpiTJY+SxNgSnoUyKvDkaWWNGD8xRE6WmGiC04Qud+Ar4Hq/Pu/yx738H/8QANxAAAgEDAgMFBgQFBQAAAAAAAQIDBBESACEFEzEQICJBYRQwUYGRkyMyYnEGFUKDoVJyhNHT/9oACAEBABM/AO/9Pf8A2PdmPIz/AMwmeIWfIY4YX6G/p3Pp28YkaJagr+ZaSBFeacj9CEeuj/DtV7Pf/eJzJb+18tcGlM8ULN+VKmNlWWBjttIoHkCe8kLtChFtmkAxHUdTqJS7ux6BVFySfTU6NG4BFxdWAIuN+z7HZTwSSx08Zv45mRSEXY7tbUfC2rWqJSkbmZi1RTBYryhQy5XIbbbVFSzSs8VPIUNQiKhblta4a1rHR7lXlyYdiQXwBNidr+XntqKZamhFArFedEyEFyxBCobEn031JXpSvUmmYtE4p1TGysSVDEH46qQkVdQ1km6QVQuEsw6OLL/gnhspnFG4IAilksELfEKTa2/lfX07A2HtTB1ipqMN5GeZ1U/py1GMKelgTaOCnjGyRoNgB+53ueyYZ01bTPtJT1EZ2dHFxuNuo305yaCOYsstK7ebQSqydegB8+2pmwlTB2TxDyvjcemqdi0UsZ2uCQDpugmZSq/tmDj++Om258sigoy+rIygeremrgAvI1lUXNgBcAfAayV8c1Dr4kLKbqwOx19jspuW0PGoREvOq6uNlIfkcxacK+SkE+HrriTVFRKIWJzelpadGxjixGeAAQFdrdOD1QrI2poZ1EnJq3AmAhJu0LHFSAcDteKxVgiqvPuqqCZ7c02HVu6nX2Aowhyt/Tz/APPY35DXGpHslv1A5dv07IjkYop46mUwv+qOWRFcf6h3D19nNXCE+XMEv+e4PJCLJf8AZUT66qJhAsZWSO0qufME2H76nqhEkMqqtgrf12LMPlr+6uv+LFr7GsBJzKaGoR5kwOzXQEWPXXImpRRmCVXkozFMFKHGRSNhcdNhrgcaRcH4/DJEppZlqFIFOFyMdTGFOVjt4jeEfiRUUsM0FZJTR7kohKF1XoLE6ihdoeG0kdE8UtNHWNdZQzun5CR4d7EdxVRyhdCjeF1ZTdWI3GqyGJKeoo6hhzI3WJEF77hrXB9Lguxcorxo+OTbkAtYX3tqICSaqr6mnVmnqGkDByochQRYfJbNFDFgJcS+0SJe+I69n0035eUaqMPf0xvoAvJTl6ovHUonm1NMiuB8AVHXUBzpa2mbeOop5Rs6MN9unQ2O3YkbSLAsjWDNbb42BO+g2az0RiE61WQsGaoaVpCR8beXcZguUsZGVibW3RB89e00/wD6ajqYcnGCJdrykXtGOmvaIDZVcEmwcnoNKbjKOnjRh+4YEHX2OziKNJV1l4jHSz8NW55jLF+EYlxOXiNxbQhSaOOtODGOeh4jBItNIRKC2N+u51/DbEUXEzACKiSijaONfaIwCtTThSr7lb+JTTi3LsfHxHh0fVoWO8kY3jP6bHu/Ajcag4NwVoxPEoZwpnlWRwFI3t/1owxwHkQjCG8cd1U4AXAJ38+36aivmZGYBAtt7k2tqOsp46zidclOnt1VR0JfmGPmXvtdjdlBB1xnhU9VEkp6tEmKywsfMxMp+Ol49xCZ6b4Gpp45SYr9QjS5W8tcGpo4KJ8hi3tETiQ1Fx15xfXDojAksCMWiUxZFFwuQAoA36AWA7QSCgJsWuLHYakrJ2Ssk8PgIJ5Z5hNhj09OmjM9kVmALHxeQ31LWTulcxYKVIY4HO+2PT06dn2O2ejpKxEqQoTnRiqhlwfFQCVtewv0GkcrP7SzmQy5jfIsbnVEAicbjQfi1tFEBiZit+fBa0guyjcgshiSnqaSZYjVQROA8cVVkWVSNrGxI9z9NISrIym6srDcEHcEakdmkZ73yLkkk3876PEqrlW+GHMtb5aO5JPme/JM7RJbpihOI+Q7JZneNLbDFGJA+Q7Psd2ndo5Y3HRkdSCpHxB1XzyVMxVegMkrM1h5b+5+nv8A7HuP/8QAPhEAAQIDAwgHBQUJAAAAAAAAAQIDAAQREiExBQcQQURRgsITICIyYXGBFDCRocFCUmLR4TRDU3KSorGy8f/aAAgBAgEBPwDr5xdn4+T3+bvaODn927M2HUN079b91kV6mcXZ+Pk0tSilJtqISnedfkMTHQS/8X+0/n9IdlFITbBCk7x9dY61DjoIpozd7Rwc+hbzaCApQBOFTSvlvicyspt1TTKAsoRbV2rNBfdgq+7w1Q1lBhbCXioJSoDEgXkYefh1XllCCoAqI1DGFZVb6OqQSomgTgbW79YMtOOKDilIChWgpWlfGGsoFBKJgWVAVqMCN4/KJWZ6cFQSQNVbq6M4uz8fJolG0qJUvupFT47h6mHnlOqtK/54DQw+plVpPqNRG4xNtJQoFHdUKj8vQ6Ut1FawpJTDSr6HXCE2SSdUEkmCCDQxm72jg59C5NuZyi6hxIWjo01rWqDW5KTqtUtXUMTcwxkhKENM1CzTs0Ar+JR1nVXG+EMyU0l1xpgdMlJBQoWbyLqpwv1KGO+Mg09haoq12cfpw9306r1Pbm7WFk0/m1/LRP06dinetH+ml+nOLs/HyaC0WmXEnGqa/P69R/8AZ2uL4VH69RV6AYbFThWFVIwhOMO94xm72jg54nW1uy7iEGiilQHmQafOMhlDYWwGuicSASKg2qi5VRjgYkWp6cllSylJUCaLKr1tmvaFPtb0Gt3pExZlMoNOKuSpBbtb1AgpCjvN9IyPLKM0ZhDPRNlBFK3qNoEKKdVwOO/qPMoeQULFQYcyUwGyECycQRWoI84ye8p6XQtWJESMumaSp13tFVU+ASDgIlpNqXr0aaVxx+ujOLs/HyRLAF1FcLQ/zAdCXlhzBRIPxx9DDzCmlUPodRG8aEpr5RlC5ywMEgAeWNfXHqN3giOiVuhSVkAUwgNKrDveMZu9o4OfRNmYl55TwaU4VICUUwTf2gvdffaNd0ESk6tftLJQ6hNpV9Oz4KQRaF0MTADNiYSpUq53VL7yK4BRqeyfsLxGvUYlppzJ7gl5g1bNzbh/0X+LcftefVIrE0ymXc6MUA1C0vD0FIlZdLDYQBT5369OcXZ+PkhIJN2MTsk4twkAVoKioqTS8gQ0p9HYskj7pBP6j0h7o2qWmhXdaN3mNXxgz7o7tEjcBd67/WsTMyX6VABApd1BCk4+GuATChcfDRm72jg59M5kmWnFBTqakClQSm7cbJFR5wZdst9EUixSlNVMKQ62mSHs0z2pVdyVH93uSo7vuq1YGMiPqKnWCvpEtkBK8ahQrZJwJTgT7nOLs/HyQDS8QVEmpxj2p2lLaqeZ9xU6KnRm72jg5+qtCVpKVAEHUcIZYbZTZbSEjcAAPgPc5xdn4+T3+bvaODn9x//EAEYRAAIAAwUBCwkECAcBAAAAAAECAwQRAAUSITFBBhATICIyUWFxgYIHFDBDRIOhwcMVQlKRMzRicpKxstEWJDVTc6Lh8f/aAAgBAwEBPwDj7mvWeH5+n8vHsPvvpejlLqMxJTE1ipwODKnO4Qlda5Up0GvE3Nes8Pz35e7XiJwjkIn4m2/ujVu4W80ktPOD/Aafzr8LTN2RIScIpDw/xKagfvDVe8cZpmEriGXAY6Cor+WtndUUsxAA1J0tCjJFXEjBh0g1Hw3vLx7D776W9DgRIgLKpIXUgE07ei0lc6RYKxYzlA74F5OKpyz1XLPXPbaNdseHHeAELMpOgJyBpXs6+LJS6TEZYbuIYJpiauEdtLQtxs0JgpGZVhBcZighofB6YgRqToFyJsl63HKw3locOM8N6YmLhS2E1BwAUyOYr32nNzKx0SPdjGLCdsFDQRIbnRX2Z7GyHwJve6fs1lhtFR3I5QQ4sB6CdK9mm9ua9Z4fnvXbAR3aJE5kMYj17AviNB2VtNzcSZfG57BsA2ADYBvSc5ElYmNO8HRhtBHRa85ZIUQPD/RuMS9VdV8JqN+cvvzaKYfAxGpTMDI1FbXdeUOeQslRQ0IOoNt0smzQ1mYfPhGvd/5r2Vtel5G8YUGXgc6LQt+yBrXvB/h67QYUOUghRkqD4DbaWmYczDESGaqdDmNDTbnrby8ew+++lvJOxJW7YLwmKOIjUpSkQUzZhtw1CUNR1Wk5aPfLO8WPQoK8qpNP2VGwbaaZWiRp6UaFCixzwLsCIinFkDnRudydqnIHZbdDX7QjVXDytPn4ud38WRqdz0yIeoipj/46HDXqx725you68C/6Pg17OExcjv139zXrPD894yzS0rHhtzgYdeqoJp3EgHr4k5+pS9f2/wAqj514kh/lr1jwtkQBx27fiT+Vr9irDgDFEMME0qBirkcqdFrtaDBiu3DMlMlIWpI+Wy05+rv+6f5W3M/6fD8X9Rt5ePYfffStIxUhTEN4gqqspPYCCfha/wAPEKRzG4aGxYA0Iw0Oa0OmotPxZCSmlmkRkIGJAgpDigjkmv3ehxTPvzlsU5d0aGoqyOImEbFIIYqOgZVtfU0olBLPH4aKHBrTJFwkFQ23MjToz4kjPRpKMseA2F10ORpUU21GhtLbsrweZV5hhFUjAysAFZGOYIUDuOzsqLbp5CFI3lGgQRRFbIa0qAde+26K84tzxYUnJUhpDCxKjNmiMvOYmtaVoBp8KXrfs7ehUzUTHhrTIClaV5oHQN7c16zw/O13hTMww2mNa9lRZZkJNxVjc1yyt1Z6+EgG03KPLPhbuI0YdIO0byoWz2bT0WvvkxxCHMRQF61pXF4q14l+N5rNwJs80Eqx6j/9a3+J7v8A9z/q39rSN53ZKRYkRYpJiGpqpyzJyy67TW6SReE6h8ypHNbo7LbnEK3fCBFNfixI+FvLx7D776W9JiWmZBYLRVhhXLRMWbNlRSnTlycIpnmbAzkjDTzWOHhO2Fcq8rLIo4OE550tMSzNGxyzKs3CzZU5r01Kig5Q++mh2bRaalYd4w2mZZcMRc4kMf1oPw9I+72cVSQai1zz8W9JTzlg7MOeRCgUxAZ0xEMcqbLXxeUS8Zp48Q1JyBoF5IyXIZDLXf3Nes8PzsgJYBddlr3umPEjllAxUFRUYmanKZVrWlf7i0tEnIQ4Ewyy/gZSR3bQewi01wMtThJdQx+7jY07QDl2E2N8zAoIZCKPuqKL3jPF4q2n7wacwFlUFRTIUqNmXV1cSIAVNRXLTptJTbO8JyyOYjUaGFWqDPPp5PXraLLwkQsIakgHKgztITRaJBJdH4QnEgVRg/LPLr1+O95ePYfffS35K+JqSUpCagJrQhWz6RiBoeywmYgi8KGOOta7a61tBitPN5zK8iaTNlHrOllH4vxp97UdFr+l1CwpgJwbRQSyaUKmmIDUK2oHb6Hc16zw/OwJBqNbF2JxE59NvtCZph4V6dGI/wB/QJLQkcuqKGOpAFT367yS0JGLqihjqQACe073l49h999Lio7IwZSQRoRkbR5iJHbFEYs3SSSfzPodzXrPD8/T+Xj2H330vQf/2Q==') + +.Home + .backlog_list + .backlog_item + padding 15px + width: 21% + margin-right: 40px + float: left + border-radius 6px + box-shadow $box-shadow-inset + &.shadow-5 + box-shadow $box-shadow-5 + ._title + font-size 22px + padding 10px 0 + ._bottom + padding-top 15px + ._icon + &-0 + iconCommon(0, 0) + &-1 + iconCommon(-60px, 0) + &-2 + iconCommon(-120px, 0) + &-3 + iconCommon(-180px, 0) + ._count + font-size 33px + font-weight: 700 + ._detail + float: right + margin-top: 40px +</style> diff --git a/template/static/favicon.ico b/template/static/favicon.ico new file mode 100644 index 0000000000..82ddd06cd7 Binary files /dev/null and b/template/static/favicon.ico differ diff --git "a/template/static/imgs/\344\273\223\347\256\241.png" "b/template/static/imgs/\344\273\223\347\256\241.png" new file mode 100644 index 0000000000..7793b99195 Binary files /dev/null and "b/template/static/imgs/\344\273\223\347\256\241.png" differ diff --git "a/template/static/imgs/\344\273\223\347\256\241\344\270\273\347\256\241.png" "b/template/static/imgs/\344\273\223\347\256\241\344\270\273\347\256\241.png" new file mode 100644 index 0000000000..77a18c989d Binary files /dev/null and "b/template/static/imgs/\344\273\223\347\256\241\344\270\273\347\256\241.png" differ diff --git "a/template/static/imgs/\344\274\232\350\256\241.png" "b/template/static/imgs/\344\274\232\350\256\241.png" new file mode 100644 index 0000000000..ec4e84750e Binary files /dev/null and "b/template/static/imgs/\344\274\232\350\256\241.png" differ diff --git "a/template/static/imgs/\344\276\233\345\272\224\345\225\206.png" "b/template/static/imgs/\344\276\233\345\272\224\345\225\206.png" new file mode 100644 index 0000000000..ec4e84750e Binary files /dev/null and "b/template/static/imgs/\344\276\233\345\272\224\345\225\206.png" differ diff --git "a/template/static/imgs/\345\207\272\347\272\263.png" "b/template/static/imgs/\345\207\272\347\272\263.png" new file mode 100644 index 0000000000..ec4e84750e Binary files /dev/null and "b/template/static/imgs/\345\207\272\347\272\263.png" differ diff --git "a/template/static/imgs/\345\272\227\351\225\277.png" "b/template/static/imgs/\345\272\227\351\225\277.png" new file mode 100644 index 0000000000..ec4e84750e Binary files /dev/null and "b/template/static/imgs/\345\272\227\351\225\277.png" differ diff --git "a/template/static/imgs/\351\207\207\350\264\255\346\200\273\347\233\221.png" "b/template/static/imgs/\351\207\207\350\264\255\346\200\273\347\233\221.png" new file mode 100644 index 0000000000..922308f0b7 Binary files /dev/null and "b/template/static/imgs/\351\207\207\350\264\255\346\200\273\347\233\221.png" differ diff --git "a/template/static/imgs/\351\207\207\350\264\255\346\226\207\345\221\2302.png" "b/template/static/imgs/\351\207\207\350\264\255\346\226\207\345\221\2302.png" new file mode 100644 index 0000000000..b8c2f2a388 Binary files /dev/null and "b/template/static/imgs/\351\207\207\350\264\255\346\226\207\345\221\2302.png" differ diff --git a/template/test/e2e/custom-assertions/elementCount.js b/template/test/e2e/custom-assertions/elementCount.js deleted file mode 100644 index 818e602091..0000000000 --- a/template/test/e2e/custom-assertions/elementCount.js +++ /dev/null @@ -1,27 +0,0 @@ -// A custom Nightwatch assertion. -// The assertion name is the filename. -// Example usage: -// -// browser.assert.elementCount(selector, count) -// -// For more information on 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) - }) - } -} diff --git a/template/test/e2e/nightwatch.conf.js b/template/test/e2e/nightwatch.conf.js deleted file mode 100644 index f019c0ac44..0000000000 --- a/template/test/e2e/nightwatch.conf.js +++ /dev/null @@ -1,46 +0,0 @@ -require('babel-register') -var config = require('../../config') - -// http://nightwatchjs.org/gettingstarted#settings-file -module.exports = { - src_folders: ['test/e2e/specs'], - 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 - } - } - } -} diff --git a/template/test/e2e/runner.js b/template/test/e2e/runner.js deleted file mode 100644 index 27220329fe..0000000000 --- a/template/test/e2e/runner.js +++ /dev/null @@ -1,48 +0,0 @@ -// 1. start the dev server using production config -process.env.NODE_ENV = 'testing' - -const webpack = require('webpack') -const DevServer = require('webpack-dev-server') - -const webpackConfig = require('../../build/webpack.prod.conf') -const devConfigPromise = require('../../build/webpack.dev.conf') - -let server - -devConfigPromise.then(devConfig => { - const devServerOptions = devConfig.devServer - const compiler = webpack(webpackConfig) - server = new DevServer(compiler, devServerOptions) - const port = devServerOptions.port - const host = devServerOptions.host - return server.listen(port, host) -}) -.then(() => { - // 2. run the nightwatch test suite against it - // to run in additional browsers: - // 1. add an entry in test/e2e/nightwatch.conf.js 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 - let 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']) - } - - const spawn = require('cross-spawn') - const 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 - }) -}) diff --git a/template/test/e2e/specs/test.js b/template/test/e2e/specs/test.js deleted file mode 100644 index 92ecc1216d..0000000000 --- a/template/test/e2e/specs/test.js +++ /dev/null @@ -1,19 +0,0 @@ -// For authoring Nightwatch tests, see -// http://nightwatchjs.org/guide#usage - -module.exports = { - 'default e2e tests': function {{#if_eq lintConfig "airbnb"}}test{{/if_eq}}(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() - } -} diff --git a/template/test/unit/.eslintrc b/template/test/unit/.eslintrc deleted file mode 100644 index 74061c48b8..0000000000 --- a/template/test/unit/.eslintrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "env": { {{#if_eq runner "karma"}} - "mocha": true{{/if_eq}}{{#if_eq runner "jest"}} - "jest": true{{/if_eq}} - }, - "globals": { {{#if_eq runner "karma"}} - "expect": true, - "sinon": true{{/if_eq}} - } -} diff --git a/template/test/unit/index.js b/template/test/unit/index.js deleted file mode 100644 index c69f33fd8a..0000000000 --- a/template/test/unit/index.js +++ /dev/null @@ -1,13 +0,0 @@ -import Vue from 'vue' - -Vue.config.productionTip = false - -// require all test files (files that ends with .spec.js) -const testsContext = require.context('./specs', true, /\.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) diff --git a/template/test/unit/jest.conf.js b/template/test/unit/jest.conf.js deleted file mode 100644 index c524e9d7bd..0000000000 --- a/template/test/unit/jest.conf.js +++ /dev/null @@ -1,32 +0,0 @@ -const path = require('path') - -module.exports = { - rootDir: path.resolve(__dirname, '../../'), - moduleFileExtensions: [ - 'js', - 'json', - 'vue' - ], - moduleNameMapper: { - '^@/(.*)$': '<rootDir>/src/$1' - }, - transform: { - '^.+\\.js$': '<rootDir>/node_modules/babel-jest', - '.*\\.(vue)$': '<rootDir>/node_modules/vue-jest' - },{{#e2e}} - testPathIgnorePatterns: [ - '<rootDir>/test/e2e' - ],{{/e2e}} - snapshotSerializers: ['<rootDir>/node_modules/jest-serializer-vue'], - setupFiles: ['<rootDir>/test/unit/setup'], - mapCoverage: true, - coverageDirectory: '<rootDir>/test/unit/coverage', - collectCoverageFrom: [ - 'src/**/*.{js,vue}', - '!src/main.js', - {{#router}} - '!src/router/index.js', - {{/router}} - '!**/node_modules/**' - ] -} diff --git a/template/test/unit/karma.conf.js b/template/test/unit/karma.conf.js deleted file mode 100644 index 5d3966d23e..0000000000 --- a/template/test/unit/karma.conf.js +++ /dev/null @@ -1,33 +0,0 @@ -// 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 karmaConfig (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' } - ] - } - }) -} diff --git a/template/test/unit/setup.js b/template/test/unit/setup.js deleted file mode 100644 index edbdbae81e..0000000000 --- a/template/test/unit/setup.js +++ /dev/null @@ -1,3 +0,0 @@ -import Vue from 'vue' - -Vue.config.productionTip = false diff --git a/template/test/unit/specs/HelloWorld.spec.js b/template/test/unit/specs/HelloWorld.spec.js deleted file mode 100644 index 1c75ca64cd..0000000000 --- a/template/test/unit/specs/HelloWorld.spec.js +++ /dev/null @@ -1,11 +0,0 @@ -import Vue from 'vue' -import HelloWorld from '@/components/HelloWorld' - -describe('HelloWorld.vue', () => { - it('should render correct contents', () => { - const Constructor = Vue.extend(HelloWorld) - const vm = new Constructor().$mount() - expect(vm.$el.querySelector('.hello h1').textContent) - {{#if_eq runner "karma"}}.to.equal('Welcome to Your Vue.js App'){{/if_eq}}{{#if_eq runner "jest"}}.toEqual('Welcome to Your Vue.js App'){{/if_eq}} - }) -})