From e0a31f7013898540948f4d4d86ade1a5414b44d4 Mon Sep 17 00:00:00 2001
From: pengwei <2071057782@qq.com>
Date: 星期四, 20 三月 2025 17:32:42 +0800
Subject: [PATCH] 优化数据大屏页面

---
 项目代码/client/src/views/tts/TheCurrentJob/Startjob.vue |  263 +++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 245 insertions(+), 18 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/TheCurrentJob/Startjob.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/TheCurrentJob/Startjob.vue"
index 7c7dd51..4ef70a6 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/TheCurrentJob/Startjob.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/TheCurrentJob/Startjob.vue"
@@ -1,7 +1,7 @@
 <template>
   <div class="Startjob">
-    <div class="rect">
-      <div class="rect-top" style="position: relative">
+    <div class="rect" style="position: relative">
+      <div class="rect-top">
         <img src="@/assets/TheCurrentJob/left.png" alt="" />
         <img
           style="margin-left: -1.5rem; margin-right: 4rem"
@@ -111,6 +111,7 @@
                   >浠诲姟璇︽儏锛�</span
                 >
                 <span
+                  ref="spanHide1"
                   @click="showDetail(!contentShow1)"
                   style="color: #1ac2f7; font-size: 0.88rem; cursor: pointer"
                   >鏌ョ湅</span
@@ -192,6 +193,7 @@
               >
                 <template #default="scope">
                   <span
+                    ref="spanHide"
                     @click="showDetail1(!contentShow)"
                     style="
                       color: #1ac2f7;
@@ -277,27 +279,27 @@
             </div>
           </div>
         </div>
-        <div class="rect-item3">
-          <div style="overflow: hidden">
+        <div class="rect-item3" style="position: relative">
+          <div style="overflow: hidden; padding-bottom: 1rem">
             <img src="@/assets/TheCurrentJob/icon/icon.png" alt="" />
             <span style="color: rgba(26, 201, 255, 1); font-size: 0.88rem"
               >鍔涚煩鍊兼樉绀�</span
             >
-
-            <el-scrollbar>
+            <el-scrollbar ref="scrollbarRef" height="130rpx">
               <div
+                ref="innerRef"
                 style="
                   display: flex;
                   justify-content: center;
                   flex-direction: column;
                   padding-left: 1.5rem;
                   padding-top: 0.5rem;
-                  padding-bottom: 1.5rem;
+                  padding-bottom: 1rem;
                   box-sizing: border-box;
                 "
               >
                 <span
-                  style="color: #ffffff; font-size: 1rem; margin: 0.5rem 0"
+                  style="color: #ffffff; font-size: 1rem; margin: 0.4rem 0"
                   v-for="(item, index) in Torque"
                   :key="item.id"
                   >{{
@@ -305,7 +307,44 @@
                   }}</span
                 >
               </div>
+              <el-input
+                v-if="isTorque"
+                v-model.number="torqueFrom.torqueSize"
+                style="font-size: 0.75rem; height: 2rem"
+                placeholder="璇疯緭鍏ユ壄鍔涘��"
+              />
+              <!-- @blur="addTorque" -->
             </el-scrollbar>
+          </div>
+          <div
+            style="
+              position: absolute;
+              bottom: -2.3rem;
+              left: -0.1rem;
+              width: 100%;
+            "
+          >
+            <el-button
+              v-if="!isTorque"
+              type="primary"
+              style="font-size: 0.75rem; width: 100%; height: 2rem"
+              @click="showTorque"
+              >鎵嬪姩妯℃嫙鎵姏鍊�</el-button
+            >
+            <div v-else style="display: flex; justify-content: space-between">
+              <el-button
+                type="primary"
+                style="font-size: 0.75rem; width: 100%; height: 2rem"
+                @click="addTorque"
+                >纭</el-button
+              >
+              <el-button
+                type="primary"
+                style="font-size: 0.75rem; width: 100%; height: 2rem"
+                @click="isTorque = false"
+                >鍙栨秷</el-button
+              >
+            </div>
           </div>
         </div>
       </div>
