From 10298137c4d5e646a6e297c4fa1c250c70432ca0 Mon Sep 17 00:00:00 2001
From: pengwei <2071057782@qq.com>
Date: 星期二, 08 四月 2025 17:31:37 +0800
Subject: [PATCH] 最新代码

---
 项目代码/client/public/webconfig.js                                 |    6 
 项目代码/client/src/views/tts/TheCurrentJob/Startjob.vue            |  390 +++++++++++++++-----
 项目代码/client/src/views/tts/TaskManagement/Taskmanagement.vue     |    2 
 项目代码/client/src/api/login.js                                    |    7 
 项目代码/client/src/views/Login.vue                                 |  336 ++++++++++++++++-
 项目代码/client/src/assets/TheCurrentJob/icon/nopouer.png           |    0 
 项目代码/client/src/utils/index.js                                  |    4 
 项目代码/client/src/api/user.js                                     |   18 
 项目代码/client/src/views/tts/BasicInformation/Basicinformation.vue |    4 
 项目代码/client/src/views/tts/UserManagement/Usermanagement.vue     |  338 ++++++++++------
 项目代码/client/src/views/tts/TaskManagement/Tasktemplates.vue      |    2 
 项目代码/client/dist.7z                                             |    0 
 项目代码/client/src/assets/TheCurrentJob/icon/pouer.png             |    0 
 13 files changed, 844 insertions(+), 263 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 ff00b08..32130d9 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/public/webconfig.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/public/webconfig.js"
new file mode 100644
index 0000000..57cad9f
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/public/webconfig.js"
@@ -0,0 +1,6 @@
+window.webConfig = {
+    "webApiDevelopment": "http://localhost:9291/",
+    "webApiProduction": "http://localhost:9291/",
+    "webApiDebug": "http://localhost:9291/",
+    "webSocketUrl": "ws://localhost:5174/",
+}
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/api/login.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/api/login.js"
index 0fb5b38..d5bcfb8 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/api/login.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/api/login.js"
@@ -1,11 +1,14 @@
 import http from "./http";
 
 //鑾峰彇楠岃瘉鐮佹帴鍙�
-export const getCodeImg = () =>  http.get('api/User/getVierificationCode') 
+export const getCodeImg = () => http.get('api/User/getVierificationCode')
 
 //鐢ㄦ埛鐧诲綍鎺ュ彛
-export const login = (data,tenantId) => http.post(`/api/User/login`, data)
+export const login = (data, tenantId) => http.post(`/api/User/login`, data)
 
 //鐢ㄦ埛娉ㄥ唽鎺ュ彛
 export const register = (data) => http.post('api/Registry/UserRegistry', data)
 
+//鍒犻櫎saveFace鐨勭収鐗�
+export const CleanUnusedImages = () => http.get('/api/User/CleanUnusedImages')
+
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/api/user.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/api/user.js"
index 020e848..6ae0474 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/api/user.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/api/user.js"
@@ -1,3 +1,4 @@
+import data from "@/views/builder/builderData";
 import http from "./http";
 
 //鑾峰彇楠岃瘉鐮佹帴鍙�
@@ -13,11 +14,19 @@
 //鑾峰彇鐢ㄦ埛鍒楄〃
 export const GetUserList = (data) => http.post('/api/User/GetPageData', data)
 
+//鑾峰彇鐢ㄦ埛鍒楄〃
+export const NewGetUserList = (data) => http.post('/api/User/GetUserFace', data)
+
 //鏂板缓鐢ㄦ埛
 export const AddUser = (data) => http.post('/api/User/AddData', data)
+//鏂版柊寤虹敤鎴�
+export const AdduserData = (data) => http.post('/api/User/AdduserData', data)
 
 //淇敼鐢ㄦ埛
 export const UpdateUser = (data) => http.post('/api/User/UpdateData', data)
+
+//鏂版洿鏂扮敤鎴�
+export const NewUpdateUser = (data) => http.post('/api/User/UpuserData', data)
 
 //鑾峰彇璐﹀彿淇℃伅
 export const GetUserInfo = (data) => http.post('/api/User/getCurrentUserInfo', data)
@@ -40,6 +49,15 @@
 
 //缂栬緫鐢ㄦ埛
 export const EditUserApi = (data) => http.post('/api/User/UploaUser', data)
+
+//鍒犻櫎鐢ㄦ埛
+export const DeleteUserData = (data) => http.post(`/api/User/DeleteUserData?userAccount=${data.userAccount}`)
 //淇濆瓨涓汉淇℃伅
 export const Upuserbase = (data) => http.post('/api/User/Upuserbase', data)
 
+//鐢ㄦ埛涓婁紶鍥剧墖
+export const UploadImg = (data) => http.post('/api/User/SaveFiles', data)
+
+//鑾峰彇鐧惧害浜戝垎缁�
+export const FaceGetPageData = (data) => http.post('/api/FaceRecognition/GetPageData', data)
+
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/assets/TheCurrentJob/icon/nopouer.png" "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/assets/TheCurrentJob/icon/nopouer.png"
new file mode 100644
index 0000000..309383e
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/assets/TheCurrentJob/icon/nopouer.png"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/assets/TheCurrentJob/icon/pouer.png" "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/assets/TheCurrentJob/icon/pouer.png"
new file mode 100644
index 0000000..ad3a926
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/assets/TheCurrentJob/icon/pouer.png"
Binary files differ
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 83bc025..f356766 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,10 +1,8 @@
 import { dayjs } from "element-plus";
 // import XLSX from "xlsx"; //瀵煎叆xlsx
 
-export const baseUrl = "http://115.159.85.185:9098/"
-// http://115.159.85.185:9091/
+export const baseUrl = "http://192.168.0.80:5000/"
 // http://192.168.0.80:5000/
-// 115.159.85.185:9091
 // http://115.159.85.185:9098/
 
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/Login.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/Login.vue"
index 3f75935..bc1662c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/Login.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/Login.vue"
@@ -105,34 +105,91 @@
                   cursor: pointer;
                   font-size: 1rem;
                 "
-                @click="show = false"
+                @click="recognition"
                 >浜鸿劯璇嗗埆鐧诲綍</span
               >
             </div>
           </el-form-item>
         </el-form>
         <div class="face-login" v-else>
-          <span style="font-size: 0.88rem; font-weight: bold; color: #333333"
+          <span
+            style="
+              text-align: center;
+              font-size: 0.88rem;
+              font-weight: bold;
+              color: #333333;
+            "
             >璇峰皢鑴搁儴姝e钃濊壊鏄剧ず妗嗗唴锛屽苟淇濇寔鍏夌嚎鍏呰冻</span
           >
-          <div
-            style="
-              display: flex;
-              justify-content: center;
-              align-items: center;
-              border: 1px solid #4386ff;
-              border-radius: 50%;
-              width: 18.75rem;
-              height: 18.75rem;
-              margin: 2.06rem 0;
-              background-color: #f1fcff;
-            "
-          >
-            <img src="@/assets/login/face.png" alt="" />
+          <div style="width: 100%; display: flex; justify-content: center">
+            <div
+              style="
+                display: flex;
+                justify-content: center;
+                align-items: center;
+                border: 1px solid #4386ff;
+                border-radius: 50%;
+                width: 18.75rem;
+                height: 18.75rem;
+                margin: 2.06rem 0;
+                background-color: #f1fcff;
+              "
+            >
+              <img v-if="!face" src="@/assets/login/face.png" alt="" />
+              <!-- <canvas v-else ref="canvasDom" /> -->
+              <div v-else>
+                <!-- 鎾斁鍣紝鐢ㄦ潵鎾斁鎷嶆憚鐨勮棰� -->
+                <video class="camera_video" ref="videoDom" />
+                <!--  鏄剧ず鐓х墖  -->
+                <!-- <img
+                  style="border-radius: 50%; width: 18.75rem; height: 18.75rem"
+                  v-else
+                  :src="imgurl"
+                /> -->
+              </div>
+            </div>
           </div>
