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/utils/index.js                        |    2 
 项目代码/client/package.json                              |    2 
 项目代码/client/src/views/tts/TheCurrentJob/Startjob.vue  |  263 ++++++++++++++++++++++++++++++++++++++++---
 项目代码/client/package-lock.json                         |   20 ++
 项目代码/client/src/api/newapi/Thecurrentjob.js           |    3 
 项目代码/client/src/views/tts/CraftCenter/Craftcenter.vue |   65 ++++++----
 项目代码/client/dist.7z                                   |    0 
 7 files changed, 309 insertions(+), 46 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/dist.7z" "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/dist.7z"
index 7a2aef6..5e6238a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/dist.7z"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/dist.7z"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/package-lock.json" "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/package-lock.json"
index f953880..889b8b7 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/package-lock.json"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/package-lock.json"
@@ -17,6 +17,8 @@
         "element-plus": "^2.9.6",
         "pinia": "^2.3.0",
         "scss": "^0.2.4",
+        "three": "^0.174.0",
+        "three-orbit-controls": "^82.1.0",
         "vue": "^3.5.13",
         "vue-3d-model": "2.0.0-alpha.4",
         "vue-chartjs": "^5.3.2",
@@ -8145,9 +8147,15 @@
       }
     },
     "node_modules/three": {
-      "version": "0.141.0",
-      "resolved": "https://registry.npmmirror.com/three/-/three-0.141.0.tgz",
-      "integrity": "sha512-JaSDAPWuk4RTzG5BYRQm8YZbERUxTfTDVouWgHMisS2to4E5fotMS9F2zPFNOIJyEFTTQDDKPpsgZVThKU3pXA==",
+      "version": "0.174.0",
+      "resolved": "https://registry.npmmirror.com/three/-/three-0.174.0.tgz",
+      "integrity": "sha512-p+WG3W6Ov74alh3geCMkGK9NWuT62ee21cV3jEnun201zodVF4tCE5aZa2U122/mkLRmhJJUQmLLW1BH00uQJQ==",
+      "license": "MIT"
+    },
+    "node_modules/three-orbit-controls": {
+      "version": "82.1.0",
+      "resolved": "https://registry.npmmirror.com/three-orbit-controls/-/three-orbit-controls-82.1.0.tgz",
+      "integrity": "sha512-hIWxGoHqIbeq0S2lA14m9VRzo7SamKKVJ9mKMT/rdh0Qa3nV5Umvhlx4zsHl0Y6jLKVZhjatJfeD/K08Tr/g4A==",
       "license": "MIT"
     },
     "node_modules/through": {
@@ -8824,6 +8832,12 @@
         "vue": ">=3.0.0"
       }
     },
+    "node_modules/vue-3d-model/node_modules/three": {
+      "version": "0.141.0",
+      "resolved": "https://registry.npmmirror.com/three/-/three-0.141.0.tgz",
+      "integrity": "sha512-JaSDAPWuk4RTzG5BYRQm8YZbERUxTfTDVouWgHMisS2to4E5fotMS9F2zPFNOIJyEFTTQDDKPpsgZVThKU3pXA==",
+      "license": "MIT"
+    },
     "node_modules/vue-chartjs": {
       "version": "5.3.2",
       "resolved": "https://registry.npmmirror.com/vue-chartjs/-/vue-chartjs-5.3.2.tgz",
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/package.json" "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/package.json"
index 3e6cff4..f398f33 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/package.json"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/package.json"
@@ -18,6 +18,8 @@
     "element-plus": "^2.9.6",
     "pinia": "^2.3.0",
     "scss": "^0.2.4",
+    "three": "^0.174.0",
+    "three-orbit-controls": "^82.1.0",
     "vue": "^3.5.13",
     "vue-3d-model": "2.0.0-alpha.4",
     "vue-chartjs": "^5.3.2",
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/api/newapi/Thecurrentjob.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/api/newapi/Thecurrentjob.js"
index dc25265..a67e21f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/api/newapi/Thecurrentjob.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/api/newapi/Thecurrentjob.js"
@@ -26,3 +26,6 @@
 
 //鑾峰彇鍔涚煩鍊�
 export const GetTorque = (data) => http.post(`/api/TorqueOp/Checkvalue`, data)
+
+//娣诲姞鎵姏鍊�
+export const AddTorque = (data) => http.post(`/api/TorqueOp/AddData`, data)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/utils/index.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/utils/index.js"
index 540d4eb..83bc025 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/utils/index.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/utils/index.js"
@@ -1,7 +1,7 @@
 import { dayjs } from "element-plus";
 // import XLSX from "xlsx"; //瀵煎叆xlsx
 
-export const baseUrl = "http://192.168.0.80:5000/"
+export const baseUrl = "http://115.159.85.185:9098/"
 // http://115.159.85.185:9091/
 // http://192.168.0.80:5000/
 // 115.159.85.185:9091
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/CraftCenter/Craftcenter.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/CraftCenter/Craftcenter.vue"
index 27e58a9..ad852c4 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/CraftCenter/Craftcenter.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/CraftCenter/Craftcenter.vue"
@@ -446,13 +446,13 @@
               </el-select> </el-form-item
           ></el-col>
           <el-col :span="8"
-            ><el-form-item prop="sort">
+            ><el-form-item prop="setnum">
               <template #label>
                 <span style="font-size: 0.88rem; color: black">鎺掑簭</span>
               </template>
               <el-input
                 size="small"
-                v-model="form.setpNum"
+                v-model.number="form.setnum"
                 placeholder="璇疯緭鍏�"
                 style="height: 2rem"
               /> </el-form-item
@@ -461,9 +461,6 @@
             ><el-form-item prop="tools">
               <template #label>
                 <div style="display: flex; align-items: center">
-                  <span style="display: flex; color: red; margin-right: 0.25rem"
-                    >*</span
-                  >
                   <span style="font-size: 0.88rem; color: black">宸ュ叿</span>
                 </div>
               </template>
@@ -484,6 +481,20 @@
                   :label="item.toolName"
                   :value="item"
                 /> </el-select></el-form-item
+          ></el-col>
+        </el-row>
+        <el-row :gutter="10">
+          <el-col :span="8"
+            ><el-form-item prop="nodal">
+              <template #label>
+                <span style="font-size: 0.88rem; color: black">搴忓彿</span>
+              </template>
+              <el-input
+                size="small"
+                v-model.number="form.nodal"
+                placeholder="璇疯緭鍏�"
+                style="height: 2rem"
+              /> </el-form-item
           ></el-col>
         </el-row>
         <!-- <el-row>
@@ -560,9 +571,6 @@
           <el-form-item prop="checkList">
             <template #label>
               <div style="display: flex; align-items: center">
-                <span style="display: flex; color: red; margin-right: 0.25rem"
-                  >*</span
-                >
                 <span style="font-size: 0.88rem; color: black">閫夋嫨濂楃瓛</span>
               </div>
             </template>
@@ -770,24 +778,24 @@
   craftstype: [
     { required: true, message: "璇烽�夋嫨宸ヨ壓绫诲瀷", trigger: "change" },
   ],
-  nodal: [{ required: true, message: "璇烽�夋嫨鑺傜偣", trigger: "change" }],
   craftsStep: [{ required: true, message: "璇疯緭鍏ュ伐鑹烘楠�", trigger: "blur" }],
   craftContent: [
     { required: true, message: "璇疯緭鍏ュ伐鑹哄唴瀹�", trigger: "blur" },
   ],
-  sleeveNum: [{ required: true, message: "璇疯緭鍏ュ绛掓暟閲�", trigger: "blur" }],
+  nodal: [{ required: true, message: "璇疯緭鍏ュ簭鍙�", trigger: "blur" }],
+  setnum: [{ required: true, message: "璇疯緭鍏ユ帓搴忓彿", trigger: "blur" }],
 });
 
