From 952a20f1c005d80e9bf881287c40e6f4e4266a0b Mon Sep 17 00:00:00 2001
From: lxp <1928192722@qq.com>
Date: 星期三, 12 三月 2025 15:34:52 +0800
Subject: [PATCH] Merge branch 'dev' of http://114.132.189.42:9002/r/center-lims-before-ruoyi into dev

---
 src/views/CNAS/resourceDemand/device/index.vue |  250 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 250 insertions(+), 0 deletions(-)

diff --git a/src/views/CNAS/resourceDemand/device/index.vue b/src/views/CNAS/resourceDemand/device/index.vue
new file mode 100644
index 0000000..a12de51
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/index.vue
@@ -0,0 +1,250 @@
+<template>
+  <div class="device-page">
+    <div class="device-left">
+      <el-input v-model="deviceName" class="div_left_input" clearable placeholder="杈撳叆璁惧鍚嶇О" size="small"
+        suffix-icon="el-icon-search" @blur="searchFilter" @clear="searchFilter"
+        @keyup.enter.native="searchFilter"></el-input>
+      <el-tree :data="list" ref="tree" :props="{ children: 'children', label: 'label' }" node-key="id"
+               @node-click="handleNodeClick" :filter-node-method="filterNode" highlight-current @node-expand="nodeOpen"
+               @node-collapse="nodeClose" v-loading="loading" :expand-on-click-node="false" style="height:calc(100% - 46px);
+        overflow-y: scroll;
+        scrollbar-width: none;">
+        <div class="custom-tree-node" slot-scope="{ node, data }">
+          <el-row style="width: 100%;">
+            <el-col :span="21" :title="data.label">
+              <span class="single-line-ellipsis" style="width: 100%;display: inline-block;">
+                <i :class="`node_i ${data.children != undefined
+                  ? data.code === '[1]'
+                    ? 'el-icon-folder-opened'
+                    : 'el-icon-folder'
+                  : 'el-icon-tickets'
+                  }`
+                  "></i>
+                {{ data.label }}
+              </span>
+            </el-col>
+          </el-row>
+        </div>
+      </el-tree>
+    </div>
+    <div class="device-right">
+      <div v-if="isShowAll" style="height: 100%;">
+        <el-tabs v-model="menuListActiveName" class="main_right" type="border-card">
+          <el-tab-pane label="璁惧鎬昏" name="璁惧鎬昏">
+            <overview v-if="menuListActiveName == '璁惧鎬昏'" :clickNodeVal="clickNodeVal" />
+          </el-tab-pane>
+          <el-tab-pane label="璁惧宸ュ叿鏄庣粏" name="璁惧宸ュ叿鏄庣粏">
+            <management v-if="menuListActiveName == '璁惧宸ュ叿鏄庣粏'" :clickNodeVal="clickNodeVal" />
+          </el-tab-pane>
+          <el-tab-pane label="璧勬簮棰勫畾" name="璧勬簮棰勫畾">
+            <resourceReservation v-if="menuListActiveName == '璧勬簮棰勫畾'" :clickNodeVal="clickNodeVal"/>
+          </el-tab-pane>
+          <el-tab-pane label="浣滀笟鎸囧涔�" name="浣滀笟鎸囧涔�">
+            <operationInstruction v-if="menuListActiveName == '浣滀笟鎸囧涔�'" :clickNodeVal="clickNodeVal" />
+          </el-tab-pane>
+        </el-tabs>
+      </div>
+      <div v-if="!isShowAll" style="height: 100%;">
+        <el-tabs v-model="tabListActiveName" class="main_right" type="border-card" @tab-click="handleClick">
+          <el-tab-pane label="璁惧杩愯鎬昏" name="璁惧杩愯鎬昏">
+            <operationOverview view v-if="tabListActiveName == '璁惧杩愯鎬昏'" :clickNodeVal="clickNodeVal"/>
+          </el-tab-pane>
+          <el-tab-pane label="璁惧妗f" name="璁惧妗f">
+            <files v-if="tabListActiveName == '璁惧妗f'" :clickNodeVal="clickNodeVal" />
+          </el-tab-pane>
+          <el-tab-pane label="璁惧楠屾敹" name="璁惧楠屾敹">
+            <checkAndAccept v-if="tabListActiveName == '璁惧楠屾敹'" :clickNodeVal="clickNodeVal"/>
+          </el-tab-pane>
+          <el-tab-pane label="璁惧鏍″噯" name="璁惧鏍″噯">
+            <calibration v-if="tabListActiveName == '璁惧鏍″噯'" :clickNodeVal="clickNodeVal" />
+          </el-tab-pane>
+          <el-tab-pane label="璁惧鏍告煡" name="璁惧鏍告煡">
+            <check v-if="tabListActiveName == '璁惧鏍告煡'" :clickNodeVal="clickNodeVal"/>
+          </el-tab-pane>
+          <el-tab-pane label="璁惧缁存姢" name="璁惧缁存姢">
+            <maintenance v-if="tabListActiveName == '璁惧缁存姢'" :clickNodeVal="clickNodeVal" />
+          </el-tab-pane>
+          <el-tab-pane label="璁惧鍊熺敤" name="璁惧鍊熺敤">
+            <borrow v-if="tabListActiveName == '璁惧鍊熺敤'" :clickNodeVal="clickNodeVal" />
+          </el-tab-pane>
+          <el-tab-pane label="璁惧鏁呴殰" name="璁惧鏁呴殰">
+            <fault v-if="tabListActiveName == '璁惧鏁呴殰'" :clickNodeVal="clickNodeVal" />
+          </el-tab-pane>
+          <el-tab-pane label="浣跨敤璁板綍" name="浣跨敤璁板綍">
+            <record v-if="tabListActiveName == '浣跨敤璁板綍'" :clickNodeVal="clickNodeVal" />
+          </el-tab-pane>
+          <el-tab-pane label="璁惧鍋滅敤/鍚敤" name="璁惧鍋滅敤/鍚敤">
+            <state v-if="tabListActiveName == '璁惧鍋滅敤/鍚敤'" :clickNodeVal="clickNodeVal" />
+          </el-tab-pane>
+        </el-tabs>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import management from "./component/management.vue";
+import overview from "./component/device-overview.vue";
+import resourceReservation from "./component/resource-reservation.vue";
+import operationInstruction from "./component/operationInstruction.vue";
+import operationOverview from "./component/operationOverview.vue";
+import files from "./component/files.vue";
+import checkAndAccept from "./component/check-and-accept.vue";
+import calibration from "./component/calibration.vue";
+import check from "./component/check.vue";
+import maintenance from "./component/maintenance.vue";
+import borrow from "./component/borrow.vue";
+import fault from "./component/fault.vue";
+import record from "./component/record.vue";
+import state from "./component/state.vue";
+
+import {
+  treeDevice,
+} from '@/api/cnas/resourceDemand/device.js'
+export default {
+  components: {
+    checkAndAccept,
+    operationOverview,
+    files,
+    calibration,
+    check,
+    maintenance,
+    borrow,
+    fault,
+    record,
+    state,
+    management,
+    overview,
+    resourceReservation,
+    operationInstruction
+  },
+  data() {
+    return {
+      isShowAll: true,
+      deviceName: "", // 渚ц竟鏍忔悳绱�
+      loading: false,
+      tabListActiveName: '璁惧杩愯鎬昏',
+      menuListActiveName: '璁惧鎬昏',
+      list: [],
+      clickNodeVal: {}
+    };
+  },
+  mounted() {
+    // 鍒濆鍖栬皟鐢�
+    this.geList();
+  },
+  methods: {
+    handleClick(tab, event) {
+    },
+    searchFilter() {
+      this.$refs.tree.filter(this.deviceName)
+    },
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    // 鐖剁骇
+    geList() {
+      this.loading = true;
+      treeDevice().then(res => {
+        let data = res.data;
+        this.list = data;
+        this.loading = false
+      });
+    },
+    handleNodeClick(val, node, el) {
+      // 鐐瑰嚮涓存椂缂撳瓨
+      this.clickNodeVal = val;
+      // 瀛樺偍鐖剁骇鑺傜偣绾ф暟
+      this.clickNodeVal.level = node.level
+      this.clickNodeVal.parent = node.parent.data
+      // 鏄惁鏄剧ず璁惧璇︽儏
+      if (!val.value) {
+        this.isShowAll = true
+      } else {
+        this.isShowAll = false
+      }
+    },
+    nodeOpen(data, node, el) {
+      // $($(el.$el).find(".node_i")[0]).attr(
+      //   "class",
+      //   "node_i el-icon-folder-opened"
+      // );
+    },
+    nodeClose(data, node, el) {
+      // $($(el.$el).find(".node_i")[0]).attr("class", "node_i el-icon-folder");
+    },
+  }
+};
+</script>
+
+<style scoped>
+.device-page {
+  display: flex;
+  padding-top: 10px;
+  box-sizing: border-box;
+  width: 100%;
+}
+
+.device-left {
+  width: 250px;
+  height: 100%;
+  background: #fff;
+  border-radius: 16px;
+  box-sizing: border-box;
+  padding: 10px 16px;
+  flex-shrink: 0;
+  padding-right: 0;
+}
+
+.device-right {
+  background: #fff;
+  width: calc(100% - 250px);
+  height: calc(100vh - 40px);
+  border-radius: 16px;
+  box-sizing: border-box;
+  padding: 10px;
+}
+
+.showLargeCategory {
+  width: 100%;
+  height: 100%;
+}
+
+.device-right-content {
+  /* margin-top: 10px; */
+  height: calc(100% - 42px);
+  width: 100%;
+}
+
+.custom-tree-node {
+  width: 100%;
+  line-height: 32px;
+  font-size: 14px;
+}
+
+.node_i {
+  color: orange;
+  font-size: 18px;
+}
+
+.main_right {
+  height: calc(100% - 5px);
+  overflow: hidden;
+}
+
+>>>.el-tabs__content {
+  padding-top: 0;
+}
+
+>>>.single-line-ellipsis {
+  margin: 0 !important;
+}
+
+>>>.el-tree-node__content {
+  text-align: left;
+  align-items: start;
+  margin: 4px;
+  height: 100%;
+}
+</style>

--
Gitblit v1.9.3