| | |
| | | <template> |
| | | <div class="Startjob"> |
| | | <div class="rect"> |
| | | <div class="rect" style="position: relative"> |
| | | <div class="rect-top"> |
| | | <img src="@/assets/TheCurrentJob/left.png" alt="" /> |
| | | <img |
| | |
| | | src="@/assets/TheCurrentJob/left1.png" |
| | | alt="" |
| | | /> |
| | | <span>å¼å§ä½ä¸ï¼æºæ¢°ï¼</span> |
| | | <span>å¼å§ä½ä¸ï¼{{ title }}ï¼</span> |
| | | <img |
| | | style="margin-right: -1.5rem; margin-left: 4rem" |
| | | src="@/assets/TheCurrentJob/right1.png" |
| | |
| | | <img src="@/assets/TheCurrentJob/right.png" alt="" /> |
| | | </div> |
| | | <div class="rect-center"> |
| | | <div style="display: flex; justify-content: space-between"> |
| | | <div class="rect-item1"> |
| | | <div> |
| | | <img src="@/assets/TheCurrentJob/icon/icon.png" alt="" /> |
| | | <span style="color: rgba(26, 201, 255, 1); font-size: 0.88rem" |
| | | >ä»»å¡ä½ä¸ä¿¡æ¯</span |
| | | <div class="rect-item1"> |
| | | <div style="margin-top: 0.5rem"> |
| | | <img src="@/assets/TheCurrentJob/icon/icon.png" alt="" /> |
| | | <span style="color: rgba(26, 201, 255, 1); font-size: 1.5rem" |
| | | >ä»»å¡ä½ä¸ä¿¡æ¯</span |
| | | > |
| | | </div> |
| | | <div style="height: 100%; width: 100%"> |
| | | <div style="width: 100%; padding-left: 1rem"> |
| | | <div |
| | | style=" |
| | | color: #1ac2f7; |
| | | font-size: 1rem; |
| | | display: flex; |
| | | margin-top: 0.5rem; |
| | | " |
| | | > |
| | | </div> |
| | | <div style="height: 100%; width: 100%"> |
| | | <div style="width: 100%"> |
| | | <span style="width: 6rem; text-align: right; display: block" |
| | | >ä»»å¡åç§°ï¼</span |
| | | ><span>{{ info.takename }}</span> |
| | | </div> |
| | | <div |
| | | style=" |
| | | color: #1ac2f7; |
| | | font-size: 1rem; |
| | | display: flex; |
| | | margin-top: 0.4rem; |
| | | " |
| | | > |
| | | <span style="width: 6rem; text-align: right; display: block" |
| | | >ææ¯åï¼</span |
| | | ><span>{{ info.jishuyuan }}</span> |
| | | </div> |
| | | <div |
| | | style=" |
| | | color: #1ac2f7; |
| | | font-size: 1rem; |
| | | display: flex; |
| | | margin-top: 0.4rem; |
| | | " |
| | | > |
| | | <span style="width: 6rem; text-align: right; display: block" |
| | | >æ£ä¿®å·¥åï¼</span |
| | | ><span>{{ info.gonzhang }}</span> |
| | | </div> |
| | | <div |
| | | style=" |
| | | color: #1ac2f7; |
| | | font-size: 1rem; |
| | | display: flex; |
| | | margin-top: 0.4rem; |
| | | " |
| | | > |
| | | <span style="width: 6rem; text-align: right; display: block" |
| | | >è´¨æ£åï¼</span |
| | | ><span>{{ info.zhijianyuan }}</span> |
| | | </div> |
| | | <div |
| | | style=" |
| | | color: #1ac2f7; |
| | | font-size: 1rem; |
| | | display: flex; |
| | | margin-top: 0.4rem; |
| | | " |
| | | > |
| | | <span style="width: 6rem; text-align: right; display: block" |
| | | >åç©ä½ä¸åï¼</span |
| | | ><span>{{ info.lijuzouyeyuan }}</span> |
| | | </div> |
| | | <div |
| | | style=" |
| | | color: #1ac2f7; |
| | | font-size: 1rem; |
| | | display: flex; |
| | | margin-top: 0.4rem; |
| | | " |
| | | > |
| | | <span style="width: 6rem; text-align: right; display: block" |
| | | >è¾
å©åï¼</span |
| | | ><span>{{ info.fuzyuan }}</span> |
| | | </div> |
| | | <div |
| | | style=" |
| | | position: absolute; |
| | | color: #1ac2f7; |
| | | font-size: 1rem; |
| | | display: flex; |
| | | margin-top: 0.4rem; |
| | | " |
| | | > |
| | | <span style="width: 6rem; text-align: right; display: block" |
| | | >ä»»å¡è¯¦æ
ï¼</span |
| | | > |
| | | <span |
| | | ref="spanHide1" |
| | | @click="showDetail(!contentShow1)" |
| | | style="color: #1ac2f7; font-size: 0.88rem; cursor: pointer" |
| | | >æ¥ç</span |
| | | > |
| | | <div |
| | | v-if="contentShow1" |
| | | style=" |
| | | color: #1ac2f7; |
| | | font-size: 0.81rem; |
| | | display: flex; |
| | | margin-top: 0.4rem; |
| | | position: relative; |
| | | top: 1.5rem; |
| | | left: -3rem; |
| | | width: 49rem; |
| | | " |
| | | > |
| | | <span style="width: 6rem; text-align: right; display: block" |
| | | >ä»»å¡åç§°ï¼</span |
| | | ><span>è½¬åæ¶</span> |
| | | </div> |
| | | <div |
| | | style=" |
| | | color: #1ac2f7; |
| | | font-size: 0.81rem; |
| | | display: flex; |
| | | margin-top: 0.4rem; |
| | | " |
| | | > |
| | | <span style="width: 6rem; text-align: right; display: block" |
| | | >ææ¯åï¼</span |
| | | ><span>å¼ ä¸</span> |
| | | </div> |
| | | <div |
| | | style=" |
| | | color: #1ac2f7; |
| | | font-size: 0.81rem; |
| | | display: flex; |
| | | margin-top: 0.4rem; |
| | | " |
| | | > |
| | | <span style="width: 6rem; text-align: right; display: block" |
| | | >æ£ä¿®å·¥åï¼</span |
| | | ><span>æå</span> |
| | | </div> |
| | | <div |
| | | style=" |
| | | color: #1ac2f7; |
| | | font-size: 0.81rem; |
| | | display: flex; |
| | | margin-top: 0.4rem; |
| | | " |
| | | > |
| | | <span style="width: 6rem; text-align: right; display: block" |
| | | >è´¨æ£åï¼</span |
| | | ><span>ä¸ä¸</span> |
| | | </div> |
| | | <div |
| | | style=" |
| | | color: #1ac2f7; |
| | | font-size: 0.81rem; |
| | | display: flex; |
| | | margin-top: 0.4rem; |
| | | " |
| | | > |
| | | <span style="width: 6rem; text-align: right; display: block" |
| | | >åç©ä½ä¸åï¼</span |
| | | ><span>çäº</span> |
| | | </div> |
| | | <div |
| | | style=" |
| | | color: #1ac2f7; |
| | | font-size: 0.81rem; |
| | | display: flex; |
| | | margin-top: 0.4rem; |
| | | " |
| | | > |
| | | <span style="width: 6rem; text-align: right; display: block" |
| | | >è¾
å©åï¼</span |
| | | ><span>å°å</span> |
| | | </div> |
| | | <div |
| | | style=" |
| | | color: #1ac2f7; |
| | | font-size: 0.81rem; |
| | | display: flex; |
| | | margin-top: 0.4rem; |
| | | " |
| | | > |
| | | <span style="width: 6rem; text-align: right; display: block" |
| | | >ä»»å¡è¯¦æ
ï¼</span |
| | | > |
| | | <span |
| | | style="color: #1ac2f7; font-size: 0.88rem; cursor: pointer" |
| | | >æ¥ç</span |
| | | > |
| | | <!-- <el-popover placement="bottom" :width="600" trigger="click"> |
| | | <template #reference> |
| | | <span |
| | | style=" |
| | | color: #1ac2f7; |
| | | font-size: 0.88rem; |
| | | cursor: pointer; |
| | | " |
| | | >æ¥ç</span |
| | | ></template |
| | | > |
| | | <el-table |
| | | :data="gridData" |
| | | empty-text="ææ æ°æ®" |
| | | :data="taskData" |
| | | width="100%" |
| | | :header-cell-style="{ |
| | | color: '#fff', |
| | |
| | | background: '#1373A8', |
| | | }" |
| | | > |
| | | <el-table-column property="date" label="车å" /> |
| | | <el-table-column property="name" label="车ç»" /> |
| | | <el-table-column property="address" label="è¡é" /> |
| | | <el-table-column property="address" label="车å¢å·ä½ç½®" /> |
| | | <el-table-column property="address" label="è½¬åæ¶ä½ç½®" /> |
| | | <el-table-column property="address" label="æ£ä¿®çç»" /> |
| | | <el-table-column property="trainKind" label="车å" /> |
| | | <el-table-column property="trainNum" label="车ç»" /> |
| | | <el-table-column property="track" label="è¡é" /> |
| | | <el-table-column property="coachNum" label="车å¢å·ä½ç½®" /> |
| | | <el-table-column property="bogie" label="è½¬åæ¶ä½ç½®" /> |
| | | <el-table-column property="processDept" label="æ£ä¿®çç»" /> |
| | | </el-table> |
| | | </el-popover> --> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="rect-item2"> |
| | | <div> |
| | | <span style="color: rgba(26, 200, 254, 1); font-size: 0.75rem" |
| | | >å·¥èºé¡¹ç¹/æ¥éª¤å
±<span style="font-size: 1rem; font-weight: bold" |
| | | >23</span |
| | | > |
| | | </span> |
| | | <span |
| | | style=" |
| | | margin-left: 1rem; |
| | | color: rgba(26, 200, 254, 1); |
| | | font-size: 0.75rem; |
| | | " |
| | | >å½åä½ä¸é¡¹ç¹/æ¥éª¤<span |
| | | style="font-size: 1rem; font-weight: bold" |
| | | >3</span |
| | | > |
| | | </span> |
| | | </div> |
| | | </div> |
| | | <div class="rect-item2"> |
| | | <div> |
| | | <span style="color: rgba(26, 200, 254, 1); font-size: 1.2rem" |
| | | >å·¥èºé¡¹ç¹/æ¥éª¤å
±<span |
| | | style="font-size: 1.5rem; font-weight: bold" |
| | | >{{ sunNUm }}</span |
| | | > |
| | | </span> |
| | | <span |
| | | style=" |
| | | margin-left: 1rem; |
| | | color: rgba(26, 200, 254, 1); |
| | | font-size: 1.2rem; |
| | | " |
| | | >å½åä½ä¸é¡¹ç¹/æ¥éª¤<span |
| | | style="font-size: 1.5rem; font-weight: bold" |
| | | >{{ obj.setpNum }}</span |
| | | > |
| | | </span> |
| | | </div> |
| | | <div style="position: absolute; width: 62rem; height: 2.5rem"> |
| | | <el-table |
| | | empty-text="ææ æ°æ®" |
| | | style="margin-top: 0.88rem" |
| | | :data="gridData" |
| | | width="100%" |
| | |
| | | }" |
| | | > |
| | | <el-table-column |
| | | property="date" |
| | | property="craftsStep" |
| | | label="å·¥èºé¡¹ç¹/æ¥éª¤" |
| | | min-width="30%" |
| | | min-width="13%" |
| | | > |
| | | <template #default="scope"> |
| | | <span |
| | | style="color: #1ac2f7; font-size: 0.88rem" |
| | | ></span></template |
| | | ></el-table-column> |
| | | ref="spanHide" |
| | | @click="showDetail1(!contentShow)" |
| | | style=" |
| | | color: #1ac2f7; |
| | | font-size: 0.88rem; |
| | | cursor: pointer; |
| | | text-decoration: underline; |
| | | " |
| | | >{{ scope.row.craftsStep }} |
| | | </span></template |
| | | > |
| | | </el-table-column> |
| | | |
| | | <el-table-column |
| | | property="name" |
| | | property="craftContent" |
| | | label="å·¥èºå
容" |
| | | min-width="70%" |
| | | /> |
| | | min-width="40%" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tooltip placement="bottom" effect="light"> |
| | | <template #content> |
| | | <span style="display: block; width: 15rem">{{ |
| | | scope.row.craftContent |
| | | }}</span> |
| | | </template> |
| | | <span |
| | | @click="true" |
| | | style=" |
| | | color: #ffffff; |
| | | font-size: 0.88rem; |
| | | display: -webkit-box; /* 设置为WebKitå
æ ¸çå¼¹æ§ç忍¡å */ |
| | | -webkit-box-orient: vertical; /* åç´æå */ |
| | | -webkit-line-clamp: 2; /* éå¶æ¾ç¤ºä¸¤è¡ */ |
| | | overflow: hidden; /* éèè¶
åºèå´çå
容 */ |
| | | text-overflow: ellipsis; /* 使ç¨çç¥å· */ |
| | | " |
| | | >{{ scope.row.craftContent }}</span |
| | | > |
| | | </el-tooltip> |
| | | </template></el-table-column |
| | | > |
| | | <el-table-column property="tools" label="å·¥å
·" min-width="12%"> |
| | | <template #default="scope"> |
| | | <span |
| | | ref="spanHide" |
| | | style=" |
| | | color: #ffffff; |
| | | font-size: 0.88rem; |
| | | display: -webkit-box; /* 设置为WebKitå
æ ¸çå¼¹æ§ç忍¡å */ |
| | | -webkit-box-orient: vertical; /* åç´æå */ |
| | | -webkit-line-clamp: 2; /* éå¶æ¾ç¤ºä¸¤è¡ */ |
| | | overflow: hidden; /* éèè¶
åºèå´çå
容 */ |
| | | text-overflow: ellipsis; /* 使ç¨çç¥å· */ |
| | | " |
| | | >{{ scope.row.tools }} |
| | | </span></template |
| | | ></el-table-column |
| | | > |
| | | <el-table-column |
| | | property="craftsStep" |
| | | label="ç©æ" |
| | | min-width="15%" |
| | | > |
| | | <template #default="scope"> |
| | | <span |
| | | style=" |
| | | color: #ffffff; |
| | | font-size: 0.88rem; |
| | | display: -webkit-box; /* 设置为WebKitå
æ ¸çå¼¹æ§ç忍¡å */ |
| | | -webkit-box-orient: vertical; /* åç´æå */ |
| | | -webkit-line-clamp: 2; /* éå¶æ¾ç¤ºä¸¤è¡ */ |
| | | overflow: hidden; /* éèè¶
åºèå´çå
容 */ |
| | | text-overflow: ellipsis; /* 使ç¨çç¥å· */ |
| | | " |
| | | >{{ scope.row.material }}</span |
| | | ></template |
| | | ></el-table-column |
| | | > |
| | | </el-table> |
| | | <div class="consten" v-show="contentShow"> |
| | | <el-table |
| | | empty-text="ææ æ°æ®" |
| | | :data="gridData" |
| | | width="100%" |
| | | :header-cell-style="{ |
| | | height: '1.61rem', |
| | | color: '#fff', |
| | | background: '#0A5B91', |
| | | fontSize: '0.88rem', |
| | | }" |
| | | :cell-style="{ |
| | | color: '#fff', |
| | | background: '#147BAF', |
| | | }" |
| | | > |
| | | <el-table-column |
| | | property="craftsStep" |
| | | label="å·¥èºå
容" |
| | | min-width="30%" |
| | | > |
| | | <template #default="scope"> |
| | | <span @click="true" style="color: #fff; font-size: 0.88rem" |
| | | >{{ scope.row.craftContent }} |
| | | </span></template |
| | | ></el-table-column |
| | | > |
| | | <el-table-column |
| | | property="craftsStep" |
| | | label="å·¥å
·" |
| | | min-width="10%" |
| | | > |
| | | <template #default="scope"> |
| | | <span style="color: #ffffff">{{ |
| | | scope.row.tools |
| | | }}</span></template |
| | | ></el-table-column |
| | | > |
| | | <el-table-column |
| | | property="craftsStep" |
| | | label="ç©æ" |
| | | min-width="10%" |
| | | > |
| | | <template #default="scope"> |
| | | <span style="color: #ffffff">{{ |
| | | scope.row.material |
| | | }}</span></template |
| | | ></el-table-column |
| | | > |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="rect-item3"> |
| | | <div> |
| | | <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 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: 1rem; |
| | | box-sizing: border-box; |
| | | " |
| | | > |
| | | <span |
| | | style="color: #ffffff; font-size: 1rem; margin: 0.4rem 0" |
| | | v-for="(item, index) in Torque" |
| | | :key="item.id" |
| | | >{{ |
| | | index + 1 + "ã" + item.torqueSize + " " + "N*m" |
| | | }}</span |
| | | > |
| | | </div> |
| | | <el-input |
| | | type="number" |
| | | v-if="isTorque" |
| | | v-model="torqueFrom.torqueSize" |
| | | style="font-size: 0.75rem; height: 2rem" |
| | | placeholder="请è¾å
¥æåå¼" |
| | | ><template #suffix> |
| | | <span style="font-size: 0.88rem; color: black">N*m</span> |
| | | </template> |
| | | </el-input> |
| | | <!-- @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> |
| | | <div class="rect-content"> |
| | | <div |
| | | ref="screenDom" |
| | | style=" |
| | | margin: 0 auto; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | position: absolute; |
| | | top: 38%; |
| | | left: 50%; |
| | | transform: translateX(-50%); |
| | | z-index: 999; |
| | | " |
| | | > |
| | | <div |
| | | style=" |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | width: 21.31rem; |
| | | height: 26.88rem; |
| | | background-color: rgba(25, 189, 241, 0.1); |
| | | color: rgba(16, 16, 16, 1); |
| | | font-size: 0.75rem; |
| | | border: 0.06rem solid rgba(26, 200, 254, 1); |
| | | " |
| | | ref="container" |
| | | class="my-three" |
| | | style="width: 100%; height: 100%" |
| | | ></div> |
| | | <!-- <model-gltf |
| | | :width="400" |
| | | :height="400" |
| | | :backgroundAlpha="0" |
| | | :backgroundColor="'#000000'" |
| | | src="ThreeModel/test.gltf" |
| | | :controlsOptions="{ |
| | | enableZoom, |
| | | }" |
| | | /> --> |
| | | </div> |
| | | <div style="position: absolute; bottom: 5%; left: 2%"> |
| | | <span style="color: rgba(26, 201, 255, 1); font-size: 1.5em" |
| | | >X:{{ xPos }} Y:{{ yPos }} Z:{{ zPos }}</span |
| | | > |
| | | <span style="color: rgba(26, 194, 247, 1); font-size: 1.25rem" |
| | | >çç¸å¾æ¾ç¤º</span |
| | | > |
| | | </div> |
| | | </div> |
| | | <div |
| | | style=" |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | margin-top: 4.25rem; |
| | | position: absolute; |
| | | bottom: 5%; |
| | | left: 50%; |
| | | transform: translateX(-50%); |
| | | " |
| | | > |
| | | <el-button |
| | | :disabled="obj.setpNum == 1" |
| | | @click="Previous(false)" |
| | | type="primary" |
| | | style=" |
| | | width: 5rem; |
| | | height: 1.88rem; |
| | | background-color: rgba(164, 173, 179, 1); |
| | | color: rgba(255, 255, 255, 1); |
| | | font-size: 0.88rem; |
| | | " |
| | | :style="{ |
| | | width: '5rem', |
| | | height: '1.88rem', |
| | | background: |
| | | obj.setpNum == 1 |
| | | ? 'rgba(164, 173, 179, 1)' |
| | | : 'rgba(26, 194, 247, 1)', |
| | | color: 'rgba(255, 255, 255, 1)', |
| | | fontSize: '0.88rem;', |
| | | }" |
| | | >ä¸ä¸æ¥</el-button |
| | | > |
| | | <el-button |
| | | :disabled="obj.setpNum == sunNUm" |
| | | @click="DialogVisible = true" |
| | | type="primary" |
| | | style=" |
| | | width: 5rem; |
| | | height: 1.88rem; |
| | | background-color: rgba(26, 194, 247, 1); |
| | | color: rgba(255, 255, 255, 1); |
| | | font-size: 0.88rem; |
| | | " |
| | | :style="{ |
| | | width: '5rem', |
| | | height: '1.88rem', |
| | | background: |
| | | obj.setpNum != sunNUm |
| | | ? 'rgba(26, 194, 247, 1)' |
| | | : 'rgba(164, 173, 179, 1)', |
| | | color: ' rgba(255, 255, 255, 1)', |
| | | fontSize: '0.88rem', |
| | | }" |
| | | >ä¸ä¸æ¥</el-button |
| | | > |
| | | <el-button |
| | | :disabled="obj.setpNum != sunNUm" |
| | | @click="Completee" |
| | | type="primary" |
| | | style=" |
| | | height: 1.88rem; |
| | | width: 5rem; |
| | | background-color: rgba(164, 173, 179, 1); |
| | | color: rgba(255, 255, 255, 1); |
| | | font-size: 0.88rem; |
| | | " |
| | | :style="{ |
| | | height: '1.88rem', |
| | | width: '5rem', |
| | | background: |
| | | obj.setpNum == sunNUm |
| | | ? 'rgba(26, 194, 247, 1)' |
| | | : 'rgba(164, 173, 179, 1)', |
| | | color: 'rgba(255, 255, 255, 1)', |
| | | fontSize: '0.88rem', |
| | | }" |
| | | >宿ä½ä¸</el-button |
| | | > |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- 强å¶è·³è½¬ç¡®è®¤æ¡ --> |
| | | <el-dialog v-model="centerDialogVisible" title="确认" width="300" center> |
| | | <span sty> å½å任塿ªå®æï¼æ¯å¦å¼ºå¶è·³è½¬å°ä¸ä¸æ¥ï¼ </span> |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button style="width: 5rem" @click="centerDialogVisible = false" |
| | | >åæ¶</el-button |
| | | > |
| | | <el-button style="width: 5rem" type="primary" @click="Next(true)"> |
| | | 确认 |
| | | </el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | |
| | | <!-- æ¯å¦åæ ¼æå·²å®æ --> |
| | | <el-dialog v-model="DialogVisible" title="确认" width="300" center> |
| | | <span style="display: block; text-align: center; font-size: 1.5rem"> |
| | | 请确认å½åæ¥éª¤å·²å®æä¸åæ ¼ |
| | | </span> |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button style="width: 5rem" @click="DialogVisible = false" |
| | | >åæ¶</el-button |
| | | > |
| | | <el-button style="width: 5rem" type="primary" @click="Next(false)"> |
| | | 确认 |
| | | </el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | <script setup> |
| | | import { color } from "echarts"; |
| | | import { ref } from "vue"; |
| | | import { ref, onMounted, nextTick } from "vue"; |
| | | import { |
| | | GetScreenData, |
| | | GetPre, |
| | | GetNext, |
| | | 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 |
| | | import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader"; |
| | | |
| | | const container = ref(null); |
| | | |
| | | const router = useRouter(); |
| | | const gridData = ref([]); |
| | | const contentShow = ref(false); |
| | | const contentShow1 = ref(false); |
| | | const DialogVisible = ref(false); |
| | | const info = ref({}); |
| | | info.value = history.state?.info ? JSON.parse(history.state?.info) : {}; |
| | | const title = ref(""); |
| | | title.value = history.state?.title ? history.state?.title : "æºæ¢°"; |
| | | const enableZoom = ref(false); |
| | | const obj = ref({}); |
| | | const sunNUm = ref(0); |
| | | const Torque = ref(""); |
| | | const showDetail1 = (va1) => { |
| | | contentShow1.value = false; |
| | | contentShow.value = true; |
| | | }; |
| | | const showDetail = (va1) => { |
| | | contentShow1.value = va1; |
| | | contentShow.value = false; |
| | | checko(); |
| | | }; |
| | | const taskData = ref([]); |
| | | const centerDialogVisible = ref(false); |
| | | const from = ref({ |
| | | group: "", |
| | | 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 isJob = ref([]); //å·²ç»å®æçæ¥éª¤ |
| | | |
| | | //ä¸ä¸æ¥ |
| | | const Previous = (val) => { |
| | | //ä¸ä¸ä¸ªçå¼ |
| | | from.value.group = info.value.grouptype; |
| | | from.value.takeid = info.value.njtakeid; |
| | | from.value.setnum = obj.value.setpNum; |
| | | flag.value = val; |
| | | GetPre(from.value, flag.value).then((res) => { |
| | | gridData.value = [res.data.nex]; |
| | | obj.value = res.data.nex; |
| | | xPos.value = |
| | | gridData.value[0].pointAxisXYZ != null && |
| | | gridData.value[0].pointAxisXYZ != 0 |
| | | ? gridData.value[0].pointAxisXYZ.split(",")[0] |
| | | : -585; |
| | | yPos.value = |
| | | gridData.value[0].pointAxisXYZ != null && |
| | | gridData.value[0].pointAxisXYZ != 0 |
| | | ? gridData.value[0].pointAxisXYZ.split(",")[1] |
| | | : 692; |
| | | zPos.value = |
| | | gridData.value[0].pointAxisXYZ != null && |
| | | gridData.value[0].pointAxisXYZ != 0 |
| | | ? gridData.value[0].pointAxisXYZ.split(",")[2] |
| | | : 692; |
| | | isJob.value = nodeList.slice(0, gridData.value[0].setpNum - 1); //å·²ç»å®æçæ¥éª¤ |
| | | cameraAnimate( |
| | | [xPos.value, yPos.value, zPos.value], |
| | | gridData.value[0].moduleName |
| | | ); |
| | | queryData.value.setnum = obj.value.setpNum; |
| | | GetTorque(queryData.value).then((res) => { |
| | | Torque.value = res.data; |
| | | }); |
| | | }); |
| | | }; |
| | | //ä¸ä¸æ¥ |
| | | const Next = (val) => { |
| | | from.value.group = info.value.grouptype; |
| | | from.value.takeid = info.value.njtakeid; |
| | | from.value.setnum = obj.value.setpNum; |
| | | flag.value = val; |
| | | GetNext(from.value, flag.value).then((res) => { |
| | | if (res.message == "没æå®æå½åæ¥éª¤") { |
| | | gridData.value = res.data.nowdate; |
| | | obj.value = res.data.nowdate[0]; |
| | | if (res.data.nowdate[0].setpNum == obj.value.setpNum) { |
| | | centerDialogVisible.value = true; |
| | | DialogVisible.value = false; |
| | | return; |
| | | } |
| | | return; |
| | | } |
| | | centerDialogVisible.value = false; |
| | | DialogVisible.value = false; |
| | | gridData.value = [res.data.nex]; |
| | | xPos.value = |
| | | gridData.value[0].pointAxisXYZ != null && |
| | | gridData.value[0].pointAxisXYZ != 0 |
| | | ? gridData.value[0].pointAxisXYZ.split(",")[0] |
| | | : -585; |
| | | yPos.value = |
| | | gridData.value[0].pointAxisXYZ != null && |
| | | gridData.value[0].pointAxisXYZ != 0 |
| | | ? gridData.value[0].pointAxisXYZ.split(",")[1] |
| | | : 692; |
| | | zPos.value = |
| | | gridData.value[0].pointAxisXYZ != null && |
| | | gridData.value[0].pointAxisXYZ != 0 |
| | | ? gridData.value[0].pointAxisXYZ.split(",")[2] |
| | | : 692; |
| | | isJob.value = res.data.finish.map((item) => { |
| | | return item.moduleName; |
| | | }); |
| | | cameraAnimate( |
| | | [xPos.value, yPos.value, zPos.value], |
| | | gridData.value[0].moduleName |
| | | ); |
| | | obj.value = res.data.nex; |
| | | queryData.value.setnum = obj.value.setpNum; |
| | | GetTorque(queryData.value).then((res) => { |
| | | Torque.value = res.data; |
| | | }); |
| | | }); |
| | | }; |
| | | //宿 |
| | | const Completee = () => { |
| | | from.value.gruops = info.value.grouptype; |
| | | from.value.id = info.value.njtakeid; |
| | | from.value.creater = info.value.creater; |
| | | |
| | | ChangeStatus(from.value).then((res) => { |
| | | ElMessage({ |
| | | message: "æä½å®æ", |
| | | type: "success", |
| | | }); |
| | | router.push("/Thecurrentjob"); |
| | | }); |
| | | }; |
| | | //æ¥çæ°æ® |
| | | const checko = () => { |
| | | GetPageData({ |
| | | page: 1, |
| | | rows: 10, |
| | | total: 100, |
| | | tableName: "", |
| | | sort: "", |
| | | order: "", |
| | | wheres: "", |
| | | export: true, |
| | | value: "", |
| | | filter: [ |
| | | { |
| | | name: "njtaskid", |
| | | value: info.value.njtakeid, |
| | | displayType: "String", |
| | | }, |
| | | ], |
| | | }).then((res) => { |
| | | taskData.value = res.rows; |
| | | }); |
| | | }; |
| | | const queryData = ref({ |
| | | grop: info.value.grouptype, |
| | | takeid: info.value.njtakeid, |
| | | setnum: "", |
| | | }); |
| | | const initData = async () => { |
| | | await GetScreenData({ |
| | | group: info.value.grouptype, |
| | | takeid: info.value.njtakeid, |
| | | }).then((res) => { |
| | | // if (res.message == "è¿åå·¥èºè¡¨ä¸çç¬¬ä¸æ¡") { |
| | | // gridData.value = res.data.proNoe; |
| | | // obj.value = res.data.proNoe[0]; |
| | | // sunNUm.value = res.data.maxproce; |
| | | // queryData.value.setnum = obj.value.setpNum; |
| | | // xPos.value = |
| | | // gridData.value[0].pointAxisXYZ != null && |
| | | // gridData.value[0].pointAxisXYZ != 0 |
| | | // ? gridData.value[0].pointAxisXYZ.split(",")[0] |
| | | // : -585; |
| | | // yPos.value = |
| | | // gridData.value[0].pointAxisXYZ != null && |
| | | // gridData.value[0].pointAxisXYZ != 0 |
| | | // ? gridData.value[0].pointAxisXYZ.split(",")[1] |
| | | // : 692; |
| | | // zPos.value = |
| | | // gridData.value[0].pointAxisXYZ != null && |
| | | // gridData.value[0].pointAxisXYZ != 0 |
| | | // ? gridData.value[0].pointAxisXYZ.split(",")[2] |
| | | // : 692; |
| | | // cameraAnimate( |
| | | // [xPos.value, yPos.value, zPos.value], |
| | | // nodeList[gridData.value[0].setpNum] |
| | | // ); |
| | | // GetTorque(queryData.value).then((res) => { |
| | | // Torque.value = res.data; |
| | | // }); |
| | | // return; |
| | | // } |
| | | gridData.value = [res.data.proNow]; |
| | | sunNUm.value = res.data.maxproce; |
| | | obj.value = res.data.proNow; |
| | | queryData.value.setnum = obj.value.setpNum; |
| | | xPos.value = |
| | | gridData.value[0].pointAxisXYZ != null && |
| | | gridData.value[0].pointAxisXYZ != 0 |
| | | ? gridData.value[0].pointAxisXYZ.split(",")[0] |
| | | : -585; |
| | | yPos.value = |
| | | gridData.value[0].pointAxisXYZ != null && |
| | | gridData.value[0].pointAxisXYZ != 0 |
| | | ? gridData.value[0].pointAxisXYZ.split(",")[1] |
| | | : 692; |
| | | zPos.value = |
| | | gridData.value[0].pointAxisXYZ != null && |
| | | gridData.value[0].pointAxisXYZ != 0 |
| | | ? gridData.value[0].pointAxisXYZ.split(",")[2] |
| | | : 692; |
| | | isJob.value = res.data.finish; |
| | | cameraAnimate( |
| | | [xPos.value, yPos.value, zPos.value], |
| | | gridData.value[0].moduleName |
| | | ); |
| | | GetTorque(queryData.value).then((res) => { |
| | | Torque.value = res.data; |
| | | }); |
| | | }); |
| | | }; |
| | | |
| | | const CAMERA_POS = [100, 100, 150]; |
| | | const BASE_COLOR = [0.2, 0.4, 0.6]; |
| | | const RED_COLOR = [3.0, 0.2, 0.4]; |
| | | const GREEN_COLOR = [0.0, 1.0, 0.0]; |
| | | |
| | | const xPos = ref(""); |
| | | const yPos = ref(""); |
| | | const zPos = ref(""); |
| | | const scene = new THREE.Scene(); |
| | | const camera = new THREE.PerspectiveCamera( |
| | | 75, |
| | | window.innerWidth / window.innerHeight, |
| | | 0.1, |
| | | 3000 |
| | | ); |
| | | const renderer = new THREE.WebGLRenderer({ |
| | | antialias: true, |
| | | alpha: true, |
| | | precision: "highp", |
| | | }); |
| | | |
| | | const painting = (part) => { |
| | | let newArr = []; |
| | | // let newArr = flatten(isJob.value); |
| | | scene.traverse(function (child) { |
| | | // æ£æ¥å¯¹è±¡æ¯å¦å
·ææè´¨å±æ§ |
| | | if (child.isMesh) { |
| | | let materials = child.material; |
| | | // 妿æè´¨æ¯å个对象è䏿¯æ°ç»ï¼åå°å
¶æ¾å
¥æ°ç»ä¸ä»¥ä¾¿ç»ä¸å¤ç |
| | | if (!Array.isArray(materials)) { |
| | | materials = [materials]; |
| | | } |
| | | let isString = []; // 夿æ¯å¦æ¯å符串 |
| | | // éåæè´¨æ°ç»å¹¶è®¾ç½®é¢è² |
| | | //å·²ç»å®æçèç¹ |
| | | isJob.value.forEach((item) => { |
| | | if ( |
| | | item == |
| | | "æèè¡åæ¯å¨èºæ 1,æèè¡åæ¯å¨èºæ 2,æèè¡åæ¯å¨èºæ 3,æèè¡åæ¯å¨èºæ 4" && |
| | | item != part |
| | | ) { |
| | | isString = item.split(","); |
| | | materials.forEach(function (material) { |
| | | if (isString.includes(material.name)) { |
| | | material.color.setRGB(...GREEN_COLOR); |
| | | } |
| | | material.needsUpdate = true; // å¼ºå¶æ´æ°æè´¨ |
| | | }); |
| | | } |
| | | materials.forEach(function (material) { |
| | | if (material.name === item) { |
| | | material.color.setRGB(...GREEN_COLOR); |
| | | } |
| | | material.needsUpdate = true; // å¼ºå¶æ´æ°æè´¨ |
| | | }); |
| | | }); |
| | | if ( |
| | | part == |
| | | "æèè¡åæ¯å¨èºæ 1,æèè¡åæ¯å¨èºæ 2,æèè¡åæ¯å¨èºæ 3,æèè¡åæ¯å¨èºæ 4" |
| | | ) { |
| | | materials.forEach(function (material) { |
| | | if (part.split(",").includes(material.name)) { |
| | | material.color.setRGB(...RED_COLOR); |
| | | } |
| | | material.needsUpdate = true; // å¼ºå¶æ´æ°æè´¨ |
| | | }); |
| | | } else { |
| | | materials.forEach(function (material) { |
| | | if (material.name == part) { |
| | | material.color.setRGB(...RED_COLOR); |
| | | } |
| | | material.needsUpdate = true; // å¼ºå¶æ´æ°æè´¨ |
| | | }); |
| | | } |
| | | |
| | | // if ( |
| | | // typeof part == |
| | | // "æèè¡åæ¯å¨èºæ 1,æèè¡åæ¯å¨èºæ 2,æèè¡åæ¯å¨èºæ 3,æèè¡åæ¯å¨èºæ 4" |
| | | // ) { |
| | | // newArr = part.split(","); |
| | | // materials.forEach(function (material) { |
| | | // if (newArr.includes(material.name)) { |
| | | // material.color.setRGB(...GREEN_COLOR); |
| | | // } |
| | | // if (part.includes(material.name)) { |
| | | // material.color.setRGB(...RED_COLOR); |
| | | // } else { |
| | | // material.color.setRGB(...BASE_COLOR); |
| | | // } |
| | | // material.needsUpdate = true; // å¼ºå¶æ´æ°æè´¨ |
| | | // }); |
| | | // } else { |
| | | // materials.forEach(function (material) { |
| | | // if (newArr.includes(material.name)) { |
| | | // material.color.setRGB(...GREEN_COLOR); |
| | | // } else if (material.name === part) { |
| | | // material.color.setRGB(...RED_COLOR); |
| | | // } else { |
| | | // material.color.setRGB(...BASE_COLOR); |
| | | // } |
| | | // // if (newArr.includes(material.name)) { |
| | | // // material.color.setRGB(...GREEN_COLOR); |
| | | // // } |
| | | // material.needsUpdate = true; // å¼ºå¶æ´æ°æè´¨ |
| | | // }); |
| | | // } |
| | | } |
| | | }); |
| | | }; |
| | | const cameraAnimate = ( |
| | | targetPosition = CAMERA_POS, |
| | | part = null, |
| | | duration = 500 |
| | | ) => { |
| | | let startTime = null; |
| | | const startPosition = { |
| | | x: camera.position.x, |
| | | y: camera.position.y, |
| | | z: camera.position.z, |
| | | }; |
| | | const distance = { |
| | | x: targetPosition[0] - startPosition.x, |
| | | y: targetPosition[1] - startPosition.y, |
| | | z: targetPosition[2] - startPosition.z, |
| | | }; |
| | | |
| | | function animate(time) { |
| | | if (!startTime) startTime = time; |
| | | const elapsed = time - startTime; |
| | | const progress = Math.min(elapsed / duration, 1); |
| | | |
| | | // 使ç¨çº¿æ§æå¼è®¡ç®æ°çä½ç½® |
| | | camera.position.x = startPosition.x + distance.x * progress; |
| | | camera.position.y = startPosition.y + distance.y * progress; |
| | | camera.position.z = startPosition.z + distance.z * progress; |
| | | xPos.value = Math.floor(camera.position.x); |
| | | yPos.value = Math.floor(camera.position.y); |
| | | zPos.value = Math.floor(camera.position.z); |
| | | if (progress < 1) { |
| | | requestAnimationFrame(animate); |
| | | } |
| | | } |
| | | requestAnimationFrame(animate); |
| | | painting(part); |
| | | renderer.render(scene, camera); // å¼ºå¶æ¸²æä¸æ¬¡ |
| | | }; |
| | | const flatten = (arr) => { |
| | | return arr.reduce( |
| | | (acc, val) => |
| | | Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), |
| | | [] |
| | | ); |
| | | }; |
| | | // window.addEventListener("resize", () => { |
| | | // // console.log("åå§ååºæ¯", window.innerWidth, window.innerHeight); |
| | | // // camera.aspect = window.innerWidth / window.innerHeight; |
| | | // // camera.updateProjectionMatrix(); |
| | | // // renderer.setSize(window.innerWidth, window.innerHeight); |
| | | // }); |
| | | const nodeList = [ |
| | | "è½¬åæ¶", |
| | | "æèè¡åæ¯å¨èºæ 1,æèè¡åæ¯å¨èºæ 2,æèè¡åæ¯å¨èºæ 3,æèè¡åæ¯å¨èºæ 4", |
| | | "æèè¡åæ¯å¨èºæ 1,æèè¡åæ¯å¨èºæ 2,æèè¡åæ¯å¨èºæ 3,æèè¡åæ¯å¨èºæ 4", |
| | | "æèè¡åæ¯å¨èºæ 2", |
| | | "æèè¡åæ¯å¨èºæ 3", |
| | | "æèè¡åæ¯å¨èºæ 4", |
| | | "æèè¡åæ¯å¨èºæ 1,æèè¡åæ¯å¨èºæ 2,æèè¡åæ¯å¨èºæ 3,æèè¡åæ¯å¨èºæ 4", |
| | | "æèè¡åæ¯å¨èºæ 2", |
| | | "æèè¡åæ¯å¨èºæ 3", |
| | | "æèè¡åæ¯å¨èºæ 4", |
| | | "é«åº¦è°æ´æ", |
| | | "é«åº¦è°æ´æ", |
| | | "é«åº¦è°æ´æ", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "æèè¡åæ¯å¨èºæ 1,æèè¡åæ¯å¨èºæ 2,æèè¡åæ¯å¨èºæ 3,æèè¡åæ¯å¨èºæ 4", |
| | | "æèè¡åæ¯å¨èºæ 2", |
| | | "æèè¡åæ¯å¨èºæ 3", |
| | | "æèè¡åæ¯å¨èºæ 4", |
| | | "æèè¡åæ¯å¨èºæ 1,æèè¡åæ¯å¨èºæ 2,æèè¡åæ¯å¨èºæ 3,æèè¡åæ¯å¨èºæ 4", |
| | | "æèè¡åæ¯å¨èºæ 1,æèè¡åæ¯å¨èºæ 2,æèè¡åæ¯å¨èºæ 3,æèè¡åæ¯å¨èºæ 4", |
| | | "é«åº¦è°æ´æ", |
| | | "é«åº¦è°æ´æ", |
| | | "é«åº¦è°æ´æ", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | "è½¬åæ¶", |
| | | ]; |
| | | |
| | | 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 = queryData.value.setnum; |
| | | torqueFrom.value.takeId = queryData.value.takeid; |
| | | torqueFrom.value.groupOp = queryData.value.grop; |
| | | if ( |
| | | torqueFrom.value.torqueSize == null || |
| | | torqueFrom.value.torqueSize == "" || |
| | | torqueFrom.value.torqueSize == 0 |
| | | ) { |
| | | ElMessage({ |
| | | message: "请è¾å
¥åç©å¼", |
| | | type: "warning", |
| | | }); |
| | | return; |
| | | } |
| | | |
| | | AddTorque(torqueFrom.value) |
| | | .then((res) => { |
| | | if (res.code == 400) { |
| | | ElMessage({ |
| | | message: res.message, |
| | | type: "warning", |
| | | }); |
| | | return; |
| | | } |
| | | ElMessage({ |
| | | message: "æ·»å æå", |
| | | type: "success", |
| | | }); |
| | | isTorque.value = false; |
| | | initData(); |
| | | }) |
| | | .catch((error) => { |
| | | console.error("æ·»å 失败", error); |
| | | }); |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | // åå§ååºæ¯ |
| | | renderer.setSize(window.innerWidth / 1.01, window.innerHeight / 2.1); |
| | | renderer.setClearColor(0xeeeeee); // è®¾ç½®èæ¯è² |
| | | // å¯ç¨ç©çæ¸²ææ¨¡å¼ |
| | | // renderer.physicallyCorrectLights = true; |
| | | // renderer.toneMapping = THREE.ACESFilmicToneMapping; |
| | | const mainTag = document.querySelector(".my-three"); |
| | | mainTag.appendChild(renderer.domElement); |
| | | |
| | | // æ·»å äº¤äºæ§å¶å¨ï¼é¼ æ ææ½ç¼©æ¾ï¼ |
| | | const controls = new OrbitControls(camera, renderer.domElement); |
| | | controls.enablePan = false; //ç¦æ¢å³é®ææ½ |
| | | //ç¸æºä½ç½®ä¸è§å¯ç®æ ç¹æå°å¼ |
| | | controls.minDistance = 650; |
| | | //ç¸æºä½ç½®ä¸è§å¯ç®æ ç¹æå¤§å¼ |
| | | controls.maxDistance = 900; |
| | | |
| | | camera.position.set(...CAMERA_POS); |
| | | controls.update(); |
| | | |
| | | // æ·»å å
æºï¼éè¦ï¼å¦å模åå¯è½æ¾ç¤ºä¸ºå
¨é»ï¼ |
| | | const light = new THREE.DirectionalLight(0xffffff, 3); |
| | | light.position.set(5, 5, 5); |
| | | scene.add(light); |
| | | scene.add(new THREE.AmbientLight(0x404040)); |
| | | renderer.setClearAlpha(0); |
| | | renderer.setPixelRatio(window.devicePixelRatio); |
| | | scene.background = null; |
| | | let dracoLoader = new DRACOLoader(); |
| | | dracoLoader.setDecoderPath("ThreeModel/draco/"); |
| | | dracoLoader.setDecoderConfig({ type: "js" }); |
| | | dracoLoader.preload(); |
| | | // å è½½GLTF模å |
| | | const loader = new GLTFLoader(); |
| | | loader.setDRACOLoader(dracoLoader); |
| | | loader.load( |
| | | "ThreeModel/modelDraco.glb", // æ¿æ¢ä¸ºä½ ç.gltfæä»¶è·¯å¾ |
| | | (gltf) => { |
| | | const model = gltf.scene; |
| | | model.scale.set(80, 80, 80); |
| | | scene.add(model); |
| | | // èªå¨å±
䏿¨¡åï¼å¯éï¼ |
| | | const box = new THREE.Box3().setFromObject(model); |
| | | const center = box.getCenter(new THREE.Vector3()); |
| | | model.position.sub(center); |
| | | }, |
| | | (xhr) => { |
| | | // å è½½è¿åº¦åè° |
| | | // console.log(`${(xhr.loaded / xhr.total * 100).toFixed(1)}% loaded`); |
| | | }, |
| | | (error) => { |
| | | console.error("å 载失败:", error); |
| | | } |
| | | ); |
| | | // å¨ç»å¾ªç¯ |
| | | const animate = () => { |
| | | requestAnimationFrame(animate); |
| | | controls.update(); // å¯ç¨æ§å¶å¨æ¶éè¦ |
| | | renderer.render(scene, camera); |
| | | }; |
| | | initData(); |
| | | |
| | | animate(); |
| | | mainTag.addEventListener("wheel", () => { |
| | | xPos.value = Math.floor(camera.position.x); |
| | | yPos.value = Math.floor(camera.position.y); |
| | | zPos.value = Math.floor(camera.position.z); |
| | | }); |
| | | mainTag.addEventListener("mousemove", () => { |
| | | xPos.value = Math.floor(camera.position.x); |
| | | yPos.value = Math.floor(camera.position.y); |
| | | zPos.value = Math.floor(camera.position.z); |
| | | }); |
| | | // }; |
| | | document.addEventListener("click", handleClickOutside); |
| | | |
| | | // showModel(); |
| | | }); |
| | | </script> |
| | | <style lang="scss" scoped> |
| | | * { |
| | | padding: 0; |
| | | margin: 0; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .Startjob { |
| | | width: 100%; |
| | | height: 100%; |
| | |
| | | padding: 0.2rem; |
| | | box-sizing: border-box; |
| | | background-color: rgba(0, 0, 0, 0.3); |
| | | overflow: hidden; |
| | | |
| | | .rect { |
| | | display: flex; |
| | | flex-direction: column; |
| | |
| | | height: 100%; |
| | | border: 0.1rem solid #02cde6; |
| | | box-shadow: 0rem 0rem 0.3rem #02cde6; |
| | | |
| | | .rect-top { |
| | | display: flex; |
| | | justify-content: center; |
| | |
| | | height: 3rem; |
| | | background: #051d3f; |
| | | text-align: center; |
| | | |
| | | img { |
| | | width: 3.75rem; |
| | | height: 2.81rem; |
| | | } |
| | | |
| | | span { |
| | | color: rgba(26, 194, 247, 1); |
| | | font-size: 1.25rem; |
| | | } |
| | | } |
| | | |
| | | .rect-center { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | width: 100%; |
| | | width: 80%; |
| | | margin: 0 auto; |
| | | padding: 0.8rem 2.15rem; |
| | | box-sizing: border-box; |
| | | |
| | | .rect-item1 { |
| | | display: flex; |
| | | flex-direction: column; |
| | | width: 11.31rem; |
| | | height: 12.38rem; |
| | | width: 16rem; |
| | | height: 15.38rem; |
| | | background-image: url("../../../assets/TheCurrentJob/bg.png"); |
| | | background-repeat: no-repeat; |
| | | background-size: 100% 100%; |
| | | padding: 0.28rem 0.28rem; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .rect-item2 { |
| | | width: 49.88rem; |
| | | height: 12.38rem; |
| | | width: 65rem; |
| | | height: 15.38rem; |
| | | border: 0.1rem solid #02cde6; |
| | | padding: 0.69rem 1.44rem; |
| | | margin-left: 6rem; |
| | | position: relative; |
| | | |
| | | .el-table :deep(.el-table__header th) { |
| | | border: solid 1px #1ac0f6; |
| | | color: white; |
| | | } |
| | | |
| | | .consten { |
| | | width: 100%; |
| | | position: absolute; |
| | | top: 10rem; |
| | | z-index: 999; |
| | | } |
| | | } |
| | | |
| | | .rect-item3 { |
| | | display: flex; |
| | | flex-direction: column; |
| | | width: 11.31rem; |
| | | height: 12.38rem; |
| | | height: 15.38rem; |
| | | background-image: url("../../../assets/TheCurrentJob/bg.png"); |
| | | background-repeat: no-repeat; |
| | | background-size: 100% 100%; |
| | |
| | | box-sizing: border-box; |
| | | } |
| | | } |
| | | |
| | | .rect-content { |
| | | display: flex; |
| | | justify-content: space-between; |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | // .el-table :deep(.el-table__header th) { |
| | | // border-bottom: solid 1px #1ac2f7; |
| | | // color: white; |
| | |
| | | border: solid 1px #1ac2f7; |
| | | color: white; |
| | | } |
| | | |
| | | .el-table :deep(.el-table__empty-block) { |
| | | background-color: #137aaf; |
| | | color: #1ac2f7; |
| | | } |
| | | // .el-table :deep(.el-table__body-wrapper) { |
| | | // background-color: #1ac2f7; |
| | | // } |
| | | // .el-popper :deep(.el-popper) { |
| | | // background-color: #ad2525; |
| | | // } |
| | | |
| | | .el-table :deep(.el-table__body-wrapper) { |
| | | background-color: #1ac2f7; |
| | | } |
| | | |
| | | :deep(.el-popper) { |
| | | background-color: #ad2525; |
| | | } |
| | | </style> |