-          <el-button type="primary" size="small" style="width: 100%"
+          <!-- <el-button
+            v-if="!reBtn"
+            type="primary"
+            size="small"
+            style="width: 100%"
+            @click="takePhoto"
             >寮�濮嬭瘑鍒�</el-button
           >
+          <el-button
+            v-else
+            type="primary"
+            size="small"
+            style="width: 100%"
+            @click="REtakePhoto"
+            >閲嶆柊璇嗗埆</el-button
+          > -->
+          <div style="width: 100%; margin-top: 1rem; display: flex">
+            <el-button
+              type="primary"
+              size="small"
+              style="width: 100%"
+              @click="recognition"
+              >閲嶆柊鑾峰彇鎽勫儚澶�</el-button
+            >
+            <el-select
+              v-if="videoArr.length > 1"
+              v-model="constraints"
+              placeholder="璇烽�夋嫨鎽勫儚澶�"
+              size="samll"
+              @change="changeconstraints"
+              style="height: 2rem"
+              :disabled="!videoArr.length > 1"
+            >
+              <el-option
+                v-for="item in videoArr"
+                :key="item.id"
+                :label="item.label"
+                :value="item.id"
+              />
+            </el-select>
+          </div>
           <div
             style="
               display: flex;
@@ -150,7 +207,7 @@
                 cursor: pointer;
                 font-size: 1rem;
               "
-              @click="show = true"
+              @click="accountlogin"
               >璐﹀彿鐧诲綍</span
             >
           </div>
@@ -161,11 +218,13 @@
 </template>
 
 <script setup>
-import { getCodeImg, login } from "@/api/login";
+import { getCodeImg, login, CleanUnusedImages } from "@/api/login";
+import { UploadImg } from "@/api/user";
 import { useRouter, useRoute } from "vue-router";
 import { getCurrentInstance, ref, nextTick, onMounted } from "vue";
 import { ElMessage } from "element-plus";
 import store from "@/store";
+import axios from "axios";
 
 const router = useRouter();
 const route = useRoute();
@@ -176,7 +235,14 @@
 
 const codeUrl = ref(""); // 楠岃瘉鐮�
 const loading = ref(false); // 鐧诲綍鍔犺浇鐘舵��
-
+const face = ref(false); // 浜鸿劯璇嗗埆鐧诲綍
+// 鐓х墖璺緞
+const imgurl = ref(null);
+// canvas鎺т欢瀵硅薄
+const canvasDom = ref(null);
+// video 鎺т欢瀵硅薄
+const videoDom = ref(null);
+const reBtn = ref(false);
 const loginForm = ref({
   userName: "",
   password: "",
@@ -236,9 +302,229 @@
 nextTick(() => {
   userNameRef.value.focus();
 });
+const videoArr = ref([]);
+//閫夋嫨鐨勬憚鍍忓ご鐨刬d
+const constraints = ref("");
+const videoConstraints = ref({});
+//浜鸿劯璇嗗埆鐧诲綍
+const recognition = () => {
+  show.value = false;
+  videoArr.value = [];
+  setTimeout(async () => {
+    face.value = true;
+    navigator.mediaDevices
+      .enumerateDevices()
+      .then((devices) => {
+        devices.forEach(function (device) {
+          if (device.kind == "videoinput") {
+            videoArr.value.push({
+              label: device.label,
+              id: device.deviceId,
+            });
+            constraints.value = videoArr.value[0].id;
+          }
+        });
+        openCamera();
+      })
+      .catch(function (err) {
+        layer.msg(err.name + ": " + err.message);
+      });
+  }, 1000);
+  ElMessage({
+    message: "姝e湪璋冪敤鎽勫儚澶达紝璇风◢绛�...",
+    type: "warning",
+    plain: true,
+    duration: 1000,
+  });
+  // 浜鸿劯璇嗗埆鐧诲綍閫昏緫
+};
+
+//璐﹀彿鐧诲綍
+function accountlogin() {
+  stop();
+  ElMessage({
+    message: "姝e湪鍏抽棴鎽勫儚澶达紝璇风◢绛�...",
+    type: "warning",
+    plain: true,
+    duration: 2000,
+  });
+  setTimeout(() => {
+    ElMessage({
+      message: "鍏抽棴鎽勫儚澶存垚鍔�",
+      type: "success",
+      plain: true,
+    });
+  }, 3000);
+  setTimeout(() => {
+    show.value = true;
+    face.value = false;
+  }, 2000);
+}
+//鎵撳紑鎽勫儚澶�
+const openCamera = async () => {
+  videoConstraints.value.deviceId = { exact: constraints.value };
+
+  // 妫�娴嬫祻瑙堝櫒鏄惁鏀寔mediaDevices
+  if (navigator.mediaDevices) {
+    navigator.mediaDevices
+      // 寮�鍚棰戯紝鍏抽棴闊抽
+      .getUserMedia({
+        audio: false,
+        video: {
+          width: 300, // 璁剧疆瑙嗛瀹藉害
+          height: 300, // 璁剧疆瑙嗛楂樺害
+          facingMode: "user", // 浣跨敤鍓嶇疆鎽勫儚澶�
+          deviceId: videoConstraints.value.deviceId,
+        },
+      })
+      .then((stream) => {
+        // 灏嗚棰戞祦浼犲叆viedo鎺т欢
+        videoDom.value.srcObject = stream;
+        // 鎾斁
+        videoDom.value.play();
+        Facerecognition();
+        ElMessage({
+          message: "鎽勫儚澶磋皟鐢ㄦ垚鍔�",
+          type: "success",
+          plain: true,
+        });
+      })
+      .catch((err) => {
+        console.log(err);
+      });
+  } else {
+    window.alert("璇ユ祻瑙堝櫒涓嶆敮鎸佸紑鍚憚鍍忓ご锛岃鏇存崲鏈�鏂扮増娴忚鍣�");
+  }
+};
+const changeconstraints = (res) => {
+  openCamera();
+};
+
+// 寮�濮嬭瘑鍒�
+const takePhoto = async () => {
+  // 濡傛灉宸茬粡鎷嶇収浜嗗氨閲嶆柊鍚姩鎽勫儚澶�
+  // if (imgurl.value) {
+  //   imgurl.value = null;
+  //   openCamera();
+  //   return;
+  // }
+
+  console.log(videoDom.value.videoWidth, videoDom.value.videoHeight);
+  // 鍒涘缓涓�涓敾甯冨厓绱狅紝璁剧疆鐢诲竷灏哄涓鸿棰戞祦鐨勫昂瀵�
+  const canvas = document.createElement("canvas");
+  // 璁剧疆鐢诲竷澶у皬涓庢憚鍍忓ぇ灏忎竴鑷�
+  canvas.width = videoDom.value.videoWidth;
+  canvas.height = videoDom.value.videoHeight;
+  // 鑾峰彇鐢诲竷涓婁笅鏂囧璞�
+  const ctx = canvas.getContext("2d");
+  // 缁樺埗褰撳墠瑙嗛甯у埌鐢诲竷涓�
+  ctx.drawImage(videoDom.value, 0, 0, canvas.width, canvas.height);
+  // 灏嗙敾甯冨唴瀹硅浆涓� Base64 鏁版嵁
+  const imageDataUrl = canvas.toDataURL("image/png");
+  // 瀛樺偍鍥剧墖璺緞
+  imgurl.value = imageDataUrl;
+
+  // // 鍒涘缓涓�涓浘鐗囧厓绱�
+  // const imageElement = new Image();
+  // // 灏� Base64 鏁版嵁璁剧疆涓哄浘鐗囩殑 src 灞炴��
+  // imageElement.src = imageDataUrl;
+  // console.log(imageElement, imageDataUrl, "鍥剧墖璺緞");
+  // return;
+  // canvasDom.value.width = videoDom.value.videoWidth;
+  // canvasDom.value.height = videoDom.value.videoHeight;
+  // // 鎵ц鐢荤殑鎿嶄綔
+  // canvasDom.value.getContext("2d").drawImage(videoDom.value, 0, 0);
+  // // 灏嗙粨鏋滆浆鎹负鍙睍绀虹殑鏍煎紡
+  // imgurl.value = canvasDom.value.toDataURL("image/webp");
+  // 鍏抽棴鎽勫儚澶�
+  let files = dataURLtoFile(imgurl.value, new Date().getTime() + ".png");
+  const formdata = new FormData();
+  formdata.append("files", files);
+  let response = await axios.post("/api/User/SaveFiles", formdata, {
+    headers: {
+      "Content-Type": "multipart/form-data",
+    },
+  });
+  ElMessage({
+    message: "寮�濮嬭瘑鍒腑锛岃绋嶇瓑...",
+    type: "warning",
+    plain: true,
+    duration: 2000,
+  });
+  setTimeout(() => {
+    login({
+      userName: "",
+      password: "",
+      path: response.data.data,
+    })
+      .then((res) => {
+        if (res.status) {
+          store.commit("setUserInfo", { ...res.data });
+          ElMessage({
+            message: "璇嗗埆鎴愬姛锛屽紑濮嬬櫥褰�",
+            type: "success",
+            plain: true,
+            duration: 2000,
+          });
+          CleanUnusedImages();
+          stop();
+          setTimeout(() => {
+            router.push({ path: "/" });
+          }, 1000);
+        }
+      })
+      .catch((err) => {
+        loading.value = false;
+        return proxy.$message.error(err.message);
+      });
+    setTimeout(() => {
+      loading.value = false;
+    }, 1000);
+  }, 1000);
+  reBtn.value = true;
+};
+//閲嶆柊璇嗗埆
+// const REtakePhoto = () => {
+//   reBtn.value = false;
+//   takePhoto();
+// };
+// 灏� base64 杞崲涓� Blob
+const dataURLtoFile = (dataurl, filename) => {
+  let arr = dataurl.split(","),
+    mime = arr[0].match(/:(.*?);/)[1],
+    bstr = atob(arr[1]),
+    n = bstr.length,
+    u8arr = new Uint8Array(n);
+  while (n--) {
+    u8arr[n] = bstr.charCodeAt(n);
+  }
+  return new File([u8arr], filename, {
+    type: mime,
+  });
+};
+// 鍏抽棴鎽勫儚澶�
+const stop = () => {
+  let stream = videoDom.value.srcObject;
+  if (!stream) return;
+  let tracks = stream.getTracks();
+  tracks.forEach((x) => {
+    x.stop();
+  });
+  clearInterval(timer.value);
+};
 
 //鑾峰彇楠岃瘉鐮�
 getCode();
+//瀹氭椂浜鸿劯璇嗗埆
+const timer = ref(null);
+const Facerecognition = () => {
+  clearInterval(timer.value);
+  if (!show.value) {
+    timer.value = setInterval(() => {
+      takePhoto();
+    }, 3000);
+  }
+};
 </script>
 
 <style lang="less" scoped>
@@ -301,9 +587,19 @@
       }
     }
     .face-login {
+      width: 30rem;
       display: flex;
       flex-direction: column;
+      justify-content: center;
+      align-content: center;
+      text-align: center;
     }
   }
 }
