| | |
| | | >æ°å»º</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" |
| | |
| | | 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 |
| | |
| | | > |
| | | </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" /> |
| | |
| | | > |
| | | <el-pagination |
| | | v-if="isactive == 1" |
| | | size="small" |
| | | size="large" |
| | | background |
| | | layout="prev, pager, next" |
| | | :current-page="pageQuery.page" |
| | |
| | | <span |
| | | style="font-size: 0.88rem; color: black; font-weight: bold" |
| | | class="from_title" |
| | | >ç¨æ·è§è² |
| | | >è§è²åå |
| | | </span> |
| | | </div> |
| | | </template> |
| | |
| | | /> |
| | | </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, |
| | |
| | | const dialogVisible1 = ref(false); |
| | | //ç¨æ·è§è²æ°å»º |
| | | const dialogVisible2 = ref(false); |
| | | //äººè¸æ³¨å |
| | | const registerdialogVisible = ref(false); |
| | | //ç鿡件 |
| | | const userOptions = [ |
| | | { |
| | |
| | | // 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; |
| | |
| | | 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: "æ£å¨å¤çä¸,请ç¨å...", |
| | | 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) { |
| | |
| | | } |
| | | } |
| | | } |
| | | /* æ·»å åä½å¾æ åº */ |
| | | .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 { |