@@ -316,13 +355,14 @@
           display: flex;
           justify-content: center;
           align-items: center;
-          z-index: 999;
           position: absolute;
-          top: 42%;
-          left: 15%;
+          top: 33%;
+          left: 50%;
+          transform: translateX(-50%);
         "
       >
-        <model-gltf
+        <div ref="container" style="width: 100%; height: 100%"></div>
+        <!-- <model-gltf
           :width="400"
           :height="400"
           :backgroundAlpha="0"
@@ -331,14 +371,17 @@
           :controlsOptions="{
             enableZoom,
           }"
-        />
+        /> -->
       </div>
       <div
         style="
           display: flex;
           justify-content: center;
           align-items: center;
-          margin-top: 30rem;
+          position: absolute;
+          bottom: 5%;
+          left: 50%;
+          transform: translateX(-50%);
         "
       >
         <el-button
@@ -409,7 +452,7 @@
   </div>
 </template>
 <script setup>
-import { ref, onMounted } from "vue";
+import { ref, onMounted, nextTick } from "vue";
 import {
   GetScreenData,
   GetPre,
@@ -417,11 +460,20 @@
   Complete,
   GetTorque,
   ChangeStatus,
+  AddTorque, //娣诲姞鎵姏鍊兼帴鍙�
 } from "@/api/newapi/Thecurrentjob";
 import { GetPageData } from "@/api/newapi/NjTask";
 import { useRouter } from "vue-router";
 import { ElMessage, ElMessageBox } from "element-plus";
 import { ModelCollada, ModelGltf } from "vue-3d-model";
+import { formatTime } from "@/utils/index.js";
+import * as THREE from "three";
+import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";
+import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"; //gltf
+
+const container = ref(null);
+
+let scene, camera, renderer, controls;
 
 const router = useRouter();
 const gridData = ref([]);
@@ -451,7 +503,26 @@
   takeid: "",
   setnum: 0,
 });
+
+//鎵姏鍊�
+const torqueFrom = ref({
+  creater: JSON.parse(localStorage.getItem("user")).userName, //褰撳墠鐧婚檰浜�
+  createDate: formatTime(new Date()), //褰撳墠鏃堕棿
+  modifier: JSON.parse(localStorage.getItem("user")).userName,
+  modifyDate: formatTime(new Date()),
+  id: 0,
+  deviceCode: "", //璁惧缂栧彿
+  takeId: "", //浠诲姟id
+  groupOp: "", //鐝粍
+  processSte: 0, //褰撳墠姝ラ
+  torqueSize: null, //杈撳叆鐨勬壄鍔涘��
+});
+
+const isTorque = ref(false);
 const flag = ref(false);
+
+const innerRef = ref();
+const scrollbarRef = ref();
 //涓婁竴姝�
 const Previous = (val) => {
   from.value.group = info.value.grouptype;
@@ -513,7 +584,6 @@
 };
 //鏌ョ湅鏁版嵁
 const checko = () => {
-  console.log(info.value);
   GetPageData({
     page: 1,
     rows: 10,
@@ -532,7 +602,6 @@
       },
     ],
   }).then((res) => {
-    console.log(res);
     taskData.value = res.rows;
   });
 };
@@ -542,6 +611,7 @@
   setnum: "",
 });
 const initData = () => {
+  console.log(obj.value);
   GetScreenData({
     group: info.value.grouptype,
     takeid: info.value.njtakeid,
@@ -566,8 +636,165 @@
   });
 };
 
