| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- <template>
- <ul
- :id="node.id"
- :class="{'root-node' : isRoot}"
- >
- <li :class="{'root-node' : isRoot}">
- <span
- class="node-text icon expand-icon glyphicon"
- :class="{'glyphicon-plus-sign' : (isNodeOpen == false), 'glyphicon-minus-sign' : (isNodeOpen == true), 'glyphicon-leaf' : (isNodeOpen == undefined)}"
- @click="nodeExpand(node)"
- />
- <span
- v-if="isShowCheck==undefined || isShowCheck"
- class="glyphicon select-node"
- :class="{'selected-node' : node.selected, 'glyphicon-check' : node.selected, 'glyphicon-unchecked' : !node.selected}"
- @click="nodeSelect(node)"
- />
- <font>{{ node.text }}</font>
- <template
- v-for="childrenNode in node.childrenDatas"
- :key="childrenNode.id"
- >
- <TreeViewNode
- v-if="node.open && node.childrenDatas != undefined && node.childrenDatas.length > 0"
- :node="childrenNode"
- :is-show-check="childrenNode.isShowCheck"
- @node-expand="nodeExpand"
- @node-select="nodeSelect"
- />
- </template>
- </li>
- </ul>
- </template>
- <script>
- export default {
- name: 'TreeViewNode',
- components: {
- },
- props: {
- 'node': {
- type: Object,
- default: null,
- },
- 'isShowCheck': {
- type: Boolean,
- default: false,
- },
- 'isRoot': {
- type: Boolean,
- default: false,
- },
- },
- emits: ['nodeExpand','nodeSelect'],
- data: function () {
- return {
- };
- },
- computed: {
- // 节点是否打开
- isNodeOpen: function () {
- if (this.node.childrenDatas == undefined || this.node.childrenDatas.length == 0) {
- console.log(this.node.text + '无子节点');
- return undefined;
- } else {
- console.log(this.node.text + '有子节点' + this.node.open);
- return this.node.open == true;
- }
- },
- },
- mounted: function () {
- },
- methods: {
- nodeExpand: function (node) {
- if (node === this.node) {
- // eslint-disable-next-line
- this.node.open = !this.node.open;
- }
- // 触发父组件的事件
- // if(node.open){
- this.$emit('nodeExpand', node);
- // }
- },
- nodeSelect: function (node) {
- this.$emit('nodeSelect', node);
- },
- },
- };
- </script>
- <style scoped>
- .root-node {
- margin-left: 0px;
- padding-left: 0px;
- text-align: left;
- }
- .node-text {
- height: 30px;
- line-height: 40px !important;
- }
- .node-text:hover {
- cursor: pointer;
- }
- ul {
- padding-left: 10px;
- }
- li {
- padding-left: 10px;
- list-style: none;
- }
- .select-node {
- cursor: pointer;
- color: #0066ff;
- font-size: large;
- }
- .selected-node {
- cursor: pointer;
- color: #0066ff;
- font-size: large;
- }
- </style>
|