| | |
| | | <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" |
| | |
| | | >ä»»å¡è¯¦æ
ï¼</span |
| | | > |
| | | <span |
| | | ref="spanHide1" |
| | | @click="showDetail(!contentShow1)" |
| | | style="color: #1ac2f7; font-size: 0.88rem; cursor: pointer" |
| | | >æ¥ç</span |
| | |
| | | > |
| | | <template #default="scope"> |
| | | <span |
| | | ref="spanHide" |
| | | @click="showDetail1(!contentShow)" |
| | | style=" |
| | | color: #1ac2f7; |
| | |
| | | </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" |
| | | >{{ |
| | |
| | | }}</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> |
| | |
| | | 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" |
| | |
| | | :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 |
| | |
| | | </div> |
| | | </template> |
| | | <script setup> |
| | | import { ref, onMounted } from "vue"; |
| | | import { ref, onMounted, nextTick } from "vue"; |
| | | import { |
| | | GetScreenData, |
| | | GetPre, |
| | |
| | | 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([]); |
| | |
| | | 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; |
| | |
| | | }; |
| | | //æ¥çæ°æ® |
| | | const checko = () => { |
| | | console.log(info.value); |
| | | GetPageData({ |
| | | page: 1, |
| | | rows: 10, |
| | |
| | | }, |
| | | ], |
| | | }).then((res) => { |
| | | console.log(res); |
| | | taskData.value = res.rows; |
| | | }); |
| | | }; |
| | |
| | | setnum: "", |
| | | }); |
| | | const initData = () => { |
| | | console.log(obj.value); |
| | | GetScreenData({ |
| | | group: info.value.grouptype, |
| | | takeid: info.value.njtakeid, |
| | |
| | | }); |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | 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); //è¿æ®µä»£ç å建äºä¸ä¸ªç½è²ã强度为 1 çå¹³è¡å
æº |
| | | directionalLight.position.set(300, 300, 300).normalize(); //å¹¶å°å
¶ä½ç½®è®¾ç½®å¨ (300, 300, 300)ãç¶åï¼éè¿ normalize() æ¹æ³ï¼ç¡®ä¿å¹³è¡å
æºçå
线以ä¸ä¸ªæ åçæ¹åç
§å° |
| | | scene.add(directionalLight); |
| | | |
| | | // è®¾ç½®ç¸æºåå§ä½ç½®ï¼x,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> |
| | |
| | | .rect-center { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | width: 170vh; |
| | | width: 80%; |
| | | margin: 0 auto; |
| | | padding: 0.8rem 2.15rem; |
| | | box-sizing: border-box; |