+.camera_video {
+  width: 18.75rem;
+  height: 18.75rem;
+  border: 1px black solid;
+  border-radius: 50% 50%;
+}
 </style>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/BasicInformation/Basicinformation.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/BasicInformation/Basicinformation.vue"
index d126bca..9c78316 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/BasicInformation/Basicinformation.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/BasicInformation/Basicinformation.vue"
@@ -145,7 +145,7 @@
             fontSize: '0.88rem',
             height: '3rem',
           }"
-          @select="InfoSelectionChange"
+          @selection-change="InfoSelectionChange"
         >
           <el-table-column type="selection" align="center" />
           <el-table-column prop="articleName" label="淇℃伅鍚嶇О" align="center" />
@@ -180,7 +180,7 @@
             fontSize: '0.88rem',
             height: '3rem',
           }"
-          @select="ToolSelectionChange"
+          @selection-change="ToolSelectionChange"
         >
           <el-table-column type="selection" align="center" />
           <el-table-column prop="toolName" label="宸ュ叿鍚嶇О" align="center" />
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/TaskManagement/Taskmanagement.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/TaskManagement/Taskmanagement.vue"
index b0e2359..a350e90 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/TaskManagement/Taskmanagement.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/TaskManagement/Taskmanagement.vue"
@@ -138,7 +138,7 @@
             fontSize: '0.88rem',
             height: '3rem',
           }"
-          @select="SelectionChange"
+          @selection-change="SelectionChange"
         >
           <el-table-column type="selection" align="center" min-width="1%" />
           <el-table-column
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/TaskManagement/Tasktemplates.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/TaskManagement/Tasktemplates.vue"
index 99cf103..bee2477 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/TaskManagement/Tasktemplates.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/TaskManagement/Tasktemplates.vue"
@@ -107,7 +107,7 @@
             fontSize: '0.88rem',
             height: '3rem',
           }"
-          @Select="getSelectionRows"
+          @selection-change="getSelectionRows"
         >
           <el-table-column type="selection" align="center" />
           <el-table-column
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 0a01bb0..ff362d2 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"
@@ -171,21 +171,20 @@
               >
             </span>
           </div>
-          <div style="position: absolute; width: 62rem; height: 2.5rem">
+          <div style="width: 62rem; height: 2.5rem">
             <el-table
               empty-text="鏆傛棤鏁版嵁"
-              style="margin-top: 0.88rem"
+              style="margin-top: 0.88rem; opacity: 0.8"
               :data="gridData"
               width="100%"
               :header-cell-style="{
                 height: '1.61rem',
-                color: '#1AC8FE',
-                background: '#0A5B91',
+                color: '#fff',
                 fontSize: '0.88rem',
+                border: 'solid 1px #1ac2f7',
               }"
               :cell-style="{
                 color: '#fff',
-                background: '#147BAF',
               }"
             >
               <el-table-column
@@ -194,18 +193,27 @@
                 min-width="13%"
               >
                 <template #default="scope">
