audit-permission-tree-mixins.js 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. import notebook from '@/common/components/sd-icon-library/icons/outline/notebook'
  2. // 判断是否已经选择
  3. function isChecked(selectedKeys, eventKey) {
  4. return selectedKeys.indexOf(eventKey) === -1
  5. }
  6. const AuditPermissionTreeMixins = {
  7. created() {
  8. // 判断单选多选
  9. if (!this.single) {
  10. this.checkedKeys = {
  11. checked: [],
  12. halfChecked: [],
  13. }
  14. }
  15. // 如果有默认展开节点,则赋值
  16. if (this.defaultExpandedKeys) {
  17. this.defaultTreeExpandedKeys = [...this.defaultExpandedKeys]
  18. }
  19. // 如果有传根节点名称,则赋值
  20. if (this.topNodeText) {
  21. this.defaultTopNodeText = this.topNodeText
  22. }
  23. // 如果有传默认选中节点,则赋值
  24. if (this.selectedKeys.length > 0) {
  25. this.defaultSelectedKeys = [...this.selectedKeys]
  26. }
  27. // 如果有传部门下拉默认值,则赋值
  28. if (this.defaultDepValue.length > 0) {
  29. this.depvalue = [...this.defaultDepValue]
  30. console.log('---有部分---')
  31. this.initTreeData(this.defaultDepValue[0])
  32. } else {
  33. console.log('--初次')
  34. this.initTreeData()
  35. }
  36. },
  37. methods: {
  38. /**
  39. * 显示分类负责人
  40. */
  41. showUser(item) {
  42. this.$emit('showUser', item)
  43. },
  44. // 判断当前树需要展示的节点信息
  45. bindTree(nodeinfo) {
  46. const checklist = this.checkedKeys.checked
  47. if (nodeinfo.children) {
  48. this.bindTree(nodeinfo.children)
  49. const hiddenItem = nodeinfo.children.find((item, index) => {
  50. return item.hidden !== true
  51. })
  52. // 判断当前进节点是否隐藏
  53. if (!hiddenItem && checklist.indexOf(nodeinfo.id) === -1) {
  54. nodeinfo.hidden = true
  55. }
  56. // 如果显示但是没有在选择列表,则不可选中
  57. if (!nodeinfo.hidden && checklist.indexOf(nodeinfo.id) === -1) {
  58. nodeinfo.disabled = true
  59. }
  60. } else {
  61. nodeinfo.forEach((node, nodeindex) => {
  62. if (node.children) {
  63. // 判断子节点是否有选中的节点
  64. this.bindTree(node.children)
  65. const hiddenItem = node.children.find((item, index) => {
  66. return item.hidden !== true
  67. })
  68. // 判断当前进节点是否隐藏
  69. if (!hiddenItem && checklist.indexOf(node.id) === -1) {
  70. node.hidden = true
  71. }
  72. // 如果显示但是没有在选择列表,则不可选中
  73. if (!node.hidden && checklist.indexOf(node.id) === -1) {
  74. node.disabled = true
  75. }
  76. } else {
  77. if (checklist.indexOf(node.id) === -1) {
  78. node.hidden = true
  79. }
  80. // 如果显示但是没有在选择列表,则不可选中
  81. if (!node.hidden && checklist.indexOf(node.id) === -1) {
  82. node.disabled = true
  83. }
  84. }
  85. })
  86. }
  87. },
  88. /***
  89. * 选中复选框时的事件
  90. */
  91. treeCheck(allKeys, echecked) {
  92. // echecked.checkedNodes 选中的所有节点信息为数组 .data.props 获取详细信息
  93. // echecked.node.dataRef 当前选中的节点信息
  94. if (this.single) {
  95. this.checkedKeys.checked = []
  96. this.checkedKeys.checked = [echecked.node.dataRef.id]
  97. }
  98. this.$emit('checkedKeys', echecked.node.dataRef, echecked.checkedNodes)
  99. },
  100. getTree(node) {
  101. const removeIndex = []
  102. node.children.forEach((item, index) => {
  103. if (item.hidden === true) {
  104. removeIndex.push(index)
  105. } else {
  106. if (item.children) {
  107. this.getTree(item)
  108. }
  109. }
  110. })
  111. // 删除元素
  112. removeIndex.forEach((oneindex, index) => {
  113. node.children.splice(oneindex - index, 1)
  114. })
  115. },
  116. // 点击树
  117. treeSelect(selectedKeys, info) {
  118. this.defaultSelectedKeys = selectedKeys
  119. if (this.single) {
  120. this.checkedKeys = []
  121. this.checkedKeys = [info.node.dataRef.id]
  122. } else {
  123. if (isChecked(this.checkedKeys.checked, info.node.dataRef.id)) {
  124. this.checkedKeys.checked.push(info.node.dataRef.id)
  125. } else {
  126. this.checkedKeys.checked.splice(this.checkedKeys.checked.indexOf(info.node.dataRef.id), 1)
  127. }
  128. this.checkedKeys.checked = [...new Set(this.checkedKeys.checked)]
  129. }
  130. this.$emit('treeSelect', [...selectedKeys, ...this.checkedKeys.checked], info)
  131. },
  132. // 筛选树
  133. onSearchChange(e) {
  134. const value = e.target.value
  135. const expandedKeys = this.dataList
  136. .map((item) => {
  137. if (item.title.indexOf(value) > -1) {
  138. return this.getParentKey(item.key, this.treeData)
  139. }
  140. return null
  141. })
  142. .filter((item, i, self) => item && self.indexOf(item) === i)
  143. expandedKeys.unshift('0') // 顶结点永远展开
  144. Object.assign(this, {
  145. expandedKeys,
  146. searchValue: value,
  147. autoExpandParent: true,
  148. })
  149. },
  150. getParentKey(key, tree) {
  151. let parentKey
  152. for (let i = 0; i < tree.length; i++) {
  153. const node = tree[i]
  154. if (node.children) {
  155. if (node.children.some((item) => item.id === key)) {
  156. parentKey = node.id
  157. } else if (this.getParentKey(key, node.children)) {
  158. parentKey = this.getParentKey(key, node.children)
  159. }
  160. }
  161. }
  162. return parentKey
  163. },
  164. transformData(data) {
  165. return data.map((d) => {
  166. const { children, ...rest } = d
  167. return {
  168. ...rest,
  169. children: children && this.transformData(children),
  170. scopedSlots: { title: 'title' },
  171. }
  172. })
  173. },
  174. // 处理搜索用的dataList
  175. generateList(data) {
  176. for (let i = 0; i < data.length; i++) {
  177. const node = data[i]
  178. const key = node.id
  179. const title = node.text
  180. const props = node.props
  181. // 用来判断此几点是否已经配置了用户,需要后台返回标识位进行判断
  182. // if (props.showuser) {
  183. // data[i].scopedSlots.icon = 'hasuser'
  184. // }
  185. this.dataList.push({ key, id: key, title: title, props })
  186. if (node.children) {
  187. this.generateList(node.children)
  188. }
  189. }
  190. },
  191. onExpand(expandedKeys) {
  192. // 用户点击展开时,取消自动展开效果
  193. this.expandedKeys = expandedKeys
  194. this.autoExpandParent = false
  195. },
  196. // 小箭头点击事件
  197. foldClick() {
  198. // const newtree = {}
  199. // Object.assign(newtree, this.treeData)
  200. // this.bindTree(newtree[0])
  201. // this.getTree(newtree[0])
  202. this.fold = !this.fold
  203. if (this.fold) {
  204. this.icontype = 'right'
  205. } else {
  206. this.icontype = 'left'
  207. }
  208. },
  209. // 组织下拉框change时触发
  210. changedep(value, option, extra) {
  211. this.key++
  212. if (!value) {
  213. this.defaultTreeExpandedKeys = ['0']
  214. this.defaultSelectedKeys = ['0']
  215. this.defaultTopNodeId = '0'
  216. this.defaultTopNodeText = this.topNodeText
  217. } else {
  218. this.defaultTreeExpandedKeys = [extra.triggerNode.dataRef.value]
  219. this.defaultSelectedKeys = [extra.triggerNode.dataRef.value]
  220. this.defaultTopNodeId = extra.triggerNode.dataRef.value
  221. this.defaultTopNodeText = extra.triggerNode.dataRef.title
  222. }
  223. this.initTreeData(value)
  224. this.$emit('depChanged', value, option)
  225. },
  226. // 刷新树方法
  227. refreshTree() {
  228. this.key++
  229. },
  230. fnchangewidth() {
  231. let obj = null
  232. let item = null
  233. let e = null
  234. let width = 0
  235. if (this.checkable) {
  236. obj = document.getElementsByClassName('ant-tree')[1]
  237. if (obj) {
  238. width = obj.clientWidth
  239. if (obj.children.length > 0) {
  240. item = obj.children[0]
  241. if (item.children.length > 0) {
  242. e = item.children[3]
  243. }
  244. }
  245. }
  246. } else {
  247. obj = document.getElementsByClassName('ant-tree ant-tree-show-line')[0]
  248. if (obj) {
  249. width = obj.clientWidth
  250. if (obj.children.length > 0) {
  251. item = obj.children[0]
  252. if (item.children.length > 0) {
  253. e = item.children[2]
  254. }
  255. }
  256. }
  257. }
  258. // const
  259. if (e) {
  260. if (item.scrollWidth > width) {
  261. width = item.scrollWidth
  262. }
  263. if (e.scrollWidth > width) {
  264. width = e.scrollWidth
  265. }
  266. if (e.children.length > 0) {
  267. for (var k = 0; k < e.children.length; k++) {
  268. const a = e.children[k]
  269. if (a.scrollWidth > width) {
  270. width = a.scrollWidth
  271. }
  272. if (a.children.length > 2) {
  273. const b = a.children[2]
  274. if (b.scrollWidth > width) {
  275. width = b.scrollWidth
  276. }
  277. for (var l = 0; l < b.children.length; l++) {
  278. const c = b.children[l]
  279. if (c.scrollWidth > width) {
  280. width = c.scrollWidth
  281. }
  282. }
  283. }
  284. }
  285. }
  286. }
  287. obj.style.width = width + 'px'
  288. },
  289. },
  290. }
  291. export default AuditPermissionTreeMixins