+// isinvolved: "", //鏄惁娑夊強
 //鏂板宸ヨ壓/缂栬緫宸ヨ壓琛ㄥ崟鏁版嵁
 const form = ref({
   craftstype: "", //宸ヨ壓绫诲瀷锛堢粍锛�
-  nodal: 0, //鑺傜偣
+  nodal: null, //鑺傜偣
   craftsStep: "", //宸ヨ壓姝ラ
   craftContent: "", //宸ヨ壓鍐呭
   sleeveNum: "", //濂楃瓛鏁伴噺
   tools: "", //宸ュ叿
-  isinvolved: "", //鏄惁娑夊強
-  setpNum: "",
+  setnum: null,
   torqueOne: 0,
   torqueOneQuantity: 0,
   articleOne: "",
@@ -802,6 +810,7 @@
     : "",
   createDate: formatTime(new Date()),
 });
+
 const props = { multiple: true };
 const userName = ref("");
 
@@ -914,25 +923,33 @@
 const addprocess = async (formEl) => {
   userName.value = JSON.parse(localStorage.getItem("user")).userName;
   let string = "";
-  if (tools.value.length == 0) {
-    ElMessage({
-      message: "璇烽�夋嫨宸ュ叿",
-      type: "warning",
-    });
-    return;
-  }
+  // if (tools.value.length == 0) {
+  //   ElMessage({
+  //     message: "璇烽�夋嫨宸ュ叿",
+  //     type: "warning",
+  //   });
+  //   return;
+  // }
   string = tools.value
     .map((item) => {
       return item.toolName;
     })
     .join(",");
-  if (checkList.value.length == 0) {
+  // if (checkList.value.length == 0) {
+  //   ElMessage({
+  //     message: "璇烽�夋嫨濂楃瓛",
+  //     type: "warning",
+  //   });
+  //   return;
+  // }
+  if (form.value.nodal == 0) {
     ElMessage({
-      message: "璇烽�夋嫨濂楃瓛",
+      message: "搴忓彿鏈�灏忎负1",
       type: "warning",
     });
     return;
   }
+
   form.value.articleOneid = checkList.value[0].id;
   form.value.articleOne = checkList.value[0].num;
   form.value.articleTowid = checkList.value[1].id;
@@ -941,7 +958,7 @@
   form.value.tools = string;
   form.value.craftstype = title.value;
   form.value.torqueOneQuantity = tools.value.length;
-  form.value.id = form.value.craftID ? form.value.craftID : "";
+  form.value.id = form.value.craftID ? form.value.craftID : 0;
   console.log(form.value);
 
   if (!formEl) return;
@@ -997,7 +1014,7 @@
 //鍒嗛〉璇锋眰鍙傛暟
 const pageQuery = ref({
   page: 1, //褰撳墠椤甸潰
-  rows: 10, //姣忛〉鏄剧ず鏉℃暟
+  rows: 100, //姣忛〉鏄剧ず鏉℃暟
   order: "desc", //鎺掑簭鏂瑰紡
   sort: "", //鎺掑簭瀛楁
   wheres: "", //鏉′欢鏌ヨ
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