-                  <span
-                    ref="spanHide"
-                    @click="showDetail1(!contentShow)"
-                    style="
-                      color: #1ac2f7;
-                      font-size: 0.88rem;
-                      cursor: pointer;
-                      text-decoration: underline;
-                    "
-                    >{{ scope.row.craftsStep }}
-                  </span></template
-                >
+                  <el-tooltip placement="bottom" effect="light">
+                    <template #content>
+                      <span style="display: block; width: 15rem">{{
+                        scope.row.craftsStep
+                      }}</span>
+                    </template>
+                    <span
+                      @click="true"
+                      style="
+                        color: #ffffff;
+                        font-size: 0.88rem;
+                        display: -webkit-box; /* 璁剧疆涓篧ebKit鍐呮牳鐨勫脊鎬х洅瀛愭ā鍨� */
+                        -webkit-box-orient: vertical; /* 鍨傜洿鎺掑垪 */
+                        -webkit-line-clamp: 1; /* 闄愬埗鏄剧ず涓よ */
+                        overflow: hidden; /* 闅愯棌瓒呭嚭鑼冨洿鐨勫唴瀹� */
+                        text-overflow: ellipsis; /* 浣跨敤鐪佺暐鍙� */
+                      "
+                      >{{ scope.row.craftsStep }}</span
+                    >
+                  </el-tooltip>
+                </template>
               </el-table-column>
 
               <el-table-column
@@ -238,20 +246,27 @@
               >
               <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; /* 璁剧疆涓篧ebKit鍐呮牳鐨勫脊鎬х洅瀛愭ā鍨� */
-                      -webkit-box-orient: vertical; /* 鍨傜洿鎺掑垪 */
-                      -webkit-line-clamp: 2; /* 闄愬埗鏄剧ず涓よ */
-                      overflow: hidden; /* 闅愯棌瓒呭嚭鑼冨洿鐨勫唴瀹� */
-                      text-overflow: ellipsis; /* 浣跨敤鐪佺暐鍙� */
-                    "
-                    >{{ scope.row.tools }}
-                  </span></template
-                ></el-table-column
+                  <el-tooltip placement="bottom" effect="light">
+                    <template #content>
+                      <span style="display: block; width: 15rem">{{
+                        scope.row.tools
+                      }}</span>
+                    </template>
+                    <span
+                      @click="true"
+                      style="
+                        color: #ffffff;
+                        font-size: 0.88rem;
+                        display: -webkit-box; /* 璁剧疆涓篧ebKit鍐呮牳鐨勫脊鎬х洅瀛愭ā鍨� */
+                        -webkit-box-orient: vertical; /* 鍨傜洿鎺掑垪 */
+                        -webkit-line-clamp: 2; /* 闄愬埗鏄剧ず涓よ */
+                        overflow: hidden; /* 闅愯棌瓒呭嚭鑼冨洿鐨勫唴瀹� */
+                        text-overflow: ellipsis; /* 浣跨敤鐪佺暐鍙� */
+                      "
+                      >{{ scope.row.tools }}</span
+                    >
+                  </el-tooltip>
+                </template></el-table-column
               >
               <el-table-column
                 property="craftsStep"
@@ -259,22 +274,30 @@
                 min-width="15%"
               >
                 <template #default="scope">
-                  <span
-                    style="
-                      color: #ffffff;
-                      font-size: 0.88rem;
-                      display: -webkit-box; /* 璁剧疆涓篧ebKit鍐呮牳鐨勫脊鎬х洅瀛愭ā鍨� */
-                      -webkit-box-orient: vertical; /* 鍨傜洿鎺掑垪 */
-                      -webkit-line-clamp: 2; /* 闄愬埗鏄剧ず涓よ */
-                      overflow: hidden; /* 闅愯棌瓒呭嚭鑼冨洿鐨勫唴瀹� */
-                      text-overflow: ellipsis; /* 浣跨敤鐪佺暐鍙� */
-                    "
-                    >{{ scope.row.material }}</span
-                  ></template
-                ></el-table-column
+                  <el-tooltip placement="bottom" effect="light">
+                    <template #content>
+                      <span style="display: block; width: 15rem">{{
+                        scope.row.material
+                      }}</span>
+                    </template>
+                    <span
+                      @click="true"
+                      style="
+                        color: #ffffff;
+                        font-size: 0.88rem;
+                        display: -webkit-box; /* 璁剧疆涓篧ebKit鍐呮牳鐨勫脊鎬х洅瀛愭ā鍨� */
+                        -webkit-box-orient: vertical; /* 鍨傜洿鎺掑垪 */
+                        -webkit-line-clamp: 2; /* 闄愬埗鏄剧ず涓よ */
+                        overflow: hidden; /* 闅愯棌瓒呭嚭鑼冨洿鐨勫唴瀹� */
+                        text-overflow: ellipsis; /* 浣跨敤鐪佺暐鍙� */
+                      "
+                      >{{ scope.row.material }}</span
+                    >
+                  </el-tooltip>
+                </template></el-table-column
               >
             </el-table>
-            <div class="consten" v-show="contentShow">
+            <!-- <div class="consten" v-show="contentShow">
               <el-table
                 empty-text="鏆傛棤鏁版嵁"
                 :data="gridData"
@@ -324,7 +347,7 @@
                   ></el-table-column
                 >
               </el-table>
-            </div>
+            </div> -->
           </div>
         </div>
         <div class="rect-item3" style="position: relative">
@@ -407,11 +430,6 @@
           display: flex;
           justify-content: center;
           align-items: center;
-          position: absolute;
-          top: 38%;
-          left: 50%;
-          transform: translateX(-50%);
-          z-index: 999;
         "
       >
         <div
@@ -442,8 +460,9 @@
           align-items: center;
           position: absolute;
           bottom: 5%;
-          left: 50%;
-          transform: translateX(-50%);
+          right: 0%;
+          transform: translateX(-20%);
+          z-index: 999;
         "
       >
         <el-button
@@ -531,7 +550,7 @@
   </div>
 </template>
 <script setup>
-import { ref, onMounted, nextTick } from "vue";
+import { ref, onMounted, nextTick, onBeforeUnmount } from "vue";
 import {
   GetScreenData,
   GetPre,
@@ -582,6 +601,8 @@
   takeid: "",
   setnum: 0,
 });
+
+const client = ref(null);
 
 //鎵姏鍊�
 const torqueFrom = ref({
@@ -736,35 +757,6 @@
     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;
@@ -1049,10 +1041,134 @@
       console.error("娣诲姞澶辫触", error);
     });
 };
