瀏覽代碼

接口返回数据加密前代码

hzj18279462576@163.com 2 年之前
父節點
當前提交
188daaaafe

+ 11 - 7
package-lock.json

@@ -265,6 +265,11 @@
         "fastq": "^1.6.0"
       }
     },
+    "@popperjs/core": {
+      "version": "npm:@sxzz/popperjs-es@2.11.7",
+      "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
+      "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
+    },
     "@trysound/sax": {
       "version": "0.2.0",
       "resolved": "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz",
@@ -719,6 +724,12 @@
         "@xmldom/xmldom": "^0.8.6"
       }
     },
+    "crypto-js": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz",
+      "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==",
+      "dev": true
+    },
     "css-select": {
       "version": "4.3.0",
       "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz",
@@ -936,13 +947,6 @@
         "lodash-unified": "^1.0.2",
         "memoize-one": "^6.0.0",
         "normalize-wheel-es": "^1.2.0"
-      },
-      "dependencies": {
-        "@popperjs/core": {
-          "version": "npm:@sxzz/popperjs-es@2.11.7",
-          "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
-          "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
-        }
       }
     },
     "emojis-list": {

+ 1 - 0
package.json

@@ -33,6 +33,7 @@
   },
   "devDependencies": {
     "@vitejs/plugin-vue": "^4.0.0",
+    "crypto-js": "^4.2.0",
     "fast-glob": "^3.3.2",
     "vite": "^4.1.0",
     "vite-plugin-svg-icons": "^2.0.1",

+ 5 - 3
src/utils/compressImg.js

@@ -34,19 +34,21 @@ function compressImg(file) {
         canvas.setAttribute("height", h);
         ctx.drawImage(this, 0, 0, w, h);
         if (fileSize < 0.2) {
+          //如果图片小于0.2兆 那么不执行压缩操作
           base64 = canvas.toDataURL(file["type"], 1);
         } else if (fileSize < 1) {
-          //如果图片小于一兆 那么不执行压缩操作
+          //如果图片大于1M 那么压缩0.5
           base64 = canvas.toDataURL(file["type"], 0.5);
         } else if (fileSize > 1 && fileSize < 2) {
-          //如果图片大于1M并且小于2M 那么压缩0.5
+          //如果图片大于1M并且小于2M 那么压缩0.1
           base64 = canvas.toDataURL(file["type"], 0.1);
         } else {
           //如果图片超过2m 那么压缩0.2
-          base64 = canvas.toDataURL(file["type"], 0.2);
+          base64 = canvas.toDataURL(file["type"], 0.1);
         }
         // 回调函数返回file的值(将base64编码转成file)
         files = dataURLtoFile(base64); //如果后台接收类型为base64的话这一步可以省略
+        console.log(files, "压缩的文件");
 
         resolve(files);
       };

+ 19 - 0
src/utils/eds.js

@@ -0,0 +1,19 @@
+import cryptoJs from "crypto-js";
+function decryptDes(message, key = "com.template.common.utils") {
+  var keyHex = cryptoJs.enc.Utf8.parse(key);
+  var decrypted = cryptoJs.DES.decrypt(
+    {
+      ciphertext: cryptoJs.enc.Base64.parse(message),
+    },
+    keyHex,
+    {
+      mode: cryptoJs.mode.ECB,
+      padding: cryptoJs.pad.Pkcs7,
+    }
+  );
+  return decrypted.toString(cryptoJs.enc.Utf8);
+}
+// des解密 message为需要解密的信息  key为密钥
+export default {
+  decryptDes,
+};

+ 2 - 3
src/views/caller/caller.vue

@@ -680,7 +680,6 @@ onUnmounted(() => {
       display: flex;
       flex-wrap: wrap;
       align-items: center;
-      margin: 10px 0 0 0;
 
       .search {
         color: #fff;
@@ -740,8 +739,8 @@ onUnmounted(() => {
 
   .footer {
     width: calc(100% - 60px);
-    height: calc(100% - 220px);
-    margin: 10px auto 30px;
+    height: calc(100% - 195px);
+    margin: 10px auto 20px;
 
     .el-table--fit {
       height: 100%;

+ 1 - 0
src/views/class/class.vue

@@ -375,6 +375,7 @@ const addClick = async () => {
   editVisible.value = true;
   editRuleForm.identity = "";
   editRuleForm.apply = "";
+  editRuleForm.classNum = "";
   editRuleForm.id = "";
 };
 

+ 1 - 0
src/views/grade/grade.vue

@@ -1227,6 +1227,7 @@ const importSuc = async () => {
   console.log(res);
   if (res.data.code == 200) {
     importXlsx.value = false;
+    upload.value.clearFiles();
     getList();
     ElMessage({
       type: "success",

+ 129 - 127
src/views/home/home.vue

@@ -116,29 +116,9 @@
           <div class="title">最受欢迎老师TOP6</div>
           <div class="teacher">
             <ul>
-              <li>
-                <span>1</span>
-                <span>王老师</span>
-              </li>
-              <li>
-                <span>2</span>
-                <span>刘老师</span>
-              </li>
-              <li>
-                <span>3</span>
-                <span>张老师</span>
-              </li>
-              <li>
-                <span>4</span>
-                <span>温老师</span>
-              </li>
-              <li>
-                <span>5</span>
-                <span>毕老师</span>
-              </li>
-              <li>
-                <span>6</span>
-                <span>赖老师</span>
+              <li v-for="(i, index) in greetTeaData">
+                <span>{{ index + 1 }}</span>
+                <span>{{ i.name }}</span>
               </li>
             </ul>
           </div>
@@ -284,6 +264,7 @@ import { ElMessage, ElMessageBox } from "element-plus";
 import { dayjs } from "element-plus";
 import lodash from "lodash";
 import axios from "axios";
+import eds from "@/utils/eds.js";
 import { useStore } from "vuex";
 const store = useStore();
 const api = ref("");
@@ -300,16 +281,30 @@ const echarts3 = ref();
 const echarts4 = ref();
 // 班级考勤
 const echarts5 = ref();
+// 最受欢迎老师TOP6
+const greetTeaData = ref();
 // 资源大数据
 const echarts6 = ref();
 
-const getList = () => {
+const getList = async () => {
   cartogram();
   cartogram2();
   doorForbidClick();
   behaviorClick();
   classClick();
+  greetTeaClick();
   resourceClick();
+  let res = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/login/queryReduce",
+    headers: {
+      token: sessionStorage.getItem("token"),
+      user_head: sessionStorage.getItem("userhead"),
+    },
+    // params: data,
+  });
+  console.log(res, "加密参数测试");
+  console.log(JSON.parse(eds.decryptDes(res.data.data)), "EDS解密");
 };
 
 // 用户类别占比(------------------------------)
@@ -762,21 +757,35 @@ const doorForbidClick = () => {
 // 6 行为统计
 const behaviorClick = async () => {
   // 基于准备好的dom,初始化echarts实例
-  // 圆环统计图
-  // let data = {
-  //   state: tabIndex1.value,
-  // };
-  // let res = await axios({
-  //   method: "get",
-  //   url: api.value + "/repairRecord/repairAnalysis",
-  //   headers: {
-  //     token: sessionStorage.getItem("token"),
-  //     user_head: sessionStorage.getItem("userhead"),
-  //   },
-  //   params: data,
-  // });
-  // console.log(res, "圆环 报修分析统计");
-  // let echartsData1 = [];
+  let res = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartWarning/behaviour",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    params: data,
+  });
+  console.log(res, "行为统计");
+  let color = [
+    "rgba(67, 181, 244, 1)",
+    "rgba(137, 207, 245, 1)",
+    "rgba(180, 226, 251, 1)",
+    "rgba(212, 237, 251, 1)",
+    "rgba(171, 249, 255, 1)",
+  ];
+  let typeData = [];
+  let typeName = res.data.data.forEach((item, index) => {
+    let arr = {
+      value: item.typeCount,
+      name: item.typeName,
+      itemStyle: {
+        color: color[index],
+      },
+    };
+    typeData.push(arr);
+  });
+  let totalCount = res.data.data[0].totalCount;
   echarts4.value = echarts.init(document.getElementById("behavior6"));
   echarts4.value.setOption({
     // title: {
@@ -798,43 +807,44 @@ const behaviorClick = async () => {
     series: [
       {
         type: "pie",
-        data: [
-          {
-            value: 224,
-            name: "区域入侵",
-            itemStyle: {
-              color: "rgba(67, 181, 244, 1)",
-            },
-          },
-          {
-            value: 304,
-            name: "防溺水",
-            itemStyle: {
-              color: "rgba(137, 207, 245, 1)",
-            },
-          },
-          {
-            value: 484,
-            name: "睡觉",
-            itemStyle: {
-              color: "rgba(180, 226, 251, 1)",
-            },
-          },
-          {
-            value: 300,
-            name: "抽烟",
-            itemStyle: {
-              color: "rgba(212, 237, 251, 1)",
-            },
-          },
-          {
-            value: 180,
-            name: "打架",
-            itemStyle: {
-              color: "rgba(171, 249, 255, 1)",
-            },
-          },
-        ],
+        // data: [
+        //   {
+        //     value: 224,
+        //     name: "区域入侵",
+        //     itemStyle: {
+        //       color: "rgba(67, 181, 244, 1)",
+        //     },
+        //   },
+        //   {
+        //     value: 304,
+        //     name: "防溺水",
+        //     itemStyle: {
+        //       color: "rgba(137, 207, 245, 1)",
+        //     },
+        //   },
+        //   {
+        //     value: 484,
+        //     name: "睡觉",
+        //     itemStyle: {
+        //       color: "rgba(180, 226, 251, 1)",
+        //     },
+        //   },
+        //   {
+        //     value: 300,
+        //     name: "抽烟",
+        //     itemStyle: {
+        //       color: "rgba(212, 237, 251, 1)",
+        //     },
+        //   },
+        //   {
+        //     value: 180,
+        //     name: "打架",
+        //     itemStyle: {
+        //       color: "rgba(171, 249, 255, 1)",
+        //     },
+        //   },
+        // ],
+        data: typeData,
         center: ["40%", "48%"],
         radius: ["48%", "65%"],
         label: {
@@ -860,20 +870,33 @@ const behaviorClick = async () => {
 const classClick = async () => {
   // 基于准备好的dom,初始化echarts实例
   // 圆环统计图
-  // let data = {
-  //   state: tabIndex1.value,
-  // };
-  // let res = await axios({
-  //   method: "get",
-  //   url: api.value + "/repairRecord/repairAnalysis",
-  //   headers: {
-  //     token: sessionStorage.getItem("token"),
-  //     user_head: sessionStorage.getItem("userhead"),
-  //   },
-  //   params: data,
-  // });
-  // console.log(res, "圆环 报修分析统计");
-  // let echartsData1 = [];
+  let res = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartAttendance/queryAttendanceList",
+    headers: {
+      token: sessionStorage.getItem("token"),
+      user_head: sessionStorage.getItem("userhead"),
+    },
+  });
+  console.log(res, "圆环 班级考勤");
+  let colorSel = [
+    "rgba(67, 181, 244, 1)",
+    "rgba(137, 207, 245, 1)",
+    "rgba(180, 226, 251, 1)",
+    "rgba(212, 237, 251, 1)",
+    "rgba(171, 249, 255, 1)",
+  ];
+  let data = [];
+  res.data.data.forEach((item, index) => {
+    let aug = {
+      value: item.proportion,
+      name: item.name,
+      itemStyle: {
+        color: colorSel[index],
+      },
+    };
+    data.push(aug);
+  });
   echarts5.value = echarts.init(document.getElementById("class"));
   echarts5.value.setOption({
     // title: {
@@ -895,43 +918,7 @@ const classClick = async () => {
     series: [
       {
         type: "pie",
-        data: [
-          {
-            value: 224,
-            name: "早退",
-            itemStyle: {
-              color: "rgba(67, 181, 244, 1)",
-            },
-          },
-          {
-            value: 304,
-            name: "旷课",
-            itemStyle: {
-              color: "rgba(137, 207, 245, 1)",
-            },
-          },
-          {
-            value: 484,
-            name: "迟到",
-            itemStyle: {
-              color: "rgba(180, 226, 251, 1)",
-            },
-          },
-          {
-            value: 300,
-            name: "请假",
-            itemStyle: {
-              color: "rgba(212, 237, 251, 1)",
-            },
-          },
-          {
-            value: 180,
-            name: "全勤",
-            itemStyle: {
-              color: "rgba(171, 249, 255, 1)",
-            },
-          },
-        ],
+        data: data,
         center: ["40%", "48%"],
         radius: ["48%", "65%"],
         label: {
@@ -948,6 +935,21 @@ const classClick = async () => {
     ],
   });
 };
+// 8 最受欢迎老师TOP6
+const greetTeaClick = async () => {
+  // 基于准备好的dom,初始化echarts实例
+  let res = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartEvaluateTeacher/queryTopSixTeacher",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    params: data,
+  });
+  console.log(res, "最受欢迎老师TOP6");
+  greetTeaData.value = res.data.data;
+};
 // 9 资源大数据
 const resourceClick = async () => {
   // 基于准备好的dom,初始化echarts实例

+ 13 - 1
src/views/login/index.vue

@@ -84,6 +84,11 @@
         </div>
       </div>
     </div>
+    <div class="footer">
+      <span
+        >赣公网安备36010602000314号&nbsp;&nbsp;&nbsp;&nbsp;赣ICP备17015482号-4</span
+      >
+    </div>
   </div>
 </template>
 
@@ -338,7 +343,7 @@ onBeforeMount(() => {
 
   .content {
     width: 100%;
-    height: calc(100% - 110px);
+    height: calc(100% - 130px);
     // margin-top: 40px;
     display: flex;
     // justify-content: space-between;
@@ -600,5 +605,12 @@ onBeforeMount(() => {
       }
     }
   }
+  .footer {
+    width: 100%;
+    height: 20px;
+    display: flex;
+    justify-content: center;
+    font-size: 12px;
+  }
 }
 </style>

+ 10 - 10
src/views/roles/roles.vue

@@ -72,7 +72,7 @@
         <!-- 管理组权限区域 -->
         <div class="body_box">
           <div class="box_left">管理组权限:</div>
-          <div class="box_center">具备全部权限</div>
+          <div class="box_center">请点击修改查看具体权限</div>
           <div class="box_right">
             <span
               style="display: inline-block; cursor: pointer"
@@ -564,7 +564,10 @@
             >
               <template #default="{ node, data }">
                 <span class="custom-tree-node">
-                  <span>{{ data.name }}</span>
+                  <span style="display: inline-block; width: 100px">{{
+                    data.name
+                  }}</span>
+                  <span>{{ data.departmentName }}</span>
                   <!-- <span>
                       <a @click="append(data)"> Append </a>
                       <a style="margin-left: 8px" @click="remove(node, data)">
@@ -789,7 +792,6 @@ const defaultAddManager = ref([]); // 默认勾选中的管理员
 // 获取树形权限数据
 const getList = async () => {
   getAllDataList(); // 权限数据
-  getUserAuthList(); // 各个用户权限数据
 };
 // 权限数据
 const getAllDataList = async () => {
@@ -815,13 +817,8 @@ const getAllDataList = async () => {
     tagList.value = JSON.parse(res.data.data[0].userId).data; // 管理人员
     menuList.value = JSON.parse(res.data.data[0].applyId).data; //菜单权限
     appList.value = JSON.parse(res.data.data[0].applyId).data; //应用权限
-    // console.log(tagList.value, appList.value);
-    // ElMessage({
-    //   type: "success",
-    //   showClose: true,
-    //   message: res.data.message,
-    //   center: true,
-    // });
+    console.log(tagList.value, menuList.value, appList.value);
+    getUserAuthList(); // 各个用户权限数据
   } else {
     ElMessage({
       type: "error",
@@ -1022,6 +1019,7 @@ const confirmEdit = (flag) => {
 const cancelManagement = () => {
   managementVis.value = false;
 };
+
 // 点击编辑时出现选择部门按钮 (--------------------------------------------)
 const editDepartmentClick = () => {
   editDepartmentVisible.value = true;
@@ -1176,6 +1174,8 @@ const updataAuth = async () => {
   console.log(res, "修改权限");
   if (res.data.code == 200) {
     editMemberVisible.value = false;
+    treListVisible.value = false;
+    // getAllDataList();
     ElMessage({
       type: "success",
       showClose: true,

+ 34 - 4
src/views/user/user.vue

@@ -2084,10 +2084,40 @@ const addBatchConcel = () => {
   addBatchShow.value = false;
 };
 // 批量导入按钮
-const bulkImport = () => {
-  uploadImgList.value = uploadImgList.value.slice(1);
+const bulkImport = async () => {
+  uploadImgList.value = uploadImgList.value.slice(0);
   console.log(uploadImgList.value, "拼接好的图片地址");
   console.log(upload2File.value, "导入的文件");
+
+  const formData = new FormData();
+  formData.append("file", upload2File.value);
+  formData.append("headImage", uploadImgList.value);
+
+  let res = await axios({
+    method: "post",
+    url: api.value + "/wanzai/api/smartUser/importExcelUsers",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    data: formData,
+  });
+  console.log(res, "确定批量导入");
+  if (res.data.code == 200) {
+    ElMessage({
+      type: "success",
+      showClose: true,
+      message: res.data.message,
+      center: true,
+    });
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.data.message,
+      center: true,
+    });
+  }
 };
 // 批量导入模板下载
 const downLoadtempAdd = async () => {
@@ -2260,7 +2290,7 @@ const handleUploadImgUpload = async (file) => {
       if (err) {
         console.error(err);
       } else {
-        console.log(data, "压缩图片获取成功");
+        console.log(data, "图片获取成功");
         uploadImgList.value =
           uploadImgList.value + "," + "https://" + data.Location;
         // 成功
@@ -2956,7 +2986,7 @@ onUnmounted(() => {
           }
           .img-upload-demo {
             :deep(.el-upload-list) {
-              display: none;
+              // display: none;
             }
           }
         }