audit-group-tree.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <template>
  2. <div>
  3. <a-spin :spinning="spinning" :class="$style.spin" />
  4. <a-empty v-if="empty" />
  5. <!-- <a-tree
  6. v-if="treeData"
  7. :key="refreshKey"
  8. ref="auditTree"
  9. v-model="checkedKeys"
  10. show-icon
  11. :block-node="false"
  12. :show-line="showLine"
  13. :check-strictly="true"
  14. :checkable="checkable"
  15. :draggable="draggable"
  16. :tree-data="treeData"
  17. :selected-keys="defaultSelectedKeys"
  18. :expanded-keys="expandedKeys"
  19. :default-expanded-keys="defaultTreeExpandedKeys"
  20. :load-data="onLoadData"
  21. :replace-fields="{ title: 'name', key: 'code' }"
  22. @select="treeSelect"
  23. @check="treeCheck"
  24. @expand="onExpand"
  25. @dragenter="onDragEnter"
  26. @drop="onDrop" /> -->
  27. <a-tree
  28. v-if="treeData"
  29. show-icon
  30. :selectable="true"
  31. :tree-data="treeData"
  32. :default-expand-parent="true"
  33. :default-expanded-keys="expandedKeys"
  34. :selected-keys="$attrs['selected-keys'] || selectedKeys"
  35. v-bind="$attrs"
  36. :load-data="onLoadData"
  37. :replace-fields="{ title: 'name', key: 'code' }"
  38. @update:selectedKeys="setSelectedKeys"
  39. v-on="restListeners"
  40. >
  41. <a-icon slot="G" type="apartment" /><a-icon slot="U" type="user" />
  42. </a-tree>
  43. </div>
  44. </template>
  45. <script>
  46. import AddressBook from '@/addressbook/group-user-service'
  47. import { getUserInfo } from '@/common/store-mixin'
  48. import auditPermissionTreeService from '../audit-permission-tree-service'
  49. import components from './_import-components/audit-group-tree-import'
  50. /**
  51. * 组织树
  52. * @displayName AuditGroupTree 组织树
  53. */
  54. export default {
  55. name: 'AuditGroupTree',
  56. metaInfo: {},
  57. components,
  58. props: {
  59. /**
  60. * @ignore
  61. */
  62. jsonKey: {
  63. type: Boolean,
  64. default: false,
  65. },
  66. /**
  67. * 设置默认选中的节点比如 ['2000'],如果默认选中当前部门,可用"['SD-CUR-GROUP']"
  68. *
  69. */
  70. // defaultSelectedKeys: {
  71. // type: Array,
  72. // default: () => [],
  73. // },
  74. /**
  75. * @ignore
  76. */
  77. rootNode: {
  78. type: [Object, Array],
  79. default: undefined,
  80. },
  81. /**
  82. * @ignore
  83. */
  84. hierarchical: {
  85. type: Boolean,
  86. default: undefined,
  87. },
  88. },
  89. data() {
  90. return {
  91. spinning: true,
  92. empty: false,
  93. treeData: null,
  94. expandedKeys: [],
  95. selectedKeys: [],
  96. dataList: [], // 数组dataList,搜索要用
  97. defaultSelectedKeys: ['0'],
  98. }
  99. },
  100. computed: {
  101. restListeners() {
  102. const { 'update:selectedKeys': what, ...rest } = this.$listeners
  103. return rest
  104. },
  105. },
  106. mounted() {
  107. this.initTreeData()
  108. },
  109. methods: {
  110. setSelectedKeys(keys) {
  111. if (keys.length === 0) {
  112. return
  113. }
  114. if (!this.$attrs['selected-keys']) {
  115. // 如果组件调用没使用:selected-keys.sync="keys" 则在组件内部管理选中状态
  116. this.selectedKeys = keys
  117. }
  118. this.$emit('update:selectedKeys', keys)
  119. },
  120. // 点击地址树展开时调用
  121. onLoadData(treeNode) {
  122. return auditPermissionTreeService.getCategoryTree(treeNode.dataRef.id).then((res) => {
  123. res.data.forEach((item) => {
  124. item.name = item.text
  125. if (item.props.ORG_ID !== null) {
  126. item.code = item.props.ORG_ID
  127. } else {
  128. item.code = item.id
  129. }
  130. })
  131. treeNode.dataRef.children = res.data
  132. this.treeData = this.transformData([...this.treeData])
  133. this.generateList(this.treeData)
  134. })
  135. },
  136. // 初始化地址树
  137. initTreeData(depId) {
  138. let topDepId = null
  139. auditPermissionTreeService.getParentOrgInfo().then((res) => {
  140. let id = res.data[0].id
  141. let text = res.data[0].text
  142. let code = this.defaultTopNodeId
  143. if (res.data[0].props.ORG_ID !== null) {
  144. code = res.data[0].props.ORG_ID
  145. }
  146. const obj = this.rootNode
  147. if (obj !== undefined) {
  148. id = this.rootNode.id
  149. text = this.rootNode.name
  150. code = this.rootNode.code
  151. }
  152. topDepId = !depId ? id : depId
  153. this.defaultTopNodeId = id
  154. this.defaultTopNodeText = text
  155. this.defaultTreeExpandedKeys = [id]
  156. this.defaultSelectedKeys = [id]
  157. this.selectedKeys = [id]
  158. auditPermissionTreeService.getCategoryTree(topDepId).then((res1) => {
  159. this.spinning = false
  160. res1.data.forEach((item) => {
  161. item.name = item.text
  162. if (item.props.ORG_ID !== null) {
  163. item.code = item.props.ORG_ID
  164. } else {
  165. item.code = item.id
  166. }
  167. })
  168. if (res1.data.length) {
  169. const treeNode = [
  170. {
  171. id: this.defaultTopNodeId,
  172. text: this.defaultTopNodeText,
  173. name: this.defaultTopNodeText,
  174. code: code,
  175. leaf: false,
  176. props: res.data[0].props,
  177. children: res1.data,
  178. key: this.defaultTopNodeId,
  179. },
  180. ]
  181. this.treeData = this.transformData(treeNode)
  182. this.expandedKeys = this.defaultTreeExpandedKeys
  183. this.generateList(this.treeData)
  184. this.empty = false
  185. } else {
  186. const treeNode = [
  187. {
  188. id: this.defaultTopNodeId,
  189. text: this.defaultTopNodeText,
  190. name: this.defaultTopNodeText,
  191. code: code,
  192. leaf: false,
  193. props: res.data[0].props,
  194. children: [],
  195. key: this.defaultTopNodeId,
  196. },
  197. ]
  198. this.treeData = this.transformData(treeNode)
  199. this.expandedKeys = this.defaultTreeExpandedKeys
  200. this.generateList(this.treeData)
  201. this.empty = false
  202. }
  203. })
  204. })
  205. },
  206. transformData(data) {
  207. return data.map((d) => {
  208. const { children, ...rest } = d
  209. return {
  210. ...rest,
  211. children: children && this.transformData(children),
  212. scopedSlots: { title: 'title' },
  213. }
  214. })
  215. },
  216. // 处理搜索用的dataList
  217. generateList(data) {
  218. for (let i = 0; i < data.length; i++) {
  219. const node = data[i]
  220. const key = node.id
  221. const title = node.text
  222. const props = node.props
  223. this.dataList.push({ key, id: key, title: title, props })
  224. if (node.children) {
  225. this.generateList(node.children)
  226. }
  227. }
  228. },
  229. },
  230. }
  231. </script>
  232. <style module lang="scss">
  233. @use '@/common/design' as *;
  234. .spin {
  235. width: 100%;
  236. line-height: 30;
  237. }
  238. </style>