+const timer = ref(null);
+
+const createSocket = (url) => {
+  clearInterval(timer.value);
+  // 鍒涘缓WebSocket杩炴帴
+  //"ws://127.0.0.1:9295/admin"
+  client.value = new WebSocket("ws://115.159.85.185:9098/");
+
+  client.value.onopen = function () {
+    console.log("WebSocket 杩炴帴鎴愬姛");
+  };
+  client.value.onmessage = function (event) {
+    let data = JSON.parse(event.data);
+    (gridData.value = [data.process.proNow].map((item) => {
+      return {
+        articleOne: item.ArticleOne,
+        articleOneid: item.ArticleOneid,
+        articleTowid: item.ArticleTowid,
+        articleTwo: item.ArticleTwo,
+        craftContent: item.CraftContent,
+        craftID: item.CraftID,
+        craftType: item.CraftType,
+        craftsStep: item.CraftsStep,
+        createDate: item.CreateDate,
+        creater: item.Creater,
+        material: item.Material,
+        modifier: item.Modifier,
+        modifyDate: item.ModifyDate,
+        moduleName: item.ModuleName,
+        nodal: item.Nodal,
+        pointAxisHPB: item.PointAxisHPB,
+        pointAxisXYZ: item.PointAxisXYZ,
+        setpNum: item.SetpNum,
+        tools: item.Tools,
+        torqueOne: item.TorqueOne,
+        torqueOneQuantity: item.TorqueOneQuantity,
+        torqueSum: item.TorqueSum,
+        torqueTwo: item.TorqueTwo,
+        torqueTwoQuantity: item.TorqueTwoQuantity,
+      };
+    })),
+      (sunNUm.value = data.process.maxproce);
+    obj.value = [data.process.proNow].map((item) => {
+      return {
+        articleOne: item.ArticleOne,
+        articleOneid: item.ArticleOneid,
+        articleTowid: item.ArticleTowid,
+        articleTwo: item.ArticleTwo,
+        craftContent: item.CraftContent,
+        craftID: item.CraftID,
+        craftType: item.CraftType,
+        craftsStep: item.CraftsStep,
+        createDate: item.CreateDate,
+        creater: item.Creater,
+        material: item.Material,
+        modifier: item.Modifier,
+        modifyDate: item.ModifyDate,
+        moduleName: item.ModuleName,
+        nodal: item.Nodal,
+        pointAxisHPB: item.PointAxisHPB,
+        pointAxisXYZ: item.PointAxisXYZ,
+        setpNum: item.SetpNum,
+        tools: item.Tools,
+        torqueOne: item.TorqueOne,
+        torqueOneQuantity: item.TorqueOneQuantity,
+        torqueSum: item.TorqueSum,
+        torqueTwo: item.TorqueTwo,
+        torqueTwoQuantity: item.TorqueTwoQuantity,
+      };
+    })[0];
+    Torque.value = data.operation.map((item) => {
+      return {
+        createDate: item.CreateDate,
+        creater: item.Creater,
+        deviceCode: item.SystemDeviceCode,
+        groupOp: item.GroupOp,
+        id: item.ID,
+        modifier: item.Modifier,
+        modifyDate: item.ModifyDate,
+        processSte: item.ProcessSte,
+        takeId: item.TakeId,
+        torqueSize: item.TorqueSize,
+      };
+    });
+    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 = data.process.finish.map((item) => {
+      return item.moduleName;
+    });
+    cameraAnimate(
+      [xPos.value, yPos.value, zPos.value],
+      gridData.value[0].moduleName
+    );
+    console.log(
+      "WebSocket 鎺ユ敹鍒版秷鎭�",
+      data,
+      gridData.value,
+      sunNUm.value,
+      Torque.value,
+      isJob.value
+    );
+  };
+  client.value.onclose = function () {
+    console.log("WebSocket 杩炴帴鍏抽棴");
+    timer.value = setTimeout(createSocket, 1000);
+  };
+
+  client.value.onerror = function () {};
+};
 
 onMounted(() => {
+  console.log("mounted", window.innerWidth, window.innerHeight);
+
   // 鍒濆鍖栧満鏅�
-  renderer.setSize(window.innerWidth / 1.01, window.innerHeight / 2.1);
+  renderer.setSize(window.innerWidth - 20, window.innerHeight - 100);
   renderer.setClearColor(0xeeeeee); // 璁剧疆鑳屾櫙鑹�
   // 鍚敤鐗╃悊娓叉煋妯″紡
   // renderer.physicallyCorrectLights = true;
@@ -1064,9 +1180,9 @@
   const controls = new OrbitControls(camera, renderer.domElement);
   controls.enablePan = false; //绂佹鍙抽敭鎷栨嫿
   //鐩告満浣嶇疆涓庤瀵熺洰鏍囩偣鏈�灏忓��
-  controls.minDistance = 650;
+  controls.minDistance = 600;
   //鐩告満浣嶇疆涓庤瀵熺洰鏍囩偣鏈�澶у��
-  controls.maxDistance = 900;
+  controls.maxDistance = 1000;
 
   camera.position.set(...CAMERA_POS);
   controls.update();
@@ -1126,8 +1242,13 @@
   });
   // };
   document.addEventListener("click", handleClickOutside);
+  console.log(window.webConfig);
 
+  createSocket();
   // showModel();
+});
+onBeforeUnmount(() => {
+  clearInterval(timer.value);
 });
 </script>
 <style lang="scss" scoped>
@@ -1151,7 +1272,7 @@
   background-size: 0.3rem 2rem, 2rem 0.3rem, 0.3rem 2rem, 2rem 0.3rem;
   padding: 0.2rem;
   box-sizing: border-box;
