| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 | 
							- <template>
 
-   <a-table
 
-     :rowKey="rowKey"
 
-     :columns="columns"
 
-     :dataSource="dataSource"
 
-     :expandedRowKeys="expandedRowKeys"
 
-     v-bind="tableAttrs"
 
-     v-on="$listeners"
 
-     @expand="handleExpand"
 
-     @expandedRowsChange="expandedRowKeys=$event">
 
-     <template v-for="(slotItem) of slots" :slot="slotItem" slot-scope="text, record, index">
 
-       <slot :name="slotItem" v-bind="{text,record,index}"></slot>
 
-     </template>
 
-   </a-table>
 
- </template>
 
- <script>
 
-   import { getAction } from '@/api/manage'
 
-   export default {
 
-     name: 'JTreeTable',
 
-     props: {
 
-       rowKey: {
 
-         type: String,
 
-         default: 'id'
 
-       },
 
-       // 根据什么查询,如果传递 id 就根据 id 查询
 
-       queryKey: {
 
-         type: String,
 
-         default: 'parentId'
 
-       },
 
-       queryParams: {
 
-         type: Object,
 
-         default: () => ({})
 
-       },
 
-       // 查询顶级时的值,如果顶级为0,则传0
 
-       topValue: {
 
-         type: String,
 
-         default: null
 
-       },
 
-       columns: {
 
-         type: Array,
 
-         required: true
 
-       },
 
-       url: {
 
-         type: String,
 
-         required: true
 
-       },
 
-       childrenUrl: {
 
-         type: String,
 
-         default: null
 
-       },
 
-       tableProps: {
 
-         type: Object,
 
-         default: () => ({})
 
-       },
 
-       /** 是否在创建组件的时候就查询数据 */
 
-       immediateRequest: {
 
-         type: Boolean,
 
-         default: true
 
-       },
 
-       condition:{
 
-         type:String,
 
-         default:'',
 
-         required:false
 
-       }
 
-     },
 
-     data() {
 
-       return {
 
-         dataSource: [],
 
-         expandedRowKeys: []
 
-       }
 
-     },
 
-     computed: {
 
-       getChildrenUrl() {
 
-         if (this.childrenUrl) {
 
-           return this.childrenUrl
 
-         } else {
 
-           return this.url
 
-         }
 
-       },
 
-       slots() {
 
-         let slots = []
 
-         for (let column of this.columns) {
 
-           if (column.scopedSlots && column.scopedSlots.customRender) {
 
-             slots.push(column.scopedSlots.customRender)
 
-           }
 
-         }
 
-         return slots
 
-       },
 
-       tableAttrs() {
 
-         return Object.assign(this.$attrs, this.tableProps)
 
-       }
 
-     },
 
-     watch: {
 
-       queryParams: {
 
-         deep: true,
 
-         handler() {
 
-           this.loadData()
 
-         }
 
-       }
 
-     },
 
-     created() {
 
-       if (this.immediateRequest) this.loadData()
 
-     },
 
-     methods: {
 
-       /** 加载数据*/
 
-       loadData(id = this.topValue, first = true, url = this.url) {
 
-         this.$emit('requestBefore', { first })
 
-         if (first) {
 
-           this.expandedRowKeys = []
 
-         }
 
-         let params = Object.assign({}, this.queryParams || {})
 
-         params[this.queryKey] = id
 
-         if(this.condition && this.condition.length>0){
 
-           params['condition'] = this.condition
 
-         }
 
-         return getAction(url, params).then(res => {
 
-           let list = []
 
-           if (res.result instanceof Array) {
 
-             list = res.result
 
-           } else if (res.result.records instanceof Array) {
 
-             list = res.result.records
 
-           } else {
 
-             throw '返回数据类型不识别'
 
-           }
 
-           let dataSource = list.map(item => {
 
-             // 判断是否标记了带有子级
 
-             if (item.hasChildren === true) {
 
-               // 查找第一个带有dataIndex的值的列
 
-               let firstColumn
 
-               for (let column of this.columns) {
 
-                 firstColumn = column.dataIndex
 
-                 if (firstColumn) break
 
-               }
 
-               // 定义默认展开时显示的loading子级,实际子级数据只在展开时加载
 
-               let loadChild = { id: `${item.id}_loadChild`, [firstColumn]: 'loading...', isLoading: true }
 
-               item.children = [loadChild]
 
-             }
 
-             return item
 
-           })
 
-           if (first) {
 
-             this.dataSource = dataSource
 
-           }
 
-           this.$emit('requestSuccess', { first, dataSource, res })
 
-           return Promise.resolve(dataSource)
 
-         }).finally(() => this.$emit('requestFinally', { first }))
 
-       },
 
-       /** 点击展开图标时触发 */
 
-       handleExpand(expanded, record) {
 
-         // 判断是否是展开状态
 
-         if (expanded) {
 
-           // 判断子级的首个项的标记是否是“正在加载中”,如果是就加载数据
 
-           if (record.children[0].isLoading === true) {
 
-             this.loadData(record.id, false, this.getChildrenUrl).then(dataSource => {
 
-               // 处理好的数据可直接赋值给children
 
-               if (dataSource.length === 0) {
 
-                 record.children = null
 
-               } else {
 
-                 record.children = dataSource
 
-               }
 
-             })
 
-           }
 
-         }
 
-       }
 
-     }
 
-   }
 
- </script>
 
- <style scoped>
 
- </style>
 
 
  |