From aab1f279c407bcf65f495073ebb1ccc50f7b0eab Mon Sep 17 00:00:00 2001 From: halower <121625933@qq.com> Date: Tue, 21 Nov 2017 17:01:50 +0800 Subject: [PATCH 01/12] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 4fd7d31..ed95065 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,10 @@ # vue2-tree +## the version2 coming soon ... + - 1、abandoned recursively + - 2、support custom template + - 3、simplify the data structure + ## online demo [https://halower.github.io/vue2-tree](https://halower.github.io/vue2-tree) ## features From 4143d370ea76ae266541ea00eaec50804e504e29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=B5=B7=E9=BE=99?= Date: Wed, 22 Nov 2017 10:21:47 +0800 Subject: [PATCH 02/12] support halfcheck and allcheck model --- src/components/vtree/tree.vue | 16 ++++++++++++++-- src/pages/demo/HelloWorld.vue | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/components/vtree/tree.vue b/src/components/vtree/tree.vue index 0b6a7f1..5412128 100644 --- a/src/components/vtree/tree.vue +++ b/src/components/vtree/tree.vue @@ -4,7 +4,7 @@ - + @@ -28,6 +28,10 @@ export default { type: Boolean, default: false }, + halfcheck: { + type: Boolean, + default: false + }, level: { type: String, default: '0' @@ -71,8 +75,16 @@ export default { */ this.$on('parentSeleted', (node, checked) => { Vue.set(node, 'checked', checked) + let childrenCheckedNum = node.parent.children.filter(node => node.checked).length if (node.parent) { - this.$emit('parentSeleted', node.parent, checked) + if (this.halfcheck) { + if (!checked && childrenCheckedNum > 0) return false + this.$emit('parentSeleted', node.parent, checked) + } else { + if (checked && childrenCheckedNum === node.parent.children.length) { + this.$emit('parentSeleted', node.parent, checked) + } + } } }) diff --git a/src/pages/demo/HelloWorld.vue b/src/pages/demo/HelloWorld.vue index 28ad347..3e47db6 100644 --- a/src/pages/demo/HelloWorld.vue +++ b/src/pages/demo/HelloWorld.vue @@ -9,7 +9,7 @@ - + From b3e3a901d1fd4073af0aec2b0bf0b2db685bbbda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=B5=B7=E9=BE=99?= Date: Thu, 23 Nov 2017 10:57:20 +0800 Subject: [PATCH 03/12] update style --- .babelrc | 18 - .editorconfig | 9 - .eslintignore | 5 - .eslintrc.js | 27 - .gitignore | 52 +- .postcssrc.js | 8 - LICENSE | 201 +++++ README.md | 396 +++------ _config.yml | 1 + build/build.js | 22 +- build/check-versions.js | 32 +- build/dev-client.js | 1 - build/dev-server.js | 92 +- build/utils.js | 21 +- build/vue-loader.conf.js | 15 +- build/webpack.base.conf.js | 28 +- build/webpack.dev.conf.js | 15 +- build/webpack.prod.conf.js | 43 +- build/webpack.test.conf.js | 32 - config/_README.md | 43 - config/dev.env.js | 5 +- config/index.js | 9 +- config/prod.env.js | 1 - config/test.env.js | 7 - dist/index.html | 1 + .../app.0ca738bade0f67ec53d9de07fde83b19.css | 1 + ...p.0ca738bade0f67ec53d9de07fde83b19.css.map | 1 + dist/static/js/app.e7eb3ac0e0a2c5daa1bb.js | 821 ++++++++++++++++++ .../static/js/app.e7eb3ac0e0a2c5daa1bb.js.map | 1 + .../js/manifest.5dbf75ce9d711e26a95c.js | 2 + .../js/manifest.5dbf75ce9d711e26a95c.js.map | 1 + dist/static/js/vendor.c7fdd7253686ff396294.js | 7 + .../js/vendor.c7fdd7253686ff396294.js.map | 1 + docs/index.html | 3 + .../app.0ca738bade0f67ec53d9de07fde83b19.css | 1 + ...p.0ca738bade0f67ec53d9de07fde83b19.css.map | 1 + docs/static/js/app.e7eb3ac0e0a2c5daa1bb.js | 821 ++++++++++++++++++ .../static/js/app.e7eb3ac0e0a2c5daa1bb.js.map | 1 + .../js/manifest.5dbf75ce9d711e26a95c.js | 2 + .../js/manifest.5dbf75ce9d711e26a95c.js.map | 1 + docs/static/js/vendor.c7fdd7253686ff396294.js | 7 + .../js/vendor.c7fdd7253686ff396294.js.map | 1 + index.html | 2 +- package.json | 109 +-- src/App.vue | 135 ++- src/assets/half.jpg | Bin 0 -> 975 bytes src/assets/logo.png | Bin 9628 -> 6849 bytes src/assets/search.png | Bin 0 -> 3166 bytes src/assets/treeClose-2.png | Bin 0 -> 363 bytes src/assets/treeOpen-1.png | Bin 0 -> 485 bytes src/components/_README.md | 5 - src/components/tree/combotree.vue | 72 ++ src/components/tree/tree-store.js | 209 +++++ src/components/tree/tree.md | 151 ++++ src/components/vtree/render.js | 11 - src/components/vtree/tree.vue | 156 ---- src/config/_README.md | 43 - src/config/apistore.js | 7 - src/config/baseapi.js | 55 -- src/config/i18n.js | 8 - src/config/req.conf.js | 3 - src/config/routestore.js | 7 - src/config/service.conf.js | 23 - src/directives/_README.md | 3 - src/directives/index.js | 90 -- src/fetch/_README.md | 27 - src/fetch/demo-api.js | 17 - src/languages/_README.md | 1 - src/languages/en.js | 13 - src/languages/zh.js | 13 - src/main.js | 31 +- src/pages/_README.md | 9 - src/pages/demo/HelloWorld.vue | 82 -- src/pages/demo/z-routes.js | 8 - src/store/_README.md | 60 -- src/store/eventbus.js | 17 - src/store/index.js | 28 - src/store/modules/test.js | 28 - src/store/mutation-types.js | 2 - static/.gitkeep | 0 test/e2e/custom-assertions/elementCount.js | 26 - test/e2e/nightwatch.conf.js | 46 - test/e2e/runner.js | 33 - test/e2e/specs/test.js | 19 - test/unit/.eslintrc | 9 - test/unit/index.js | 13 - test/unit/karma.conf.js | 33 - test/unit/specs/Hello.spec.js | 11 - 88 files changed, 2737 insertions(+), 1635 deletions(-) delete mode 100644 .babelrc delete mode 100644 .editorconfig delete mode 100644 .eslintignore delete mode 100644 .eslintrc.js delete mode 100644 .postcssrc.js create mode 100644 LICENSE create mode 100644 _config.yml delete mode 100644 build/webpack.test.conf.js delete mode 100644 config/_README.md delete mode 100644 config/test.env.js create mode 100644 dist/index.html create mode 100644 dist/static/css/app.0ca738bade0f67ec53d9de07fde83b19.css create mode 100644 dist/static/css/app.0ca738bade0f67ec53d9de07fde83b19.css.map create mode 100644 dist/static/js/app.e7eb3ac0e0a2c5daa1bb.js create mode 100644 dist/static/js/app.e7eb3ac0e0a2c5daa1bb.js.map create mode 100644 dist/static/js/manifest.5dbf75ce9d711e26a95c.js create mode 100644 dist/static/js/manifest.5dbf75ce9d711e26a95c.js.map create mode 100644 dist/static/js/vendor.c7fdd7253686ff396294.js create mode 100644 dist/static/js/vendor.c7fdd7253686ff396294.js.map create mode 100644 docs/index.html create mode 100644 docs/static/css/app.0ca738bade0f67ec53d9de07fde83b19.css create mode 100644 docs/static/css/app.0ca738bade0f67ec53d9de07fde83b19.css.map create mode 100644 docs/static/js/app.e7eb3ac0e0a2c5daa1bb.js create mode 100644 docs/static/js/app.e7eb3ac0e0a2c5daa1bb.js.map create mode 100644 docs/static/js/manifest.5dbf75ce9d711e26a95c.js create mode 100644 docs/static/js/manifest.5dbf75ce9d711e26a95c.js.map create mode 100644 docs/static/js/vendor.c7fdd7253686ff396294.js create mode 100644 docs/static/js/vendor.c7fdd7253686ff396294.js.map create mode 100644 src/assets/half.jpg create mode 100644 src/assets/search.png create mode 100644 src/assets/treeClose-2.png create mode 100644 src/assets/treeOpen-1.png delete mode 100644 src/components/_README.md create mode 100644 src/components/tree/combotree.vue create mode 100644 src/components/tree/tree-store.js create mode 100644 src/components/tree/tree.md delete mode 100644 src/components/vtree/render.js delete mode 100644 src/components/vtree/tree.vue delete mode 100644 src/config/_README.md delete mode 100644 src/config/apistore.js delete mode 100644 src/config/baseapi.js delete mode 100644 src/config/i18n.js delete mode 100644 src/config/req.conf.js delete mode 100644 src/config/routestore.js delete mode 100644 src/config/service.conf.js delete mode 100644 src/directives/_README.md delete mode 100644 src/directives/index.js delete mode 100644 src/fetch/_README.md delete mode 100644 src/fetch/demo-api.js delete mode 100644 src/languages/_README.md delete mode 100644 src/languages/en.js delete mode 100644 src/languages/zh.js delete mode 100644 src/pages/_README.md delete mode 100644 src/pages/demo/HelloWorld.vue delete mode 100644 src/pages/demo/z-routes.js delete mode 100644 src/store/_README.md delete mode 100644 src/store/eventbus.js delete mode 100644 src/store/index.js delete mode 100644 src/store/modules/test.js delete mode 100644 src/store/mutation-types.js delete mode 100644 static/.gitkeep delete mode 100644 test/e2e/custom-assertions/elementCount.js delete mode 100644 test/e2e/nightwatch.conf.js delete mode 100644 test/e2e/runner.js delete mode 100644 test/e2e/specs/test.js delete mode 100644 test/unit/.eslintrc delete mode 100644 test/unit/index.js delete mode 100644 test/unit/karma.conf.js delete mode 100644 test/unit/specs/Hello.spec.js diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 019303f..0000000 --- a/.babelrc +++ /dev/null @@ -1,18 +0,0 @@ -{ - "presets": [ - ["env", { - "modules": false, - "targets": { - "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] - } - }], - "stage-2" - ], - "plugins": ["transform-runtime", "transform-vue-jsx"], - "env": { - "test": { - "presets": ["env", "stage-2"], - "plugins": ["istanbul"] - } - } -} diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 9d08a1a..0000000 --- a/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index e2192c5..0000000 --- a/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -/build/ -/config/ -/dist/ -/*.js -/test/unit/coverage/ diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index e0dd62d..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,27 +0,0 @@ -// https://eslint.org/docs/user-guide/configuring - -module.exports = { - root: true, - parser: 'babel-eslint', - parserOptions: { - sourceType: 'module' - }, - env: { - browser: true, - }, - // https://github.com/standard/standard/blob/master/docs/RULES-en.md - extends: 'standard', - // required to lint *.vue files - plugins: [ - 'html' - ], - // add your custom rules here - 'rules': { - // allow paren-less arrow functions - 'arrow-parens': 0, - // allow async-await - 'generator-star-spacing': 0, - // allow debugger during development - 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0 - } -} diff --git a/.gitignore b/.gitignore index dfb4167..5148e52 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,37 @@ -.DS_Store -node_modules/ -/dist/ +# Logs +logs +*.log npm-debug.log* -yarn-debug.log* -yarn-error.log* -/test/unit/coverage/ -/test/e2e/reports/ -selenium-debug.log - -# Editor directories and files -.idea -.vscode -*.suo -*.ntvs* -*.njsproj -*.sln + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history diff --git a/.postcssrc.js b/.postcssrc.js deleted file mode 100644 index 09948d6..0000000 --- a/.postcssrc.js +++ /dev/null @@ -1,8 +0,0 @@ -// https://github.com/michael-ciniawsky/postcss-load-config - -module.exports = { - "plugins": { - // to edit target browsers: use "browserslist" field in package.json - "autoprefixer": {} - } -} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8dada3e --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index ed95065..f34eebf 100644 --- a/README.md +++ b/README.md @@ -1,191 +1,134 @@ -# vue2-tree - -## the version2 coming soon ... - - 1、abandoned recursively - - 2、support custom template - - 3、simplify the data structure - -## online demo - [https://halower.github.io/vue2-tree](https://halower.github.io/vue2-tree) -## features - -* normal tree - -* lazy loading - -* loading tip - -* dynamic add node - -* custom tree icon, use [iconFont](http://iconfont.cn/) - -* custom icon style. color - -* ie9,10,11,spartan - -__issues__ - -* checkbox status fix later - - showCheckbox: true, - halfCheck: true - - -notice: - - loadingChild method - - import { ZTree, ComboZTree, generateKey, getParentNode } from 'vue2-lazy-tree' - - import ZTree from 'vue2-lazy-tree' - - -## Build Setup - -``` bash -# install dependencies -npm install - -# serve with hot reload at localhost:8080 -npm run dev - -# build for production with minification publish to npm -npm run build +### 贡献者名单 + - lily7129 +### develop logs +- 2017-5-2: 支持下拉树, add combotree +- 2017-5-26: 添加父节点半选状态框 +- 2017-6-08: 修复火狐复选事件的bug +- 2017-6-21: 修复动态渲染 +### QQ交流群:255965810 + +### How to run demo ``` - ------ - -### How to install the plugin (the npm package is not necessarily updated synchronously with the source code) - - npm install vue2-lazy-tree or cnpm install vue2-lazy-tree (国内) - -### How to use in u production - - import { ZTree } from 'vue2-lazy-tree' - import './../dist/vue2-tree.min.css' - Vue.use(ZTree) - -### Demo +npm install +npm run dev ``` +### 在线Demo + [点击进入线上效果](https://halower.github.io/vue2-tree/) +### 效果图 + ![效果图](http://files.cnblogs.com/files/rohelm/jdfw.gif) +### 示例 +```html ``` - ### 属性 | 参数 | 说明 | 类型 | 可选值 | 默认值 | |---------- |-------- |---------- |---------- |---------- | @@ -194,49 +137,8 @@ npm run build ``` options: { - labelKey: '', { String } set the label field, default 'label' showCheckbox: true, //是否支持多选, - halfCheck: true,//控制父框是否需要半钩状态, - - lazy: true, // 是否是异步加载数据 - load: this.loadingChild, // 异步加载数据方法 - - showSearch: false, // 是否显示搜索 - - iconClass: { // custom icon class, Default - close: 'icon-youjiantou', - open: 'icon-xiajiantou', - add: 'icon-add' - }, - iconStyle: { // custom icon style, sometimes u just need to set color - color: '#108ee9' // default #000 - }, - - dynamicAdd: true, - // function handle display add button - // return true or false, default true - // [Function] param: { node } - dynamicAddFilter: (node) => { - if (node.type === 1 || node.type === 2) { - return true - } - return false - }, - // function handle add node; the new node must have `dynamicAdd : true` property - // the tree component rely on this show editor - // param { node } - // return Promise(parent.children) must bu children Array - dynamicAddNode: [Function], - // function handle save node; when successfull saved, the new node must del `dynamicAdd` property - // the tree component rely on this save node - // param { node, $event } - // return Promise(node) must be node Object return from server - dynamicSaveNode: [Function], - // function handle leaf icon - // param { node } - // return { String } , iconfont class name, default '' - leafIcon: [Function], - + halfCheckedStatus: true,//控制父框是否需要半钩状态, search: { useInitial: true, //是否支持拼音首字母搜索         useEnglish: false, //是否是英文搜索 @@ -245,17 +147,15 @@ npm run build /* 节点元素 */ { - id: 1, // 节点标志 - label: '一级节点', // 节点名称 - open: true, // 是否打开节点 - checked: false, // 是否被选中 - parentId: null, // 父级节点Id - visible: true, // 是否可见 - searched: false, // 是否是搜索值, - nodeSelectNotAll: false, // 表示父框可以半钩状态 - leaf: true, // 是否是叶子节点, 如果是叶子结点, lazy=true 时,显示 leafIcon, 此节点不再异步加载数据 - children: [] // 子节点, - + id: 1, //节点标志 + label: '一级节点', //节点名称 + open: true, // 是否打开节点 + checked: false, //是否被选中 + parentId: null, //父级节点Id + visible: true, //是否可见 + searched: false, //是否是搜索值, + nodeSelectNotAll: false,//表示父框可以半钩状态 + children: [] //子节点 } ``` ### 方法 @@ -269,43 +169,3 @@ npm run build |---------- |-------- |---------- | | node-click | 节点被点击时的回调 | 共1个参数,节点组件本身。 | -### iconfont - -u can use build in iconfont class or u add it by u self [iconFont](http://iconfont.cn/) - -how to find the build in class: - - // just go to the package folder, under node_modules/vue2-lazy-tree/ - src/components/tree/assets/iconfont/demo_fontclass.html - ----- - -## discuss - - QQ group:255965810 - -## contributor - -* lily7129 -* halower -* https://github.com/alonesuperman -* tinwan - -## Update History -* beautify the tree 25082017 - -* fix tree's halfchecked&click status 23082017 - -* fix tree's root bug 16082017 - -* fix generateKey method bug 31072017 - -* add label key property, set the label field 28072017 - -* add node leaf 27072017 - -* fix key bugs, add iconfont class 25072017 - -* fix checkbox bugs, showCheckbox & halfCheck 25072017 - -* Add how to use it in the production env 25072017 diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..c419263 --- /dev/null +++ b/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-cayman \ No newline at end of file diff --git a/build/build.js b/build/build.js index 30f036a..6b8add1 100644 --- a/build/build.js +++ b/build/build.js @@ -1,17 +1,16 @@ -'use strict' require('./check-versions')() process.env.NODE_ENV = 'production' -const ora = require('ora') -const rm = require('rimraf') -const path = require('path') -const chalk = require('chalk') -const webpack = require('webpack') -const config = require('../config') -const webpackConfig = require('./webpack.prod.conf') +var ora = require('ora') +var rm = require('rimraf') +var path = require('path') +var chalk = require('chalk') +var webpack = require('webpack') +var config = require('../config') +var webpackConfig = require('./webpack.prod.conf') -const spinner = ora('building for production...') +var spinner = ora('building for production...') spinner.start() rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { @@ -27,11 +26,6 @@ rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { chunkModules: false }) + '\n\n') - if (stats.hasErrors()) { - console.log(chalk.red(' Build failed with errors.\n')) - process.exit(1) - } - console.log(chalk.cyan(' Build complete.\n')) console.log(chalk.yellow( ' Tip: built files are meant to be served over an HTTP server.\n' + diff --git a/build/check-versions.js b/build/check-versions.js index ca407bb..6548ba1 100644 --- a/build/check-versions.js +++ b/build/check-versions.js @@ -1,32 +1,28 @@ -'use strict' -const chalk = require('chalk') -const semver = require('semver') -const packageConfig = require('../package.json') -const shell = require('shelljs') +var chalk = require('chalk') +var semver = require('semver') +var packageConfig = require('../package.json') + function exec (cmd) { return require('child_process').execSync(cmd).toString().trim() } -const versionRequirements = [ +var versionRequirements = [ { name: 'node', currentVersion: semver.clean(process.version), versionRequirement: packageConfig.engines.node - } -] - -if (shell.which('npm')) { - versionRequirements.push({ + }, + { name: 'npm', currentVersion: exec('npm --version'), versionRequirement: packageConfig.engines.npm - }) -} + } +] module.exports = function () { - const warnings = [] - for (let i = 0; i < versionRequirements.length; i++) { - const mod = versionRequirements[i] + var warnings = [] + for (var i = 0; i < versionRequirements.length; i++) { + var mod = versionRequirements[i] if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { warnings.push(mod.name + ': ' + chalk.red(mod.currentVersion) + ' should be ' + @@ -39,8 +35,8 @@ module.exports = function () { console.log('') console.log(chalk.yellow('To use this template, you must update following to modules:')) console.log() - for (let i = 0; i < warnings.length; i++) { - const warning = warnings[i] + for (var i = 0; i < warnings.length; i++) { + var warning = warnings[i] console.log(' ' + warning) } console.log() diff --git a/build/dev-client.js b/build/dev-client.js index 2f75dd5..18aa1e2 100644 --- a/build/dev-client.js +++ b/build/dev-client.js @@ -1,5 +1,4 @@ /* eslint-disable */ -'use strict' require('eventsource-polyfill') var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') diff --git a/build/dev-server.js b/build/dev-server.js index bcb5c07..782dc6f 100644 --- a/build/dev-server.js +++ b/build/dev-server.js @@ -1,57 +1,47 @@ -'use strict' require('./check-versions')() -const config = require('../config') +var config = require('../config') if (!process.env.NODE_ENV) { process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV) } -const opn = require('opn') -const path = require('path') -const express = require('express') -const webpack = require('webpack') -const proxyMiddleware = require('http-proxy-middleware') -const webpackConfig = (process.env.NODE_ENV === 'testing' || process.env.NODE_ENV === 'production') - ? require('./webpack.prod.conf') - : require('./webpack.dev.conf') +var opn = require('opn') +var path = require('path') +var express = require('express') +var webpack = require('webpack') +var proxyMiddleware = require('http-proxy-middleware') +var webpackConfig = require('./webpack.dev.conf') // default port where dev server listens for incoming traffic -const port = process.env.PORT || config.dev.port +var port = process.env.PORT || config.dev.port // automatically open browser, if not set will be false -const autoOpenBrowser = !!config.dev.autoOpenBrowser +var autoOpenBrowser = !!config.dev.autoOpenBrowser // Define HTTP proxies to your custom API backend // https://github.com/chimurai/http-proxy-middleware -const proxyTable = config.dev.proxyTable +var proxyTable = config.dev.proxyTable -const app = express() -const compiler = webpack(webpackConfig) +var app = express() +var compiler = webpack(webpackConfig) -const devMiddleware = require('webpack-dev-middleware')(compiler, { +var devMiddleware = require('webpack-dev-middleware')(compiler, { publicPath: webpackConfig.output.publicPath, quiet: true }) -const hotMiddleware = require('webpack-hot-middleware')(compiler, { - log: false, - heartbeat: 2000 +var hotMiddleware = require('webpack-hot-middleware')(compiler, { + log: () => {} }) // force page reload when html-webpack-plugin template changes -// currently disabled until this is resolved: -// https://github.com/jantimon/html-webpack-plugin/issues/680 -// compiler.plugin('compilation', function (compilation) { -// compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { -// hotMiddleware.publish({ action: 'reload' }) -// cb() -// }) -// }) - -// enable hot-reload and state-preserving -// compilation error display -app.use(hotMiddleware) +compiler.plugin('compilation', function (compilation) { + compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { + hotMiddleware.publish({ action: 'reload' }) + cb() + }) +}) // proxy api requests Object.keys(proxyTable).forEach(function (context) { - let options = proxyTable[context] + var options = proxyTable[context] if (typeof options === 'string') { options = { target: options } } @@ -64,41 +54,33 @@ app.use(require('connect-history-api-fallback')()) // serve webpack bundle output app.use(devMiddleware) +// enable hot-reload and state-preserving +// compilation error display +app.use(hotMiddleware) + // serve pure static assets -const staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) +var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) app.use(staticPath, express.static('./static')) -const uri = 'http://localhost:' + port +var uri = 'http://localhost:' + port var _resolve -var _reject -var readyPromise = new Promise((resolve, reject) => { +var readyPromise = new Promise(resolve => { _resolve = resolve - _reject = reject }) -var server -var portfinder = require('portfinder') -portfinder.basePort = port - console.log('> Starting dev server...') devMiddleware.waitUntilValid(() => { - portfinder.getPort((err, port) => { - if (err) { - _reject(err) - } - process.env.PORT = port - var uri = 'http://localhost:' + port - console.log('> Listening at ' + uri + '\n') - // when env is testing, don't need open it - if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') { - opn(uri) - } - server = app.listen(port) - _resolve() - }) + console.log('> Listening at ' + uri + '\n') + // when env is testing, don't need open it + if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') { + opn(uri) + } + _resolve() }) +var server = app.listen(port) + module.exports = { ready: readyPromise, close: () => { diff --git a/build/utils.js b/build/utils.js index 4ac71cb..b1d54b4 100644 --- a/build/utils.js +++ b/build/utils.js @@ -1,10 +1,9 @@ -'use strict' -const path = require('path') -const config = require('../config') -const ExtractTextPlugin = require('extract-text-webpack-plugin') +var path = require('path') +var config = require('../config') +var ExtractTextPlugin = require('extract-text-webpack-plugin') exports.assetsPath = function (_path) { - const assetsSubDirectory = process.env.NODE_ENV === 'production' + var assetsSubDirectory = process.env.NODE_ENV === 'production' ? config.build.assetsSubDirectory : config.dev.assetsSubDirectory return path.posix.join(assetsSubDirectory, _path) @@ -13,7 +12,7 @@ exports.assetsPath = function (_path) { exports.cssLoaders = function (options) { options = options || {} - const cssLoader = { + var cssLoader = { loader: 'css-loader', options: { minimize: process.env.NODE_ENV === 'production', @@ -23,7 +22,7 @@ exports.cssLoaders = function (options) { // generate loader string to be used with extract text plugin function generateLoaders (loader, loaderOptions) { - const loaders = [cssLoader] + var loaders = [cssLoader] if (loader) { loaders.push({ loader: loader + '-loader', @@ -59,10 +58,10 @@ exports.cssLoaders = function (options) { // Generate loaders for standalone style files (outside of .vue) exports.styleLoaders = function (options) { - const output = [] - const loaders = exports.cssLoaders(options) - for (const extension in loaders) { - const loader = loaders[extension] + var output = [] + var loaders = exports.cssLoaders(options) + for (var extension in loaders) { + var loader = loaders[extension] output.push({ test: new RegExp('\\.' + extension + '$'), use: loader diff --git a/build/vue-loader.conf.js b/build/vue-loader.conf.js index eece58f..7aee79b 100644 --- a/build/vue-loader.conf.js +++ b/build/vue-loader.conf.js @@ -1,7 +1,6 @@ -'use strict' -const utils = require('./utils') -const config = require('../config') -const isProduction = process.env.NODE_ENV === 'production' +var utils = require('./utils') +var config = require('../config') +var isProduction = process.env.NODE_ENV === 'production' module.exports = { loaders: utils.cssLoaders({ @@ -9,11 +8,5 @@ module.exports = { ? config.build.productionSourceMap : config.dev.cssSourceMap, extract: isProduction - }), - transformToRequire: { - video: 'src', - source: 'src', - img: 'src', - image: 'xlink:href' - } + }) } diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js index 6920efe..daa3589 100644 --- a/build/webpack.base.conf.js +++ b/build/webpack.base.conf.js @@ -1,8 +1,7 @@ -'use strict' -const path = require('path') -const utils = require('./utils') -const config = require('../config') -const vueLoaderConfig = require('./vue-loader.conf') +var path = require('path') +var utils = require('./utils') +var config = require('../config') +var vueLoaderConfig = require('./vue-loader.conf') function resolve (dir) { return path.join(__dirname, '..', dir) @@ -23,20 +22,11 @@ module.exports = { extensions: ['.js', '.vue', '.json'], alias: { 'vue$': 'vue/dist/vue.esm.js', - '@': resolve('src'), + '@': resolve('src') } }, module: { rules: [ - { - test: /\.(js|vue)$/, - loader: 'eslint-loader', - enforce: 'pre', - include: [resolve('src'), resolve('test')], - options: { - formatter: require('eslint-friendly-formatter') - } - }, { test: /\.vue$/, loader: 'vue-loader', @@ -55,14 +45,6 @@ module.exports = { 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', diff --git a/build/webpack.dev.conf.js b/build/webpack.dev.conf.js index 6f25d63..5470402 100644 --- a/build/webpack.dev.conf.js +++ b/build/webpack.dev.conf.js @@ -1,11 +1,10 @@ -'use strict' -const utils = require('./utils') -const webpack = require('webpack') -const config = require('../config') -const merge = require('webpack-merge') -const baseWebpackConfig = require('./webpack.base.conf') -const HtmlWebpackPlugin = require('html-webpack-plugin') -const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') +var utils = require('./utils') +var webpack = require('webpack') +var config = require('../config') +var merge = require('webpack-merge') +var baseWebpackConfig = require('./webpack.base.conf') +var HtmlWebpackPlugin = require('html-webpack-plugin') +var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') // add hot-reload related code to entry chunks Object.keys(baseWebpackConfig.entry).forEach(function (name) { diff --git a/build/webpack.prod.conf.js b/build/webpack.prod.conf.js index 5ac5c18..da44b65 100644 --- a/build/webpack.prod.conf.js +++ b/build/webpack.prod.conf.js @@ -1,20 +1,17 @@ -'use strict' -const path = require('path') -const utils = require('./utils') -const webpack = require('webpack') -const config = require('../config') -const merge = require('webpack-merge') -const baseWebpackConfig = require('./webpack.base.conf') -const CopyWebpackPlugin = require('copy-webpack-plugin') -const HtmlWebpackPlugin = require('html-webpack-plugin') -const ExtractTextPlugin = require('extract-text-webpack-plugin') -const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') +var path = require('path') +var utils = require('./utils') +var webpack = require('webpack') +var config = require('../config') +var merge = require('webpack-merge') +var baseWebpackConfig = require('./webpack.base.conf') +var CopyWebpackPlugin = require('copy-webpack-plugin') +var HtmlWebpackPlugin = require('html-webpack-plugin') +var ExtractTextPlugin = require('extract-text-webpack-plugin') +var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') -const env = process.env.NODE_ENV === 'testing' - ? require('../config/test.env') - : config.build.env +var env = config.build.env -const webpackConfig = merge(baseWebpackConfig, { +var webpackConfig = merge(baseWebpackConfig, { module: { rules: utils.styleLoaders({ sourceMap: config.build.productionSourceMap, @@ -32,13 +29,11 @@ const webpackConfig = merge(baseWebpackConfig, { new webpack.DefinePlugin({ 'process.env': env }), - // UglifyJs do not support ES6+, you can also use babel-minify for better treeshaking: https://github.com/babel/minify new webpack.optimize.UglifyJsPlugin({ compress: { warnings: false }, - sourceMap: true, - parallel: true + sourceMap: true }), // extract css into its own file new ExtractTextPlugin({ @@ -55,9 +50,7 @@ const webpackConfig = merge(baseWebpackConfig, { // you can customize output by editing /index.html // see https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ - filename: process.env.NODE_ENV === 'testing' - ? 'index.html' - : config.build.index, + filename: config.build.index, template: 'index.html', inject: true, minify: { @@ -70,12 +63,10 @@ const webpackConfig = merge(baseWebpackConfig, { // necessary to consistently work with multiple chunks via CommonsChunkPlugin chunksSortMode: 'dependency' }), - // keep module.id stable when vender modules does not change - new webpack.HashedModuleIdsPlugin(), // split vendor js into its own file new webpack.optimize.CommonsChunkPlugin({ name: 'vendor', - minChunks: function (module) { + minChunks: function (module, count) { // any required modules inside node_modules are extracted to vendor return ( module.resource && @@ -104,7 +95,7 @@ const webpackConfig = merge(baseWebpackConfig, { }) if (config.build.productionGzip) { - const CompressionWebpackPlugin = require('compression-webpack-plugin') + var CompressionWebpackPlugin = require('compression-webpack-plugin') webpackConfig.plugins.push( new CompressionWebpackPlugin({ @@ -122,7 +113,7 @@ if (config.build.productionGzip) { } if (config.build.bundleAnalyzerReport) { - const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin + var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin webpackConfig.plugins.push(new BundleAnalyzerPlugin()) } diff --git a/build/webpack.test.conf.js b/build/webpack.test.conf.js deleted file mode 100644 index 0d658d9..0000000 --- a/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/config/_README.md b/config/_README.md deleted file mode 100644 index 59f66cf..0000000 --- a/config/_README.md +++ /dev/null @@ -1,43 +0,0 @@ -## 配置相关文件夹说明 - -### `req.conf.js` -- 功能: -> 集中管理各个业务模块的后端请求地址,便于排错和集中管理 -- 用法: -> 每个模块都导出一个本模块的地址对象即可 - ``` - export const demo(模块名称) = { - test: '/api/test' //只需要写相对路径路径 - } - ``` - -### `service.conf.js` -- 功能: 按照项目的需求初始化一些服务的配置参数,例如请求`http://127.0.0.1/api/test`,则根路径(`baseUrl`)为`http://127.0.0.1`,这样在`req.conf.js`只需要写相对路径,其中```baseUrl```为必须参数 -> - -### `apistore.js` -- 功能: -> 作为所有业务请求的入口,将所有的http相关的处理从页面组件中剥离,在服务模块中集中处理完复杂逻辑等操作,减少页面臃肿成都. -- 页面调用方法:(我们将所有的服务模块全部包装到this.$api中,以便识别服务) -``` - this.$api.user.adduser({name:'halower'}) - ``` -- 依赖文件: -> `req.conf.js`、 `fetch(文件夹)` - -### `baseapi.js` -- 功能: -> 作为所有服务对象的基类,包含了请求地址代理,统一的请求入口(`get,post` ect.) - -### `routestore.js` -- 功能: -> 集中的路由管理中心,将各个业务模块中的路由统一整理合并 -- 用法: -1. 导入每个业务模块的路由单元 -``` -import demo from '@/pages/demo/z-routes -``` -2. 添加业务路由 -``` -routes = routes.concat(demo) -``` \ No newline at end of file diff --git a/config/dev.env.js b/config/dev.env.js index 1e22973..efead7c 100644 --- a/config/dev.env.js +++ b/config/dev.env.js @@ -1,6 +1,5 @@ -'use strict' -const merge = require('webpack-merge') -const prodEnv = require('./prod.env') +var merge = require('webpack-merge') +var prodEnv = require('./prod.env') module.exports = merge(prodEnv, { NODE_ENV: '"development"' diff --git a/config/index.js b/config/index.js index 1497246..83ad165 100644 --- a/config/index.js +++ b/config/index.js @@ -1,8 +1,5 @@ -'use strict' -// Template version: 1.1.3 // see http://vuejs-templates.github.io/webpack for documentation. - -const path = require('path') +var path = require('path') module.exports = { build: { @@ -10,7 +7,7 @@ module.exports = { index: path.resolve(__dirname, '../dist/index.html'), assetsRoot: path.resolve(__dirname, '../dist'), assetsSubDirectory: 'static', - assetsPublicPath: '/', + assetsPublicPath: './', productionSourceMap: true, // Gzip off by default as many popular static hosts such as // Surge or Netlify already gzip all static assets for you. @@ -26,7 +23,7 @@ module.exports = { }, dev: { env: require('./dev.env'), - port: process.env.PORT || 8080, + port: 8080, autoOpenBrowser: true, assetsSubDirectory: 'static', assetsPublicPath: '/', diff --git a/config/prod.env.js b/config/prod.env.js index a6f9976..773d263 100644 --- a/config/prod.env.js +++ b/config/prod.env.js @@ -1,4 +1,3 @@ -'use strict' module.exports = { NODE_ENV: '"production"' } diff --git a/config/test.env.js b/config/test.env.js deleted file mode 100644 index c2824a3..0000000 --- a/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/dist/index.html b/dist/index.html new file mode 100644 index 0000000..49a0ca4 --- /dev/null +++ b/dist/index.html @@ -0,0 +1 @@ +vue-tree
\ No newline at end of file diff --git a/dist/static/css/app.0ca738bade0f67ec53d9de07fde83b19.css b/dist/static/css/app.0ca738bade0f67ec53d9de07fde83b19.css new file mode 100644 index 0000000..27d50fe --- /dev/null +++ b/dist/static/css/app.0ca738bade0f67ec53d9de07fde83b19.css @@ -0,0 +1 @@ +[data-v-9e877da6]{font-size:13px;font-family:\\5FAE\8F6F\96C5\9ED1}.input[data-v-9e877da6]{width:100%;position:relative}.input span[data-v-9e877da6]{position:absolute;top:7px;right:5px}.input input[data-v-9e877da6]{display:inline-block;box-sizing:border-box;width:100%;border-radius:5px;height:25px;margin-top:2px}.input input[data-v-9e877da6]:focus{border:none}.search[data-v-9e877da6]{width:14px;height:14px;background-image:url(data:image/png;base64,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)}li[data-v-e0674d5c]:hover{cursor:pointer}.icon[data-v-e0674d5c]{display:inline-block;margin-right:10px;vertical-align:middle}.halo-tree[data-v-e0674d5c]{font-size:14px;min-height:20px;border-radius:4px}.node-selected[data-v-e0674d5c]{background-color:#ddd}.halo-tree li[data-v-e0674d5c]{margin:0;padding:5px 5px 5px 0;position:relative;list-style:none}.halo-tree li>a[data-v-e0674d5c],.halo-tree li>i[data-v-e0674d5c],.halo-tree li>span[data-v-e0674d5c]{line-height:20px;vertical-align:middle}.halo-tree ul ul li[data-v-e0674d5c]:hover{background:rgba(0,0,0,.035)}.halo-tree li[data-v-e0674d5c]:after,.halo-tree li[data-v-e0674d5c]:before{content:"";left:-8px;position:absolute;right:auto;border-width:1px}.halo-tree li[data-v-e0674d5c]:before{border-left:1px dashed #999;bottom:50px;height:100%;top:-8px;width:1px}.halo-tree li[data-v-e0674d5c]:after{border-top:1px dashed #999;height:20px;top:17px;width:12px}.halo-tree li span[data-v-e0674d5c]{display:inline-block;padding:3px;text-decoration:none;border-radius:3px}.halo-tree li[data-v-e0674d5c]:last-child:before{height:26px}.halo-tree>ul[data-v-e0674d5c]{padding-left:0}.halo-tree ul ul[data-v-e0674d5c]{padding-left:15px;padding-top:10px}.halo-tree li.leaf[data-v-e0674d5c]{padding-left:19px}.halo-tree li.leaf[data-v-e0674d5c]:after{content:"";left:-8px;position:absolute;right:auto;border-width:1px;border-top:1px dashed #999;height:20px;top:17px;width:24px}.check[data-v-e0674d5c]{display:inline-block;position:relative;top:4px}.halo-tree .icon[data-v-e0674d5c]{margin-right:0}.tree-close[data-v-e0674d5c]{width:14px;height:14px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAIAAACQKrqGAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAFrSURBVHjajJK9ihVBFIS/09M6F2YFGZiLz2EqRj6DmGhkqpGYGWyiqYmwsKG54BP4CL6HO+LP3pmdn+7TZTD3buwJKio+6hRlfd8DgJnd6naSbhWIwPdfZ2ZURhUsGJUBuCjCi1xIPGyHACSXuyQQwfj49vnFu5fBQEi4K7mAYGa5UGTCQiAG29V1t9/HYCEgrMhywcw2Ki4MglkMVDE2TRMDwczARXJOVFcRQGXEcHwrBttCF5FdZhaBVOzL+YtdXVcxAk3TxKr6evn+qu/HcQSevL44NjAnbfmapgFiVdV1Dey7LrftZjhaD4sev7q8v7N7u3B21759/gA8evZmWHWYy59Zh0VAlHQ9ywvIclFyrvp+33W/Jw2LhoW/s8ZVkiJwvSg5uZTFbc42jmNu259jGdfNrSmfqMOiNbM6U9Jw59jAj0OZkqbElLT6iXqTtLgWt5tEHe3B008J+rEsWauzurwA2P/P5d8Ax2jvCiw9K+QAAAAASUVORK5CYII=)}.tree-open[data-v-e0674d5c]{width:14px;height:14px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAIAAACQKrqGAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAADxSURBVHjajJJBSgNBEEXf7+kwgbgSzEHcufYe7l14CS8heAev4kUCLpIgaXq6vosewoAR81cF9XlF/SrtdjuuUwY+v27+9d3fHjNQmwUChBZtA8a9gCxpCpKURPoFCwgTtqROJSeTJFCawQYHYVp4ijO1OUkZkkiimwOjjmRqZ2ro4/VpPY5Dzhd3enx5mxM4Va/H8W673Ww2F62n6tl6KH54fh8zq0E5IQHYTEFtLhOHYiDb3p9cMquBnBgWa7VgCtdGmWw7A/viVfWQGKQ0JwwmTLNbUHsCto/FgqR59FK2o1+hU7+rlwf6S7r+XX4GAKAOgoPQpOyQAAAAAElFTkSuQmCC)}.search[data-v-e0674d5c]{width:14px;height:14px;background-image:url(data:image/png;base64,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)}.inputCheck[data-v-e0674d5c]{display:inline-block;position:relative}.inputCheck.notAllNodes[data-v-e0674d5c]:before{content:"";display:inline-block;position:absolute;width:100%;height:100%;z-index:10;top:50%;left:50%;transform:translate3d(-30%,-5%,0);background-image:url(data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjgzMTQ4QkQ0RjRCMTFFN0JFMkVCRUMzMEEzOTYyN0EiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjgzMTQ4QkM0RjRCMTFFN0JFMkVCRUMzMEEzOTYyN0EiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyNkJCOTk5MTQxQkUxMUU3QjU1NkJBNUYxNDA5N0NDQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyNkJCOTk5MjQxQkUxMUU3QjU1NkJBNUYxNDA5N0NDQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkDsWNwAAABDSURBVHjaYjQ2NmYgFTBB6cNA/J8IfBhZkw2RltggayLLebTXxILEZiRC/X+q2PR/8AUETNMRItUfRfaTLSk2AQQYAHX7D3OXPy4WAAAAAElFTkSuQmCC)} \ No newline at end of file diff --git a/dist/static/css/app.0ca738bade0f67ec53d9de07fde83b19.css.map b/dist/static/css/app.0ca738bade0f67ec53d9de07fde83b19.css.map new file mode 100644 index 0000000..1577001 --- /dev/null +++ b/dist/static/css/app.0ca738bade0f67ec53d9de07fde83b19.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/components/tree/tree.vue","webpack:///./src/components/tree/tree-node.vue"],"names":[],"mappings":"AACA,kBACI,eACA,iCAAmC,CAEvC,wBACI,WACA,iBAAmB,CAEvB,6BACI,kBACA,QACA,SAAU,CAEd,8BACI,qBACA,sBACA,WACA,kBACA,YACA,cAAgB,CAEpB,oCACM,WAAY,CAElB,yBACE,WACA,YACA,8CAAiD,CAClD,8nIC5BD,0BACI,cAAgB,CAEpB,uBACE,qBACA,kBACA,qBAAuB,CAEzB,4BACI,eACA,gBACA,0BACA,uBACA,iBAAmB,CAEvB,gCACI,qBAAqB,CAEzB,+BACI,SACA,sBACA,kBACA,eAAiB,CAErB,sGAGI,iBACA,qBAAuB,CAE3B,2CACI,2BAA+B,CAEnC,2EAEI,WACA,UACA,kBACA,WACA,gBAAiB,CAErB,sCACI,4BACA,YACA,YACA,SACA,SAAW,CAEf,qCACI,2BACA,YACA,SACA,UAAW,CAEf,oCACI,qBACA,YACA,qBACA,iBAAmB,CAEvB,iDACI,WAAY,CAEhB,+BACI,cAAe,CAEnB,kCACI,kBACA,gBAAkB,CAEtB,oCACI,iBAAmB,CAEvB,0CACI,WACA,UACA,kBACA,WACA,iBACA,2BACA,YACA,SACA,UAAY,CAEhB,wBACI,qBACA,kBACA,OAAS,CAEb,kCACI,cAAgB,CAEpB,6BACE,WACA,YACA,8CAAqD,CAEvD,4BACE,WACA,YACA,8CAAsD,CAExD,yBACE,WACA,YACA,8CAAiD,CAQnD,6BACE,qBACA,iBAAmB,CAErB,gDACE,WACA,qBACA,kBACA,WACA,YACA,WACA,QACA,SACA,kCAEA,8CAA+C,CAChD","file":"static/css/app.0ca738bade0f67ec53d9de07fde83b19.css","sourcesContent":["\n*[data-v-9e877da6]{\n font-size: 13px;\n font-family: '\\5FAE\\8F6F\\96C5\\9ED1'\n}\n.input[data-v-9e877da6]{\n width:100%;\n position: relative;\n}\n.input span[data-v-9e877da6] {\n position: absolute;\n top:7px;\n right:5px;\n}\n.input input[data-v-9e877da6]{\n display: inline-block;\n box-sizing: border-box;\n width:100%;\n border-radius: 5px;\n height:25px;\n margin-top: 2px;\n}\n.input input[data-v-9e877da6]:focus {\n border:none;\n}\n.search[data-v-9e877da6]{\n width:14px;\n height:14px;\n background-image: url(\"../../assets/search.png\");\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/tree/tree.vue","\nli[data-v-e0674d5c]:hover {\n cursor: pointer;\n}\n.icon[data-v-e0674d5c]{\n display: inline-block;\n margin-right: 10px;\n vertical-align: middle;\n}\n.halo-tree[data-v-e0674d5c] {\n font-size: 14px;\n min-height: 20px;\n -webkit-border-radius: 4px;\n -moz-border-radius: 4px;\n border-radius: 4px;\n}\n.node-selected[data-v-e0674d5c] {\n background-color:#ddd\n}\n.halo-tree li[data-v-e0674d5c] {\n margin: 0;\n padding: 5px 5px 5px 0;\n position: relative;\n list-style: none;\n}\n.halo-tree li > span[data-v-e0674d5c],\n .halo-tree li > i[data-v-e0674d5c],\n .halo-tree li > a[data-v-e0674d5c] {\n line-height: 20px;\n vertical-align: middle;\n}\n.halo-tree ul ul li[data-v-e0674d5c]:hover {\n background: rgba(0, 0, 0, .035)\n}\n.halo-tree li[data-v-e0674d5c]:after,\n .halo-tree li[data-v-e0674d5c]:before {\n content: '';\n left: -8px;\n position: absolute;\n right: auto;\n border-width: 1px\n}\n.halo-tree li[data-v-e0674d5c]:before {\n border-left: 1px dashed #999;\n bottom: 50px;\n height: 100%;\n top: -8px;\n width: 1px;\n}\n.halo-tree li[data-v-e0674d5c]:after {\n border-top: 1px dashed #999;\n height: 20px;\n top: 17px;\n width: 12px\n}\n.halo-tree li span[data-v-e0674d5c] {\n display: inline-block;\n padding: 3px 3px;\n text-decoration: none;\n border-radius: 3px;\n}\n.halo-tree li[data-v-e0674d5c]:last-child::before {\n height: 26px\n}\n.halo-tree > ul[data-v-e0674d5c] {\n padding-left: 0\n}\n.halo-tree ul ul[data-v-e0674d5c] {\n padding-left: 15px;\n padding-top: 10px;\n}\n.halo-tree li.leaf[data-v-e0674d5c] {\n padding-left: 19px;\n}\n.halo-tree li.leaf[data-v-e0674d5c]:after {\n content: '';\n left: -8px;\n position: absolute;\n right: auto;\n border-width: 1px;\n border-top: 1px dashed #999;\n height: 20px;\n top: 17px;\n width: 24px;\n}\n.check[data-v-e0674d5c] {\n display: inline-block;\n position: relative;\n top: 4px;\n}\n.halo-tree .icon[data-v-e0674d5c] {\n margin-right: 0;\n}\n.tree-close[data-v-e0674d5c]{\n width:14px;\n height:14px;\n background-image: url(\"../../assets/treeOpen-1.png\");\n}\n.tree-open[data-v-e0674d5c]{\n width:14px;\n height:14px;\n background-image: url(\"../../assets/treeClose-2.png\");\n}\n.search[data-v-e0674d5c]{\n width:14px;\n height:14px;\n background-image: url(\"../../assets/search.png\");\n}\n/*.check.notAllNodes{\n -webkit-appearance: none;\n -moz-appearance: none;\n -ms-appearance: none;\n width: 13px;\n}*/\n.inputCheck[data-v-e0674d5c]{\n display: inline-block;\n position: relative;\n}\n.inputCheck.notAllNodes[data-v-e0674d5c]:before{\n content: \"\";\n display: inline-block;\n position: absolute;\n width: 100%;\n height: 100%;\n z-index: 10;\n top: 50%;\n left: 50%;\n transform: translate3d(-30%,-5%,0);\n /*background-image: url(\"/../../assets/half.png\");*/\n background-image: url(\"../../assets/half.jpg\");\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/tree/tree-node.vue"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/static/js/app.e7eb3ac0e0a2c5daa1bb.js b/dist/static/js/app.e7eb3ac0e0a2c5daa1bb.js new file mode 100644 index 0000000..b483e2d --- /dev/null +++ b/dist/static/js/app.e7eb3ac0e0a2c5daa1bb.js @@ -0,0 +1,821 @@ +webpackJsonp([1],[ +/* 0 */, +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +var Component = __webpack_require__(0)( + /* script */ + __webpack_require__(22), + /* template */ + __webpack_require__(15), + /* scopeId */ + null, + /* cssModules */ + null +) + +module.exports = Component.exports + + +/***/ }), +/* 2 */, +/* 3 */, +/* 4 */, +/* 5 */, +/* 6 */, +/* 7 */, +/* 8 */, +/* 9 */, +/* 10 */, +/* 11 */, +/* 12 */, +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + + +/* styles */ +__webpack_require__(20) + +var Component = __webpack_require__(0)( + /* script */ + __webpack_require__(23), + /* template */ + __webpack_require__(17), + /* scopeId */ + "data-v-e0674d5c", + /* cssModules */ + null +) + +module.exports = Component.exports + + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + + +/* styles */ +__webpack_require__(19) + +var Component = __webpack_require__(0)( + /* script */ + __webpack_require__(24), + /* template */ + __webpack_require__(16), + /* scopeId */ + "data-v-9e877da6", + /* cssModules */ + null +) + +module.exports = Component.exports + + +/***/ }), +/* 15 */ +/***/ (function(module, exports) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('div', { + staticStyle: { + "width": "300px" + }, + attrs: { + "id": "app" + } + }, [_c('tree', { + ref: "tree", + attrs: { + "treeData": _vm.treeData, + "options": _vm.options + } + })], 1) +},staticRenderFns: []} + +/***/ }), +/* 16 */ +/***/ (function(module, exports) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('div', { + staticClass: "halo-tree" + }, [_c('div', { + staticClass: "input" + }, [_c('input', { + directives: [{ + name: "model", + rawName: "v-model", + value: (_vm.search), + expression: "search" + }], + attrs: { + "type": "text" + }, + domProps: { + "value": (_vm.search) + }, + on: { + "input": function($event) { + if ($event.target.composing) { return; } + _vm.search = $event.target.value + } + } + }), _vm._v(" "), _c('span', { + staticClass: "icon search" + })]), _vm._v(" "), _c('tree-node', { + attrs: { + "treeData": _vm.store.root, + "options": _vm.options + }, + on: { + "handlecheckedChange": _vm.handlecheckedChange + } + })], 1) +},staticRenderFns: []} + +/***/ }), +/* 17 */ +/***/ (function(module, exports) { + +module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; + return _c('ul', _vm._l((_vm.nodeData), function(item) { + return _c('li', { + directives: [{ + name: "show", + rawName: "v-show", + value: (item.visible), + expression: "item.visible" + }], + class: [(item.children && item.children.length > 0) ? '' : 'leaf'] + }, [(item.children && item.children.length > 0) ? _c('i', { + class: [item.open ? 'tree-open' : 'tree-close', 'icon'], + on: { + "click": function($event) { + $event.stopPropagation(); + _vm.handleNodeExpand(item) + } + } + }) : _vm._e(), _vm._v(" "), _c('div', { + staticClass: "inputCheck", + class: { + notAllNodes: item.nodeSelectNotAll + }, + style: ({ + width: _vm.inputWidth + 'px', + height: _vm.inputWidth + 'px' + }), + on: { + "click": function($event) { + _vm.walkCheckBox(item) + } + } + }, [(_vm.options.showCheckbox && _vm.options.halfCheckedStatus && !item.nodeSelectNotAll) ? _c('input', { + directives: [{ + name: "model", + rawName: "v-model", + value: (item.checked), + expression: "item.checked" + }], + staticClass: "check", + attrs: { + "type": "checkbox" + }, + domProps: { + "checked": Array.isArray(item.checked) ? _vm._i(item.checked, null) > -1 : (item.checked) + }, + on: { + "change": function($event) { + _vm.handlecheckedChange(item) + }, + "__c": function($event) { + var $$a = item.checked, + $$el = $event.target, + $$c = $$el.checked ? (true) : (false); + if (Array.isArray($$a)) { + var $$v = null, + $$i = _vm._i($$a, $$v); + if ($$c) { + $$i < 0 && (item.checked = $$a.concat($$v)) + } else { + $$i > -1 && (item.checked = $$a.slice(0, $$i).concat($$a.slice($$i + 1))) + } + } else { + item.checked = $$c + } + } + } + }) : _vm._e()]), _vm._v(" "), _c('span', { + class: { + 'node-selected': (item.checked && !_vm.options.showCheckbox) || item.searched + }, + on: { + "click": function($event) { + _vm.handleNode(item) + } + } + }, [_vm._v("\n " + _vm._s(item.label) + "\n ")]), _vm._v(" "), (item.children && item.children.length > 0) ? _c('tree-node', { + directives: [{ + name: "show", + rawName: "v-show", + value: (item.open), + expression: "item.open" + }], + attrs: { + "options": _vm.options, + "tree-data": item.children + }, + on: { + "handlecheckedChange": _vm.handlecheckedChange + } + }) : _vm._e()], 1) + })) +},staticRenderFns: []} + +/***/ }), +/* 18 */, +/* 19 */ +/***/ (function(module, exports) { + +// removed by extract-text-webpack-plugin + +/***/ }), +/* 20 */ +/***/ (function(module, exports) { + +// removed by extract-text-webpack-plugin + +/***/ }), +/* 21 */, +/* 22 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_tree_tree_vue__ = __webpack_require__(14); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_tree_tree_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__components_tree_tree_vue__); +// +// +// +// +// + + +let that = null; +/* harmony default export */ __webpack_exports__["default"] = ({ + name: 'app', + data() { + that = this; + return { + options: { + showCheckbox: true, + halfCheckedStatus: true, //控制父框是否需要半钩状态 + search: { + useInitial: true, + useEnglish: false, + customFilter: null + } + }, + treeData: [] + }; + }, + mounted: function (resolve) { + this.loadTreeData(resolve); + }, + methods: { + loadTreeData: function (resolve) { + return new Promise(resolve => { + setTimeout(() => { + that.treeData = [{ + id: 1, + label: '一级节点', + open: true, + checked: false, + nodeSelectNotAll: false, //新增参数,表示父框可以半钩状态 + parentId: null, + visible: true, + searched: false, + children: [{ + id: 2, + label: '二级节点-1', + checked: false, + nodeSelectNotAll: false, + parentId: 1, + searched: false, + visible: true + }, { + label: '二级节点-2', + open: true, + checked: false, + nodeSelectNotAll: false, + id: 3, + parentId: 1, + visible: true, + searched: false, + children: [{ + id: 4, + parentId: 3, + label: '三级节点-1', + visible: true, + searched: false, + checked: false, + nodeSelectNotAll: false + }, { + id: 5, + label: '三级节点-2', + parentId: 3, + searched: false, + visible: true, + checked: false, + nodeSelectNotAll: false + }] + }, { + label: '二级节点-3', + open: true, + checked: false, + nodeSelectNotAll: false, + id: 6, + parentId: 1, + visible: true, + searched: false, + children: [{ + id: 7, + parentId: 6, + label: '三级节点-4', + checked: false, + nodeSelectNotAll: false, + searched: false, + visible: true + }, { + id: 8, + label: '三级节点-5', + parentId: 6, + checked: false, + nodeSelectNotAll: false, + searched: false, + visible: true + }] + }] + }]; + resolve(that.treeData); + }, 100); + }); + } + }, + components: { + Tree: __WEBPACK_IMPORTED_MODULE_0__components_tree_tree_vue___default.a + } +}); + +/***/ }), +/* 23 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + +/* harmony default export */ __webpack_exports__["default"] = ({ + name: 'treeNode', + props: { + treeData: [Array], + options: [Object] + }, + data() { + return { + nodeData: [] + }; + }, + created() { + const parent = this.$parent; + if (parent.isTree) { + this.tree = parent; + } else { + this.tree = parent.tree; + } + + const tree = this.tree; + if (!tree) { + console.warn('找不到树节点'); + } + this.nodeData = (this.treeData || []).slice(0); + }, + computed: { + inputWidth: function () { + if (this.checkFirfox()) { + return 14; + } + return 13; + } + }, + watch: { + treeData: function (data) { + this.nodeData = (data || []).slice(0); + } + }, + methods: { + checkFirfox() { + let u = navigator.userAgent; + if (u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1) { + return true; + } + return false; + }, + walkCheckBox(node) { + if (node.nodeSelectNotAll) { + node.checked = !node.checked; + this.handlecheckedChange(node); + } + }, + handleNodeExpand(node) { + node.open = !node.open; + }, + handlecheckedChange(node) { + this.$emit('handlecheckedChange', node); + }, + handleNode(node) { + if (this.tree.store.last) { + if (this.tree.store.last.id === node.id) { + this.tree.store.last.checked = !this.tree.store.last.checked; + } else { + this.tree.store.last.checked = false; + node.checked = true; + this.tree.store.last = node; + } + } else { + this.tree.store.last = node; + node.checked = true; + } + this.tree.$emit('node-click', node); + } + } +}); + +/***/ }), +/* 24 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__tree_node_vue__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__tree_node_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__tree_node_vue__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__tree_store__ = __webpack_require__(25); +// +// +// +// +// +// +// +// +// + + + +/* harmony default export */ __webpack_exports__["default"] = ({ + name: 'tree', + props: { + treeData: [Array], + options: [Object] + }, + data() { + return { + search: null, + store: { + root: [], + last: null + } + }; + }, + created() { + this.isTree = true; + this.store = new __WEBPACK_IMPORTED_MODULE_1__tree_store__["a" /* default */]({ + root: (this.treeData || []).slice(0), + last: null + }); + }, + watch: { + search: function (val) { + this.store.filterNodes(val, this.options.search); + }, + treeData: function (data) { + this.store = new __WEBPACK_IMPORTED_MODULE_1__tree_store__["a" /* default */]({ + root: (this.treeData || []).slice(0), + last: null + }); + } + }, + methods: { + handlecheckedChange(node) { + if (this.options.halfCheckedStatus) { + this.store.changeCheckHalfStatus(node); + } else { + this.store.changeCheckStatus(node); + } + this.$emit('handlecheckedChange', node); + }, + getSelectedNodes() { + const allnodes = this.store.datas; + let selectedNodes = []; + for (let [, node] of allnodes) { + if (node.checked) { + selectedNodes.push(node); + } + } + return selectedNodes; + }, + getSelectedNodeIds() { + const allnodes = this.store.datas; + let selectedNodeIds = []; + for (let [, node] of allnodes) { + if (node.checked) { + selectedNodeIds.push(node.id); + } + } + return selectedNodeIds; + } + }, + components: { TreeNode: __WEBPACK_IMPORTED_MODULE_0__tree_node_vue___default.a } +}); + +/***/ }), +/* 25 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +const pinyin = __webpack_require__(12); +class TreeStore { + constructor(options) { + for (let option in options) { + if (options.hasOwnProperty(option)) { + this[option] = options[option]; + } + } + this.datas = new Map(); + const _traverseNodes = root => { + for (let node of root) { + this.datas.set(node.id, node); + if (node.children && node.children.length > 0) _traverseNodes(node.children); + } + }; + _traverseNodes(this.root); + } + + changeCheckStatus(node) { + const _traverseUp = node => { + if (node.checked && node.parentId) { + let parent = this.getNode(node.parentId); + parent.checked = this.sameSilibingChecked(node.parentId, node.id); + _traverseUp(parent); + } else { + if (!node.checked && node.parentId) { + let upparent = this.getNode(node.parentId); + upparent.checked = false; + if (upparent.parentId) { + _traverseUp(upparent); + } + } + } + }; + + const _traverseDown = node => { + if (node.children && node.children.length > 0) { + for (let child of node.children) { + child.checked = node.checked; + _traverseDown(child); + } + } + }; + _traverseUp(node); + _traverseDown(node); + } + changeCheckHalfStatus(node) { + let flag = false; + //如果勾选的是子节点,父节点默认打上勾 + const _traverseUp = (node, flag) => { + let parent = null; + if (node.checked) { + //打钩 + if (node.parentId) { + parent = this.getNode(node.parentId); + if (flag) { + parent.checked = true; + parent.nodeSelectNotAll = true; + _traverseUp(parent, true); + } else { + parent.checked = true; + parent.nodeSelectNotAll = this.sameSilibingHalfChecked(true, parent, node.parentId, node.id) === 'half' ? true : false; //返回true则全钩,false为半钩 + _traverseUp(parent); + } + } + } else { + //去钩 + if (node.parentId) { + parent = this.getNode(node.parentId); + if (this.sameSilibingHalfChecked(false, parent, node.parentId, node.id) === "none") { + //返回true则全没钩,false为半钩 + parent.checked = false; + parent.nodeSelectNotAll = false; + } else { + parent.checked = true; + parent.nodeSelectNotAll = true; + } + _traverseUp(parent, true); + } + } + }; + const _traverseDown = node => { + if (node.children && node.children.length > 0) { + if (node.nodeSelectNotAll) { + //节点没勾选 + node.nodeSelectNotAll = false; + } + for (let child of node.children) { + child.checked = node.checked; + _traverseDown(child); + } + } + }; + _traverseUp(node); + _traverseDown(node); + } + sameSilibingChecked(parentId, currentId) { + let parent = this.datas.get(parentId); + let sbIds = []; + parent.children.forEach(x => { + if (x.id !== currentId) sbIds.push(x.id); + }); + for (let id of sbIds) { + let node = this.getNode(id); + if (!node.checked) return false; + } + return true; + } + sameSilibingHalfChecked(status, parent, parentId, currentId) { + let sbIds = []; + let currentNode = this.getNode(currentId); + parent.children.forEach(x => { + if (!currentNode.nodeSelectNotAll && x.id !== currentId) sbIds.push(x.id); //除去当前节点的剩下节点 + }); + + if (status) { + //打钩 + if (sbIds.length !== 0) { + for (let id of sbIds) { + //子节点只要有一个被选中则父框打黑,全选打钩,全没有被选无状态 + let node = this.getNode(id); + if (!node.checked || node.nodeSelectNotAll) { + //节点没勾选 + return "half"; //表示父框半钩的状态 + } + } + } else { + if (currentNode.nodeSelectNotAll) { + return "half"; //表示全钩的状态 + } + } + return "all"; //表示全钩的状态 + } else { + //去钩 + if (sbIds.length !== 0) { + for (let id of sbIds) { + //子节点只要有一个被选中则父框打黑,全选打钩,全没有被选无状态 + let node = this.getNode(id); + if (node.checked || node.nodeSelectNotAll) { + //有节点被勾选,父框半钩的状态 + return "half"; + } + } + } else { + if (currentNode.nodeSelectNotAll) { + return "half"; //表示全钩的状态 + } + } + return "none"; + } + } + isExitParent(parent) { + if (parent.id) { + return this.getNode(node.parentId); + } + return null; + } + isNullOrEmpty(world) { + if (world) { + return world.trim().length === 0; + } + return true; + } + filterNodes(keyworld, searchOptions) { + const _filterNode = (val, node) => { + if (!val) return true; + if (searchOptions.useEnglish) { + return node.label.indexOf(val) !== -1; + } else { + return this.toPinYin(node.label, searchOptions.useInitial).indexOf(this.toPinYin(keyworld.toLowerCase(), searchOptions.useInitial, true)) !== -1; + } + }; + + const _syncNodeStatus = node => { + if (node.parentId) { + let parentNode = this.getNode(node.parentId); + if (node.visible) { + parentNode.visible = node.visible; + _syncNodeStatus(parentNode); + } + } + }; + let filterFunc = searchOptions.customFilter && typeof searchOptions.customFilter === 'function' ? searchOptions.customFilter : _filterNode; + this.datas.forEach(node => { + node.visible = filterFunc(keyworld, node); + node.searched = false; + if (node.visible) { + if (!this.isNullOrEmpty(keyworld)) { + node.searched = true; + } + _syncNodeStatus(node); + } + }); + } + getNode(key) { + return this.datas.get(key); + } + toPinYin(keyworld, useInitial) { + if (/^[a-zA-Z]/.test(keyworld)) { + return keyworld; + } + let fullpinyin = pinyin(keyworld, { + filterChinese: true, + noTone: true + }); + if (useInitial) { + let res = ''; + fullpinyin.split(' ').forEach(w => { + if (!/[a-zA-Z]/.test(w)) { + res += w; + } else { + res += w.slice(0, 1); + } + }); + return res; + } + return fullpinyin; + } +} +/* harmony export (immutable) */ __webpack_exports__["a"] = TreeStore; + + +/***/ }), +/* 26 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vue__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__App__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__App___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__App__); +// The Vue build version to load with the `import` command +// (runtime-only or standalone) has been set in webpack.base.conf with an alias. + + +__WEBPACK_IMPORTED_MODULE_0_vue__["a" /* default */].config.productionTip = false; + +/* eslint-disable no-new */ +new __WEBPACK_IMPORTED_MODULE_0_vue__["a" /* default */]({ + el: '#app', + template: '', + components: { App: __WEBPACK_IMPORTED_MODULE_1__App___default.a } +}); + +/***/ }) +],[26]); +//# sourceMappingURL=app.e7eb3ac0e0a2c5daa1bb.js.map \ No newline at end of file diff --git a/dist/static/js/app.e7eb3ac0e0a2c5daa1bb.js.map b/dist/static/js/app.e7eb3ac0e0a2c5daa1bb.js.map new file mode 100644 index 0000000..4ced321 --- /dev/null +++ b/dist/static/js/app.e7eb3ac0e0a2c5daa1bb.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/App.vue","webpack:///./src/components/tree/tree-node.vue?33f8","webpack:///./src/components/tree/tree.vue?890b","webpack:///./src/App.vue?6ad6","webpack:///./src/components/tree/tree.vue?df00","webpack:///./src/components/tree/tree-node.vue?2180","webpack:///./src/components/tree/tree.vue?94f2","webpack:///./src/components/tree/tree-node.vue?45ce","webpack:///App.vue","webpack:///tree-node.vue","webpack:///tree.vue","webpack:///./src/components/tree/tree-store.js","webpack:///./src/main.js"],"names":["pinyin","require","TreeStore","constructor","options","option","hasOwnProperty","datas","Map","_traverseNodes","root","node","set","id","children","length","changeCheckStatus","_traverseUp","checked","parentId","parent","getNode","sameSilibingChecked","upparent","_traverseDown","child","changeCheckHalfStatus","flag","nodeSelectNotAll","sameSilibingHalfChecked","currentId","get","sbIds","forEach","x","push","status","currentNode","isExitParent","isNullOrEmpty","world","trim","filterNodes","keyworld","searchOptions","_filterNode","val","useEnglish","label","indexOf","toPinYin","useInitial","toLowerCase","_syncNodeStatus","parentNode","visible","filterFunc","customFilter","searched","key","test","fullpinyin","filterChinese","noTone","res","split","w","slice","Vue","config","productionTip","el","template","components"],"mappings":";;;;;AAAA;AACA;AACA;AACA;AACA,wBAAwG;AACxG;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;;;;;;;ACVA;AACA,sBAAsT;;AAEtT;AACA;AACA;AACA;AACA,wBAA8G;AAC9G;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACdA;AACA,sBAAsT;;AAEtT;AACA;AACA;AACA;AACA,wBAA8G;AAC9G;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACfA,gBAAgB,mBAAmB,aAAa,0BAA0B;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,qB;;;;;;ACfD,gBAAgB,mBAAmB,aAAa,0BAA0B;AAC1E;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH,CAAC,qB;;;;;;ACnCD,gBAAgB,mBAAmB,aAAa,0BAA0B;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,CAAC,qB;;;;;;;AC5FD,yC;;;;;;ACAA,yC;;;;;;;;;;;;;;;;;ACMA;AACA;AACA;QAEA;SACA;WACA;;;sBAGA;iCACA;;sBAEA;sBACA;wBAGA;AALA;AAHA;gBAUA;AAXA;AAYA;8BACA;sBACA;AACA;;qCAEA;oCACA;yBACA;;gBAGA;mBACA;kBACA;qBACA;qCACA;sBACA;qBACA;sBACA;;kBAGA;qBACA;uBACA;gCACA;wBACA;wBACA;uBAEA;AARA,aADA;qBAWA;oBACA;uBACA;gCACA;kBACA;wBACA;uBACA;wBACA;;oBAGA;0BACA;uBACA;yBACA;0BACA;yBACA;kCAEA;AARA,eADA;oBAWA;uBACA;0BACA;0BACA;yBACA;yBACA;kCAIA;AAVA;AAnBA;qBA+BA;oBACA;uBACA;gCACA;kBACA;wBACA;uBACA;wBACA;;oBAGA;0BACA;uBACA;yBACA;kCACA;0BACA;yBAEA;AARA,eADA;oBAWA;uBACA;0BACA;yBACA;kCACA;0BACA;yBAOA;AAbA;AAnBA;AAjDA,WADA;uBAmFA;WACA;AACA;AAEA;AA3FA;;AA8FA;AAFA;AAhHA,G;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACsBA;QAEA;;eAEA;cAEA;AAHA;SAIA;;gBAGA;AAFA;AAGA;YACA;wBACA;uBACA;kBACA;WACA;yBACA;AAEA;;sBACA;eACA;mBACA;AACA;gDACA;AACA;;4BAEA;8BACA;eACA;AACA;aACA;AAEA;AAPA;;8BASA;yCACA;AAEA;AAJA;;kBAMA;wBACA;+DACA;eACA;AACA;aACA;AACA;uBACA;iCACA;6BACA;iCACA;AACA;AACA;2BACA;wBACA;AACA;8BACA;wCACA;AACA;qBACA;gCACA;iDACA;+DACA;eACA;yCACA;yBACA;iCACA;AACA;aACA;+BACA;uBACA;AACA;oCACA;AAEA;AAnCA;AAtCA,G;;;;;;;;;;;;;;;;;;;;;ACtBA;AACA;AACA;QAEA;;eAEA;cAEA;AAHA;SAIA;;cAEA;;cAEA;cAGA;AAJA;AAFA;AAOA;YACA;kBACA;;wCAEA;YAEA;AAHA;AAIA;;2BAEA;+CACA;AACA;8BACA;;0CAEA;cAEA;AAHA;AAKA;AAVA;;8BAYA;0CACA;yCACA;aACA;qCACA;AACA;wCACA;AACA;uBACA;kCACA;0BACA;qCACA;0BACA;6BACA;AACA;AACA;aACA;AACA;yBACA;kCACA;4BACA;qCACA;0BACA;oCACA;AACA;AACA;aACA;AAEA;AA7BA;gBA8BA;AA/DA,G;;;;;;;ACbA,MAAMA,SAAS,mBAAAC,CAAQ,EAAR,CAAf;AACe,MAAMC,SAAN,CAAgB;AAC3BC,gBAAYC,OAAZ,EAAqB;AACjB,aAAK,IAAIC,MAAT,IAAmBD,OAAnB,EAA4B;AACxB,gBAAIA,QAAQE,cAAR,CAAuBD,MAAvB,CAAJ,EAAoC;AAChC,qBAAKA,MAAL,IAAeD,QAAQC,MAAR,CAAf;AACH;AACJ;AACD,aAAKE,KAAL,GAAa,IAAIC,GAAJ,EAAb;AACA,cAAMC,iBAAkBC,IAAD,IAAU;AAC7B,iBAAK,IAAIC,IAAT,IAAiBD,IAAjB,EAAuB;AACnB,qBAAKH,KAAL,CAAWK,GAAX,CAAeD,KAAKE,EAApB,EAAwBF,IAAxB;AACA,oBAAIA,KAAKG,QAAL,IAAiBH,KAAKG,QAAL,CAAcC,MAAd,GAAuB,CAA5C,EAA+CN,eAAeE,KAAKG,QAApB;AAClD;AACJ,SALD;AAMAL,uBAAe,KAAKC,IAApB;AACH;;AAEDM,sBAAkBL,IAAlB,EAAwB;AACpB,cAAMM,cAAeN,IAAD,IAAU;AAC1B,gBAAIA,KAAKO,OAAL,IAAgBP,KAAKQ,QAAzB,EAAmC;AAC/B,oBAAIC,SAAS,KAAKC,OAAL,CAAaV,KAAKQ,QAAlB,CAAb;AACAC,uBAAOF,OAAP,GAAiB,KAAKI,mBAAL,CAAyBX,KAAKQ,QAA9B,EAAwCR,KAAKE,EAA7C,CAAjB;AACAI,4BAAYG,MAAZ;AACH,aAJD,MAIO;AACH,oBAAI,CAACT,KAAKO,OAAN,IAAiBP,KAAKQ,QAA1B,EAAoC;AAChC,wBAAII,WAAW,KAAKF,OAAL,CAAaV,KAAKQ,QAAlB,CAAf;AACAI,6BAASL,OAAT,GAAmB,KAAnB;AACA,wBAAIK,SAASJ,QAAb,EAAuB;AACnBF,oCAAYM,QAAZ;AACH;AACJ;AACJ;AACJ,SAdD;;AAgBA,cAAMC,gBAAiBb,IAAD,IAAU;AAC5B,gBAAIA,KAAKG,QAAL,IAAiBH,KAAKG,QAAL,CAAcC,MAAd,GAAuB,CAA5C,EAA+C;AAC3C,qBAAK,IAAIU,KAAT,IAAkBd,KAAKG,QAAvB,EAAiC;AAC7BW,0BAAMP,OAAN,GAAgBP,KAAKO,OAArB;AACAM,kCAAcC,KAAd;AACH;AACJ;AACJ,SAPD;AAQAR,oBAAYN,IAAZ;AACAa,sBAAcb,IAAd;AACH;AACDe,0BAAsBf,IAAtB,EAA4B;AACxB,YAAIgB,OAAO,KAAX;AACA;AACA,cAAMV,cAAc,CAACN,IAAD,EAAOgB,IAAP,KAAgB;AAChC,gBAAIP,SAAS,IAAb;AACA,gBAAIT,KAAKO,OAAT,EAAkB;AAAE;AAChB,oBAAIP,KAAKQ,QAAT,EAAmB;AACfC,6BAAS,KAAKC,OAAL,CAAaV,KAAKQ,QAAlB,CAAT;AACA,wBAAIQ,IAAJ,EAAU;AACNP,+BAAOF,OAAP,GAAiB,IAAjB;AACAE,+BAAOQ,gBAAP,GAA0B,IAA1B;AACAX,oCAAYG,MAAZ,EAAoB,IAApB;AACH,qBAJD,MAIO;AACHA,+BAAOF,OAAP,GAAiB,IAAjB;AACAE,+BAAOQ,gBAAP,GAA0B,KAAKC,uBAAL,CAA6B,IAA7B,EAAmCT,MAAnC,EAA2CT,KAAKQ,QAAhD,EAA0DR,KAAKE,EAA/D,MAAuE,MAAvE,GAAgF,IAAhF,GAAuF,KAAjH,CAFG,CAEqH;AACxHI,oCAAYG,MAAZ;AACH;AACJ;AACJ,aAbD,MAaO;AAAE;AACL,oBAAIT,KAAKQ,QAAT,EAAmB;AACfC,6BAAS,KAAKC,OAAL,CAAaV,KAAKQ,QAAlB,CAAT;AACA,wBAAI,KAAKU,uBAAL,CAA6B,KAA7B,EAAoCT,MAApC,EAA4CT,KAAKQ,QAAjD,EAA2DR,KAAKE,EAAhE,MAAwE,MAA5E,EAAoF;AAAE;AAClFO,+BAAOF,OAAP,GAAiB,KAAjB;AACAE,+BAAOQ,gBAAP,GAA0B,KAA1B;AACH,qBAHD,MAGO;AACHR,+BAAOF,OAAP,GAAiB,IAAjB;AACAE,+BAAOQ,gBAAP,GAA0B,IAA1B;AACH;AACDX,gCAAYG,MAAZ,EAAoB,IAApB;AACH;AACJ;AACJ,SA5BD;AA6BA,cAAMI,gBAAiBb,IAAD,IAAU;AAC5B,gBAAIA,KAAKG,QAAL,IAAiBH,KAAKG,QAAL,CAAcC,MAAd,GAAuB,CAA5C,EAA+C;AAC3C,oBAAIJ,KAAKiB,gBAAT,EAA2B;AAAE;AACzBjB,yBAAKiB,gBAAL,GAAwB,KAAxB;AACH;AACD,qBAAK,IAAIH,KAAT,IAAkBd,KAAKG,QAAvB,EAAiC;AAC7BW,0BAAMP,OAAN,GAAgBP,KAAKO,OAArB;AACAM,kCAAcC,KAAd;AACH;AACJ;AACJ,SAVD;AAWAR,oBAAYN,IAAZ;AACAa,sBAAcb,IAAd;AACH;AACDW,wBAAoBH,QAApB,EAA8BW,SAA9B,EAAyC;AACrC,YAAIV,SAAS,KAAKb,KAAL,CAAWwB,GAAX,CAAeZ,QAAf,CAAb;AACA,YAAIa,QAAQ,EAAZ;AACAZ,eAAON,QAAP,CAAgBmB,OAAhB,CAAwBC,KAAK;AACzB,gBAAIA,EAAErB,EAAF,KAASiB,SAAb,EAAwBE,MAAMG,IAAN,CAAWD,EAAErB,EAAb;AAC3B,SAFD;AAGA,aAAK,IAAIA,EAAT,IAAemB,KAAf,EAAsB;AAClB,gBAAIrB,OAAO,KAAKU,OAAL,CAAaR,EAAb,CAAX;AACA,gBAAI,CAACF,KAAKO,OAAV,EAAmB,OAAO,KAAP;AACtB;AACD,eAAO,IAAP;AACH;AACDW,4BAAwBO,MAAxB,EAAgChB,MAAhC,EAAwCD,QAAxC,EAAkDW,SAAlD,EAA6D;AACzD,YAAIE,QAAQ,EAAZ;AACA,YAAIK,cAAc,KAAKhB,OAAL,CAAaS,SAAb,CAAlB;AACAV,eAAON,QAAP,CAAgBmB,OAAhB,CAAwBC,KAAK;AACzB,gBAAI,CAACG,YAAYT,gBAAb,IAAiCM,EAAErB,EAAF,KAASiB,SAA9C,EAAyDE,MAAMG,IAAN,CAAWD,EAAErB,EAAb,EADhC,CACiD;AAC7E,SAFD;;AAIA,YAAIuB,MAAJ,EAAY;AAAE;AACV,gBAAIJ,MAAMjB,MAAN,KAAiB,CAArB,EAAwB;AACpB,qBAAK,IAAIF,EAAT,IAAemB,KAAf,EAAsB;AAAE;AACpB,wBAAIrB,OAAO,KAAKU,OAAL,CAAaR,EAAb,CAAX;AACA,wBAAI,CAACF,KAAKO,OAAN,IAAiBP,KAAKiB,gBAA1B,EAA4C;AAAE;AAC1C,+BAAO,MAAP,CADwC,CAC1B;AACjB;AACJ;AACJ,aAPD,MAOO;AACH,oBAAIS,YAAYT,gBAAhB,EAAkC;AAC9B,2BAAO,MAAP,CAD8B,CAChB;AACjB;AACJ;AACD,mBAAO,KAAP,CAbQ,CAaK;AAChB,SAdD,MAcO;AAAE;AACL,gBAAII,MAAMjB,MAAN,KAAiB,CAArB,EAAwB;AACpB,qBAAK,IAAIF,EAAT,IAAemB,KAAf,EAAsB;AAAE;AACpB,wBAAIrB,OAAO,KAAKU,OAAL,CAAaR,EAAb,CAAX;AACA,wBAAIF,KAAKO,OAAL,IAAgBP,KAAKiB,gBAAzB,EAA2C;AAAE;AACzC,+BAAO,MAAP;AACH;AACJ;AACJ,aAPD,MAOO;AACH,oBAAIS,YAAYT,gBAAhB,EAAkC;AAC9B,2BAAO,MAAP,CAD8B,CAChB;AACjB;AACJ;AACD,mBAAO,MAAP;AACH;AACJ;AACDU,iBAAalB,MAAb,EAAqB;AACjB,YAAIA,OAAOP,EAAX,EAAe;AACX,mBAAO,KAAKQ,OAAL,CAAaV,KAAKQ,QAAlB,CAAP;AACH;AACD,eAAO,IAAP;AACH;AACDoB,kBAAcC,KAAd,EAAqB;AACjB,YAAIA,KAAJ,EAAW;AACP,mBAAOA,MAAMC,IAAN,GAAa1B,MAAb,KAAwB,CAA/B;AACH;AACD,eAAO,IAAP;AACH;AACD2B,gBAAYC,QAAZ,EAAsBC,aAAtB,EAAqC;AACjC,cAAMC,cAAc,CAACC,GAAD,EAAMnC,IAAN,KAAe;AAC/B,gBAAI,CAACmC,GAAL,EAAU,OAAO,IAAP;AACV,gBAAIF,cAAcG,UAAlB,EAA8B;AAC1B,uBAAOpC,KAAKqC,KAAL,CAAWC,OAAX,CAAmBH,GAAnB,MAA4B,CAAC,CAApC;AACH,aAFD,MAEO;AACH,uBAAO,KAAKI,QAAL,CAAcvC,KAAKqC,KAAnB,EAA0BJ,cAAcO,UAAxC,EAAoDF,OAApD,CAA4D,KAAKC,QAAL,CAAcP,SAASS,WAAT,EAAd,EAAsCR,cAAcO,UAApD,EAAgE,IAAhE,CAA5D,MAAuI,CAAC,CAA/I;AACH;AACJ,SAPD;;AASA,cAAME,kBAAmB1C,IAAD,IAAU;AAC9B,gBAAIA,KAAKQ,QAAT,EAAmB;AACf,oBAAImC,aAAa,KAAKjC,OAAL,CAAaV,KAAKQ,QAAlB,CAAjB;AACA,oBAAIR,KAAK4C,OAAT,EAAkB;AACdD,+BAAWC,OAAX,GAAqB5C,KAAK4C,OAA1B;AACAF,oCAAgBC,UAAhB;AACH;AACJ;AACJ,SARD;AASA,YAAIE,aAAcZ,cAAca,YAAd,IAA8B,OAAOb,cAAca,YAArB,KAAuC,UAAtE,GAAoFb,cAAca,YAAlG,GAAiHZ,WAAlI;AACA,aAAKtC,KAAL,CAAW0B,OAAX,CAAmBtB,QAAQ;AACvBA,iBAAK4C,OAAL,GAAeC,WAAWb,QAAX,EAAqBhC,IAArB,CAAf;AACAA,iBAAK+C,QAAL,GAAgB,KAAhB;AACA,gBAAI/C,KAAK4C,OAAT,EAAkB;AACd,oBAAI,CAAC,KAAKhB,aAAL,CAAmBI,QAAnB,CAAL,EAAmC;AAC/BhC,yBAAK+C,QAAL,GAAgB,IAAhB;AACH;AACDL,gCAAgB1C,IAAhB;AACH;AACJ,SATD;AAUH;AACDU,YAAQsC,GAAR,EAAa;AACT,eAAO,KAAKpD,KAAL,CAAWwB,GAAX,CAAe4B,GAAf,CAAP;AACH;AACDT,aAASP,QAAT,EAAmBQ,UAAnB,EAA+B;AAC3B,YAAI,YAAYS,IAAZ,CAAiBjB,QAAjB,CAAJ,EAAgC;AAC5B,mBAAOA,QAAP;AACH;AACD,YAAIkB,aAAa7D,OAAO2C,QAAP,EAAiB;AAC9BmB,2BAAe,IADe;AAE9BC,oBAAQ;AAFsB,SAAjB,CAAjB;AAIA,YAAIZ,UAAJ,EAAgB;AACZ,gBAAIa,MAAM,EAAV;AACAH,uBAAWI,KAAX,CAAiB,GAAjB,EAAsBhC,OAAtB,CAA8BiC,KAAK;AAC/B,oBAAI,CAAE,WAAWN,IAAX,CAAgBM,CAAhB,CAAN,EAA2B;AACvBF,2BAAOE,CAAP;AACH,iBAFD,MAEO;AACHF,2BAAOE,EAAEC,KAAF,CAAQ,CAAR,EAAW,CAAX,CAAP;AACH;AACJ,aAND;AAOA,mBAAOH,GAAP;AACH;AACD,eAAOH,UAAP;AACH;AA9M0B,C;;;;;;;;;;;ACD/B;AAAA;AAAA;AACA;AACA;AACA;AACA,oDAAAO,CAAIC,MAAJ,CAAWC,aAAX,GAA2B,KAA3B;;AAEA;AACA,IAAI,oDAAJ,CAAQ;AACNC,MAAI,MADE;AAENC,YAAU,QAFJ;AAGNC,cAAY,EAAE,iDAAF;AAHN,CAAR,E","file":"static/js/app.e7eb3ac0e0a2c5daa1bb.js","sourcesContent":["var Component = require(\"!../node_modules/.11.3.4@vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../node_modules/.11.3.4@vue-loader/lib/selector?type=script&index=0!./App.vue\"),\n /* template */\n require(\"!!../node_modules/.11.3.4@vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-3581a45a\\\"}!../node_modules/.11.3.4@vue-loader/lib/selector?type=template&index=0!./App.vue\"),\n /* scopeId */\n null,\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/App.vue\n// module id = 1\n// module chunks = 1","\n/* styles */\nrequire(\"!!../../../node_modules/.2.1.0@extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../../../node_modules/.11.3.4@vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-e0674d5c\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/.11.3.4@vue-loader/lib/selector?type=styles&index=0!./tree-node.vue\")\n\nvar Component = require(\"!../../../node_modules/.11.3.4@vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../../../node_modules/.11.3.4@vue-loader/lib/selector?type=script&index=0!./tree-node.vue\"),\n /* template */\n require(\"!!../../../node_modules/.11.3.4@vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-e0674d5c\\\"}!../../../node_modules/.11.3.4@vue-loader/lib/selector?type=template&index=0!./tree-node.vue\"),\n /* scopeId */\n \"data-v-e0674d5c\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/tree/tree-node.vue\n// module id = 13\n// module chunks = 1","\n/* styles */\nrequire(\"!!../../../node_modules/.2.1.0@extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../../../node_modules/.11.3.4@vue-loader/lib/style-compiler/index?{\\\"id\\\":\\\"data-v-9e877da6\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/.11.3.4@vue-loader/lib/selector?type=styles&index=0!./tree.vue\")\n\nvar Component = require(\"!../../../node_modules/.11.3.4@vue-loader/lib/component-normalizer\")(\n /* script */\n require(\"!!babel-loader!../../../node_modules/.11.3.4@vue-loader/lib/selector?type=script&index=0!./tree.vue\"),\n /* template */\n require(\"!!../../../node_modules/.11.3.4@vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-9e877da6\\\"}!../../../node_modules/.11.3.4@vue-loader/lib/selector?type=template&index=0!./tree.vue\"),\n /* scopeId */\n \"data-v-9e877da6\",\n /* cssModules */\n null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/tree/tree.vue\n// module id = 14\n// module chunks = 1","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n staticStyle: {\n \"width\": \"300px\"\n },\n attrs: {\n \"id\": \"app\"\n }\n }, [_c('tree', {\n ref: \"tree\",\n attrs: {\n \"treeData\": _vm.treeData,\n \"options\": _vm.options\n }\n })], 1)\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.11.3.4@vue-loader/lib/template-compiler?{\"id\":\"data-v-3581a45a\"}!./~/.11.3.4@vue-loader/lib/selector.js?type=template&index=0!./src/App.vue\n// module id = 15\n// module chunks = 1","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n staticClass: \"halo-tree\"\n }, [_c('div', {\n staticClass: \"input\"\n }, [_c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.search),\n expression: \"search\"\n }],\n attrs: {\n \"type\": \"text\"\n },\n domProps: {\n \"value\": (_vm.search)\n },\n on: {\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.search = $event.target.value\n }\n }\n }), _vm._v(\" \"), _c('span', {\n staticClass: \"icon search\"\n })]), _vm._v(\" \"), _c('tree-node', {\n attrs: {\n \"treeData\": _vm.store.root,\n \"options\": _vm.options\n },\n on: {\n \"handlecheckedChange\": _vm.handlecheckedChange\n }\n })], 1)\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.11.3.4@vue-loader/lib/template-compiler?{\"id\":\"data-v-9e877da6\"}!./~/.11.3.4@vue-loader/lib/selector.js?type=template&index=0!./src/components/tree/tree.vue\n// module id = 16\n// module chunks = 1","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('ul', _vm._l((_vm.nodeData), function(item) {\n return _c('li', {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: (item.visible),\n expression: \"item.visible\"\n }],\n class: [(item.children && item.children.length > 0) ? '' : 'leaf']\n }, [(item.children && item.children.length > 0) ? _c('i', {\n class: [item.open ? 'tree-open' : 'tree-close', 'icon'],\n on: {\n \"click\": function($event) {\n $event.stopPropagation();\n _vm.handleNodeExpand(item)\n }\n }\n }) : _vm._e(), _vm._v(\" \"), _c('div', {\n staticClass: \"inputCheck\",\n class: {\n notAllNodes: item.nodeSelectNotAll\n },\n style: ({\n width: _vm.inputWidth + 'px',\n height: _vm.inputWidth + 'px'\n }),\n on: {\n \"click\": function($event) {\n _vm.walkCheckBox(item)\n }\n }\n }, [(_vm.options.showCheckbox && _vm.options.halfCheckedStatus && !item.nodeSelectNotAll) ? _c('input', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (item.checked),\n expression: \"item.checked\"\n }],\n staticClass: \"check\",\n attrs: {\n \"type\": \"checkbox\"\n },\n domProps: {\n \"checked\": Array.isArray(item.checked) ? _vm._i(item.checked, null) > -1 : (item.checked)\n },\n on: {\n \"change\": function($event) {\n _vm.handlecheckedChange(item)\n },\n \"__c\": function($event) {\n var $$a = item.checked,\n $$el = $event.target,\n $$c = $$el.checked ? (true) : (false);\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v);\n if ($$c) {\n $$i < 0 && (item.checked = $$a.concat($$v))\n } else {\n $$i > -1 && (item.checked = $$a.slice(0, $$i).concat($$a.slice($$i + 1)))\n }\n } else {\n item.checked = $$c\n }\n }\n }\n }) : _vm._e()]), _vm._v(\" \"), _c('span', {\n class: {\n 'node-selected': (item.checked && !_vm.options.showCheckbox) || item.searched\n },\n on: {\n \"click\": function($event) {\n _vm.handleNode(item)\n }\n }\n }, [_vm._v(\"\\n \" + _vm._s(item.label) + \"\\n \")]), _vm._v(\" \"), (item.children && item.children.length > 0) ? _c('tree-node', {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: (item.open),\n expression: \"item.open\"\n }],\n attrs: {\n \"options\": _vm.options,\n \"tree-data\": item.children\n },\n on: {\n \"handlecheckedChange\": _vm.handlecheckedChange\n }\n }) : _vm._e()], 1)\n }))\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.11.3.4@vue-loader/lib/template-compiler?{\"id\":\"data-v-e0674d5c\"}!./~/.11.3.4@vue-loader/lib/selector.js?type=template&index=0!./src/components/tree/tree-node.vue\n// module id = 17\n// module chunks = 1","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.2.1.0@extract-text-webpack-plugin/loader.js?{\"omit\":1,\"remove\":true}!./~/.2.0.5@vue-style-loader!./~/.0.26.4@css-loader?{\"minimize\":true,\"sourceMap\":true}!./~/.11.3.4@vue-loader/lib/style-compiler?{\"id\":\"data-v-9e877da6\",\"scoped\":true,\"hasInlineConfig\":false}!./~/.11.3.4@vue-loader/lib/selector.js?type=styles&index=0!./src/components/tree/tree.vue\n// module id = 19\n// module chunks = 1","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/.2.1.0@extract-text-webpack-plugin/loader.js?{\"omit\":1,\"remove\":true}!./~/.2.0.5@vue-style-loader!./~/.0.26.4@css-loader?{\"minimize\":true,\"sourceMap\":true}!./~/.11.3.4@vue-loader/lib/style-compiler?{\"id\":\"data-v-e0674d5c\",\"scoped\":true,\"hasInlineConfig\":false}!./~/.11.3.4@vue-loader/lib/selector.js?type=styles&index=0!./src/components/tree/tree-node.vue\n// module id = 20\n// module chunks = 1","\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// App.vue?4eba5114","\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// tree-node.vue?935e7db2","\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// tree.vue?6533b5b8","const pinyin = require('chinese-to-pinyin')\r\nexport default class TreeStore {\r\n constructor(options) {\r\n for (let option in options) {\r\n if (options.hasOwnProperty(option)) {\r\n this[option] = options[option]\r\n }\r\n }\r\n this.datas = new Map()\r\n const _traverseNodes = (root) => {\r\n for (let node of root) {\r\n this.datas.set(node.id, node)\r\n if (node.children && node.children.length > 0) _traverseNodes(node.children)\r\n }\r\n }\r\n _traverseNodes(this.root)\r\n }\r\n\r\n changeCheckStatus(node) {\r\n const _traverseUp = (node) => {\r\n if (node.checked && node.parentId) {\r\n let parent = this.getNode(node.parentId)\r\n parent.checked = this.sameSilibingChecked(node.parentId, node.id)\r\n _traverseUp(parent)\r\n } else {\r\n if (!node.checked && node.parentId) {\r\n let upparent = this.getNode(node.parentId)\r\n upparent.checked = false\r\n if (upparent.parentId) {\r\n _traverseUp(upparent)\r\n }\r\n }\r\n }\r\n }\r\n\r\n const _traverseDown = (node) => {\r\n if (node.children && node.children.length > 0) {\r\n for (let child of node.children) {\r\n child.checked = node.checked\r\n _traverseDown(child)\r\n }\r\n }\r\n }\r\n _traverseUp(node)\r\n _traverseDown(node)\r\n }\r\n changeCheckHalfStatus(node) {\r\n let flag = false;\r\n //如果勾选的是子节点,父节点默认打上勾\r\n const _traverseUp = (node, flag) => {\r\n let parent = null;\r\n if (node.checked) { //打钩\r\n if (node.parentId) {\r\n parent = this.getNode(node.parentId)\r\n if (flag) {\r\n parent.checked = true\r\n parent.nodeSelectNotAll = true\r\n _traverseUp(parent, true)\r\n } else {\r\n parent.checked = true;\r\n parent.nodeSelectNotAll = this.sameSilibingHalfChecked(true, parent, node.parentId, node.id) === 'half' ? true : false; //返回true则全钩,false为半钩\r\n _traverseUp(parent)\r\n }\r\n }\r\n } else { //去钩\r\n if (node.parentId) {\r\n parent = this.getNode(node.parentId)\r\n if (this.sameSilibingHalfChecked(false, parent, node.parentId, node.id) === \"none\") { //返回true则全没钩,false为半钩\r\n parent.checked = false\r\n parent.nodeSelectNotAll = false\r\n } else {\r\n parent.checked = true\r\n parent.nodeSelectNotAll = true\r\n }\r\n _traverseUp(parent, true)\r\n }\r\n }\r\n }\r\n const _traverseDown = (node) => {\r\n if (node.children && node.children.length > 0) {\r\n if (node.nodeSelectNotAll) { //节点没勾选\r\n node.nodeSelectNotAll = false\r\n }\r\n for (let child of node.children) {\r\n child.checked = node.checked\r\n _traverseDown(child)\r\n }\r\n }\r\n }\r\n _traverseUp(node)\r\n _traverseDown(node)\r\n }\r\n sameSilibingChecked(parentId, currentId) {\r\n let parent = this.datas.get(parentId)\r\n let sbIds = []\r\n parent.children.forEach(x => {\r\n if (x.id !== currentId) sbIds.push(x.id)\r\n })\r\n for (let id of sbIds) {\r\n let node = this.getNode(id)\r\n if (!node.checked) return false\r\n }\r\n return true\r\n }\r\n sameSilibingHalfChecked(status, parent, parentId, currentId) {\r\n let sbIds = []\r\n let currentNode = this.getNode(currentId)\r\n parent.children.forEach(x => {\r\n if (!currentNode.nodeSelectNotAll && x.id !== currentId) sbIds.push(x.id) //除去当前节点的剩下节点\r\n })\r\n\r\n if (status) { //打钩\r\n if (sbIds.length !== 0) {\r\n for (let id of sbIds) { //子节点只要有一个被选中则父框打黑,全选打钩,全没有被选无状态\r\n let node = this.getNode(id)\r\n if (!node.checked || node.nodeSelectNotAll) { //节点没勾选\r\n return \"half\" //表示父框半钩的状态\r\n }\r\n }\r\n } else {\r\n if (currentNode.nodeSelectNotAll) {\r\n return \"half\" //表示全钩的状态\r\n }\r\n }\r\n return \"all\" //表示全钩的状态\r\n } else { //去钩\r\n if (sbIds.length !== 0) {\r\n for (let id of sbIds) { //子节点只要有一个被选中则父框打黑,全选打钩,全没有被选无状态\r\n let node = this.getNode(id)\r\n if (node.checked || node.nodeSelectNotAll) { //有节点被勾选,父框半钩的状态\r\n return \"half\"\r\n }\r\n }\r\n } else {\r\n if (currentNode.nodeSelectNotAll) {\r\n return \"half\" //表示全钩的状态\r\n }\r\n }\r\n return \"none\"\r\n }\r\n }\r\n isExitParent(parent) {\r\n if (parent.id) {\r\n return this.getNode(node.parentId)\r\n }\r\n return null\r\n }\r\n isNullOrEmpty(world) {\r\n if (world) {\r\n return world.trim().length === 0\r\n }\r\n return true\r\n }\r\n filterNodes(keyworld, searchOptions) {\r\n const _filterNode = (val, node) => {\r\n if (!val) return true\r\n if (searchOptions.useEnglish) {\r\n return node.label.indexOf(val) !== -1\r\n } else {\r\n return this.toPinYin(node.label, searchOptions.useInitial).indexOf(this.toPinYin(keyworld.toLowerCase(), searchOptions.useInitial, true)) !== -1\r\n }\r\n }\r\n\r\n const _syncNodeStatus = (node) => {\r\n if (node.parentId) {\r\n let parentNode = this.getNode(node.parentId)\r\n if (node.visible) {\r\n parentNode.visible = node.visible\r\n _syncNodeStatus(parentNode)\r\n }\r\n }\r\n }\r\n let filterFunc = (searchOptions.customFilter && typeof(searchOptions.customFilter) === 'function') ? searchOptions.customFilter : _filterNode\r\n this.datas.forEach(node => {\r\n node.visible = filterFunc(keyworld, node)\r\n node.searched = false\r\n if (node.visible) {\r\n if (!this.isNullOrEmpty(keyworld)) {\r\n node.searched = true\r\n }\r\n _syncNodeStatus(node)\r\n }\r\n })\r\n }\r\n getNode(key) {\r\n return this.datas.get(key)\r\n }\r\n toPinYin(keyworld, useInitial) {\r\n if (/^[a-zA-Z]/.test(keyworld)) {\r\n return keyworld\r\n }\r\n let fullpinyin = pinyin(keyworld, {\r\n filterChinese: true,\r\n noTone: true\r\n })\r\n if (useInitial) {\r\n let res = ''\r\n fullpinyin.split(' ').forEach(w => {\r\n if (!(/[a-zA-Z]/.test(w))) {\r\n res += w\r\n } else {\r\n res += w.slice(0, 1)\r\n }\r\n })\r\n return res\r\n }\r\n return fullpinyin\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/components/tree/tree-store.js","// The Vue build version to load with the `import` command\r\n// (runtime-only or standalone) has been set in webpack.base.conf with an alias.\r\nimport Vue from 'vue'\r\nimport App from './App'\r\nVue.config.productionTip = false\r\n\r\n/* eslint-disable no-new */\r\nnew Vue({\r\n el: '#app',\r\n template: '',\r\n components: { App }\r\n})\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.js"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/static/js/manifest.5dbf75ce9d711e26a95c.js b/dist/static/js/manifest.5dbf75ce9d711e26a95c.js new file mode 100644 index 0000000..9942f35 --- /dev/null +++ b/dist/static/js/manifest.5dbf75ce9d711e26a95c.js @@ -0,0 +1,2 @@ +!function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var n=window.webpackJsonp;window.webpackJsonp=function(t,c,a){for(var i,u,f,s=0,l=[];s-1)return n.splice(g,1)}}function s(n,i){return wu.call(n,i)}function z(n){return"string"==typeof n||"number"==typeof n}function t(n){var i=Object.create(null);return function(g){return i[g]||(i[g]=n(g))}}function y(n,i){function g(g){var h=arguments.length;return h?h>1?n.apply(i,arguments):n.call(i,g):n.call(i)}return g._length=n.length,g}function c(n,i){i=i||0;for(var g=n.length-i,h=new Array(g);g--;)h[g]=n[g+i];return h}function l(n,i){for(var g in i)n[g]=i[g];return n}function d(n){return null!==n&&"object"==typeof n}function j(n){return $u.call(n)===Cu}function r(n){for(var i={},g=0;g=0&&co[g].id>n.id;)g--;co.splice(Math.max(g,eo)+1,0,n)}else co.push(n);jo||(jo=!0,Ju(xn))}}function bn(n){bo.clear(),mn(n,bo)}function mn(n,i){var g,h,u=Array.isArray(n);if((u||d(n))&&Object.isExtensible(n)){if(n.__ob__){var o=n.__ob__.dep.id;if(i.has(o))return;i.add(o)}if(u)for(g=n.length;g--;)mn(n[g],i);else for(h=Object.keys(n),g=h.length;g--;)mn(n[h[g]],i)}}function an(n,i,g){mo.get=function(){return this[i][g]},mo.set=function(n){this[i][g]=n},Object.defineProperty(n,g,mo)}function qn(n){n._watchers=[];var i=n.$options;i.props&&pn(n,i.props),i.methods&&Cn(n,i.methods),i.data?wn(n):$(n._data={},!0),i.computed&&vn(n,i.computed),i.watch&&An(n,i.watch)}function pn(n,i){var g=n.$options.propsData||{},h=n._props={},u=n.$options._propKeys=[],o=!n.$parent;no.shouldConvert=o;for(var s in i)!function(o){u.push(o);var s=P(o,i,g,n);C(h,o,s),o in n||an(n,"_props",o)}(s);no.shouldConvert=!0}function wn(n){var i=n.$options.data;i=n._data="function"==typeof i?kn(i,n):i||{},j(i)||(i={});for(var g=Object.keys(i),h=n.$options.props,u=g.length;u--;)h&&s(h,g[u])||m(g[u])||an(n,"_data",g[u]);$(i,!0)}function kn(n,i){try{return n.call(i)}catch(n){return B(n,i,"data()"),{}}}function vn(n,i){var g=n._computedWatchers=Object.create(null);for(var h in i){var u=i[h],o="function"==typeof u?u:u.get;g[h]=new fo(n,o,e,ao),h in n||_n(n,h,u)}}function _n(n,i,g){"function"==typeof g?(mo.get=$n(i),mo.set=e):(mo.get=g.get?!1!==g.cache?$n(i):g.get:e,mo.set=g.set?g.set:e),Object.defineProperty(n,i,mo)}function $n(n){return function(){var i=this._computedWatchers&&this._computedWatchers[n];if(i)return i.dirty&&i.evaluate(),Zu.target&&i.depend(),i.value}}function Cn(n,i){n.$options.props;for(var g in i)n[g]=null==i[g]?e:y(i[g],n)}function An(n,i){for(var g in i){var h=i[g];if(Array.isArray(h))for(var u=0;u-1:n instanceof RegExp&&n.test(i)}function ri(n,i){for(var g in n){var h=n[g];if(h){var u=di(h.componentOptions);u&&!i(u)&&(ei(h),n[g]=null)}}}function ei(n){n&&(n.componentInstance._inactive||rn(n.componentInstance,"deactivated"),n.componentInstance.$destroy())}function xi(n){for(var i=n.data,g=n,h=n;h.componentInstance;)h=h.componentInstance._vnode,h.data&&(i=fi(h.data,i));for(;g=g.parent;)g.data&&(i=fi(i,g.data));return bi(i)}function fi(n,i){return{staticClass:mi(n.staticClass,i.staticClass),class:n.class?[n.class,i.class]:i.class}}function bi(n){var i=n.class,g=n.staticClass;return g||i?mi(g,ai(i)):""}function mi(n,i){return n?i?n+" "+i:n:i||""}function ai(n){var i="";if(!n)return i;if("string"==typeof n)return n;if(Array.isArray(n)){for(var g,h=0,u=n.length;h-1?Yo[n]=i.constructor===window.HTMLUnknownElement||i.constructor===window.HTMLElement:Yo[n]=/HTMLUnknownElement/.test(i.toString())}function wi(n){if("string"==typeof n){var i=document.querySelector(n);return i||document.createElement("div")}return n}function ki(n,i){var g=document.createElement(n);return"select"!==n?g:(i.data&&i.data.attrs&&void 0!==i.data.attrs.multiple&&g.setAttribute("multiple","multiple"),g)}function vi(n,i){return document.createElementNS(Jo[n],i)}function _i(n){return document.createTextNode(n)}function $i(n){return document.createComment(n)}function Ci(n,i,g){n.insertBefore(i,g)}function Ai(n,i){n.removeChild(i)}function Oi(n,i){n.appendChild(i)}function Ti(n){return n.parentNode}function Si(n){return n.nextSibling}function Ei(n){return n.tagName}function Ni(n,i){n.textContent=i}function Mi(n,i,g){n.setAttribute(i,g)}function Ii(n,i){var g=n.data.ref;if(g){var h=n.context,u=n.componentInstance||n.elm,s=h.$refs;i?Array.isArray(s[g])?o(s[g],u):s[g]===u&&(s[g]=void 0):n.data.refInFor?Array.isArray(s[g])&&s[g].indexOf(u)<0?s[g].push(u):s[g]=[u]:s[g]=u}}function Li(n){return void 0===n||null===n}function Di(n){return void 0!==n&&null!==n}function Pi(n){return!0===n}function Ri(n,i){return n.key===i.key&&n.tag===i.tag&&n.isComment===i.isComment&&Di(n.data)===Di(i.data)&&Fi(n,i)}function Fi(n,i){if("input"!==n.tag)return!0;var g;return(Di(g=n.data)&&Di(g=g.attrs)&&g.type)===(Di(g=i.data)&&Di(g=g.attrs)&&g.type)}function Ui(n,i,g){var h,u,o={};for(h=i;h<=g;++h)u=n[h].key,Di(u)&&(o[u]=h);return o}function Bi(n,i){(n.data.directives||i.data.directives)&&Hi(n,i)}function Hi(n,i){var g,h,u,o=n===ns,s=i===ns,z=Vi(n.data.directives,n.context),t=Vi(i.data.directives,i.context),y=[],c=[];for(g in t)h=z[g],u=t[g],h?(u.oldValue=h.value,Ki(u,"update",i,n),u.def&&u.def.componentUpdated&&c.push(u)):(Ki(u,"bind",i,n),u.def&&u.def.inserted&&y.push(u));if(y.length){var l=function(){for(var g=0;g=0&&" "===(x=n.charAt(e));e--);x&&zs.test(x)||(c=!0)}}else void 0===o?(r=u+1,o=n.slice(0,u).trim()):i();if(void 0===o?o=n.slice(0,u).trim():0!==r&&i(),s)for(u=0;u=Ao}function dg(n){return 34===n||39===n}function jg(n){var i=1;for(Eo=So;!lg();)if(n=cg(),dg(n))rg(n);else if(91===n&&i++,93===n&&i--,0===i){No=So;break}}function rg(n){for(var i=n;!lg()&&(n=cg())!==i;);}function eg(n,i,g){Mo=g;var h=i.value,u=i.modifiers,o=n.tag,s=n.attrsMap.type;if("select"===o)bg(n,h,u);else if("input"===o&&"checkbox"===s)xg(n,h,u);else if("input"===o&&"radio"===s)fg(n,h,u);else if("input"===o||"textarea"===o)mg(n,h,u);else if(!Tu.isReservedTag(o))return zg(n,h,u),!1;return!0}function xg(n,i,g){var h=g&&g.number,u=og(n,"value")||"null",o=og(n,"true-value")||"true",s=og(n,"false-value")||"false";ig(n,"checked","Array.isArray("+i+")?_i("+i+","+u+")>-1"+("true"===o?":("+i+")":":_q("+i+","+o+")")),ug(n,ys,"var $$a="+i+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+s+");if(Array.isArray($$a)){var $$v="+(h?"_n("+u+")":u)+",$$i=_i($$a,$$v);if($$c){$$i<0&&("+i+"=$$a.concat($$v))}else{$$i>-1&&("+i+"=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{"+i+"=$$c}",null,!0)}function fg(n,i,g){var h=g&&g.number,u=og(n,"value")||"null";u=h?"_n("+u+")":u,ig(n,"checked","_q("+i+","+u+")"),ug(n,ys,tg(i,u),null,!0)}function bg(n,i,g){var h=g&&g.number,u='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(h?"_n(val)":"val")+"})",o="var $$selectedVal = "+u+";";o=o+" "+tg(i,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]"),ug(n,"change",o,null,!0)}function mg(n,i,g){var h=n.attrsMap.type,u=g||{},o=u.lazy,s=u.number,z=u.trim,t=!o&&"range"!==h,y=o?"change":"range"===h?ts:"input",c="$event.target.value";z&&(c="$event.target.value.trim()"),s&&(c="_n("+c+")");var l=tg(i,c);t&&(l="if($event.target.composing)return;"+l),ig(n,"value","("+i+")"),ug(n,y,l,null,!0),(z||s||"number"===h)&&ug(n,"blur","$forceUpdate()")}function ag(n){var i;n[ts]&&(i=Lu?"change":"input",n[i]=[].concat(n[ts],n[i]||[]),delete n[ts]),n[ys]&&(i=Uu?"click":"change",n[i]=[].concat(n[ys],n[i]||[]),delete n[ys])}function qg(n,i,g,h){if(g){var u=i,o=Io;i=function(g){null!==(1===arguments.length?u(g):u.apply(null,arguments))&&pg(n,i,h,o)}}Io.addEventListener(n,i,h)}function pg(n,i,g,h){(h||Io).removeEventListener(n,i,g)}function wg(n,i){if(n.data.on||i.data.on){var g=i.data.on||{},h=n.data.on||{};Io=i.elm,ag(g),W(g,h,qg,pg,i.context)}}function kg(n,i){if(n.data.domProps||i.data.domProps){var g,h,u=i.elm,o=n.data.domProps||{},s=i.data.domProps||{};s.__ob__&&(s=i.data.domProps=l({},s));for(g in o)null==s[g]&&(u[g]="");for(g in s)if(h=s[g],"textContent"!==g&&"innerHTML"!==g||(i.children&&(i.children.length=0),h!==o[g]))if("value"===g){u._value=h;var z=null==h?"":String(h);vg(u,i,z)&&(u.value=z)}else u[g]=h}}function vg(n,i,g){return!n.composing&&("option"===i.tag||_g(n,g)||$g(n,g))}function _g(n,i){return document.activeElement!==n&&n.value!==i}function $g(n,i){var g=n.value,u=n._vModifiers;return u&&u.number||"number"===n.type?h(g)!==h(i):u&&u.trim?g.trim()!==i.trim():g!==i}function Cg(n){var i=Ag(n.style);return n.staticStyle?l(n.staticStyle,i):i}function Ag(n){return Array.isArray(n)?r(n):"string"==typeof n?ds(n):n}function Og(n,i){var g,h={};if(i)for(var u=n;u.componentInstance;)u=u.componentInstance._vnode,u.data&&(g=Cg(u.data))&&l(h,g);(g=Cg(n.data))&&l(h,g);for(var o=n;o=o.parent;)o.data&&(g=Cg(o.data))&&l(h,g);return h}function Tg(n,i){var g=i.data,h=n.data;if(g.staticStyle||g.style||h.staticStyle||h.style){var u,o,s=i.elm,z=n.data.staticStyle,t=n.data.style||{},y=z||t,c=Ag(i.data.style)||{};i.data.style=c.__ob__?l({},c):c;var d=Og(i,!0);for(o in y)null==d[o]&&es(s,o,"");for(o in d)(u=d[o])!==y[o]&&es(s,o,null==u?"":u)}}function Sg(n,i){if(i&&(i=i.trim()))if(n.classList)i.indexOf(" ")>-1?i.split(/\s+/).forEach(function(i){return n.classList.add(i)}):n.classList.add(i);else{var g=" "+(n.getAttribute("class")||"")+" ";g.indexOf(" "+i+" ")<0&&n.setAttribute("class",(g+i).trim())}}function Eg(n,i){if(i&&(i=i.trim()))if(n.classList)i.indexOf(" ")>-1?i.split(/\s+/).forEach(function(i){return n.classList.remove(i)}):n.classList.remove(i);else{for(var g=" "+(n.getAttribute("class")||"")+" ",h=" "+i+" ";g.indexOf(h)>=0;)g=g.replace(h," ");n.setAttribute("class",g.trim())}}function Ng(n){if(n){if("object"==typeof n){var i={};return!1!==n.css&&l(i,ms(n.name||"v")),l(i,n),i}return"string"==typeof n?ms(n):void 0}}function Mg(n){$s(function(){$s(n)})}function Ig(n,i){(n._transitionClasses||(n._transitionClasses=[])).push(i),Sg(n,i)}function Lg(n,i){n._transitionClasses&&o(n._transitionClasses,i),Eg(n,i)}function Dg(n,i,g){var h=Pg(n,i),u=h.type,o=h.timeout,s=h.propCount;if(!u)return g();var z=u===qs?ks:_s,t=0,y=function(){n.removeEventListener(z,c),g()},c=function(i){i.target===n&&++t>=s&&y()};setTimeout(function(){t0&&(g=qs,c=s,l=o.length):i===ps?y>0&&(g=ps,c=y,l=t.length):(c=Math.max(s,y),g=c>0?s>y?qs:ps:null,l=g?g===qs?o.length:t.length:0),{type:g,timeout:c,propCount:l,hasTransform:g===qs&&Cs.test(h[ws+"Property"])}}function Rg(n,i){for(;n.length1}function Jg(n,i){i.data.show||Ug(i)}function Kg(n,i,g){var h=i.value,u=n.multiple;if(!u||Array.isArray(h)){for(var o,s,z=0,t=n.options.length;z-1,s.selected!==o&&(s.selected=o);else if(x(Zg(s),h))return void(n.selectedIndex!==z&&(n.selectedIndex=z));u||(n.selectedIndex=-1)}}function Wg(n,i){for(var g=0,h=i.length;g=0&&s[u].lowerCasedTag!==z;u--);else u=0;if(u>=0){for(var t=s.length-1;t>=u;t--)i.end&&i.end(s[t].tag,g,h);s.length=u,o=u&&s[u-1].tag}else"br"===z?i.start&&i.start(n,[],!0,g,h):"p"===z&&(i.start&&i.start(n,[],!1,g,h),i.end&&i.end(n,g,h))}for(var u,o,s=[],z=i.expectHTML,t=i.isUnaryTag||Au,y=i.canBeLeftOpenTag||Au,c=0;n;){if(u=n,o&&az(o)){var l=o.toLowerCase(),d=qz[l]||(qz[l]=new RegExp("([\\s\\S]*?)(]*>)","i")),j=0,r=n.replace(d,function(n,g,h){return j=h.length,az(l)||"noscript"===l||(g=g.replace(//g,"$1").replace(//g,"$1")),i.chars&&i.chars(g),""});c+=n.length-r.length,n=r,h(l,c-j,c)}else{var e=n.indexOf("<");if(0===e){if(Xs.test(n)){var x=n.indexOf("-->");if(x>=0){g(x+3);continue}}if(nz.test(n)){var f=n.indexOf("]>");if(f>=0){g(f+2);continue}}var b=n.match(Qs);if(b){g(b[0].length);continue}var m=n.match(Ys);if(m){var a=c;g(m[0].length),h(m[1],a,c);continue}var q=function(){var i=n.match(Zs);if(i){var h={tagName:i[1],attrs:[],start:c};g(i[0].length);for(var u,o;!(u=n.match(Gs))&&(o=n.match(Ks));)g(o[0].length),h.attrs.push(o);if(u)return h.unarySlash=u[1],g(u[0].length),h.end=c,h}}();if(q){!function(n){var g=n.tagName,u=n.unarySlash;z&&("p"===o&&Vs(g)&&h(o),y(g)&&o===g&&h(g));for(var c=t(g)||"html"===g&&"head"===o||!!u,l=n.attrs.length,d=new Array(l),j=0;j=0){for(w=n.slice(e);!(Ys.test(w)||Zs.test(w)||Xs.test(w)||nz.test(w)||(k=w.indexOf("<",1))<0);)e+=k,w=n.slice(e);p=n.substring(0,e),g(e)}e<0&&(p=n,n=""),i.chars&&p&&i.chars(p)}if(n===u){i.chars&&i.chars(n);break}}h()}function lh(n,i){var g=i?_z(i):vz;if(g.test(n)){for(var h,u,o=[],s=g.lastIndex=0;h=g.exec(n);){u=h.index,u>s&&o.push(JSON.stringify(n.slice(s,u)));var z=Yi(h[1].trim());o.push("_s("+z+")"),s=u+h[0].length}return s0,Pu=Iu&&Iu.indexOf("edge/")>0,Ru=Iu&&Iu.indexOf("android")>0,Fu=Iu&&/iphone|ipad|ipod|ios/.test(Iu),Uu=Iu&&/chrome\/\d+/.test(Iu)&&!Pu,Bu=function(){return void 0===au&&(au=!Mu&&void 0!==n&&"server"===n.process.env.VUE_ENV),au},Hu=Mu&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,Vu="undefined"!=typeof Symbol&&p(Symbol)&&"undefined"!=typeof Reflect&&p(Reflect.ownKeys),Ju=function(){function n(){h=!1;var n=g.slice(0);g.length=0;for(var i=0;i1?c(g):g;for(var h=c(arguments,1),u=0,o=g.length;u1&&(i[g[0].trim()]=g[1].trim())}}),i}),js=/^--/,rs=/\s*!important$/,es=function(n,i,g){js.test(i)?n.style.setProperty(i,g):rs.test(g)?n.style.setProperty(i,g.replace(rs,""),"important"):n.style[fs(i)]=g},xs=["Webkit","Moz","ms"],fs=t(function(n){if(Lo=Lo||document.createElement("div"),"filter"!==(n=ku(n))&&n in Lo.style)return n;for(var i=n.charAt(0).toUpperCase()+n.slice(1),g=0;gd?(y=Li(g[x+1])?null:g[x+1].elm,e(n,y,g,l,x,h)):l>x&&f(n,i,c,d)}function a(n,i,g,h){if(n!==i){if(Pi(i.isStatic)&&Pi(n.isStatic)&&i.key===n.key&&(Pi(i.isCloned)||Pi(i.isOnce)))return i.elm=n.elm,void(i.componentInstance=n.componentInstance);var u,o=i.data;Di(o)&&Di(u=o.hook)&&Di(u=u.prepatch)&&u(n,i);var s=i.elm=n.elm,z=n.children,t=i.children;if(Di(o)&&d(i)){for(u=0;u',g.innerHTML.indexOf(i)>0}("\n"," "),Bs=u("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),Hs=u("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),Vs=u("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),Js=[/"([^"]*)"+/.source,/'([^']*)'+/.source,/([^\s"'=<>`]+)/.source],Ks=new RegExp("^\\s*"+/([^\s"'<>\/=]+)/.source+"(?:\\s*("+/(?:=)/.source+")\\s*(?:"+Js.join("|")+"))?"),Ws="[a-zA-Z_][\\w\\-\\.]*",Zs=new RegExp("^<((?:"+Ws+"\\:)?"+Ws+")"),Gs=/^\s*(\/?)>/,Ys=new RegExp("^<\\/((?:"+Ws+"\\:)?"+Ws+")[^>]*>"),Qs=/^]+>/i,Xs=/^');\n\n if (commentEnd >= 0) {\n advance(commentEnd + 3);\n continue\n }\n }\n\n // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment\n if (conditionalComment.test(html)) {\n var conditionalEnd = html.indexOf(']>');\n\n if (conditionalEnd >= 0) {\n advance(conditionalEnd + 2);\n continue\n }\n }\n\n // Doctype:\n var doctypeMatch = html.match(doctype);\n if (doctypeMatch) {\n advance(doctypeMatch[0].length);\n continue\n }\n\n // End tag:\n var endTagMatch = html.match(endTag);\n if (endTagMatch) {\n var curIndex = index;\n advance(endTagMatch[0].length);\n parseEndTag(endTagMatch[1], curIndex, index);\n continue\n }\n\n // Start tag:\n var startTagMatch = parseStartTag();\n if (startTagMatch) {\n handleStartTag(startTagMatch);\n continue\n }\n }\n\n var text = (void 0), rest$1 = (void 0), next = (void 0);\n if (textEnd >= 0) {\n rest$1 = html.slice(textEnd);\n while (\n !endTag.test(rest$1) &&\n !startTagOpen.test(rest$1) &&\n !comment.test(rest$1) &&\n !conditionalComment.test(rest$1)\n ) {\n // < in plain text, be forgiving and treat it as text\n next = rest$1.indexOf('<', 1);\n if (next < 0) { break }\n textEnd += next;\n rest$1 = html.slice(textEnd);\n }\n text = html.substring(0, textEnd);\n advance(textEnd);\n }\n\n if (textEnd < 0) {\n text = html;\n html = '';\n }\n\n if (options.chars && text) {\n options.chars(text);\n }\n } else {\n var stackedTag = lastTag.toLowerCase();\n var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(]*>)', 'i'));\n var endTagLength = 0;\n var rest = html.replace(reStackedTag, function (all, text, endTag) {\n endTagLength = endTag.length;\n if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {\n text = text\n .replace(//g, '$1')\n .replace(//g, '$1');\n }\n if (options.chars) {\n options.chars(text);\n }\n return ''\n });\n index += html.length - rest.length;\n html = rest;\n parseEndTag(stackedTag, index - endTagLength, index);\n }\n\n if (html === last) {\n options.chars && options.chars(html);\n if (false) {\n options.warn((\"Mal-formatted tag at end of template: \\\"\" + html + \"\\\"\"));\n }\n break\n }\n }\n\n // Clean up any remaining tags\n parseEndTag();\n\n function advance (n) {\n index += n;\n html = html.substring(n);\n }\n\n function parseStartTag () {\n var start = html.match(startTagOpen);\n if (start) {\n var match = {\n tagName: start[1],\n attrs: [],\n start: index\n };\n advance(start[0].length);\n var end, attr;\n while (!(end = html.match(startTagClose)) && (attr = html.match(attribute))) {\n advance(attr[0].length);\n match.attrs.push(attr);\n }\n if (end) {\n match.unarySlash = end[1];\n advance(end[0].length);\n match.end = index;\n return match\n }\n }\n }\n\n function handleStartTag (match) {\n var tagName = match.tagName;\n var unarySlash = match.unarySlash;\n\n if (expectHTML) {\n if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\n parseEndTag(lastTag);\n }\n if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {\n parseEndTag(tagName);\n }\n }\n\n var unary = isUnaryTag$$1(tagName) || tagName === 'html' && lastTag === 'head' || !!unarySlash;\n\n var l = match.attrs.length;\n var attrs = new Array(l);\n for (var i = 0; i < l; i++) {\n var args = match.attrs[i];\n // hackish work around FF bug https://bugzilla.mozilla.org/show_bug.cgi?id=369778\n if (IS_REGEX_CAPTURING_BROKEN && args[0].indexOf('\"\"') === -1) {\n if (args[3] === '') { delete args[3]; }\n if (args[4] === '') { delete args[4]; }\n if (args[5] === '') { delete args[5]; }\n }\n var value = args[3] || args[4] || args[5] || '';\n attrs[i] = {\n name: args[1],\n value: decodeAttr(\n value,\n options.shouldDecodeNewlines\n )\n };\n }\n\n if (!unary) {\n stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs });\n lastTag = tagName;\n }\n\n if (options.start) {\n options.start(tagName, attrs, unary, match.start, match.end);\n }\n }\n\n function parseEndTag (tagName, start, end) {\n var pos, lowerCasedTagName;\n if (start == null) { start = index; }\n if (end == null) { end = index; }\n\n if (tagName) {\n lowerCasedTagName = tagName.toLowerCase();\n }\n\n // Find the closest opened tag of the same type\n if (tagName) {\n for (pos = stack.length - 1; pos >= 0; pos--) {\n if (stack[pos].lowerCasedTag === lowerCasedTagName) {\n break\n }\n }\n } else {\n // If no tag name is provided, clean shop\n pos = 0;\n }\n\n if (pos >= 0) {\n // Close all the open elements, up the stack\n for (var i = stack.length - 1; i >= pos; i--) {\n if (false) {\n options.warn(\n (\"tag <\" + (stack[i].tag) + \"> has no matching end tag.\")\n );\n }\n if (options.end) {\n options.end(stack[i].tag, start, end);\n }\n }\n\n // Remove the open elements from the stack\n stack.length = pos;\n lastTag = pos && stack[pos - 1].tag;\n } else if (lowerCasedTagName === 'br') {\n if (options.start) {\n options.start(tagName, [], true, start, end);\n }\n } else if (lowerCasedTagName === 'p') {\n if (options.start) {\n options.start(tagName, [], false, start, end);\n }\n if (options.end) {\n options.end(tagName, start, end);\n }\n }\n }\n}\n\n/* */\n\nvar defaultTagRE = /\\{\\{((?:.|\\n)+?)\\}\\}/g;\nvar regexEscapeRE = /[-.*+?^${}()|[\\]\\/\\\\]/g;\n\nvar buildRegex = cached(function (delimiters) {\n var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\n var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\n return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\n});\n\nfunction parseText (\n text,\n delimiters\n) {\n var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\n if (!tagRE.test(text)) {\n return\n }\n var tokens = [];\n var lastIndex = tagRE.lastIndex = 0;\n var match, index;\n while ((match = tagRE.exec(text))) {\n index = match.index;\n // push text token\n if (index > lastIndex) {\n tokens.push(JSON.stringify(text.slice(lastIndex, index)));\n }\n // tag token\n var exp = parseFilters(match[1].trim());\n tokens.push((\"_s(\" + exp + \")\"));\n lastIndex = index + match[0].length;\n }\n if (lastIndex < text.length) {\n tokens.push(JSON.stringify(text.slice(lastIndex)));\n }\n return tokens.join('+')\n}\n\n/* */\n\nvar onRE = /^@|^v-on:/;\nvar dirRE = /^v-|^@|^:/;\nvar forAliasRE = /(.*?)\\s+(?:in|of)\\s+(.*)/;\nvar forIteratorRE = /\\((\\{[^}]*\\}|[^,]*),([^,]*)(?:,([^,]*))?\\)/;\n\nvar argRE = /:(.*)$/;\nvar bindRE = /^:|^v-bind:/;\nvar modifierRE = /\\.[^.]+/g;\n\nvar decodeHTMLCached = cached(decode);\n\n// configurable state\nvar warn$2;\nvar delimiters;\nvar transforms;\nvar preTransforms;\nvar postTransforms;\nvar platformIsPreTag;\nvar platformMustUseProp;\nvar platformGetTagNamespace;\n\n/**\n * Convert HTML string to AST.\n */\nfunction parse (\n template,\n options\n) {\n warn$2 = options.warn || baseWarn;\n platformGetTagNamespace = options.getTagNamespace || no;\n platformMustUseProp = options.mustUseProp || no;\n platformIsPreTag = options.isPreTag || no;\n preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\n transforms = pluckModuleFunction(options.modules, 'transformNode');\n postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\n delimiters = options.delimiters;\n\n var stack = [];\n var preserveWhitespace = options.preserveWhitespace !== false;\n var root;\n var currentParent;\n var inVPre = false;\n var inPre = false;\n var warned = false;\n\n function warnOnce (msg) {\n if (!warned) {\n warned = true;\n warn$2(msg);\n }\n }\n\n function endPre (element) {\n // check pre state\n if (element.pre) {\n inVPre = false;\n }\n if (platformIsPreTag(element.tag)) {\n inPre = false;\n }\n }\n\n parseHTML(template, {\n warn: warn$2,\n expectHTML: options.expectHTML,\n isUnaryTag: options.isUnaryTag,\n canBeLeftOpenTag: options.canBeLeftOpenTag,\n shouldDecodeNewlines: options.shouldDecodeNewlines,\n start: function start (tag, attrs, unary) {\n // check namespace.\n // inherit parent ns if there is one\n var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\n\n // handle IE svg bug\n /* istanbul ignore if */\n if (isIE && ns === 'svg') {\n attrs = guardIESVGBug(attrs);\n }\n\n var element = {\n type: 1,\n tag: tag,\n attrsList: attrs,\n attrsMap: makeAttrsMap(attrs),\n parent: currentParent,\n children: []\n };\n if (ns) {\n element.ns = ns;\n }\n\n if (isForbiddenTag(element) && !isServerRendering()) {\n element.forbidden = true;\n \"production\" !== 'production' && warn$2(\n 'Templates should only be responsible for mapping the state to the ' +\n 'UI. Avoid placing tags with side-effects in your templates, such as ' +\n \"<\" + tag + \">\" + ', as they will not be parsed.'\n );\n }\n\n // apply pre-transforms\n for (var i = 0; i < preTransforms.length; i++) {\n preTransforms[i](element, options);\n }\n\n if (!inVPre) {\n processPre(element);\n if (element.pre) {\n inVPre = true;\n }\n }\n if (platformIsPreTag(element.tag)) {\n inPre = true;\n }\n if (inVPre) {\n processRawAttrs(element);\n } else {\n processFor(element);\n processIf(element);\n processOnce(element);\n processKey(element);\n\n // determine whether this is a plain element after\n // removing structural attributes\n element.plain = !element.key && !attrs.length;\n\n processRef(element);\n processSlot(element);\n processComponent(element);\n for (var i$1 = 0; i$1 < transforms.length; i$1++) {\n transforms[i$1](element, options);\n }\n processAttrs(element);\n }\n\n function checkRootConstraints (el) {\n if (false) {\n if (el.tag === 'slot' || el.tag === 'template') {\n warnOnce(\n \"Cannot use <\" + (el.tag) + \"> as component root element because it may \" +\n 'contain multiple nodes.'\n );\n }\n if (el.attrsMap.hasOwnProperty('v-for')) {\n warnOnce(\n 'Cannot use v-for on stateful component root element because ' +\n 'it renders multiple elements.'\n );\n }\n }\n }\n\n // tree management\n if (!root) {\n root = element;\n checkRootConstraints(root);\n } else if (!stack.length) {\n // allow root elements with v-if, v-else-if and v-else\n if (root.if && (element.elseif || element.else)) {\n checkRootConstraints(element);\n addIfCondition(root, {\n exp: element.elseif,\n block: element\n });\n } else if (false) {\n warnOnce(\n \"Component template should contain exactly one root element. \" +\n \"If you are using v-if on multiple elements, \" +\n \"use v-else-if to chain them instead.\"\n );\n }\n }\n if (currentParent && !element.forbidden) {\n if (element.elseif || element.else) {\n processIfConditions(element, currentParent);\n } else if (element.slotScope) { // scoped slot\n currentParent.plain = false;\n var name = element.slotTarget || '\"default\"';(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;\n } else {\n currentParent.children.push(element);\n element.parent = currentParent;\n }\n }\n if (!unary) {\n currentParent = element;\n stack.push(element);\n } else {\n endPre(element);\n }\n // apply post-transforms\n for (var i$2 = 0; i$2 < postTransforms.length; i$2++) {\n postTransforms[i$2](element, options);\n }\n },\n\n end: function end () {\n // remove trailing whitespace\n var element = stack[stack.length - 1];\n var lastNode = element.children[element.children.length - 1];\n if (lastNode && lastNode.type === 3 && lastNode.text === ' ' && !inPre) {\n element.children.pop();\n }\n // pop stack\n stack.length -= 1;\n currentParent = stack[stack.length - 1];\n endPre(element);\n },\n\n chars: function chars (text) {\n if (!currentParent) {\n if (false) {\n if (text === template) {\n warnOnce(\n 'Component template requires a root element, rather than just text.'\n );\n } else if ((text = text.trim())) {\n warnOnce(\n (\"text \\\"\" + text + \"\\\" outside root element will be ignored.\")\n );\n }\n }\n return\n }\n // IE textarea placeholder bug\n /* istanbul ignore if */\n if (isIE &&\n currentParent.tag === 'textarea' &&\n currentParent.attrsMap.placeholder === text) {\n return\n }\n var children = currentParent.children;\n text = inPre || text.trim()\n ? decodeHTMLCached(text)\n // only preserve whitespace if its not right after a starting tag\n : preserveWhitespace && children.length ? ' ' : '';\n if (text) {\n var expression;\n if (!inVPre && text !== ' ' && (expression = parseText(text, delimiters))) {\n children.push({\n type: 2,\n expression: expression,\n text: text\n });\n } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {\n children.push({\n type: 3,\n text: text\n });\n }\n }\n }\n });\n return root\n}\n\nfunction processPre (el) {\n if (getAndRemoveAttr(el, 'v-pre') != null) {\n el.pre = true;\n }\n}\n\nfunction processRawAttrs (el) {\n var l = el.attrsList.length;\n if (l) {\n var attrs = el.attrs = new Array(l);\n for (var i = 0; i < l; i++) {\n attrs[i] = {\n name: el.attrsList[i].name,\n value: JSON.stringify(el.attrsList[i].value)\n };\n }\n } else if (!el.pre) {\n // non root node in pre blocks with no attributes\n el.plain = true;\n }\n}\n\nfunction processKey (el) {\n var exp = getBindingAttr(el, 'key');\n if (exp) {\n if (false) {\n warn$2(\"