-  background-color: rgba(0, 0, 0, 0.3);
+  background-color: rgba(0, 0, 0, 0.1);
   overflow: hidden;
 
   .rect {
@@ -1184,33 +1305,67 @@
 
     .rect-center {
       display: flex;
-      justify-content: space-between;
-      width: 80%;
+      justify-content: space-around;
+      width: 100%;
       margin: 0 auto;
       padding: 0.8rem 2.15rem;
       box-sizing: border-box;
-
+      position: absolute;
+      left: 50%;
+      top: 5%;
+      transform: translateX(-50%);
       .rect-item1 {
         display: flex;
         flex-direction: column;
         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;
+        // background-image: url("../../../assets/TheCurrentJob/bg.png");
+        // background-repeat: no-repeat;
+        // background-size: 100% 100%;
+        border-radius: 8px;
+        background: linear-gradient(
+            0deg,
+            rgba(0, 0, 0, 0.001),
+            rgba(0, 0, 0, 0.001)
+          ),
+          rgba(0, 0, 0, 0),
+          linear-gradient(
+            135deg,
+            rgba(30, 58, 138, 0.6) -3%,
+            rgba(49, 46, 129, 0.6) 99%
+          );
+        box-sizing: border-box;
+        border: 1px solid rgba(96, 165, 250, 0.3);
+        box-shadow: 0px 4px 6px -4px rgba(0, 0, 0, 0.1),
+          0px 10px 15px -3px rgba(0, 0, 0, 0.1);
+        padding: 0.28rem 1.28rem;
         box-sizing: border-box;
       }
 
       .rect-item2 {
         width: 65rem;
-        height: 15.38rem;
-        border: 0.1rem solid #02cde6;
+        height: 14.38rem;
+        border-radius: 8px;
+        background: linear-gradient(
+            0deg,
+            rgba(0, 0, 0, 0.001),
+            rgba(0, 0, 0, 0.001)
+          ),
+          rgba(0, 0, 0, 0),
+          linear-gradient(
+            135deg,
+            rgba(30, 58, 138, 0.6) -3%,
+            rgba(49, 46, 129, 0.6) 99%
+          );
+        box-sizing: border-box;
+        border: 1px solid rgba(96, 165, 250, 0.3);
+        box-shadow: 0px 4px 6px -4px rgba(0, 0, 0, 0.1),
+          0px 10px 15px -3px rgba(0, 0, 0, 0.1);
         padding: 0.69rem 1.44rem;
         position: relative;
 
         .el-table :deep(.el-table__header th) {
-          border: solid 1px #1ac0f6;
+          // border: solid 1px #1ac0f6;
           color: white;
         }
 
@@ -1227,9 +1382,25 @@
         flex-direction: column;
         width: 11.31rem;
         height: 15.38rem;
-        background-image: url("../../../assets/TheCurrentJob/bg.png");
-        background-repeat: no-repeat;
-        background-size: 100% 100%;
+        // background-image: url("../../../assets/TheCurrentJob/bg.png");
+        // background-repeat: no-repeat;
+        // background-size: 100% 100%;
+        border-radius: 8px;
+        background: linear-gradient(
+            0deg,
+            rgba(0, 0, 0, 0.001),
+            rgba(0, 0, 0, 0.001)
+          ),
+          rgba(0, 0, 0, 0),
+          linear-gradient(
+            135deg,
+            rgba(30, 58, 138, 0.6) -3%,
+            rgba(49, 46, 129, 0.6) 99%
+          );
+        box-sizing: border-box;
+        border: 1px solid rgba(96, 165, 250, 0.3);
+        box-shadow: 0px 4px 6px -4px rgba(0, 0, 0, 0.1),
+          0px 10px 15px -3px rgba(0, 0, 0, 0.1);
         padding: 0.28rem 0.28rem;
         box-sizing: border-box;
       }
@@ -1249,6 +1420,19 @@
 //   border-bottom: solid 1px #1ac2f7;
 //   color: white;
 // }
+.el-table {
+  --el-table-border-color: transparent;
+  --el-table-border: none;
+  --el-table-text-color: #bdbdbe;
+  --el-table-header-text-color: #bdbdbe;
+  --el-table-row-hover-bg-color: transparent;
+  --el-table-current-row-bg-color: transparent;
+  --el-table-header-bg-color: transparent;
+  --el-table-bg-color: transparent;
+  --el-table-tr-bg-color: transparent;
+  --el-table-expanded-cell-bg-color: transparent;
+}
+
 .el-table :deep(.el-table__row td) {
   border: solid 1px #1ac2f7;
   color: white;
@@ -1259,9 +1443,9 @@
   color: #1ac2f7;
 }
 
-.el-table :deep(.el-table__body-wrapper) {
-  background-color: #1ac2f7;
-}
+// .el-table :deep(.el-table__body-wrapper) {
+//   background-color: #1ac2f7;
+// }
 
 :deep(.el-popper) {
   background-color: #ad2525;
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/UserManagement/Usermanagement.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/UserManagement/Usermanagement.vue"
index 239ce0f..33f9791 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/UserManagement/Usermanagement.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/UserManagement/Usermanagement.vue"
@@ -107,6 +107,7 @@
             >鏂板缓</el-button
           >
           <el-button
+            v-if="isactive != 3"
             size="small"
             style="width: 5.5rem; height: 2rem; font-size: 0.88rem"
             @click="printExcel"
@@ -140,7 +141,7 @@
             fontSize: '0.88rem',
             height: '3rem',
           }"
-          @select="UserSelectionChange"
+          @selection-change="UserSelectionChange"
         >
           <el-table-column type="selection" align="center" min-width="1%" />
           <el-table-column
@@ -182,13 +183,21 @@
             <template #default="scope">
               <el-image
                 style="width: 70px; height: 70px"
-                :src="'http://115.159.85.185:9098' + scope.row.headImageUrl"
+                :src="
+                  'http://115.159.85.185:9098' + scope.row.headImageUrl
+                "
                 show-progress
                 :initial-index="4"
                 fit="cover"
               />
             </template>
           </el-table-column>
+          <el-table-column
+            prop="groupID"
+            label="鐧惧害浜戝垎缁�"
+            align="center"
+            min-width="3%"
+          />
           <el-table-column label="鏄惁鍚敤" align="center" min-width="2%">
             <template #default="scope">
               <el-switch
@@ -228,6 +237,15 @@
                 @click="Editpassword(scope.row)"
                 >淇敼瀵嗙爜</el-button
               >
+              <el-button
+                size="small"
+                type="text"
+                @click="deletUser(scope.row)"
+                :disabled="
+                  scope.row.userName == 'admin' || scope.row.user_Id == '1'
+                "
+                >鍒犻櫎</el-button
+              >
             </template>
           </el-table-column>
         </el-table>
@@ -251,7 +269,7 @@
             fontSize: '0.88rem',
             height: '3rem',
           }"
-          @select="RoleSelectionChange"
+          @selection-change="RoleSelectionChange"
         >
           <el-table-column type="selection" align="center" />
           <el-table-column prop="roleName" label="瑙掕壊鍚嶇О" align="center" />
@@ -316,6 +334,17 @@
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"
         />
+        <el-pagination
+          v-if="isactive == 2"
+          size="small"
+          background
+          layout="prev, pager, next"
+          :current-page="pageQuery.page"
+          :page-size="pageQuery.rows"
+          :total="pageTotal1"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        />
       </div>
     </div>
 
@@ -353,7 +382,7 @@
       >
         <el-row :gutter="20">
           <el-col :span="8">
-            <el-form-item prop="userName">
+            <el-form-item prop="username">
               <template #label>
                 <div style="display: flex; align-items: flex-end">
                   <span style="color: red; margin-right: 0.2rem">*</span>
@@ -365,13 +394,13 @@
               </template>
               <el-input
                 size="small"
-                v-model="formUser.userName"
+                v-model="formUser.username"
                 placeholder="璇疯緭鍏�"
               />
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item prop="userTrueName">
+            <el-form-item prop="usertruename">
               <template #label>
                 <div style="display: flex; align-items: flex-end">
                   <span style="color: red; margin-right: 0.2rem">*</span>
@@ -383,13 +412,13 @@
               </template>
               <el-input
                 size="small"
-                v-model="formUser.userTrueName"
+                v-model="formUser.usertruename"
                 placeholder="璇疯緭鍏�"
               />
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item prop="phoneNo">
+            <el-form-item prop="phoneno">
               <template #label>
                 <div style="display: flex; align-items: flex-end">
                   <span style="color: red; margin-right: 0.2rem">*</span>
@@ -401,7 +430,7 @@
               </template>
               <el-input
                 size="small"
-                v-model="formUser.phoneNo"
+                v-model="formUser.phoneno"
                 placeholder="璇疯緭鍏�"
               />
             </el-form-item>
@@ -409,7 +438,7 @@
         </el-row>
         <el-row :gutter="20">
           <el-col :span="8">
-            <el-form-item prop="role_Id">
+            <el-form-item prop="roleid">
               <template #label>
                 <div style="display: flex; align-items: flex-end">
                   <span style="color: red; margin-right: 0.2rem">*</span>
@@ -420,12 +449,12 @@
                 </div>
               </template>
               <el-select
-                v-model="formUser.role_Id"
+                v-model="formUser.roleid"
                 placeholder="璇烽�夋嫨"
                 size="small"
               >
                 <el-option
-                  :disabled="item.roleId == 1"
+                  :disabled="item.roleId == 20"
                   v-for="item in groupOptions"
                   :key="item.roleId"
                   :label="item.roleName"
@@ -435,7 +464,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item prop="roleName">
+            <el-form-item prop="rolename">
               <template #label>
                 <div style="display: flex; align-items: flex-end">
                   <span style="color: red; margin-right: 0.2rem">*</span>
@@ -446,7 +475,7 @@
                 </div>
               </template>
               <el-select
-                v-model="formUser.roleName"
+                v-model="formUser.rolename"
                 placeholder="璇烽�夋嫨"
                 size="small"
               >
@@ -516,6 +545,7 @@
                 @before-upload="beforeAvatarUpload"
                 :on-success="handleAvatarSuccess"
                 :file-list="fileList != [] ? fileList : []"
+                :class="{ hide: showUpload }"
               >
                 <el-icon>
                   <Plus />
@@ -605,7 +635,7 @@
         </div>
       </template>
       <el-form
-        :model="formUser"
+        :model="newobj"
         label-width="auto"
         label-position="top"
         ref="formpasswordRef"
@@ -636,7 +666,7 @@
           <el-input
             style="margin-top: 1rem"
             size="large"
-            v-model="formUser.newPwd"
+            v-model="newobj.newPwd"
             placeholder="璇疯緭鍏�"
           />
         </el-form-item>
@@ -748,7 +778,6 @@
     </el-dialog>
 
     <!-- 鏉冮檺绠$悊寮瑰嚭妗� -->
-
     <el-dialog v-model="imgdialogVisible">
       <div
         style="
@@ -768,16 +797,17 @@
 import { ref, reactive, onMounted, toRef } from "vue";
 import { ElMessage, ElMessageBox } from "element-plus";
 import {
-  GetUserList,
   AddUser,
   UpdateUser,
   DelApi,
   ExportApi,
   ExportApi1,
-  UpdatePassword,
   UpdatePwd,
-  AddUserApi,
-  EditUserApi,
+  NewGetUserList,
+  AdduserData,
+  NewUpdateUser,
+  DeleteUserData,
+  FaceGetPageData,
 } from "@/api/user";
 import { useRouter } from "vue-router";
 import { formatTime } from "@/utils/index.js";
@@ -799,6 +829,7 @@
 
 const tableData = ref([]);
 const grideData = ref([]);
+const faceData = ref([]);
 //鏂板缓鐢ㄦ埛ref
 const formUserRef = ref();
 const options = ref([]);
@@ -810,31 +841,27 @@
   },
   { value: 1, label: "鏄�" },
 ]);
