law-case-select-picker.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <template>
  2. <!-- :load-tree-data="loadTreeData" -->
  3. <lawCaseTreePicker
  4. v-bind="pickerMixinProps"
  5. :load-tree-data="loadTreeData"
  6. :selectclick="selectclick"
  7. :default-expanded-keys="defaultExpandedKeys"
  8. :root-node="rootNode"
  9. option-value="code"
  10. option-label="text"
  11. :search-tree-data="searchTreeData"
  12. :render="(item, direction) => renderItem(item, direction)"
  13. v-on="$listeners"
  14. ><a-icon v-if="!readOnly" slot="suffixIcon" type="apartment" />
  15. </lawCaseTreePicker>
  16. </template>
  17. <script>
  18. import AddressBook from '@/addressbook/group-user-service'
  19. import lawCaseTreeService from './law-case-tree-service'
  20. import lawCaseTreePicker from './law-case-tree-picker.vue'
  21. import pickerMixin from './picker-mixin'
  22. import components from './_import-components/law-case-select-picker-import'
  23. /**
  24. * 案由选择
  25. * @displayName 案由选择
  26. */
  27. export default {
  28. name: 'LawCaseSelectPicker',
  29. components: {
  30. ...components,
  31. lawCaseTreePicker,
  32. },
  33. mixins: [pickerMixin],
  34. props: {
  35. selectall: {
  36. type: Boolean,
  37. default: false,
  38. },
  39. selectclick: {
  40. type: Function,
  41. default: null,
  42. },
  43. /**
  44. * 根节点{code:'200000',name:'西安分公司'}
  45. */
  46. rootNode: {
  47. type: [Object, Array],
  48. default: undefined,
  49. },
  50. /**
  51. * 默认展开的节点['200000']
  52. */
  53. defaultExpandedKeys: {
  54. type: Array,
  55. default: undefined,
  56. },
  57. /**
  58. * 当开启分级授权时,是否过滤掉启用分级授权的子公司,true时过滤,false时不过滤
  59. *
  60. */
  61. hierarchical: {
  62. type: Boolean,
  63. default: undefined,
  64. },
  65. // 地址树接口数据源
  66. treeparams: {
  67. type: Object,
  68. default: () => {
  69. return {}
  70. },
  71. },
  72. // 根节点名称
  73. topNodeText: {
  74. type: String,
  75. default: '审计机构',
  76. },
  77. // 根节点ID
  78. topNodeId: {
  79. type: String,
  80. default: '0',
  81. },
  82. },
  83. data() {
  84. return {
  85. searchValue: '',
  86. }
  87. },
  88. methods: {
  89. loadTreeData(depId) {
  90. if (!depId) {
  91. // 没有传depId,这是根节点
  92. return lawCaseTreeService.getSelectCaseNode('0').then((res) => {
  93. res.data.forEach((item) => {
  94. item.id = item.id.toString()
  95. item.code = item.id.toString()
  96. })
  97. return [
  98. {
  99. id: '0',
  100. code: '0',
  101. text: this.topNodeText,
  102. leaf: false,
  103. expandable: true,
  104. differentDisplay: false,
  105. props: {},
  106. children: res.data,
  107. },
  108. ]
  109. })
  110. } else {
  111. // 打开子节点
  112. return lawCaseTreeService.getSelectCaseNode(depId)
  113. }
  114. },
  115. searchTreeData(searchValue) {
  116. this.searchValue = searchValue
  117. if (searchValue) {
  118. return lawCaseTreeService.searchCaseNode(searchValue).then((data) => {
  119. if (data.data.length === 0) {
  120. return []
  121. }
  122. data.data.forEach((item) => {
  123. item.id = item.id.toString()
  124. item.code = item.id.toString()
  125. })
  126. return [
  127. {
  128. id: '0',
  129. code: '0',
  130. text: this.topNodeText,
  131. leaf: false,
  132. expandable: true,
  133. differentDisplay: false,
  134. props: {},
  135. children: data.data,
  136. },
  137. ]
  138. })
  139. }
  140. },
  141. renderItem(item, direction) {
  142. const searchValue = this.searchValue
  143. let name = item.name
  144. if (name === undefined) {
  145. name = item.text
  146. }
  147. if (name.indexOf('/') > -1) {
  148. return <span title={name}>{name.split('/').pop()}</span>
  149. } else {
  150. if (name.indexOf(searchValue) > -1) {
  151. return (
  152. <span title={name}>
  153. {name.substr(0, name.indexOf(searchValue))}
  154. <span class='searchTitle'>{searchValue}</span>
  155. {name.substr(name.indexOf(searchValue) + searchValue.length)}
  156. </span>
  157. )
  158. }
  159. return <span title={name}>{name}</span>
  160. }
  161. },
  162. },
  163. }
  164. </script>
  165. <style module lang="scss">
  166. @use '@/common/design' as *;
  167. </style>