From e00d1817afd6f86154aaa4c870571c724ebfecfc Mon Sep 17 00:00:00 2001 From: 艺术家 <10819716+q100102@user.noreply.gitee.com> Date: 星期三, 11 六月 2025 14:09:30 +0800 Subject: [PATCH] 代码提交 --- 项目代码/伸缩杆/client/src/views/tts/UserManagement/Usermanagement.vue | 220 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 212 insertions(+), 8 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/\344\274\270\347\274\251\346\235\206/client/src/views/tts/UserManagement/Usermanagement.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/\344\274\270\347\274\251\346\235\206/client/src/views/tts/UserManagement/Usermanagement.vue" index 3b86e55..ee75184 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/\344\274\270\347\274\251\346\235\206/client/src/views/tts/UserManagement/Usermanagement.vue" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/\344\274\270\347\274\251\346\235\206/client/src/views/tts/UserManagement/Usermanagement.vue" @@ -162,6 +162,14 @@ >鏂板缓</el-button > <el-button + type="primary" + size="small" + style="width: 5.5rem; height: 2rem; font-size: 0.88rem" + class="text_btn" + @click="registerdialogVisible = true" + >浜鸿劯娉ㄥ唽</el-button + > + <el-button size="small" style="width: 5.5rem; height: 2rem; font-size: 0.88rem" @click="printExcel" @@ -243,8 +251,8 @@ min-width="2%" > <template #default="scope"> - <span v-if="scope.row.isLeader == 0">缁勫憳</span> - <span v-else-if="scope.row.isLeader == 1">缁勯暱</span> + <span v-if="scope.row.isLeader == 0">浜岀骇</span> + <span v-else-if="scope.row.isLeader == 1">涓�绾�</span> </template> </el-table-column> <el-table-column @@ -382,10 +390,10 @@ > </template> </el-table-column> - <el-table-column prop="isLeader" label="缁勫憳绫诲瀷" align="center"> + <el-table-column prop="isLeader" label="鐢ㄦ埛绫诲瀷" align="center"> <template #default="scope"> - <span v-if="scope.row.isLeader == 0">缁勫憳</span> - <span v-else-if="scope.row.isLeader == 1">缁勯暱</span> + <span v-if="scope.row.isLeader == 0">浜岀骇</span> + <span v-else-if="scope.row.isLeader == 1">涓�绾�</span> </template> </el-table-column> <el-table-column prop="deptName" label="澶囨敞" align="center" /> @@ -566,7 +574,7 @@ > <el-pagination v-if="isactive == 1" - size="small" + size="large" background layout="prev, pager, next" :current-page="pageQuery.page" @@ -679,7 +687,7 @@ <span style="font-size: 0.88rem; color: black; font-weight: bold" class="from_title" - >鐢ㄦ埛瑙掕壊 + >瑙掕壊鍚嶅瓧 </span> </div> </template> @@ -1281,11 +1289,51 @@ /> </div> </el-dialog> + + <!-- 浜鸿劯娉ㄥ唽 --> + <el-dialog + v-model="registerdialogVisible" + title="鎻掍欢閰嶇疆" + width="500" + :before-close="handleClose" + top="5vh" + > + <template #header="{ titleId }"> + <div class="my-header"> + <h2 :id="titleId" style="font-size: 2rem">浜鸿劯褰曞叆</h2> + </div> + </template> + <div class="content_register"> + <div class="image-container"> + <img + src="@/assets/login/headimg.jpg" + id="img" + style="width: 100%" + class="profile-image" + /> + </div> + <div class="action-buttons" @click="begin(1)"> + <a href="myapp://" class="btn face-register"> + <i class="fas fa-user-plus"></i> 浜鸿劯褰曞叆</a + > + <button class="btn submit-data" @click="faceEnter()"> + <i class="fas fa-paper-plane"></i> 鎻愪氦鏁版嵁 + </button> + </div> + </div> + <template #footer> + <!-- <div class="dialog-footer"> + <el-button type="primary" class="downloadreBtn" @click="download(2)" + >鎻愪氦閰嶇疆</el-button + > + </div> --> + </template> + </el-dialog> </div> </template> <script setup> import { ref, reactive, onMounted, toRef } from "vue"; -import { ElMessage, ElMessageBox } from "element-plus"; +import { ElMessage, ElMessageBox, ElLoading } from "element-plus"; import { GetUserList, AddUser, @@ -1409,6 +1457,8 @@ const dialogVisible1 = ref(false); //鐢ㄦ埛瑙掕壊鏂板缓 const dialogVisible2 = ref(false); +//浜鸿劯娉ㄥ唽 +const registerdialogVisible = ref(false); //绛涢�夋潯浠� const userOptions = [ { @@ -1664,6 +1714,7 @@ // formUser.value.userteam = formUser.value.userteam + "缁�"; // } formUser.value.isLeader = newRole.value.isLeader; + formUser.value.rolename = newRole.value.roleName; UpdateUser(formUser.value).then((res) => { ElMessage({ message: "淇敼鎴愬姛", type: "success" }); dialogVisible.value = false; @@ -2106,6 +2157,95 @@ const toDetail = (row) => { router.push({ name: "permission", state: { info: JSON.stringify(row) } }); }; +const interval = ref(null); +const onloading = ref(null); +const baseUrl = "http://192.168.1.103:9093"; +const token = ref(""); +const imgbase64 = ref(""); +let urlPlugin = baseUrl + "/api/UserFace/DownlodaFacePlugin"; +let urlPReg = baseUrl + "/api/UserFace/DownloadRegFile"; + +const getData = (flag) => { + let url = "http://localhost:9298"; + let xmlResquest = new XMLHttpRequest(); + xmlResquest.open("post", url, true); + xmlResquest.onload = function (e) { + if (xmlResquest.status == 200) { + clearTimeout(interval.value); + imgbase64.value = xmlResquest.response; + if (flag == 2) { + const faceContainer = document.getElementById("face-recognition"); + const faceIcon = faceContainer.querySelector(".face-icon"); + const capturedFace = document.getElementById("captured-face"); + capturedFace.src = "data:image/png;base64," + xmlResquest.response; + faceIcon.style.display = "none"; + capturedFace.style.display = "block"; + window.URL.revokeObjectURL(url); + faceRecognitionEvent(); + return; + } else { + let img = document.getElementById("img"); + img.src = "data:image/png;base64," + xmlResquest.response; + window.URL.revokeObjectURL(url); + // hideLoading(); + onloading.value.close(); + return; + } + } + // hideLoading(); + onloading.value.close(); + }; + + xmlResquest.send(); +}; + +const begin = (flag) => { + if (interval.value) { + clearTimeout(interval.value); + } + onloading.value = ElLoading.service({ + lock: true, + text: "姝e湪澶勭悊涓�,璇风◢鍚�...", + background: "rgba(0, 0, 0, 0.7)", + }); + interval.value = setInterval(() => { + getData(flag); + }, 10000); +}; + +function faceEnter() { + token.value = JSON.parse(localStorage.getItem("user")).token; + console.log(token.value); + + let url = baseUrl + "/api/UserFace/faceEnter"; + let xmlResquest = new XMLHttpRequest(); + xmlResquest.open("post", url, true); + xmlResquest.setRequestHeader("Content-Type", "application/json"); + xmlResquest.setRequestHeader("Authorization", "Bearer " + token.value); + xmlResquest.onload = function (e) { + img.src = "headimg.jpg"; + if (xmlResquest.status == 200) { + let response = JSON.parse(xmlResquest.response); + if (response.status) { + ElMessage.success("浜鸿劯褰曞叆鎴愬姛,鍥剧墖鍚嶇О锛�" + response.data); + onloading.value.close(); + registerdialogVisible.value = false; + // hideLoading(); + } else { + ElMessage.error("浜鸿劯褰曞叆澶辫触锛岄敊璇俊鎭細" + response.message); + onloading.value.close(); + registerdialogVisible.value = false; + // hideLoading(); + } + } else { + ElMessage.error("鏁版嵁鎻愪氦澶辫触"); + onloading.value.close(); + registerdialogVisible.value = false; + // hideLoading(); + } + }; + xmlResquest.send(JSON.stringify({ Base64Image: imgbase64.value })); +} onMounted(() => { if (window.innerWidth <= 1080) { @@ -2450,6 +2590,70 @@ } } } +/* 娣诲姞瀛椾綋鍥炬爣搴� */ +.content_register { + flex-direction: column; + align-items: center; + justify-content: center; + padding: 30px; + background-color: #f8f9fa; + border-radius: 12px; + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1); + max-width: 800px; + margin: 0 auto; + .image-container { + margin-bottom: 25px; + border: 3px solid #e9ecef; + border-radius: 8px; + overflow: hidden; + } + + .profile-image { + display: block; + width: 200px; + height: 360px; + object-fit: cover; + } + + .action-buttons { + display: flex; + gap: 20px; + } + + .btn, + a.btn { + padding: 12px 25px; + border: none; + border-radius: 50px; + font-size: 16px; + font-weight: 600; + cursor: pointer; + display: inline-flex; + align-items: center; + gap: 10px; + text-decoration: none; + color: white; + } + + .face-register { + background-color: #4e73df; + } + + .submit-data { + background-color: #1cc88a; + } + + /* 纭繚a鏍囩鍙偣鍑诲尯鍩� */ + .btn { + position: relative; + z-index: 1; + } + + /* 娣诲姞鐐瑰嚮鍙嶉 */ + .btn:active { + transform: scale(0.98); + } +} </style> <style> .confirmButtonClass { -- Gitblit v1.9.3