+const showUpload = ref(false);
 //鍒嗙粍
 const groupOptions = ref([]);
+const groupIDOptions = ref([]);
 const formUser = ref({
-  user_Id: undefined,
-  userName: "",
-  role_Id: 2,
-  roleName: "",
-  phoneNo: "",
-  remark: "",
-  userPwd: "123456",
-  userTrueName: "",
-  dept_Id: 0,
+  id: undefined,
+  username: "",
+  phoneno: "",
+  roleid: 21,
+  rolename: "",
   enable: 1,
-  headImageUrl: "",
-  createDate: formatTime(new Date()), //鍒涘缓鏃堕棿
-  creater: JSON.parse(localStorage.getItem("user")).userName, //鍒涘缓浜�
-  newPwd: "",
+  path: "",
+  usertruename: "",
 });
 const rules = reactive({
-  userName: {
+  username: {
     required: true,
     message: "璇疯緭鍏ョ敤鎴峰悕",
     trigger: "blur",
   },
-  role_Id: {
+  roleid: {
     required: true,
     message: "璇烽�夋嫨瑙掕壊",
     trigger: "change",
@@ -851,12 +878,12 @@
     message: "璇疯緭鍏ュ鍚�",
     trigger: "blur",
   },
-  phoneNo: {
+  phoneno: {
     required: true,
     message: "璇疯緭鍏ユ墜鏈哄彿",
     trigger: "blur",
   },
-  userTrueName: {
+  usertruename: {
     required: true,
     message: "璇疯緭鍏ョ湡瀹炲鍚�",
     trigger: "blur",
@@ -875,11 +902,11 @@
 //绛涢�夋潯浠�
 const userOptions = [
   {
-    value: "userName",
+    value: "username",
     label: "鐧诲綍璐﹀彿",
   },
   {
-    value: "userTrueName",
+    value: "usertruename",
     label: "鐪熷疄濮撳悕",
   },
   {
@@ -929,39 +956,11 @@
 });
 
 const uploadRef = ref();
-// //鐢ㄦ埛淇敼瀵嗙爜
-// const handleUpdatePassword = (row) => {
-//   dialogVisible1.value = true;
-//   formUser.value = Object.assign({}, row);
-// };
-// const UpdatePassword = () => {
-//   formpasswordRef.value.validate((valid) => {
-//     if (valid) {
-//       UpdatePassword({
-//         user_Id: formUser.value.user_Id,
-//         oldPwd: formpassword.value.oldPwd,
-//         newPwd: formpassword.value.newPwd,
-//       }).then((res) => {
-//         if (res.code == 200) {
-//           ElMessage({
-//             message: "淇敼鎴愬姛",
-//             type: "success",
-//           });
-//           dialogVisible1.value = false;
-//           initData();
-//         } else {
-//           ElMessage({
-//             message: res.msg,
-//             type: "error",
-//           });
-//         }
-//       });
-//     }
-//   });
-// };
 
 const pageTotal = ref(0);
-//鐧诲綍璁板綍
+const pageTotal1 = ref(0);
+const pageTotal2 = ref(0);
+//鐢ㄦ埛鍒楄〃
 const initData = () => {
   // 鏌ヨ鏉′欢
   const startTime = formatTime(queryForm.value.selectTime[0]);
@@ -975,14 +974,16 @@
     { name: "createDate", value: startTime, displayType: "ThanOrEqual" },
     { name: "createDate", value: endTime, displayType: "LessOrEqual" },
   ];
-  GetUserList({
-    ...pageQuery.value,
-    filter,
+  NewGetUserList({
+    pageIndex: pageQuery.value.page,
+    pageSize: pageQuery.value.rows,
+    searchKeyword: queryForm.value.selectInput,
+    startDate: startTime,
+    endDate: endTime,
   }).then((res) => {
-    tableData.value = res.rows;
-    pageTotal.value = res.total;
+    tableData.value = res.data.items;
+    pageTotal.value = res.data.totalCount;
   });
-  getRole();
 };
 //鍒嗛〉璇锋眰鍙傛暟
 const pageQuery = ref({
@@ -993,23 +994,48 @@
   wheres: "", //鏉′欢鏌ヨ
 });
 
+//鍒嗛〉璇锋眰鍙傛暟
+const pageQuery1 = ref({
+  page: 1, //褰撳墠椤甸潰
+  rows: 10, //姣忛〉鏄剧ず鏉℃暟
+  order: "desc", //鎺掑簭鏂瑰紡
+  sort: "", //鎺掑簭瀛楁
+  wheres: "", //鏉′欢鏌ヨ
+});
+
+//鍒嗛〉璇锋眰鍙傛暟
+const pageQuery2 = ref({
+  page: 1, //褰撳墠椤甸潰
+  rows: 10, //姣忛〉鏄剧ず鏉℃暟
+  order: "desc", //鎺掑簭鏂瑰紡
+  sort: "", //鎺掑簭瀛楁
+  wheres: "", //鏉′欢鏌ヨ
+});
 //鏁版嵁妫�绱簨浠�
 const handleQuery = () => {
-  pageQuery.value.page = 1;
   if (isactive.value == 1) {
+    pageQuery.value.page = 1;
     initData();
-  } else {
+  } else if (isactive.value == 2) {
+    pageQuery1.value.page = 1;
     getRole();
+  } else {
+    pageQuery2.value.page = 1;
+    GetFacePageData();
   }
 };
 //閲嶇疆鏌ヨ鏉′欢
 const resetQuery = () => {
   queryForm.value = Object.assign({}, obj);
-  pageQuery.value.page = 1;
   if (isactive.value == 1) {
+    pageQuery.value.page = 1;
     initData();
-  } else {
+  } else if (isactive.value == 2) {
+    pageQuery1.value.page = 1;
     getRole();
+  } else {
+    pageQuery2.value.page = 1;
+    GetFacePageData();
   }
 };
 //鍒嗛〉椤甸潰澶у皬鏀瑰彉
@@ -1017,8 +1043,10 @@
   pageQuery.value.rows = val;
   if (isactive.value == 1) {
     initData();
-  } else {
+  } else if (isactive.value == 2) {
     getRole();
+  } else {
+    GetFacePageData();
   }
 };
 
@@ -1027,34 +1055,42 @@
   pageQuery.value.page = val;
   if (isactive.value == 1) {
     initData();
-  } else {
+  } else if (isactive.value == 2) {
     getRole();
+  } else {
+    GetFacePageData();
   }
 };
-const handleAvatarSuccess = (val) => {
-  formUser.value.headImageUrl = "/image/" + val.data;
+const handleAvatarSuccess = (response, file, fileList) => {
+  formUser.value.path = response.data;
+  if (fileList.length >= 1) {
+    showUpload.value = true;
+  }
 };
 //閲嶇疆琛ㄥ崟
 const resetForm = (formEl) => {
   if (!formEl) return;
   formEl.resetFields();
   formUser.value = {
-    user_Id: undefined,
-    userName: "",
-    role_Id: 21,
-    roleName: "",
-    phoneNo: "",
-    remark: "",
-    userPwd: "123456",
-    userTrueName: "",
-    dept_Id: 0,
+    username: "",
+    phoneno: "",
+    roleid: 21,
+    rolename: "",
     enable: 1,
-    headImageUrl: "",
-    newPwd: "",
+    path: "",
+    user_Id: undefined,
   };
   fileList.value = [];
 };
 const resetForm1 = (formEl) => {
+  if (!formEl) return;
+  formEl.resetFields();
+  formRole.value = {
+    roleName: "",
+    description: "",
+  };
+};
+const resetForm2 = (formEl) => {
   if (!formEl) return;
   formEl.resetFields();
   formRole.value = {
@@ -1067,23 +1103,18 @@
   dialogImageUrl.value = uploadFile.url;
   imgdialogVisible.value = true;
 };
-const handleRemove = (val) => {
+const handleRemove = (file, fileList1) => {
   fileList.value = [];
   //绉婚櫎宸蹭笂浼犵殑鍥剧墖
-  formUser.value.headImageUrl = "";
+  formUser.value.path = "";
+  if (fileList.value.length < 1) {
+    showUpload.value = false;
+  }
 };
+
 const beforeAvatarUpload = (val) => {
   console.log(val);
 };
-// const submitUpload = () => {
-//   let promise = new Promise((resolve, reject) => {
-//     setTimeout(async () => {
-//       await uploadRef.value.submit();
-//       resolve("涓婁紶鎴愬姛");
-//     });
-//   });
-//   return promise;
-// };
 
 //鏂板缓鐢ㄦ埛璐﹀彿
 const saveObj = async (formEl) => {
@@ -1091,14 +1122,14 @@
   if (!formEl) return;
   await formEl.validate((valid, fields) => {
     if (valid) {
-      if (formUser.value.user_Id != undefined) {
-        UpdateUser(formUser.value).then((res) => {
+      if (formUser.value.id != undefined) {
+        NewUpdateUser(formUser.value).then((res) => {
           ElMessage({ message: "淇敼鎴愬姛", type: "success" });
           dialogVisible.value = false;
           initData();
         });
       } else {
-        AddUser(formUser.value).then((res) => {
+        AdduserData(formUser.value).then((res) => {
           ElMessage({ message: "鎻愪氦鎴愬姛", type: "success" });
           dialogVisible.value = false;
           initData();
@@ -1111,9 +1142,17 @@
 };
 //鏄惁鍚敤
 const changeSwitch = (val) => {
-  let data = Object.assign({}, val);
-  console.log(data);
-  UpdateUser(data).then((res) => {
+  let data = {
+    id: val.user_Id,
+    username: val.userName,
+    phoneno: val.phoneNo,
+    roleid: val.role_Id,
+    rolename: val.roleName,
+    enable: val.enable,
+    path: val.headImageUrl,
+    usertruename: val.userTrueName,
+  };
+  NewUpdateUser(data).then((res) => {
     ElMessage({ message: "淇敼鎴愬姛", type: "success" });
     dialogVisible.value = false;
     initData();
@@ -1131,15 +1170,24 @@
 };
 //缂栬緫鐢ㄦ埛璐﹀彿
 const Edit = (val) => {
-  let obj = Object.assign({}, val);
+  let obj = {
+    id: val.user_Id,
+    username: val.userName,
+    phoneno: val.phoneNo,
+    roleid: val.role_Id,
+    rolename: val.roleName,
+    enable: val.enable,
+    path: val.headImageUrl,
+    usertruename: val.userTrueName,
+  };
   formUser.value = {
     ...obj,
   };
-  if (obj.headImageUrl != "") {
+  if (obj.path != "") {
     fileList.value = [
       {
         name: "1",
-        url: "http://115.159.85.185:9098" + obj.headImageUrl,
+        url: "http://115.159.85.185:9098" + obj.path,
       },
     ];
   }
@@ -1153,20 +1201,15 @@
   formUser.value = obj;
   formpassword.value = val;
   newobj.value = Object.assign({}, val);
-  console.log(newobj.value);
-
   dialogVisible1.value = true;
 };
 //淇濆瓨淇敼瀵嗙爜
 const savePassword = async (formEl) => {
-  let obj = Object.assign({}, newobj);
-  // obj.password = formpassword.value.password;
-  console.log(formUser.value);
-
+  let obj = Object.assign({}, newobj.value);
   let formdata = {
-    id: formUser.value.user_Id,
-    oldPwd: formUser.value.userPwd,
-    newPwd: formUser.value.newPwd,
+    id: obj.user_Id,
+    oldPwd: obj.userPwd,
+    newPwd: obj.newPwd,
   };
   if (!formEl) return;
   await formEl.validate((valid, fields) => {
@@ -1250,12 +1293,39 @@
     { name: "createDate", value: startTime, displayType: "ThanOrEqual" },
     { name: "createDate", value: endTime, displayType: "LessOrEqual" },
   ];
-  GetPageDataApi({ ...pageQuery.value, filter }).then((res) => {
+  GetPageDataApi({ ...pageQuery1.value, filter }).then((res) => {
     grideData.value = res.rows;
-    pageTotal.value = res.total;
+    pageTotal1.value = res.total;
     groupOptions.value = res.rows;
   });
 };
+
+//鍒犻櫎鐢ㄦ埛
+const deletUser = (val) => {
+  ElMessageBox.confirm("纭鍒犻櫎璇ョ敤鎴峰悧锛�", {
+    confirmButtonText: "纭",
+    cancelButtonText: "鍙栨秷",
+    type: "warning",
+  })
+    .then(() => {
+      DeleteUserData({
+        userAccount: val.userName,
+      }).then((res) => {
+        ElMessage({
+          type: "success",
+          message: "鍒犻櫎鎴愬姛",
+        });
+        initData();
+      });
+    })
+    .catch(() => {
+      ElMessage({
+        type: "info",
+        message: "鍙栨秷鍒犻櫎",
+      });
+    });
+};
+
 //鎵撳嵃鏁版嵁
 const printExcel = () => {
   // 鏌ヨ鏉′欢
@@ -1294,9 +1364,11 @@
   if (isactive.value == 1) {
     selectoptions.value = userOptions;
     initData();
-  } else {
+  } else if (isactive.value == 2) {
     selectoptions.value = roleOptions;
     getRole();
+  } else {
+    GetFacePageData();
   }
 };
 
@@ -1331,6 +1403,7 @@
     });
   }
 };
+
 //绠$悊
 //璺敱璺宠浆
 const toDetail = (row) => {
@@ -1339,6 +1412,7 @@
 
 onMounted(() => {
   initData();
+  getRole();
 });
 </script>
 <style lang="scss" scoped>
@@ -1484,14 +1558,16 @@
     text-align: center;
   }
 }
+:deep(.hide .el-upload--picture-card) {
+  display: none;
+}
 </style>
 <style>
-.confirmButtonClass {
+/* .confirmButtonClass {
   margin-right: 10px;
 }
-
 .el-message-box .el-message-box__btns {
   flex-direction: row-reverse !important;
   justify-content: normal !important;
-}
+} */
 </style>

--
Gitblit v1.9.3