+const showModel = () => {
+  scene = new THREE.Scene();
+  console.log("model", window.innerWidth, window.innerHeight);
+
+  // 鍒涘缓鐩告満 (瑙嗚锛屽楂樻瘮锛岃繎瑁佸壀闈紝杩滆鍓潰)
+  camera = new THREE.PerspectiveCamera(75, 1, 0.1, 1000);
+
+  // 鍒涘缓娓叉煋鍣�
+  renderer = new THREE.WebGLRenderer({
+    antialias: true,
+    alpha: true,
+  });
+  renderer.setSize(400, 400); // 璁剧疆娓叉煋鍣ㄧ殑澶у皬
+  container.value.appendChild(renderer.domElement);
+  scene.background = null;
+  // 鍔犺浇GLTF妯″瀷
+  const loader = new GLTFLoader();
+  loader.load(
+    "ThreeModel/test.gltf",
+    (gltf) => {
+      const model = gltf.scene;
+
+      // 璁$畻妯″瀷鐨勮竟鐣屾骞惰幏鍙栦腑蹇冪偣
+      const box = new THREE.Box3().setFromObject(model);
+      const center = box.getCenter(new THREE.Vector3());
+
+      // 鍒涘缓涓�涓┖瀵硅薄浣滀负鐖惰妭鐐癸紝灏嗗潗鏍囪酱鍜屾ā鍨嬫坊鍔犲埌杩欎釜鐖惰妭鐐�
+      const parent = new THREE.Object3D();
+      scene.add(parent);
+
+      // 灏嗘ā鍨嬬殑浣嶇疆璁剧疆涓烘ā鍨嬬殑杈圭晫妗嗙殑涓績锛岀‘淇濆畠灞呬腑
+      model.position.sub(center); // 璁╂ā鍨嬬殑涓績涓庣埗鑺傜偣瀵归綈
+
+      // 灏嗗潗鏍囪酱鍔╂墜娣诲姞鍒扮埗鑺傜偣
+      // const axesHelper = new THREE.AxesHelper(100); // 杞寸殑闀垮害涓�100  x,y,z鐨勯鑹插垎鍒负锛堢孩鑹诧紝缁胯壊锛岃摑鑹诧級
+      // parent.add(axesHelper); // 灏嗗潗鏍囪酱娣诲姞鍒扮埗鑺傜偣
+
+      // 灏嗘ā鍨嬫坊鍔犲埌鐖惰妭鐐�
+      parent.add(model);
+
+      // 纭繚妯″瀷鐨勫ぇ灏忛�傚綋锛屽彲浠ヨ皟鏁存ā鍨嬬殑澶у皬
+      model.scale.set(1, 1, 1); // 濡傛灉闇�瑕佺殑璇濆彲浠ョ缉鏀炬ā鍨�
+    },
+    undefined,
+    (error) => {
+      console.error("妯″瀷鍔犺浇澶辫触", error);
+    }
+  );
+
+  const metalMaterial = new THREE.MeshStandardMaterial({
+    color: 0xaaaaaa,
+    metalness: 1,
+    roughness: 0.2,
+  });
+
+  const sphereGeometry = new THREE.SphereGeometry(1, 32, 32);
+  const metalSphere = new THREE.Mesh(sphereGeometry, metalMaterial);
+  scene.add(metalSphere);
+
+  // 鍒涘缓鐏厜
+  const light = new THREE.AmbientLight(0xffffff); // 鐜鍏夋槸涓�绉嶅叏灞�鎬х殑鍏夋簮锛屽潎鍖�鍦扮収浜暣涓満鏅紝骞朵笖涓嶄細鏈夐槾褰辨晥鏋�
+  scene.add(light);
+
+  const directionalLight = new THREE.DirectionalLight(0xffffff, 3); //杩欐浠g爜鍒涘缓浜嗕竴涓櫧鑹层�佸己搴︿负 1 鐨勫钩琛屽厜婧�
+  directionalLight.position.set(300, 300, 300).normalize(); //骞跺皢鍏朵綅缃缃湪 (300, 300, 300)銆傜劧鍚庯紝閫氳繃 normalize() 鏂规硶锛岀‘淇濆钩琛屽厜婧愮殑鍏夌嚎浠ヤ竴涓爣鍑嗙殑鏂瑰悜鐓у皠
+  scene.add(directionalLight);
+
+  // 璁剧疆鐩告満鍒濆浣嶇疆锛坸,y,z锛�
+  camera.position.set(100, 100, 50); // 璁剧疆鐩告満浣嶇疆锛岀‘淇濆彲浠ョ湅鍒版ā鍨�
+
+  // 鍒涘缓 OrbitControls 瀹炰緥
+  controls = new OrbitControls(camera, renderer.domElement);
+  controls.enableZoom = false;
+  controls.enablePan = false;
+  controls.enableDamping = true; // 鍚敤闃诲凹鏁堟灉
+  controls.dampingFactor = 0.25; // 闃诲凹绯绘暟
+  controls.screenSpacePanning = false; // 绂佺敤灞忓箷绌洪棿骞崇Щ
+  controls.maxPolarAngle = Math.PI / 2; // 闄愬埗鐩告満鍨傜洿鏃嬭浆鐨勮搴︼紝闃叉缈昏浆
+  controls.target.set(0, 0, 0); // 纭繚鐩告満濮嬬粓鍥寸粫鍦烘櫙涓績锛堟ā鍨嬩綅缃級
+  controls.minDistance = 2; // 鏈�灏忚窛绂伙紝闃叉缂╁緱澶繎
+  controls.maxDistance = 500; // 鏈�澶ц窛绂伙紝闃叉缂╁緱澶繙
+
+  // 娓叉煋寰幆
+  function animate() {
+    requestAnimationFrame(animate);
+
+    // 鏇存柊鎺у埗鍣�
+    controls.update(); // 鍙湁鍦ㄥ惎鐢ㄩ樆灏肩殑鏃跺�欓渶瑕佽皟鐢ㄦ鍑芥暟
+
+    // 娓叉煋鍦烘櫙
+    renderer.render(scene, camera);
+  }
+
+  animate();
+
+  // 鍝嶅簲绐楀彛澶у皬鍙樺寲;
+  window.addEventListener("resize", onWindowResize, false);
+
+  function onWindowResize() {
+    console.log(window.innerWidth, window.innerHeight);
+
+    camera.aspect = window.innerWidth / window.innerHeight;
+    camera.updateProjectionMatrix();
+    renderer.setSize(window.innerWidth / 2, window.innerHeight / 2);
+  }
+};
+const spanHide = ref();
+const spanHide1 = ref();
+const handleClickOutside = () => {
+  if (spanHide.value && !spanHide.value.contains(event.target)) {
+    contentShow.value = false;
+  }
+  if (spanHide1.value && !spanHide1.value.contains(event.target)) {
+    contentShow1.value = false;
+  }
+};
+const showTorque = () => {
+  isTorque.value = true;
+  nextTick(() => {
+    if (innerRef.value.clientHeight > 150) {
+      scrollbarRef.value.setScrollTop(innerRef.value.clientHeight);
+    }
+  });
+};
+//娣诲姞鎵姏鍊�
+const addTorque = () => {
+  torqueFrom.value.processSte = Torque.value[0].processSte;
+  torqueFrom.value.takeId = Torque.value[0].takeId;
+  torqueFrom.value.groupOp = Torque.value[0].groupOp;
+  if (
+    torqueFrom.value.torqueSize == null ||
+    torqueFrom.value.torqueSize == "" ||
+    torqueFrom.value.torqueSize == 0
+  ) {
+    ElMessage({
+      message: "璇疯緭鍏ュ姏鐭╁��",
+      type: "warning",
+    });
+    return;
+  }
+
+  AddTorque(torqueFrom.value)
+    .then((res) => {
+      console.log("娣诲姞鎴愬姛", res);
+      ElMessage({
+        message: "娣诲姞鎴愬姛",
+        type: "success",
+      });
+      isTorque.value = false;
+      initData();
+    })
+    .catch((error) => {
+      console.error("娣诲姞澶辫触", error);
+    });
+};
 onMounted(() => {
+  document.addEventListener("click", handleClickOutside);
   initData();
+  showModel();
 });
 </script>
 <style lang="scss" scoped>
@@ -625,7 +852,7 @@
     .rect-center {
       display: flex;
       justify-content: space-between;
-      width: 170vh;
+      width: 80%;
       margin: 0 auto;
       padding: 0.8rem 2.15rem;
       box-sizing: border-box;

--
Gitblit v1.9.3