| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 | 
							- <template>
 
-   <div>
 
-     <el-table :data="formatData" :row-style="showRow" v-bind="$attrs">
 
-       <el-table-column v-if="columns.length===0" width="150">
 
-         <template slot-scope="scope">
 
-           <span v-for="space in scope.row._level" :key="space" class="ms-tree-space" />
 
-           <span v-if="iconShow(0,scope.row)" class="tree-ctrl" @click="toggleExpanded(scope.$index)">
 
-             <i v-if="!scope.row._expanded" class="el-icon-plus" />
 
-             <i v-else class="el-icon-minus" />
 
-           </span>
 
-           {{ scope.$index }}
 
-         </template>
 
-       </el-table-column>
 
-       <el-table-column v-for="(column, index) in columns" v-else :key="column.value" :label="column.text" :width="column.width">
 
-         <template slot-scope="scope">
 
-           <span v-for="space in scope.row._level" v-if="index === 0" :key="space" class="ms-tree-space" />
 
-           <span v-if="iconShow(index,scope.row)" class="tree-ctrl" @click="toggleExpanded(scope.$index)">
 
-             <i v-if="!scope.row._expanded" class="el-icon-plus" />
 
-             <i v-else class="el-icon-minus" />
 
-           </span>
 
-           <el-checkbox-group v-if="Array.isArray(scope.row[column.value])" v-model="scope.row.selectchecked" @change="handleCheckedCitiesChange(scope.$index, scope.row,scope.row[column.option])">
 
-             <el-checkbox v-for="(interset) in scope.row[column.value]" :key="interset.id" :label="interset.id">{{ interset.description }}</el-checkbox>
 
-           </el-checkbox-group>
 
-           <el-checkbox v-else-if="scope.row.type===1" v-model="scope.row.checkAll" :indeterminate="scope.row.isIndeterminate" @change="handleCheckAllChange(scope.$index, scope.row,scope.row[column.option])">{{ scope.row[column.value] }}</el-checkbox>
 
-           <span v-else>{{ scope.row[column.value] }}</span>
 
-           <el-checkbox v-if="scope.row[column.act]" v-model="scope.row.checkAll" :indeterminate="scope.row.isIndeterminate" @change="handleCheckAllChange1(scope.$index, scope.row,column.option)">{{ scope.row[column.act] }}</el-checkbox>
 
-         </template>
 
-       </el-table-column>
 
-       <slot />
 
-     </el-table>
 
-     <footer>
 
-       <el-button @click="getAuth">确定</el-button>
 
-     </footer>
 
-   </div>
 
- </template>
 
- <script>
 
- /**
 
-   Auth: Lei.j1ang
 
-   Created: 2018/1/19-13:59
 
- */
 
- import treeToArray from './eval'
 
