| <template> | 
|     <TableLayout :permissions="['business:companydepartment:query']"> | 
|         <!-- 表格和分页 --> | 
|         <template v-slot:table-wrap> | 
|             <ul class="toolbar" v-permissions="['business:companydepartment:create']"> | 
|                 <li><el-button type="primary" @click="$refs.operaCompanyDepartmentWindow.open('新建组织', { disabled: false })" icon="el-icon-plus" v-permissions="['business:companydepartment:create']">新建</el-button></li> | 
|                 <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['system:menu:delete']">删除</el-button></li> | 
|                 <li><el-button @click="sort('top')" :loading="isWorking.sort" icon="el-icon-sort-up" v-permissions="['system:menu:sort']">上移</el-button></li> | 
|                 <li><el-button @click="sort('bottom')" :loading="isWorking.sort" icon="el-icon-sort-down" v-permissions="['system:menu:sort']">下移</el-button></li> | 
|             </ul> | 
|             <el-table | 
|                 ref="table" | 
|                 v-loading="isWorking.search" | 
|                 :data="tableData.list" | 
|                 :tree-props="{children: 'childList', hasChildren: 'hasChildren'}" | 
|                 row-key="id" | 
|                 stripe | 
|                 :default-expand-all="false" | 
|                 @selection-change="handleSelectionChange" | 
|             > | 
|                 <el-table-column type="selection" width="55" fixed="left"></el-table-column> | 
|                 <el-table-column prop="name" label="组织名称" min-width="100px"></el-table-column> | 
|                 <el-table-column prop="name" label="组织类型" min-width="100px"></el-table-column> | 
|                 <el-table-column prop="editorName" label="操作人" min-width="100px"></el-table-column> | 
|                 <el-table-column prop="editDate" label="操作时间" min-width="100px"></el-table-column> | 
|                 <el-table-column | 
|                     v-if="containPermissions(['business:companydepartment:update', 'business:companydepartment:delete'])" | 
|                     label="操作" | 
|                     min-width="140" | 
|                     fixed="right" | 
|                 > | 
|                     <template slot-scope="{row}"> | 
|                         <el-button type="text" @click="$refs.operaCompanyDepartmentWindow.open('编辑组织', {...row, parentId: [row.id], disabled: true})" icon="el-icon-edit" v-permissions="['business:companydepartment:update']">编辑</el-button> | 
|                         <el-button type="text" icon="el-icon-plus" @click="$refs.operaCompanyDepartmentWindow.open('新建子组织', {...row, id: null, parentId: [row.id], disabled: true})">新建子组织</el-button> | 
|                         <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:companydepartment:delete']">删除</el-button> | 
|                     </template> | 
|                 </el-table-column> | 
|             </el-table> | 
|         </template> | 
|         <!-- 新建/修改 --> | 
|         <OperaCompanyDepartmentWindow ref="operaCompanyDepartmentWindow" @success="handlePageChange"/> | 
|     </TableLayout> | 
| </template> | 
|   | 
| <script> | 
|   import BaseTable from '@/components/base/BaseTable' | 
|   import TableLayout from '@/layouts/TableLayout' | 
|   import Pagination from '@/components/common/Pagination' | 
|   import OperaCompanyDepartmentWindow from '@/components/business/OperaCompanyDepartmentWindow' | 
|   import { tree, updateSort } from '@/api/business/companyDepartment' | 
|   export default { | 
|     name: 'CompanyDepartment', | 
|     extends: BaseTable, | 
|     components: { TableLayout, Pagination, OperaCompanyDepartmentWindow }, | 
|     data () { | 
|       return { | 
|         // 搜索 | 
|         searchForm: { | 
|         }, | 
|         isWorking: { | 
|           sort: false | 
|         } | 
|       } | 
|     }, | 
|     created () { | 
|       this.config({ | 
|         module: '企业信息表', | 
|         api: '/business/companyDepartment', | 
|         'field.id': 'id', | 
|         'field.main': 'id' | 
|       }) | 
|       this.search() | 
|     }, | 
|     methods: { | 
|       // 查询数据 | 
|       handlePageChange () { | 
|         this.isWorking.search = true | 
|         tree() | 
|           .then(records => { | 
|             this.tableData.list = records | 
|           }) | 
|           .catch(e => { | 
|             this.$tip.apiFailed(e) | 
|           }) | 
|           .finally(() => { | 
|             this.isWorking.search = false | 
|           }) | 
|       }, | 
|       // 排序 | 
|       sort (direction) { | 
|         if (this.isWorking.sort) { | 
|           return | 
|         } | 
|         if (this.tableData.selectedRows.length === 0) { | 
|           this.$tip.warning('请选择一条数据') | 
|           return | 
|         } | 
|         if (this.tableData.selectedRows.length > 1) { | 
|           this.$tip.warning('排序时仅允许选择一条数据') | 
|           return | 
|         } | 
|         const menuId = this.tableData.selectedRows[0].id | 
|         // 找到菜单范围 | 
|         let menuPool | 
|         for (const rootMenu of this.tableData.list) { | 
|           const parent = this.__findParent(menuId, rootMenu) | 
|           if (parent != null) { | 
|             menuPool = parent.children | 
|           } | 
|         } | 
|         menuPool = menuPool || this.tableData.list | 
|         const menuIndex = menuPool.findIndex(menu => menu.id === menuId) | 
|         // 上移校验 | 
|         if (direction === 'top' && menuIndex === 0) { | 
|           this.$tip.warning('菜单已到顶部') | 
|           return | 
|         } | 
|         // 下移校验 | 
|         if (direction === 'bottom' && menuIndex === menuPool.length - 1) { | 
|           this.$tip.warning('菜单已到底部') | 
|           return | 
|         } | 
|         this.isWorking.sort = true | 
|         updateSort({ | 
|           id: this.tableData.selectedRows[0].id, | 
|           direction | 
|         }) | 
|           .then(() => { | 
|             if (direction === 'top') { | 
|               menuPool.splice(menuIndex, 0, menuPool.splice(menuIndex - 1, 1)[0]) | 
|             } else { | 
|               menuPool.splice(menuIndex, 0, menuPool.splice(menuIndex + 1, 1)[0]) | 
|             } | 
|           }) | 
|           .catch(e => { | 
|             this.$tip.apiFailed(e) | 
|           }) | 
|           .finally(() => { | 
|             this.isWorking.sort = false | 
|           }) | 
|       }, | 
|       // 查询父节点 | 
|       __findParent (id, parent) { | 
|         if (parent.childList === 0) { | 
|           return | 
|         } | 
|         for (const menu of parent.childList) { | 
|           if (menu.id === id) { | 
|             return parent | 
|           } | 
|           if (menu.childList.length > 0) { | 
|             const m = this.__findParent(id, menu) | 
|             if (m != null) { | 
|               return m | 
|             } | 
|           } | 
|         } | 
|         return null | 
|       } | 
|     } | 
|   } | 
| </script> |