audit-group-picker.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. <template>
  2. <!-- :load-tree-data="loadTreeData" -->
  3. <auditTreePicker
  4. v-bind="pickerMixinProps"
  5. :load-tree-data="loadTreeData"
  6. :module-id="treeparams.moduleId"
  7. :selectclick="selectclick"
  8. :default-expanded-keys="defaultExpandedKeys"
  9. :root-node="rootNode"
  10. :selectchecked="selectchecked"
  11. option-value="code"
  12. :search-tree-data="searchTreeData"
  13. :render="(item, direction) => renderItem(item, direction)"
  14. v-on="$listeners"
  15. ><a-icon v-if="!readOnly" slot="suffixIcon" type="apartment" />
  16. </auditTreePicker>
  17. </template>
  18. <script>
  19. import AddressBook from '@/addressbook/group-user-service'
  20. import auditPermissionTreeService from '../audit-permission-tree-service'
  21. import auditTreeService from '../audit-tree-service'
  22. import auditTreePicker from './audit-tree-picker.vue'
  23. import pickerMixin from './picker-mixin'
  24. import components from './_import-components/audit-group-picker-import'
  25. /**
  26. * 组织选择器
  27. * @displayName AuditGroupPicker 组织选择器
  28. */
  29. export default {
  30. name: 'AuditGroupPicker',
  31. components: {
  32. ...components,
  33. auditTreePicker,
  34. },
  35. mixins: [pickerMixin],
  36. props: {
  37. selectall: {
  38. type: Boolean,
  39. default: false,
  40. },
  41. selectclick: {
  42. type: Function,
  43. default: null,
  44. },
  45. /**
  46. * 根节点{code:'200000',name:'西安分公司'}
  47. */
  48. rootNode: {
  49. type: [Object, Array],
  50. default: undefined,
  51. },
  52. /**
  53. * 默认展开的节点['200000']
  54. */
  55. defaultExpandedKeys: {
  56. type: Array,
  57. default: undefined,
  58. },
  59. /**
  60. * 当开启分级授权时,是否过滤掉启用分级授权的子公司,true时过滤,false时不过滤
  61. *
  62. */
  63. hierarchical: {
  64. type: Boolean,
  65. default: undefined,
  66. },
  67. // 地址树接口数据源
  68. treeparams: {
  69. type: Object,
  70. default: () => {
  71. return {}
  72. },
  73. },
  74. // 根节点名称
  75. topNodeText: {
  76. type: String,
  77. default: '审计机构',
  78. },
  79. // 根节点ID
  80. topNodeId: {
  81. type: String,
  82. default: '0',
  83. },
  84. // 特殊树不需要获取节点
  85. selectchecked: {
  86. type: Boolean,
  87. default: false,
  88. },
  89. selectcheckfn: {
  90. type: Function,
  91. defult: null,
  92. },
  93. },
  94. methods: {
  95. loadTreeData(depId) {
  96. let topDepId = null
  97. const params = {
  98. type: this.treeparams.type,
  99. }
  100. const getdata = new Promise((resolve) => {
  101. if (this.selectchecked) {
  102. Promise.resolve(this.selectcheckfn()).then((data) => {
  103. console.log(data)
  104. resolve(data)
  105. })
  106. } else {
  107. if (this.selectall) {
  108. topDepId = !depId ? 0 : depId
  109. const text = this.topNodeText
  110. auditTreeService.getCategoryTree(topDepId, this.treeparams, params).then((res) => {
  111. this.spinning = false
  112. const treeNode = [
  113. {
  114. id: 0,
  115. oldId: 0,
  116. text: text,
  117. name: text,
  118. title: this.defaultTopNodeText,
  119. code: 0,
  120. leaf: false,
  121. isleaf: false,
  122. props: {},
  123. children: [],
  124. differentDisplay: false,
  125. expandable: true,
  126. type: 'Group',
  127. key: 0,
  128. },
  129. ]
  130. if (res.data.length) {
  131. res.data.forEach((r) => {
  132. r.oldId = r.id
  133. r.code = r.id
  134. r.title = r.text
  135. r.name = r.text
  136. })
  137. treeNode[0].children = res.data
  138. }
  139. resolve(treeNode)
  140. })
  141. } else {
  142. auditPermissionTreeService.getPcParentOrgInfo().then((res) => {
  143. if (res.data.length > 0) {
  144. let id = res.data[0].id
  145. let text = res.data[0].text
  146. const name = res.data[0].name
  147. if (text === undefined) {
  148. text = name
  149. }
  150. let code = this.defaultTopNodeId
  151. let oldId = res.data[0].id
  152. if (res.data[0].props.ORG_ID !== null) {
  153. code = res.data[0].props.ORG_ID
  154. id = res.data[0].props.ORG_ID
  155. }
  156. const obj = this.rootNode
  157. topDepId = !depId ? id : depId
  158. if (obj !== undefined) {
  159. text = this.rootNode.name
  160. code = this.rootNode.code
  161. id = this.rootNode.code
  162. topDepId = this.rootNode.id
  163. oldId = this.rootNode.id
  164. } else {
  165. text = '审计机构库'
  166. }
  167. this.defaultTopNodeId = oldId
  168. this.defaultTopNodeText = text
  169. this.defaultTreeExpandedKeys = [oldId]
  170. this.defaultSelectedKeys = [oldId]
  171. const params = {
  172. moduleId: this.treeparams.moduleId,
  173. }
  174. auditPermissionTreeService.getCategoryTree(topDepId, params).then((res1) => {
  175. this.spinning = false
  176. res1.data.forEach((item) => {
  177. if (item.name !== undefined) {
  178. item.text = item.name
  179. } else {
  180. item.name = item.text
  181. }
  182. item.oldId = item.id
  183. if (item.props.ORG_ID !== null) {
  184. item.code = item.props.ORG_ID.toString()
  185. item.id = item.props.ORG_ID
  186. } else {
  187. item.code = item.id.toString()
  188. }
  189. item.type = 'Group'
  190. })
  191. let treeNode = []
  192. if (!depId) {
  193. treeNode = [
  194. {
  195. id: id,
  196. oldId: oldId,
  197. text: this.defaultTopNodeText,
  198. name: this.defaultTopNodeText,
  199. title: this.defaultTopNodeText,
  200. code: id.toString(),
  201. leaf: false,
  202. isleaf: false,
  203. props: {},
  204. children: res1.data.length > 0 ? res1.data : [],
  205. differentDisplay: false,
  206. expandable: res1.data.length > 0,
  207. type: 'Group',
  208. },
  209. ]
  210. } else {
  211. treeNode = res.data
  212. }
  213. resolve(treeNode)
  214. })
  215. } else {
  216. resolve([])
  217. }
  218. })
  219. }
  220. }
  221. })
  222. return getdata
  223. },
  224. searchTreeData(searchValue) {
  225. if (searchValue) {
  226. if (searchValue) {
  227. return auditPermissionTreeService
  228. .groupsQuery({
  229. groupName: searchValue,
  230. moduleId: this.treeparams.moduleId,
  231. id: this.rootNode.id,
  232. })
  233. .then((data) => {
  234. return data
  235. })
  236. }
  237. }
  238. },
  239. renderItem(item, direction) {
  240. let name = item.name
  241. if (name === undefined) {
  242. name = item.text
  243. }
  244. if (name.indexOf('/') > -1) {
  245. return <span title={name}>{name.split('/').pop()}</span>
  246. } else {
  247. return <span title={name}>{name}</span>
  248. }
  249. },
  250. },
  251. }
  252. </script>
  253. <style module lang="scss">
  254. @use '@/common/design' as *;
  255. </style>