- export default {
 
-   name: 'TreeTable',
 
-   props: {
 
-     data: {
 
-       type: [Array, Object],
 
-       required: true
 
-     },
 
-     columns: {
 
-       type: Array,
 
-       default: () => []
 
-     },
 
-     evalFunc: Function,
 
-     evalArgs: Array,
 
-     expandAll: {
 
-       type: Boolean,
 
-       default: true
 
-     }
 
-   },
 
-   computed: {
 
-     // 格式化数据源
 
-     formatData: function() {
 
-       let tmp
 
-       if (!Array.isArray(this.data)) {
 
-         console.log(this.data, 'this.data')
 
-         tmp = [this.data]
 
-       } else {
 
-         console.log(this.data, 'this.data')
 
-         tmp = this.data
 
-       }
 
-       const func = this.evalFunc || treeToArray
 
-       const args = this.evalArgs ? Array.concat([tmp, this.expandAll], this.evalArgs) : [tmp, this.expandAll]
 
-       return func.apply(null, args)
 
-     }
 
-   },
 
-   created() {
 
-     this.defaultSelcet()
 
-   },
 
-   methods: {
 
-     showRow: function(row) {
 
-       const show = (row.row.parent ? (row.row.parent._expanded && row.row.parent._show) : true)
 
-       row.row._show = show
 
-       return show ? 'animation:treeTableShow 1s;-webkit-animation:treeTableShow 1s;' : 'display:none;'
 
-     },
 
-     // 切换下级是否展开
 
-     toggleExpanded: function(trIndex) {
 
-       const record = this.formatData[trIndex]
 
-       record._expanded = !record._expanded
 
-     },
 
-     // 图标显示
 
-     iconShow(index, record) {
 
-       return (index === 0 && record.children && record.children.length > 0)
 
-     },
 
-     handleCheckAllChange(index, row, opt) {
 
-       console.log(index, row, opt)
 
-       this.cc()
 
-       if (row.selectchecked.length && row.selectchecked.length !== opt.length) {
 
-         const arr = []
 
-         opt.forEach(element => {
 
-           arr.push(element.id)
 
-         })
 
-         row.selectchecked = arr
 
-         row.checkAll = true
 
-         row.isIndeterminate = false
 
-       } else if (!row.selectchecked.length) {
 
-         const arr = []
 
-         opt.forEach(element => {
 
-           arr.push(element.id)
 
-         })
 
-         row.selectchecked = arr
 
-         row.checkAll = true
 
-         row.isIndeterminate = false
 
-       } else {
 
-         row.selectchecked = []
 
-         row.checkAll = false
 
-         row.isIndeterminate = false
 
-       }
 
-     },
 
-     handleCheckedCitiesChange(index, row, opt) {
 
-       row.checkAll = row.selectchecked.length === opt.length
 
-       row.isIndeterminate = row.selectchecked.length > 0 && row.selectchecked.length < opt.length
 
-       this.cc()
 
-     },
 
-     handleCheckAllChange1(index, row, opt) {
 
-       if (row.children) {
 
-         row.children.forEach(val => {
 
-           const arr = []
 
-           if (row.checkAll) {
 
-             val[opt].forEach(element => {
 
-               arr.push(element.id)
 
-             })
 
-             val.selectchecked = arr
 
-             val.checkAll = true
 
-             val.isIndeterminate = false
 
-           } else {
 
-             val.selectchecked = []
 
-             val.checkAll = false
 
-             val.isIndeterminate = false
 
-           }
 
-         })
 
-       }
 
-       this.cc()
 
-     },
 
-     defaultSelcet() {
 
-       this.data.forEach(val => {
 
-         if (val.children) {
 
-           val.children.forEach(el => {
 
-             if (el.selectchecked.length && el.selectchecked.length !== el[this.columns[0].option].length) {
 
-               el.isIndeterminate = true
 
-               el.checkAll = false
 
-             } else if (el.selectchecked.length && el.selectchecked.length === el[this.columns[0].option].length) {
 
-               el.isIndeterminate = false
 
-               el.checkAll = true
 
-             } else {
 
-               el.isIndeterminate = false
 
-               el.checkAll = false
 
-             }
 
-           })
 
-           this.cc()
 
-         }
 
-       })
 
-     },
 
-     cc() {
 
-       this.data.forEach(val => {
 
-         const checkAllArr = []
 
-         const isIndeterminateArr = []
 
-         if (val.children) {
 
-           val.children.forEach(el => {
 
-             checkAllArr.push(el.checkAll)
 
-             isIndeterminateArr.push(el.isIndeterminate)
 
-           })
 
-         }
 
-         if (new Set(checkAllArr).size === 1) { // && new Set(isIndeterminateArr).size !== 1
 
-           if (checkAllArr[0] && isIndeterminateArr[0] === false) {
 
-             val.isIndeterminate = false
 
-             val.checkAll = true
 
-           } else if (checkAllArr[0] && new Set(isIndeterminateArr).size !== 1) {
 
-             val.isIndeterminate = false
 
-             val.checkAll = true
 
-           } else if (!checkAllArr[0] && new Set(isIndeterminateArr).size !== 1) {
 
-             val.isIndeterminate = true
 
-             val.checkAll = false
 
-           } else if (!checkAllArr[0] && new Set(isIndeterminateArr).size === 1) {
 
-             if (!isIndeterminateArr[0]) {
 
-               val.isIndeterminate = false
 
-               val.checkAll = false
 
-             } else {
 
-               val.isIndeterminate = true
 
-               val.checkAll = false
 
-             }
 
-           } else {
 
-             val.isIndeterminate = false
 
-             val.checkAll = false
 
-           }
 
-         } else {
 
-           val.isIndeterminate = true
 
-           val.checkAll = false
 
-         }
 
-       })
 
-     },
 
-     getAuth() {
 
-       this.$emit('getAuth', this.data)
 
-     }
 
-   }
 
- }
 
- </script>
 
- <style rel="stylesheet/css">
 
-   @keyframes treeTableShow {
 
-     from {opacity: 0;}
 
-     to {opacity: 1;}
 
-   }
 
-   @-webkit-keyframes treeTableShow {
 
-     from {opacity: 0;}
 
-     to {opacity: 1;}
 
-   }
 
-   .el-table__body{
 
-     text-align: left;
 
-   }
 
- </style>
 
- <style lang="scss" rel="stylesheet/scss" scoped>
 
-   footer{
 
-     display: flex;
 
-     justify-content: flex-end;
 
-     margin-top: 15px;
 
-   }
 
-   $color-blue: #2196F3;
 
-   $space-width: 18px;
 
-   .ms-tree-space {
 
-     position: relative;
 
-     top: 1px;
 
-     display: inline-block;
 
-     font-style: normal;
 
-     font-weight: 400;
 
-     line-height: 1;
 
-     width: $space-width;
 
-     height: 14px;
 
-     &::before {
 
-       content: ""
 
-     }
 
-   }
 
-   .processContainer{
 
-     width: 100%;
 
-     height: 100%;
 
-   }
 
-   table td {
 
-     line-height: 26px;
 
-   }
 
-   .tree-ctrl{
 
-     position: relative;
 
-     cursor: pointer;
 
-     color: $color-blue;
 
-     margin-left: -$space-width;
 
-   }
 
- </style>
 
 
  |