JyJcTree.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <template>
  2. <el-input v-model="search" style="width: 220px" @input="handleKeyUp" placeholder="这里可以搜索项目">
  3. <template #append>
  4. <el-button icon="Refresh" @click="refreshData"/>
  5. </template>
  6. </el-input>
  7. <el-tree
  8. ref="treeRef"
  9. :data="props.yjyc === 'jc' ? jcTree : jyTree"
  10. accordion
  11. :filter-node-method="filterNode"
  12. @node-click="nodeClick"
  13. :props="config">
  14. <template #default="{node, data}">
  15. <div style="width: 100%">
  16. <el-icon>
  17. <FolderOpened v-if="data?.code === null || data?.code.length < 5"/>
  18. <Document v-else/>
  19. </el-icon>
  20. <span :title="showName(data)">
  21. {{ showName(data) }}
  22. </span>
  23. </div>
  24. </template>
  25. </el-tree>
  26. </template>
  27. <script setup lang="ts">
  28. import {jcTree, jyTree} from "@/views/hospitalization/zhu-yuan-yi-sheng/public-js/zhu-yuan-yi-sheng";
  29. import {Ref, ref, watch} from "vue";
  30. import {ElTree} from "element-plus";
  31. import {Document, FolderOpened} from "@element-plus/icons-vue";
  32. import XEUtils from "xe-utils";
  33. import {notNullAndLike} from "@/utils/list-utlis";
  34. import {useCompRef} from "@/utils/useCompRef";
  35. import {getJyJcZdTree} from "@/api/zhu-yuan-yi-sheng/jian-yan-jian-cha-shen-qing";
  36. const props = defineProps({
  37. yjyc: {
  38. type: String
  39. }
  40. })
  41. const emit = defineEmits(['node-click'])
  42. const config = {
  43. value: 'code',
  44. label: 'name',
  45. children: 'children'
  46. }
  47. interface Tree {
  48. name: string,
  49. code: string,
  50. children?: Tree[]
  51. }
  52. const search: Ref<string> = ref('')
  53. const treeRef = useCompRef(ElTree)
  54. function handleKeyUp(val) {
  55. if (val) {
  56. treeRef.value!.filter(val)
  57. } else {
  58. for (let key in treeRef.value?.store.nodesMap) {
  59. treeRef.value.store.nodesMap[key].expanded = false;
  60. }
  61. }
  62. }
  63. const filterNode = (value: string, data: Tree) => {
  64. if (!value) return true
  65. return notNullAndLike(data, value)
  66. }
  67. const nodeClick = (data: Tree) => {
  68. if (!data.children) {
  69. emit('node-click', data)
  70. }
  71. }
  72. const showName = (data) => {
  73. if (props.yjyc === 'jy') {
  74. return data.name + ' ' + (data?.inspectStuffName === null ? '' : data?.inspectStuffName)
  75. }
  76. return data.name;
  77. }
  78. function refreshData() {
  79. getJyJcZdTree().then((res) => {
  80. jyTree.value = res.jy
  81. jcTree.value = res.jc
  82. })
  83. }
  84. </script>
  85. <style scoped lang="scss">
  86. </style>