initial.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <template>
  2. <div class="hc-page-layout-box">
  3. <div v-if="sbTableKey === 'classify'" class="hc-layout-left-box" :style="`width:${leftWidth}px;`">
  4. <div class="hc-project-box">
  5. <div class="hc-project-icon-box">
  6. <HcIcon name="stack" />
  7. </div>
  8. <div class="ml-2 project-name-box">
  9. <span class="text-xl text-cut project-alias">{{ projectInfo.projectAlias }}</span>
  10. <div class="text-xs text-cut project-name">{{ projectInfo.name }}</div>
  11. </div>
  12. </div>
  13. <div v-loading="treeLoading" class="hc-tree-box" element-loading-text="加载中...">
  14. <el-scrollbar>
  15. <HcTree :project-id="projectId" :contract-id="contractId" @nodeTap="projectTreeClick" @nodeLoading="treeNodeLoading" />
  16. </el-scrollbar>
  17. </div>
  18. <!-- 左右拖动 -->
  19. <div class="horizontal-drag-line" @mousedown="onmousedown" />
  20. </div>
  21. <div class="hc-page-content-box ledger-write-box">
  22. <HcTabsSimple :datas="sbTableData" :cur="sbTableKey" @tabClick="sbTableClick">
  23. <template #tab-collect>
  24. <TableCollect v-if="sbTableKey === 'collect'" :project-id="projectId" :contract-id="contractId" :tree-data="nodeDataInfo" />
  25. </template>
  26. <template #tab-classify>
  27. <TableClassify v-if="sbTableKey === 'classify'" :project-id="projectId" :contract-id="contractId" :tree-data="nodeDataInfo" />
  28. </template>
  29. </HcTabsSimple>
  30. </div>
  31. </div>
  32. </template>
  33. <script setup>
  34. import { onMounted, ref, watch } from 'vue'
  35. import { useAppStore } from '~src/store'
  36. //import HcTree from "./components/hc-tree.vue"
  37. import HcTree from '~src/components/tree/hc-tree.vue'
  38. import TableCollect from './components/table-collect.vue'
  39. import TableClassify from './components/table-classify.vue'
  40. //变量
  41. const useAppState = useAppStore()
  42. const projectId = ref(useAppState.getProjectId)
  43. const contractId = ref(useAppState.getContractId)
  44. const projectInfo = ref(useAppState.getProjectInfo)
  45. const isCollapse = ref(useAppState.getCollapse)
  46. //监听
  47. watch(() => [
  48. useAppState.getCollapse,
  49. ], ([Collapse]) => {
  50. isCollapse.value = Collapse
  51. })
  52. //渲染完成
  53. onMounted(() => {
  54. })
  55. //树加载
  56. const treeLoading = ref(true)
  57. const treeNodeLoading = () => {
  58. treeLoading.value = false
  59. }
  60. //类型处理
  61. const sbTableKey = ref('collect')
  62. const sbTableData = ref([
  63. { icon: 'bar-chart-box', label: '汇总目录', key: 'collect' },
  64. { icon: 'menu-3', label: '分类目录', key: 'classify' },
  65. ])
  66. const sbTableClick = (key) => {
  67. sbTableKey.value = key
  68. }
  69. //树操作
  70. const nodeDataInfo = ref({})
  71. const projectTreeClick = ({ data }) => {
  72. console.log(data)
  73. nodeDataInfo.value = data
  74. }
  75. //左右拖动,改变树形结构宽度
  76. const leftWidth = ref(382)
  77. const onmousedown = () => {
  78. const leftNum = isCollapse.value ? 142 : 272
  79. document.onmousemove = (ve) => {
  80. let diffVal = ve.clientX - leftNum
  81. if (diffVal >= 310 && diffVal <= 900) {
  82. leftWidth.value = diffVal
  83. }
  84. }
  85. document.onmouseup = () => {
  86. document.onmousemove = null
  87. document.onmouseup = null
  88. }
  89. }
  90. </script>