瀏覽代碼

用户管理 接口对接中

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

+ 1 - 0
index.html

@@ -13,6 +13,7 @@
 
 
   <body>
   <body>
     <div id="app"></div>
     <div id="app"></div>
+    <script src="https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>
     <script type="module" src="/src/main.js"></script>
     <script type="module" src="/src/main.js"></script>
   </body>
   </body>
 </html>
 </html>

+ 62 - 0
package-lock.json

@@ -451,6 +451,11 @@
       "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.8.2.tgz",
       "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.8.2.tgz",
       "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw=="
       "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw=="
     },
     },
+    "animate.css": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmmirror.com/animate.css/-/animate.css-4.1.1.tgz",
+      "integrity": "sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ=="
+    },
     "ansi-regex": {
     "ansi-regex": {
       "version": "2.1.1",
       "version": "2.1.1",
       "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz",
       "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz",
@@ -1674,6 +1679,11 @@
       "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
       "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
       "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
       "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
     },
     },
+    "nprogress": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz",
+      "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA=="
+    },
     "nth-check": {
     "nth-check": {
       "version": "2.1.1",
       "version": "2.1.1",
       "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz",
       "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz",
@@ -1846,6 +1856,13 @@
         "posthtml-render": "^1.0.6"
         "posthtml-render": "^1.0.6"
       }
       }
     },
     },
+    "prettier": {
+      "version": "2.8.8",
+      "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz",
+      "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+      "dev": true,
+      "optional": true
+    },
     "proxy-from-env": {
     "proxy-from-env": {
       "version": "1.1.0",
       "version": "1.1.0",
       "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
       "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@@ -2640,6 +2657,51 @@
         "@vue/devtools-api": "^6.0.0-beta.14"
         "@vue/devtools-api": "^6.0.0-beta.14"
       }
       }
     },
     },
+    "vue-wxlogin": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/vue-wxlogin/-/vue-wxlogin-1.0.4.tgz",
+      "integrity": "sha512-Ah5LaMYiODav24sis+4luTSr90Unr2pj9wI8rUtgBGhZ6JJVqBN+vARwnhDmvYDPn0gushkxMSaIeH9KhPOCUQ==",
+      "dev": true,
+      "requires": {
+        "vue": "^2.4.2"
+      },
+      "dependencies": {
+        "@babel/parser": {
+          "version": "7.23.6",
+          "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.6.tgz",
+          "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
+          "dev": true
+        },
+        "@vue/compiler-sfc": {
+          "version": "2.7.16",
+          "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz",
+          "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==",
+          "dev": true,
+          "requires": {
+            "@babel/parser": "^7.23.5",
+            "postcss": "^8.4.14",
+            "prettier": "^1.18.2 || ^2.0.0",
+            "source-map": "^0.6.1"
+          }
+        },
+        "csstype": {
+          "version": "3.1.3",
+          "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+          "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+          "dev": true
+        },
+        "vue": {
+          "version": "2.7.16",
+          "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.16.tgz",
+          "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==",
+          "dev": true,
+          "requires": {
+            "@vue/compiler-sfc": "2.7.16",
+            "csstype": "^3.1.0"
+          }
+        }
+      }
+    },
     "vuex": {
     "vuex": {
       "version": "4.0.2",
       "version": "4.0.2",
       "resolved": "https://registry.npmmirror.com/vuex/-/vuex-4.0.2.tgz",
       "resolved": "https://registry.npmmirror.com/vuex/-/vuex-4.0.2.tgz",

+ 4 - 1
package.json

@@ -12,6 +12,7 @@
     "@easydarwin/easyplayer": "^5.0.7",
     "@easydarwin/easyplayer": "^5.0.7",
     "@element-plus/icons-vue": "^2.0.10",
     "@element-plus/icons-vue": "^2.0.10",
     "@liveqing/liveplayer-v3": "^3.7.10",
     "@liveqing/liveplayer-v3": "^3.7.10",
+    "animate.css": "^4.1.1",
     "axios": "^1.3.2",
     "axios": "^1.3.2",
     "cos-js-sdk-v5": "^1.5.0",
     "cos-js-sdk-v5": "^1.5.0",
     "dayjs": "^1.11.8",
     "dayjs": "^1.11.8",
@@ -20,6 +21,7 @@
     "hls.js": "^1.3.4",
     "hls.js": "^1.3.4",
     "jsencrypt": "^3.3.1",
     "jsencrypt": "^3.3.1",
     "lodash": "^4.17.21",
     "lodash": "^4.17.21",
+    "nprogress": "^0.2.0",
     "qrcode.vue": "^3.4.1",
     "qrcode.vue": "^3.4.1",
     "sass": "^1.58.0",
     "sass": "^1.58.0",
     "sass-loader": "^13.2.0",
     "sass-loader": "^13.2.0",
@@ -33,6 +35,7 @@
     "@vitejs/plugin-vue": "^4.0.0",
     "@vitejs/plugin-vue": "^4.0.0",
     "fast-glob": "^3.3.2",
     "fast-glob": "^3.3.2",
     "vite": "^4.1.0",
     "vite": "^4.1.0",
-    "vite-plugin-svg-icons": "^2.0.1"
+    "vite-plugin-svg-icons": "^2.0.1",
+    "vue-wxlogin": "^1.0.4"
   }
   }
 }
 }

+ 4 - 0
src/App.vue

@@ -30,4 +30,8 @@ onBeforeMount(() => {
   // margin: 0;
   // margin: 0;
   // padding: 0;
   // padding: 0;
 }
 }
+
+#nprogress .bar {
+  background-color: rgb(0, 97, 255) !important;
+}
 </style>
 </style>

文件差異過大導致無法顯示
+ 1 - 0
src/assets/icons/evaluate.svg


+ 15 - 2
src/layout/index.vue

@@ -3,7 +3,13 @@
     <SidevarItem></SidevarItem>
     <SidevarItem></SidevarItem>
     <div class="content">
     <div class="content">
       <Navbar></Navbar>
       <Navbar></Navbar>
-      <router-view></router-view>
+      <!-- <router-view></router-view> -->
+      <router-view v-slot="{ Component }">
+        <transition mode="out-in" :duration="200" enter-active-class="animate__animated animate__fadeIn"
+          leave-active-class="animate__animated animate__fadeOut">
+          <component :is="Component" />
+        </transition>
+      </router-view>
     </div>
     </div>
   </div>
   </div>
 </template>
 </template>
@@ -43,7 +49,7 @@ onBeforeMount(async () => {
 
 
   .content {
   .content {
     // min-width: 1740px;
     // min-width: 1740px;
-    max-width: calc(100vw - 81px);
+    // max-width: calc(100vw - 81px);
     min-width: calc(100vw - 220px);
     min-width: calc(100vw - 220px);
     width: 100%;
     width: 100%;
     height: calc(100vh);
     height: calc(100vh);
@@ -52,6 +58,13 @@ onBeforeMount(async () => {
       outline: none;
       outline: none;
     }
     }
   }
   }
+  .router_animate-enter-active {
+  animation: fadeIn 1s;
+}
+
+.router_animate-leave-active {
+  animation: fadeIn 0s;
+}
 }
 }
 </style>
 </style>
 <style lang="scss">
 <style lang="scss">

+ 6 - 6
src/layout/sidebar/Navbar.vue

@@ -112,7 +112,7 @@
                     <el-button
                     <el-button
                       class="queding"
                       class="queding"
                       type="primary"
                       type="primary"
-                      color="rgba(9, 101, 98, 1)"
+                      color="rgba(0, 97, 255, 1)"
                       @click="submitForm(ruleFormRef)"
                       @click="submitForm(ruleFormRef)"
                     >
                     >
                       确定
                       确定
@@ -368,7 +368,7 @@ onMounted(() => {
   display: flex;
   display: flex;
   align-items: center;
   align-items: center;
   height: 65px;
   height: 65px;
-  // width: 100%;
+  width: 100%;
   background-color: #fff;
   background-color: #fff;
   box-shadow: 5px 5px 10px 0px rgba(213, 228, 252, 1);
   box-shadow: 5px 5px 10px 0px rgba(213, 228, 252, 1);
 
 
@@ -449,8 +449,8 @@ onMounted(() => {
     }
     }
 
 
     :deep(.queding) {
     :deep(.queding) {
-      background-color: rgba(9, 101, 98, 1) !important;
-      border: 0.5px solid rgba(9, 101, 98, 1) !important;
+      background-color: rgba(0, 97, 255, 1) !important;
+      border: 0.5px solid rgba(0, 97, 255, 1) !important;
     }
     }
   }
   }
 }
 }
@@ -459,8 +459,8 @@ onMounted(() => {
 .el-overlay {
 .el-overlay {
   .el-message-box__btns {
   .el-message-box__btns {
     .el-button--primary {
     .el-button--primary {
-      background-color: rgba(9, 101, 98, 1) !important;
-      border: 0.5px solid rgba(9, 101, 98, 1) !important;
+      background-color: rgba(0, 97, 255, 1) !important;
+      border: 0.5px solid rgba(0, 97, 255, 1) !important;
     }
     }
   }
   }
 
 

+ 2 - 2
src/layout/sidebar/SidevarItem.vue

@@ -253,11 +253,11 @@ onBeforeMount(() => {
   // min-height: 400px;
   // min-height: 400px;
 }
 }
 .box-item {
 .box-item {
-  width: 220px;
+  width: 220px !important;
   height: calc(100vh);
   height: calc(100vh);
 }
 }
 .el-menu {
 .el-menu {
-  // width: 100%;
+  width: 220px;
   height: 100%;
   height: 100%;
   background: rgba(24, 51, 82, 1);
   background: rgba(24, 51, 82, 1);
   box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.16);
   box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.16);

+ 3 - 0
src/main.js

@@ -9,6 +9,8 @@ import App from "./App.vue";
 import router from "@/router";
 import router from "@/router";
 import store from "@/store";
 import store from "@/store";
 
 
+import "animate.css/animate.min.css";
+
 import SvgIcon from "./components/SvgIcon/index.vue";
 import SvgIcon from "./components/SvgIcon/index.vue";
 import "virtual:svg-icons-register";
 import "virtual:svg-icons-register";
 
 
@@ -17,6 +19,7 @@ for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
   app.component(key, component);
   app.component(key, component);
 }
 }
 
 
+
 app.use(ElementPlus, {
 app.use(ElementPlus, {
   locale: zhCn,
   locale: zhCn,
 });
 });

+ 9 - 1
src/router/index.js

@@ -6,6 +6,8 @@ import {
 import Layout from "@/layout/index.vue";
 import Layout from "@/layout/index.vue";
 import store from "@/store";
 import store from "@/store";
 import { ElMessage, ElMessageBox } from "element-plus";
 import { ElMessage, ElMessageBox } from "element-plus";
+import NProgress from 'nprogress'
+import 'nprogress/nprogress.css'
 const routes = [
 const routes = [
   {
   {
     path: "/login",
     path: "/login",
@@ -125,8 +127,9 @@ const router = createRouter({
   // history: createWebHashHistory("/hotelReservation/pc3/"), // 测试环境发布地址
   // history: createWebHashHistory("/hotelReservation/pc3/"), // 测试环境发布地址
   routes: routes,
   routes: routes,
 });
 });
-export default router;
+
 router.beforeEach(async (to, from, next) => {
 router.beforeEach(async (to, from, next) => {
+  NProgress.start() // 进度条开始
   // let hasRoutes = store.state.user.hasRoutes;
   // let hasRoutes = store.state.user.hasRoutes;
   // if (sessionStorage.getItem("token")) {
   // if (sessionStorage.getItem("token")) {
   //   if (!hasRoutes || to.path == "/login") {
   //   if (!hasRoutes || to.path == "/login") {
@@ -171,3 +174,8 @@ router.beforeEach(async (to, from, next) => {
   // }
   // }
   next();
   next();
 });
 });
+
+router.afterEach(() => {
+  NProgress.done() // 进度条结束
+})
+export default router;

+ 1 - 1
src/store/modules/user.js

@@ -10,7 +10,7 @@ const state = {
   username: "",
   username: "",
   password: "",
   password: "",
   // api: "/carstop/carbook", //
   // api: "/carstop/carbook", //
-  api: "/smartApi/wanzai/api", // 线上
+  api: "/smartApi", // 线上
   islogin: 1,
   islogin: 1,
   hasRoutes: false,
   hasRoutes: false,
   level: 1,
   level: 1,

+ 14 - 105
src/views/apply/apply.vue

@@ -4,7 +4,7 @@
       <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
       <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
       <span class="cameratxt">应用管理</span>
       <span class="cameratxt">应用管理</span>
     </div>
     </div>
-    <div>
+    <div style="overflow: auto">
       <div class="middle">
       <div class="middle">
         <div class="filter">
         <div class="filter">
           <el-button
           <el-button
@@ -159,7 +159,7 @@
             width="100%"
             width="100%"
             height="100%"
             height="100%"
             frameborder="0"
             frameborder="0"
-            scrolling="no"
+            scrolling="yes"
           >
           >
           </iframe>
           </iframe>
         </div>
         </div>
@@ -277,7 +277,7 @@ const getList = async () => {
   if (res.data.code == 200) {
   if (res.data.code == 200) {
     loading.value = false;
     loading.value = false;
     tableData.list = res.data.data.list;
     tableData.list = res.data.data.list;
-    total.value = res.data.data.total;
+    total.value = res.data.data.totalCount;
     // ElMessage({
     // ElMessage({
     //   type: "success",
     //   type: "success",
     //   showClose: true,
     //   showClose: true,
@@ -435,97 +435,6 @@ const handleFileUpload = (event) => {
   );
   );
 };
 };
 
 
-// 计算签名
-const getAuthorization = (opt, callback) => {
-  // 替换为自己服务端地址 获取put上传签名
-  const url = `http://127.0.0.1:3000/put-sign?ext=${opt.ext}`;
-  const xhr = new XMLHttpRequest();
-  xhr.open("GET", url, true);
-  xhr.onload = function (e) {
-    let credentials;
-    try {
-      const result = JSON.parse(e.target.responseText);
-      credentials = result;
-    } catch (e) {
-      callback("获取签名出错");
-    }
-    if (credentials) {
-      callback(null, {
-        securityToken: credentials.sessionToken,
-        authorization: credentials.authorization,
-        cosKey: credentials.cosKey,
-        cosHost: credentials.cosHost,
-      });
-    } else {
-      console.error(xhr.responseText);
-      callback("获取签名出错");
-    }
-  };
-  xhr.onerror = function (e) {
-    callback("获取签名出错");
-  };
-  xhr.send();
-};
-const uploadFile = (file, callback) => {
-  const fileName = file.name;
-  let ext = "";
-  const lastDotIndex = fileName.lastIndexOf(".");
-  if (lastDotIndex > -1) {
-    // 这里获取文件后缀 由服务端生成最终上传的路径
-    ext = fileName.substring(lastDotIndex + 1);
-  }
-  getAuthorization({ ext }, function (err, info) {
-    if (err) {
-      alert(err);
-      return;
-    }
-    const auth = info.authorization;
-    const securityToken = info.securityToken;
-    const Key = info.cosKey;
-    const protocol = location.protocol === "https:" ? "https:" : "http:";
-    const prefix = protocol + "//" + info.cosHost;
-    const url = prefix + "/" + camSafeUrlEncode(Key).replace(/%2F/g, "/");
-    const xhr = new XMLHttpRequest();
-    xhr.open("PUT", url, true);
-    xhr.setRequestHeader("Authorization", auth);
-    securityToken &&
-      xhr.setRequestHeader("x-cos-security-token", securityToken);
-    xhr.upload.onprogress = function (e) {
-      console.log(
-        "上传进度 " + Math.round((e.loaded / e.total) * 10000) / 100 + "%"
-      );
-    };
-    xhr.onload = function () {
-      if (/^2\d\d$/.test("" + xhr.status)) {
-        const ETag = xhr.getResponseHeader("etag");
-        callback(null, { url: url, ETag: ETag });
-      } else {
-        callback("文件 " + Key + " 上传失败,状态码:" + xhr.status);
-      }
-    };
-    xhr.onerror = function () {
-      callback("文件 " + Key + " 上传失败,请检查是否没配置 CORS 跨域规则");
-    };
-    xhr.send(file);
-  });
-};
-// 监听表单提交
-// document.getElementById('submitBtn').onclick = function (e) {
-//         const file = document.getElementById('fileSelector').files[0];
-//         if (!file) {
-//           document.getElementById('msg').innerText = '未选择上传文件';
-//           return;
-//         }
-//         file &&
-//           uploadFile(file, function (err, data) {
-//             console.log(err || data);
-//             document.getElementById('msg').innerText = err
-//               ? err
-//               : '上传成功,ETag=' + data.ETag;
-//           });
-//       };
-//     })();
-
 // const beforePicUpload = async () => {
 // const beforePicUpload = async () => {
 //   await getSign();
 //   await getSign();
 // };
 // };
@@ -577,10 +486,6 @@ const uploadFile = (file, callback) => {
 //     xhr.send(file.file); //或者 file
 //     xhr.send(file.file); //或者 file
 //   });
 //   });
 // };
 // };
-// // 文件上传成功时的钩子
-// const handleAvatarSuccess = (response, uploadFile) => {
-//   console.log(uploadFile.raw, "上传成功");
-// };
 // // 上传文件之前的钩子,参数为上传的文件
 // // 上传文件之前的钩子,参数为上传的文件
 // const beforeAvatarUpload = (rawFile) => {
 // const beforeAvatarUpload = (rawFile) => {
 //   if (rawFile.type !== "image/jpeg" && rawFile.type !== "image/png") {
 //   if (rawFile.type !== "image/jpeg" && rawFile.type !== "image/png") {
@@ -636,7 +541,8 @@ const applyClick = (row) => {
   applyVisible.value = true;
   applyVisible.value = true;
   applyTitle.value = "嵌套项目";
   applyTitle.value = "嵌套项目";
   applyTitle.value = row.name;
   applyTitle.value = row.name;
-  iframeSrc.value = row.urlLink;
+  // iframeSrc.value = row.urlLink;
+  iframeSrc.value = "https://www.campussmartlife.com/smartManage/#/login";
   console.log(row.urlLink);
   console.log(row.urlLink);
 };
 };
 const cancelApply = () => {
 const cancelApply = () => {
@@ -672,10 +578,12 @@ onBeforeMount(async () => {
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
 .content-box {
 .content-box {
-  width: 97.5%;
-  height: 89%;
+  min-width: 500px;
+  width: calc(100vw - 260px);
+  height: calc(100vh - 105px);
   margin: 20px auto;
   margin: 20px auto;
   background-color: #fff;
   background-color: #fff;
+  border-radius: 8px;
   color: #fff;
   color: #fff;
   display: flex;
   display: flex;
   flex-direction: column;
   flex-direction: column;
@@ -685,7 +593,7 @@ onBeforeMount(async () => {
     // width: calc(100wh - 40px);
     // width: calc(100wh - 40px);
     display: flex;
     display: flex;
     align-items: center;
     align-items: center;
-    height: 60px;
+
     margin: 0 30px;
     margin: 0 30px;
     border-bottom: 1px solid #ccc;
     border-bottom: 1px solid #ccc;
     color: rgb(0, 0, 0);
     color: rgb(0, 0, 0);
@@ -693,8 +601,9 @@ onBeforeMount(async () => {
     font-weight: 600;
     font-weight: 600;
 
 
     span {
     span {
+      height: 60px;
+      line-height: 60px;
       margin-right: 20px;
       margin-right: 20px;
-      cursor: pointer;
     }
     }
 
 
     .is_active {
     .is_active {
@@ -769,11 +678,11 @@ onBeforeMount(async () => {
 
 
   .footer {
   .footer {
     width: 96%;
     width: 96%;
-    height: 550px;
+    // height: 550px;
     margin: 10px auto 30px;
     margin: 10px auto 30px;
 
 
     .el-table--fit {
     .el-table--fit {
-      height: 100%;
+      // height: 100%;
 
 
       :deep(.el-table__header-wrapper) {
       :deep(.el-table__header-wrapper) {
         background-color: #000;
         background-color: #000;

+ 14 - 10
src/views/caller/caller.vue

@@ -4,7 +4,7 @@
       <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
       <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
       <div class="left_title">访客预约</div>
       <div class="left_title">访客预约</div>
     </div>
     </div>
-    <div>
+    <div class="scroll">
       <div class="middle">
       <div class="middle">
         <div class="filter">
         <div class="filter">
           <div class="condition">
           <div class="condition">
@@ -610,8 +610,8 @@ onUnmounted(() => {
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
 .content-box {
 .content-box {
-  width: 97.5%;
-  // height: 89%;
+  min-width: 1000px;
+  width: calc(100vw - 260px);
   height: calc(100vh - 105px);
   height: calc(100vh - 105px);
   margin: 20px auto;
   margin: 20px auto;
   background-color: #fff;
   background-color: #fff;
@@ -630,11 +630,15 @@ onUnmounted(() => {
     color: rgb(0, 0, 0);
     color: rgb(0, 0, 0);
     font-size: 18px;
     font-size: 18px;
     font-weight: 600;
     font-weight: 600;
-    // .left_title {
-    //   height: 60px;
-    // }
+    .left_title {
+      height: 60px;
+      line-height: 60px;
+    }
+  }
+  .scroll {
+    height: calc(100% - 61px);
+    overflow: auto;
   }
   }
-
   .middle {
   .middle {
     width: 96%;
     width: 96%;
     margin: 0 auto;
     margin: 0 auto;
@@ -706,11 +710,11 @@ onUnmounted(() => {
 
 
   .footer {
   .footer {
     width: 96%;
     width: 96%;
-    height: 550px;
+    // height: 550px;
     margin: 10px auto 30px;
     margin: 10px auto 30px;
 
 
     .el-table--fit {
     .el-table--fit {
-      height: 100%;
+      // height: 100%;
 
 
       :deep(.el-table__header-wrapper) {
       :deep(.el-table__header-wrapper) {
         background-color: #000;
         background-color: #000;
@@ -738,7 +742,7 @@ onUnmounted(() => {
         // color: #000;
         // color: #000;
         td {
         td {
           padding: 0;
           padding: 0;
-          border: 0;
+          // border: 0;
         }
         }
         &:hover {
         &:hover {
           td {
           td {

+ 6 - 5
src/views/energy/energy.vue

@@ -624,9 +624,10 @@ onUnmounted(() => {
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
 .content-box {
 .content-box {
-  width: 97.5%;
-  height: 89%;
-
+  min-width: 800px;
+  width: calc(100vw - 260px);
+  height: calc(100vh - 105px);
+  border-radius: 8px;
   margin: 20px auto;
   margin: 20px auto;
   background-color: #fff;
   background-color: #fff;
   // color: #fff;
   // color: #fff;
@@ -647,7 +648,6 @@ onUnmounted(() => {
 
 
     span {
     span {
       margin-right: 20px;
       margin-right: 20px;
-      cursor: pointer;
     }
     }
 
 
     .is_active {
     .is_active {
@@ -656,8 +656,9 @@ onUnmounted(() => {
   }
   }
 
 
   .middle {
   .middle {
-    width: 96%;
+    width: calc(100% - 60px);
     height: calc(100% - 61px);
     height: calc(100% - 61px);
+    overflow: auto;
     margin: 0 auto;
     margin: 0 auto;
     color: #000;
     color: #000;
     display: flex;
     display: flex;

+ 102 - 67
src/views/grade/grade.vue

@@ -4,7 +4,7 @@
       <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
       <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
       <span class="cameratxt">成绩管理</span>
       <span class="cameratxt">成绩管理</span>
     </div>
     </div>
-    <div>
+    <div style="overflow: auto">
       <div class="middle">
       <div class="middle">
         <div class="filter">
         <div class="filter">
           <div class="condition">
           <div class="condition">
@@ -33,7 +33,7 @@
               v-model="searchInput.semester"
               v-model="searchInput.semester"
               class="sel"
               class="sel"
               placeholder="请选择学期"
               placeholder="请选择学期"
-              style="width: 160px"
+              style="width: 180px"
             >
             >
               <el-option label="全部" value="1" />
               <el-option label="全部" value="1" />
               <el-option label="2019-2020秋季学期(下学期)" value="2" />
               <el-option label="2019-2020秋季学期(下学期)" value="2" />
@@ -43,28 +43,30 @@
           <div class="condition">
           <div class="condition">
             <span class="title">年级 : </span>
             <span class="title">年级 : </span>
             <el-select
             <el-select
-              v-model="searchInput.yearClass"
-              class="sel"
-              placeholder="请选择年级"
-              style="width: 160px"
-            >
-              <el-option label="全部" value="1" />
-              <el-option label="七年级" value="2" />
-              <el-option label="八年级" value="3" />
-            </el-select>
+                v-model="searchInput.grade"
+                placeholder="请选择年级"
+                style="width: 160px"
+              >
+                <el-option
+                  v-for="i in gradeData"
+                  :label="i.name"
+                  :value="i.id"
+                />
+              </el-select>
           </div>
           </div>
           <div class="condition">
           <div class="condition">
             <span class="title">班级 : </span>
             <span class="title">班级 : </span>
             <el-select
             <el-select
-              v-model="searchInput.class"
-              class="sel"
-              placeholder="请选择年级"
-              style="width: 160px"
-            >
-              <el-option label="全部" value="1" />
-              <el-option label="一班" value="2" />
-              <el-option label="二班" value="3" />
-            </el-select>
+                v-model="searchInput.class"
+                placeholder="请选择班级"
+                style="width:160px"
+              >
+                <el-option
+                  v-for="i in classsData"
+                  :label="i.name"
+                  :value="i.id"
+                />
+              </el-select>
           </div>
           </div>
           <div class="condition">
           <div class="condition">
             <span class="title">学科 : </span>
             <span class="title">学科 : </span>
@@ -153,12 +155,12 @@
         >
         >
           <el-table-column align="center" type="selection" width="80" />
           <el-table-column align="center" type="selection" width="80" />
           <el-table-column align="center" prop="xq" width="200" label="学期" />
           <el-table-column align="center" prop="xq" width="200" label="学期" />
-          <el-table-column align="center" prop="nj" label="年级" />
-          <el-table-column align="center" prop="bj" label="班级" />
+          <el-table-column align="center" prop="grade" label="年级" />
+          <el-table-column align="center" prop="schoolClass" label="班级" />
           <el-table-column align="center" prop="xk" label="学科" />
           <el-table-column align="center" prop="xk" label="学科" />
           <el-table-column align="center" prop="ks" label="考试类型" />
           <el-table-column align="center" prop="ks" label="考试类型" />
-          <el-table-column align="center" prop="xm" label="姓名" />
-          <el-table-column align="center" prop="xh" label="学号" />
+          <el-table-column align="center" prop="name" label="姓名" />
+          <el-table-column align="center" prop="cardNo" label="学号" />
           <el-table-column align="center" prop="cj" label="成绩" />
           <el-table-column align="center" prop="cj" label="成绩" />
           <el-table-column align="center" prop="status" label="操作">
           <el-table-column align="center" prop="status" label="操作">
             <template #default="scope">
             <template #default="scope">
@@ -417,11 +419,16 @@ const tableData = reactive({
     },
     },
   ],
   ],
 });
 });
+const semesterData=ref() //学期下拉数据
+const gradeData=ref() //年级下拉数据
+const classsData=ref() //班级下拉数据
+const objectData=ref() //学科下拉数据
+const examTypeData=ref() //考试类型数据
 
 
 const searchInput = reactive({
 const searchInput = reactive({
   keyWord: "",
   keyWord: "",
   semester: "1", // 学期
   semester: "1", // 学期
-  yearClass: "1", // 年级
+  grade: "1", // 年级
   class: "1", // 班级
   class: "1", // 班级
   subject: "1", // 学科
   subject: "1", // 学科
   examType: "1", // 考试类型
   examType: "1", // 考试类型
@@ -514,44 +521,68 @@ const editRules = reactive({
 // 删除弹窗
 // 删除弹窗
 const selDelVisible = ref(false);
 const selDelVisible = ref(false);
 
 
-// 查看房型列表
+// 获取身份数据下拉、年级数据下拉、班级数据下拉
+const classDataList = async () => {
+  let grade = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartGrade/querySmartGrades",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    // params: data,
+  });
+  // console.log(grade,"年级下拉数据");
+  gradeData.value = grade.data.data;
+  let classs = await axios({
+    method: "get",
+    url: api.value + "/wanzai/api/smartClass/querySmartClasss",
+    headers: {
+      // token: sessionStorage.getItem("token"),
+      // user_head: sessionStorage.getItem("userhead"),
+    },
+    // params: data,
+  });
+  // console.log(classs,"班级下拉数据");
+  classsData.value = classs.data.data;
+};
+// 查看学生列表
 const getList = async () => {
 const getList = async () => {
-  //   loading.value = true;
-  //   let data = {
-  //     page: currentPage.value,
-  //     rows: pageSize.value,
-  //     hName: searchInput.keyWord, // 房型名称
-  //     managerId: sessionStorage.getItem("token"),
-  //   };
-  //   let res = await axios({
-  //     method: "post",
-  //     url: api.value + "/mhotel/housequeryPage.action",
-  //     headers: {
-  //       // token: sessionStorage.getItem("token"),
-  //       // user_head: sessionStorage.getItem("userhead"),
-  //     },
-  //     params: data,
-  //   });
-  //   console.log(res, "房型管理");
-  //   if (res.data.code == 200) {
-  //     loading.value = false;
-  //     tableData.list = res.data.data.pageList;
-  //     total.value = res.data.data.total;
-  //     // ElMessage({
-  //     //   type: "success",
-  //     //   showClose: true,
-  //     //   message: res.data.message,
-  //     //   center: true,
-  //     // });
-  //   } else {
-  //     loading.value = false;
-  //     ElMessage({
-  //       type: "error",
-  //       showClose: true,
-  //       message: res.data.message,
-  //       center: true,
-  //     });
-  //   }
+    loading.value = true;
+    let data = {
+      currentPage: currentPage.value,
+      pageCount: pageSize.value,
+      name: searchInput.keyWord, // 用户名称
+    };
+    let res = await axios({
+      method: "get",
+      url: api.value + "/wanzai/api/smartScore/queryScorePage",
+      headers: {
+        // token: sessionStorage.getItem("token"),
+        // user_head: sessionStorage.getItem("userhead"),
+      },
+      params: data,
+    });
+    console.log(res, "成绩分页数据");
+    if (res.data.code == 200) {
+      loading.value = false;
+      tableData.list = res.data.data.list;
+      total.value = res.data.data.totalCount;
+      // ElMessage({
+      //   type: "success",
+      //   showClose: true,
+      //   message: res.data.message,
+      //   center: true,
+      // });
+    } else {
+      loading.value = false;
+      ElMessage({
+        type: "error",
+        showClose: true,
+        message: res.data.message,
+        center: true,
+      });
+    }
 };
 };
 
 
 // 搜索功能
 // 搜索功能
@@ -778,6 +809,7 @@ const handleCurrentChange = (value) => {
 onBeforeMount(async () => {
 onBeforeMount(async () => {
   api.value = store.state.user.api;
   api.value = store.state.user.api;
   getList();
   getList();
+  classDataList()
 });
 });
 onUnmounted(() => {
 onUnmounted(() => {
   // document.removeEventListener("keyup", Enters);
   // document.removeEventListener("keyup", Enters);
@@ -786,8 +818,9 @@ onUnmounted(() => {
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
 .content-box {
 .content-box {
-  width: 97.5%;
-  height: 89%;
+  min-width: 500px;
+  width: calc(100vw - 260px);
+  height: calc(100vh - 105px);
   margin: 20px auto;
   margin: 20px auto;
   background-color: #fff;
   background-color: #fff;
   color: #fff;
   color: #fff;
@@ -807,8 +840,10 @@ onUnmounted(() => {
     font-weight: 600;
     font-weight: 600;
 
 
     span {
     span {
+      height: 60px;
+      display: block;
+      line-height: 60px;
       margin-right: 20px;
       margin-right: 20px;
-      cursor: pointer;
     }
     }
 
 
     .is_active {
     .is_active {
@@ -925,11 +960,11 @@ onUnmounted(() => {
 
 
   .footer {
   .footer {
     width: 96%;
     width: 96%;
-    height: 450px;
+    // height: 450px;
     margin: 10px auto 30px;
     margin: 10px auto 30px;
 
 
     .el-table--fit {
     .el-table--fit {
-      height: 100%;
+      // height: 100%;
 
 
       :deep(.el-table__header-wrapper) {
       :deep(.el-table__header-wrapper) {
         background-color: #000;
         background-color: #000;

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

@@ -1118,8 +1118,9 @@ onUnmounted(() => {
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
 .content-box {
 .content-box {
-  width: 97.5%;
-  height: 89%;
+  min-width: 1000px;
+  width: calc(100vw - 260px);
+  height: calc(100vh - 105px);
   margin: 20px auto;
   margin: 20px auto;
   //   background-color: #fff;
   //   background-color: #fff;
   //   border: 1px solid #000;
   //   border: 1px solid #000;

+ 47 - 44
src/views/identity/identity.vue

@@ -4,7 +4,7 @@
       <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
       <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
       <span class="cameratxt">身份管理</span>
       <span class="cameratxt">身份管理</span>
     </div>
     </div>
-    <div>
+    <div style="overflow: auto">
       <div class="middle">
       <div class="middle">
         <div class="filter">
         <div class="filter">
           <div class="condition">
           <div class="condition">
@@ -365,44 +365,43 @@ const identityCardTitle = ref("");
 // const identityCardNum = ref(""); // 身份证卡号
 // const identityCardNum = ref(""); // 身份证卡号
 const identityCardIndex = ref(0); // 读卡步骤
 const identityCardIndex = ref(0); // 读卡步骤
 
 
-// 查看房型列表
+// 身份分页列表
 const getList = async () => {
 const getList = async () => {
-  //   loading.value = true;
-  //   let data = {
-  //     page: currentPage.value,
-  //     rows: pageSize.value,
-  //     hName: searchInput.keyWord, // 房型名称
-  //     managerId: sessionStorage.getItem("token"),
-  //   };
-  //   let res = await axios({
-  //     method: "post",
-  //     url: api.value + "/mhotel/housequeryPage.action",
-  //     headers: {
-  //       // token: sessionStorage.getItem("token"),
-  //       // user_head: sessionStorage.getItem("userhead"),
-  //     },
-  //     params: data,
-  //   });
-  //   console.log(res, "房型管理");
-  //   if (res.data.code == 200) {
-  //     loading.value = false;
-  //     tableData.list = res.data.data.pageList;
-  //     total.value = res.data.data.total;
-  //     // ElMessage({
-  //     //   type: "success",
-  //     //   showClose: true,
-  //     //   message: res.data.message,
-  //     //   center: true,
-  //     // });
-  //   } else {
-  //     loading.value = false;
-  //     ElMessage({
-  //       type: "error",
-  //       showClose: true,
-  //       message: res.data.message,
-  //       center: true,
-  //     });
-  //   }
+    loading.value = true;
+    let data = {
+      currentPage: currentPage.value,
+      pageCount: pageSize.value,
+      name: searchInput.keyWord, // 关键字名称
+    };
+    let res = await axios({
+      method: "get",
+      url: api.value + "/wanzai/api/smartIdentity/queryPageSmartIdentity",
+      headers: {
+        // token: sessionStorage.getItem("token"),
+        // user_head: sessionStorage.getItem("userhead"),
+      },
+      params: data,
+    });
+    console.log(res, "身份分页数据");
+    if (res.data.code == 200) {
+      loading.value = false;
+      tableData.list = res.data.data.list;
+      total.value = res.data.data.totalCount;
+      // ElMessage({
+      //   type: "success",
+      //   showClose: true,
+      //   message: res.data.message,
+      //   center: true,
+      // });
+    } else {
+      loading.value = false;
+      ElMessage({
+        type: "error",
+        showClose: true,
+        message: res.data.message,
+        center: true,
+      });
+    }
 };
 };
 
 
 // 搜索功能
 // 搜索功能
@@ -819,9 +818,11 @@ onUnmounted(() => {
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
 .content-box {
 .content-box {
-  width: 97.5%;
-  height: 89%;
+  min-width: 600px;
+  width: calc(100vw - 260px);
+  height: calc(100vh - 105px);
   margin: 20px auto;
   margin: 20px auto;
+  border-radius: 8px;
   background-color: #fff;
   background-color: #fff;
   color: #fff;
   color: #fff;
   display: flex;
   display: flex;
@@ -832,7 +833,7 @@ onUnmounted(() => {
     // width: calc(100wh - 40px);
     // width: calc(100wh - 40px);
     display: flex;
     display: flex;
     align-items: center;
     align-items: center;
-    height: 60px;
+
     margin: 0 30px;
     margin: 0 30px;
     border-bottom: 1px solid #ccc;
     border-bottom: 1px solid #ccc;
     color: rgb(0, 0, 0);
     color: rgb(0, 0, 0);
@@ -840,8 +841,10 @@ onUnmounted(() => {
     font-weight: 600;
     font-weight: 600;
 
 
     span {
     span {
+      display: block;
+      height: 60px;
+      line-height: 60px;
       margin-right: 20px;
       margin-right: 20px;
-      cursor: pointer;
     }
     }
 
 
     .is_active {
     .is_active {
@@ -927,11 +930,11 @@ onUnmounted(() => {
 
 
   .footer {
   .footer {
     width: 96%;
     width: 96%;
-    height: 550px;
+    // height: 550px;
     margin: 10px auto 30px;
     margin: 10px auto 30px;
 
 
     .el-table--fit {
     .el-table--fit {
-      height: 100%;
+      // height: 100%;
 
 
       :deep(.el-table__header-wrapper) {
       :deep(.el-table__header-wrapper) {
         background-color: #000;
         background-color: #000;

+ 123 - 115
src/views/info/info.vue

@@ -1,122 +1,126 @@
 <template>
 <template>
   <div class="content-box">
   <div class="content-box">
     <div class="header">基本信息</div>
     <div class="header">基本信息</div>
-    <!-- 学校基本信息区域 -->
-    <div class="title">
-      <div class="title_text">学校基本信息</div>
-      <el-button type="primary" v-if="showSchool" @click="saveSchool"
-        >保存</el-button
-      >
-      <el-button
-        type="primary"
-        plain
-        v-if="showSchool"
-        @click="showSchool = false"
-        >取消</el-button
-      >
-
-      <el-button type="primary" v-if="!showSchool" @click="editSchool"
-        >修改</el-button
-      >
-    </div>
 
 
-    <div class="info">
-      学校编码:
-      <span v-if="!showSchool">{{ schoolCode || "无" }}</span>
-      <el-input
-        v-if="showSchool"
-        style="width: 150px"
-        v-model="schoolCode"
-        placeholder="请输入学校编码"
-      />
-    </div>
-    <div class="info">
-      学校名称:
-      <span v-if="!showSchool">{{ schoolName || "无" }}</span>
-      <el-input
-        v-if="showSchool"
-        style="width: 150px"
-        v-model="schoolName"
-        placeholder="请输入学校名称"
-      />
-    </div>
-    <div class="info info2">
-      <span class="info_key">校徽:</span>
-
-      <el-upload action="none">
-        <el-button class="info_btn" type="primary" plain v-if="showSchool">
-          点击上传
-        </el-button>
-      </el-upload>
-
-      <img class="info_img" src="@/assets/school_logo.jpg" fit="cover" />
-      <div class="info_img" v-if="!schoolImg">暂无图片</div>
-      <div class="icon_delete" v-if="showSchool" @click="handleDelete">
-        <el-icon>
-          <Delete />
-        </el-icon>
+    <div class="scroll">
+      <!-- 学校基本信息区域 -->
+      <div class="title">
+        <div class="title_text">学校基本信息</div>
+        <el-button type="primary" v-if="showSchool" @click="saveSchool"
+          >保存</el-button
+        >
+        <el-button
+          type="primary"
+          plain
+          v-if="showSchool"
+          @click="showSchool = false"
+          >取消</el-button
+        >
+
+        <el-button type="primary" v-if="!showSchool" @click="editSchool"
+          >修改</el-button
+        >
       </div>
       </div>
-    </div>
-    <div class="info info2">
-      <span class="info_key">管理平台logo:</span>
-
-      <el-upload action="none">
-        <el-button class="info_btn" type="primary" plain v-if="showSchool">
-          点击上传
-        </el-button>
-      </el-upload>
-
-      <img class="info_img" src="@/assets/school_logo.jpg" fit="cover" />
-      <!-- <div class="info_img" v-if="!logoImg">暂无图片</div> -->
-
-      <div class="icon_delete" v-if="showSchool" @click="handleDelete">
-        <el-icon>
-          <Delete />
-        </el-icon>
+      <div class="info">
+        学校编码:
+        <span v-if="!showSchool">{{ schoolCode || "无" }}</span>
+        <el-input
+          v-if="showSchool"
+          style="width: 150px"
+          v-model="schoolCode"
+          placeholder="请输入学校编码"
+        />
+      </div>
+      <div class="info">
+        学校名称:
+        <span v-if="!showSchool">{{ schoolName || "无" }}</span>
+        <el-input
+          v-if="showSchool"
+          style="width: 150px"
+          v-model="schoolName"
+          placeholder="请输入学校名称"
+        />
+      </div>
+      <div class="info info2">
+        <span class="info_key">校徽:</span>
+
+        <el-upload action="none">
+          <el-button class="info_btn" type="primary" plain v-if="showSchool">
+            点击上传
+          </el-button>
+        </el-upload>
+
+        <img class="info_img" src="@/assets/school_logo.jpg" fit="cover" />
+        <div class="info_img" v-if="!schoolImg">暂无图片</div>
+        <div class="icon_delete" v-if="showSchool" @click="handleDelete">
+          <el-icon>
+            <Delete />
+          </el-icon>
+        </div>
+      </div>
+      <div class="info info2">
+        <span class="info_key">管理平台logo:</span>
+
+        <el-upload action="none">
+          <el-button class="info_btn" type="primary" plain v-if="showSchool">
+            点击上传
+          </el-button>
+        </el-upload>
+
+        <img class="info_img" src="@/assets/school_logo.jpg" fit="cover" />
+        <!-- <div class="info_img" v-if="!logoImg">暂无图片</div> -->
+
+        <div class="icon_delete" v-if="showSchool" @click="handleDelete">
+          <el-icon>
+            <Delete />
+          </el-icon>
+        </div>
+      </div>
+      <div class="info">在校学生人数:150000</div>
+
+      <!-- 公众号信息区域 -->
+      <div class="title">
+        <div class="title_text">公众号</div>
+        <el-button type="primary" v-if="showApp" @click="saveApp"
+          >保存</el-button
+        >
+        <el-button type="primary" plain v-if="showApp" @click="showApp = false"
+          >取消</el-button
+        >
+        <el-button type="primary" v-if="!showApp" @click="editApp"
+          >修改</el-button
+        >
       </div>
       </div>
-    </div>
-    <div class="info">在校学生人数:150000</div>
-
-    <!-- 公众号信息区域 -->
-    <div class="title">
-      <div class="title_text">公众号</div>
-      <el-button type="primary" v-if="showApp" @click="saveApp">保存</el-button>
-      <el-button type="primary" plain v-if="showApp" @click="showApp = false"
-        >取消</el-button
-      >
-      <el-button type="primary" v-if="!showApp" @click="editApp"
-        >修改</el-button
-      >
-    </div>
 
 
-    <div class="info">
-      名称:
-      <span v-if="!showApp">{{ appName || "无" }}</span>
-      <el-input
-        v-if="showApp"
-        style="width: 200px"
-        v-model="appName"
-        placeholder="请输入公众号名称"
-      />
-    </div>
-    <div class="info">
-      APPID:
-      <span v-if="!showApp">{{ appAppid || "无" }}</span>
-      <el-input
-        v-if="showApp"
-        style="width: 200px"
-        v-model="appAppid"
-        placeholder="请输入APPID"
-      />
-    </div>
-    <div class="info">
-      原始ID: <span v-if="!showApp">{{ appOldId || "无" }}</span>
-      <el-input
-        v-if="showApp"
-        style="width: 200px"
-        v-model="appOldId"
-        placeholder="请输入原始ID"
-      />
+      <div class="info">
+        名称:
+        <span v-if="!showApp">{{ appName || "无" }}</span>
+        <el-input
+          v-if="showApp"
+          style="width: 200px"
+          v-model="appName"
+          placeholder="请输入公众号名称"
+        />
+      </div>
+      <div class="info">
+        APPID:
+        <span v-if="!showApp">{{ appAppid || "无" }}</span>
+        <el-input
+          v-if="showApp"
+          style="width: 200px"
+          v-model="appAppid"
+          placeholder="请输入APPID"
+        />
+      </div>
+      <div class="info">
+        原始ID: <span v-if="!showApp">{{ appOldId || "无" }}</span>
+        <el-input
+          v-if="showApp"
+          style="width: 200px"
+          v-model="appOldId"
+          placeholder="请输入原始ID"
+        />
+      </div>
     </div>
     </div>
   </div>
   </div>
 </template>
 </template>
@@ -179,8 +183,9 @@ const handleDelete = () => {
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
 .content-box {
 .content-box {
-  width: 97.5%;
-  height: 89%;
+  min-width: 1000px;
+  width: calc(100vw - 260px);
+  height: calc(100vh - 105px);
   margin: 20px auto;
   margin: 20px auto;
   background-color: #fff;
   background-color: #fff;
   box-shadow: 0px 3px 10px rgba(0, 97, 255, 0.2);
   box-shadow: 0px 3px 10px rgba(0, 97, 255, 0.2);
@@ -194,7 +199,10 @@ const handleDelete = () => {
     font-weight: bold;
     font-weight: bold;
     border-bottom: 1px solid #cccccc;
     border-bottom: 1px solid #cccccc;
   }
   }
-
+  .scroll {
+    height: calc(100% - 61px);
+    overflow: auto;
+  }
   .title {
   .title {
     display: flex;
     display: flex;
     align-items: center;
     align-items: center;

+ 14 - 9
src/views/log/log.vue

@@ -4,7 +4,7 @@
       <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
       <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
       <span class="cameratxt">业务日志</span>
       <span class="cameratxt">业务日志</span>
     </div>
     </div>
-    <div>
+    <div class="scroll">
       <div class="middle">
       <div class="middle">
         <div class="filter">
         <div class="filter">
           <div class="condition">
           <div class="condition">
@@ -701,8 +701,9 @@ onUnmounted(() => {
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
 .content-box {
 .content-box {
-  width: 97.5%;
-  height: 89%;
+  min-width: 1000px;
+  width: calc(100vw - 260px);
+  height: calc(100vh - 105px);
   margin: 20px auto;
   margin: 20px auto;
   background-color: #fff;
   background-color: #fff;
   color: #fff;
   color: #fff;
@@ -722,15 +723,19 @@ onUnmounted(() => {
     font-weight: 600;
     font-weight: 600;
 
 
     span {
     span {
-      margin-right: 20px;
-      cursor: pointer;
+      display: block;
+      height: 60px;
+      line-height: 60px;
     }
     }
 
 
     .is_active {
     .is_active {
       color: rgba(111, 182, 184, 1);
       color: rgba(111, 182, 184, 1);
     }
     }
   }
   }
-
+  .scroll {
+    height: calc(100% - 61px);
+    overflow: auto;
+  }
   .middle {
   .middle {
     width: 96%;
     width: 96%;
     margin: 0 auto;
     margin: 0 auto;
@@ -807,11 +812,11 @@ onUnmounted(() => {
 
 
   .footer {
   .footer {
     width: 96%;
     width: 96%;
-    height: 550px;
+    // height: 550px;
     margin: 10px auto 30px;
     margin: 10px auto 30px;
 
 
     .el-table--fit {
     .el-table--fit {
-      height: 100%;
+      // height: 100%;
 
 
       :deep(.el-table__header-wrapper) {
       :deep(.el-table__header-wrapper) {
         background-color: #000;
         background-color: #000;
@@ -841,7 +846,7 @@ onUnmounted(() => {
 
 
       :deep(.el-table__row td) {
       :deep(.el-table__row td) {
         padding: 0;
         padding: 0;
-        border: 0;
+        // border: 0;
         .normal {
         .normal {
           background-color: rgb(139, 195, 74);
           background-color: rgb(139, 195, 74);
           color: #fff;
           color: #fff;

+ 141 - 72
src/views/login/index.vue

@@ -1,17 +1,29 @@
 <template>
 <template>
   <div class="box">
   <div class="box">
-    <div class="box_img"></div>
-    <div class="box_school">万载三中</div>
-    <div class="box_wel">欢迎使用智慧校园管理平台</div>
-    <div class="box_login">
-      <div class="login_title">微信扫码登录</div>
-      <div class="login_tips">请使用微信扫描二维码登录</div>
-      <div class="login_code">
-        <qrcode-vue :value="codeUrl" :size="codeSize" level="H" />
+    <div class="top">
+      <div class="box_img"></div>
+      <div class="box_school">万载三中</div>
+    </div>
+    <div class="content">
+      <div class="box_wel">
+        <span>欢迎使用智慧校园管理平台</span>
       </div>
       </div>
-      <div class="login_btn">
-        <div class="btn" @click="login">单点登录</div>
-        <div class="btn">统一认证</div>
+      <div class="box_login">
+        <div class="login_title">微信扫码登录</div>
+        <div class="login_tips">请使用微信扫描二维码登录</div>
+        <div class="login_code">
+          <!-- <qrcode-vue
+            value="https://www.campussmartlife.com/smartApi/wanzai/api/wechat/login"
+            :size="codeSize"
+            level="H"
+            @callback="handleScan"
+          /> -->
+          <div id="weixin"></div>
+        </div>
+        <div class="login_btn">
+          <div class="btn" @click="login">单点登录</div>
+          <div class="btn">统一认证</div>
+        </div>
       </div>
       </div>
     </div>
     </div>
   </div>
   </div>
@@ -24,6 +36,7 @@ import {
   watch,
   watch,
   nextTick,
   nextTick,
   onBeforeMount,
   onBeforeMount,
+  onMounted,
   onUnmounted,
   onUnmounted,
 } from "vue";
 } from "vue";
 import { useRouter } from "vue-router";
 import { useRouter } from "vue-router";
@@ -32,6 +45,7 @@ import { dayjs } from "element-plus";
 import lodash from "lodash";
 import lodash from "lodash";
 import axios from "axios";
 import axios from "axios";
 import QrcodeVue from "qrcode.vue";
 import QrcodeVue from "qrcode.vue";
+import wxlogin from "vue-wxlogin";
 import { useStore } from "vuex";
 import { useStore } from "vuex";
 const store = useStore();
 const store = useStore();
 const api = ref("");
 const api = ref("");
@@ -43,89 +57,144 @@ const login = () => {
   router.push({ path: `/wanzai/home` });
   router.push({ path: `/wanzai/home` });
   sessionStorage.setItem("sidevarItem", "/wanzai/home");
   sessionStorage.setItem("sidevarItem", "/wanzai/home");
 };
 };
+// 实例微信js对象
+const setWxerwma =async () => {
+  //生成微信扫码登录二维码页面
+  new WxLogin({
+    self_redirect: true, //true:手机点击确认登录后可以在 iframe 内跳转到 redirect_uri
+    id: "weixin", //显示二维码容器设置
+    appid: "wx539dfc0670acb9c4", //应用位置标识appid
+    scope: "snsapi_login", //当前微信扫码登录页面已经授权了
+    redirect_uri: "https://www.campussmartlife.com/smartApi/wanzai/api/wechat/login", //填写授权回调域路径,就是用户授权成功以后,微信服务器向公司后台推送code地址
+    state: "", //state就是后台服务器重定向的地址携带用户信息
+    style: "black",
+    href: "",
+  });
+}
+onMounted(() => {
+  setWxerwma()
+  // var obj = new WxLogin({
+  //   id: "weixin",
+  //   appid: "wx539dfc0670acb9c4",
+  //   scope: "snsapi_login",
+  //   redirect_uri:
+  //     "https://www.campussmartlife.com/smartApi/wanzai/api/wechat/login",
+  // });
+});
 </script>
 </script>
 
 
 <style lang="scss" scoped>
 <style lang="scss" scoped>
 .box {
 .box {
-  position: relative;
-  width: 1920px;
-  height: 1080px;
+  // position: relative;
+  min-width: 1300px;
+  min-height: 750px;
+  width: 100vw;
+  height: 100vh;
   color: #000;
   color: #000;
   background-image: url(@/assets/school/login_bg.png);
   background-image: url(@/assets/school/login_bg.png);
   background-size: 100% 100%;
   background-size: 100% 100%;
-
-  .box_img {
-    position: absolute;
-    top: 54px;
-    left: 62px;
-    width: 56px;
-    height: 56px;
-    border-radius: 50%;
-    background-color: skyblue;
-  }
-
-  .box_school {
-    position: absolute;
-    top: 61px;
-    left: 141px;
-    font-size: 29px;
-    font-weight: bold;
-  }
-
-  .box_wel {
-    position: absolute;
-    top: 193px;
-    left: 256px;
-    font-size: 52.5px;
-    font-weight: bold;
-  }
-
-  .box_login {
-    position: absolute;
-    top: 223px;
-    left: 1286px;
-    padding: 65px 0;
-    box-sizing: border-box;
+  .top {
     display: flex;
     display: flex;
-    flex-direction: column;
-    justify-content: space-between;
     align-items: center;
     align-items: center;
-    width: 426px;
-    height: 536px;
+    padding: 54px 0 0 62px;
 
 
-    .login_title {
-      font-size: 24px;
-      font-weight: bold;
+    .box_img {
+      // position: absolute;
+      // top: 54px;
+      // left: 62px;
+      width: 56px;
+      height: 56px;
+      border-radius: 50%;
+      background-color: skyblue;
+      margin-right: 20px;
     }
     }
 
 
-    .login_tips {
-      color: #a6a6a6;
-      font-size: 16px;
+    .box_school {
+      // position: absolute;
+      // top: 61px;
+      // left: 141px;
+      font-size: 29px;
+      font-weight: bold;
     }
     }
+  }
 
 
-    .login_code {
-      width: 200px;
-      height: 200px;
-      background-color: skyblue;
+  .content {
+    width: 100%;
+    height: calc(100% - 110px);
+    // margin-top: 40px;
+    display: flex;
+    // justify-content: space-between;
+    .box_wel {
+      font-size: 52.5px;
+      font-weight: bold;
+      margin-top: 20px;
+      width: 66%;
+      height: 40%;
+      span {
+        display: block;
+        text-align: center;
+      }
     }
     }
 
 
-    .login_btn {
+    .box_login {
+      // position: absolute;
+      // top: 223px;
+      // left: 1286px;
+      width: 24%;
+      height: 70%;
+      box-shadow: 0px 3px 10px rgba(0, 97, 255, 0.2);
+      background-color: #fff;
+      // border: 1px solid red;
+      // margin-top: 100px;
+      padding: 40px 0;
+      box-sizing: border-box;
       display: flex;
       display: flex;
-      align-items: center;
+      flex-direction: column;
       justify-content: space-between;
       justify-content: space-between;
-      width: 210px;
-      height: 40px;
+      align-items: center;
+
+      // width: 426px;
+      // height: 536px;
+
+      .login_title {
+        font-size: 24px;
+        font-weight: bold;
+      }
 
 
-      .btn {
+      .login_tips {
+        color: #a6a6a6;
+        font-size: 16px;
+      }
+
+      .login_code {
+        width: 200px;
+        height: 200px;
+        background-color: skyblue;
+        #weixin{
+          width: 200px;
+          height: 200px;
+        }
+      }
+
+      .login_btn {
         display: flex;
         display: flex;
-        justify-content: center;
         align-items: center;
         align-items: center;
-        width: 98px;
+        justify-content: space-between;
+        width: 210px;
         height: 40px;
         height: 40px;
-        color: #fff;
-        font-size: 16px;
-        border-radius: 8px;
-        background-color: #0061ff;
+
+        .btn {
+          display: flex;
+          justify-content: center;
+          align-items: center;
+          width: 98px;
+          height: 40px;
+          color: #fff;
+          font-size: 16px;
+          border-radius: 8px;
+          background-color: #0061ff;
+          cursor: pointer;
+        }
       }
       }
     }
     }
   }
   }

+ 13 - 5
src/views/roles/roles.vue

@@ -754,19 +754,23 @@ const tableRowClassName = ({ row, rowIndex }) => {
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
 .content-box {
 .content-box {
-  width: 97.5%;
-  height: 89%;
+  min-width: 1000px;
+  width: calc(100vw - 260px);
+  height: calc(100vh - 105px);
   margin: 20px auto;
   margin: 20px auto;
   // background-color: #fff;
   // background-color: #fff;
   color: #fff;
   color: #fff;
   display: flex;
   display: flex;
-  box-shadow: 0px 3px 10px rgba(0, 97, 255, 0.2);
+  // box-shadow: 0px 3px 10px rgba(0, 97, 255, 0.2);
 
 
   .box_left {
   .box_left {
     width: 247px;
     width: 247px;
+    height: 100%;
 
 
     ::v-deep(.el-card__body) {
     ::v-deep(.el-card__body) {
       padding: 10px;
       padding: 10px;
+      height: calc(100% - 20px);
+      overflow: auto;
     }
     }
 
 
     .left_tree {
     .left_tree {
@@ -789,6 +793,7 @@ const tableRowClassName = ({ row, rowIndex }) => {
   .box_right {
   .box_right {
     margin-left: 15px;
     margin-left: 15px;
     width: 1415px;
     width: 1415px;
+    height: 100%;
 
 
     ::v-deep(.el-card__header),
     ::v-deep(.el-card__header),
     ::v-deep(.el-card__body) {
     ::v-deep(.el-card__body) {
@@ -799,11 +804,14 @@ const tableRowClassName = ({ row, rowIndex }) => {
       padding-left: 34px;
       padding-left: 34px;
       display: flex;
       display: flex;
       align-items: center;
       align-items: center;
-      height: 96px;
+      height: 65px;
       font-size: 24px;
       font-size: 24px;
       font-weight: bold;
       font-weight: bold;
     }
     }
-
+    :deep(.el-card__body) {
+      height: calc(100% - 66px);
+      overflow: auto;
+    }
     .right_body {
     .right_body {
       .body_box {
       .body_box {
         display: flex;
         display: flex;

+ 15 - 9
src/views/safety/safety.vue

@@ -4,7 +4,7 @@
       <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
       <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
       <span class="cameratxt">校园安全</span>
       <span class="cameratxt">校园安全</span>
     </div>
     </div>
-    <div>
+    <div class="scroll">
       <div class="middle">
       <div class="middle">
         <div class="filter">
         <div class="filter">
           <div class="condition">
           <div class="condition">
@@ -580,8 +580,10 @@ onUnmounted(() => {
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
 .content-box {
 .content-box {
-  width: 97.5%;
-  height: 89%;
+  min-width: 800px;
+  width: calc(100vw - 260px);
+  height: calc(100vh - 105px);
+  border-radius: 8px;
   margin: 20px auto;
   margin: 20px auto;
   background-color: #fff;
   background-color: #fff;
   color: #fff;
   color: #fff;
@@ -593,7 +595,7 @@ onUnmounted(() => {
     // width: calc(100wh - 40px);
     // width: calc(100wh - 40px);
     display: flex;
     display: flex;
     align-items: center;
     align-items: center;
-    height: 60px;
+
     margin: 0 30px;
     margin: 0 30px;
     border-bottom: 1px solid #ccc;
     border-bottom: 1px solid #ccc;
     color: rgb(0, 0, 0);
     color: rgb(0, 0, 0);
@@ -601,15 +603,19 @@ onUnmounted(() => {
     font-weight: 600;
     font-weight: 600;
 
 
     span {
     span {
+      display: block;
+      line-height: 60px;
+      height: 60px;
       margin-right: 20px;
       margin-right: 20px;
-      cursor: pointer;
     }
     }
 
 
     .is_active {
     .is_active {
       color: rgba(111, 182, 184, 1);
       color: rgba(111, 182, 184, 1);
     }
     }
   }
   }
-
+  .scroll {
+    overflow: auto;
+  }
   .middle {
   .middle {
     width: 96%;
     width: 96%;
     margin: 0 auto;
     margin: 0 auto;
@@ -688,12 +694,12 @@ onUnmounted(() => {
   }
   }
 
 
   .footer {
   .footer {
-    width: 96%;
-    height: 540px;
+    width: calc(100% - 60px);
+    // height: 540px;
     margin: 10px auto 30px;
     margin: 10px auto 30px;
 
 
     .el-table--fit {
     .el-table--fit {
-      height: 100%;
+      // height: 100%;
 
 
       :deep(.el-table__header-wrapper) {
       :deep(.el-table__header-wrapper) {
         background-color: #000;
         background-color: #000;

+ 7 - 6
src/views/screenShot/screenShot.vue

@@ -689,8 +689,9 @@ onUnmounted(() => {
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
 .content-box {
 .content-box {
-  width: 97.5%;
-  height: 89%;
+  min-width: 1000px;
+  width: calc(100vw - 260px);
+  height: calc(100vh - 105px);
   margin: 20px auto;
   margin: 20px auto;
   background-color: #fff;
   background-color: #fff;
   color: #fff;
   color: #fff;
@@ -714,7 +715,7 @@ onUnmounted(() => {
     width: 96%;
     width: 96%;
     height: calc(100% - 61px);
     height: calc(100% - 61px);
     margin: 0 auto;
     margin: 0 auto;
-
+    overflow: auto;
     color: #000;
     color: #000;
 
 
     // border-bottom: 1px solid rgb(231, 231, 231);
     // border-bottom: 1px solid rgb(231, 231, 231);
@@ -739,11 +740,11 @@ onUnmounted(() => {
 
 
         .footer {
         .footer {
           width: 100%;
           width: 100%;
-          height: 550px;
+          // height: 550px;
           margin: 10px auto 30px;
           margin: 10px auto 30px;
 
 
           .el-table--fit {
           .el-table--fit {
-            height: 100%;
+            // height: 100%;
 
 
             :deep(.el-table__header-wrapper) {
             :deep(.el-table__header-wrapper) {
               background-color: #000;
               background-color: #000;
@@ -773,7 +774,7 @@ onUnmounted(() => {
 
 
             :deep(.el-table__row td) {
             :deep(.el-table__row td) {
               padding: 0;
               padding: 0;
-              border: 0;
+              // border: 0;
             }
             }
 
 
             .el-button--primary {
             .el-button--primary {

+ 15 - 10
src/views/source/source.vue

@@ -4,7 +4,7 @@
       <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
       <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
       <span class="cameratxt">我的数据源</span>
       <span class="cameratxt">我的数据源</span>
     </div>
     </div>
-    <div>
+    <div class="scroll">
       <div class="middle">
       <div class="middle">
         <div class="filter">
         <div class="filter">
           <div class="condition">
           <div class="condition">
@@ -709,8 +709,9 @@ onUnmounted(() => {
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
 .content-box {
 .content-box {
-  width: 97.5%;
-  height: 89%;
+  min-width: 1000px;
+  width: calc(100vw - 260px);
+  height: calc(100vh - 105px);
   margin: 20px auto;
   margin: 20px auto;
   background-color: #fff;
   background-color: #fff;
   color: #fff;
   color: #fff;
@@ -729,16 +730,20 @@ onUnmounted(() => {
     font-size: 18px;
     font-size: 18px;
     font-weight: 600;
     font-weight: 600;
 
 
-    span {
-      margin-right: 20px;
-      cursor: pointer;
+    .cameratxt {
+      display: block;
+      height: 60px;
+      line-height: 60px;
     }
     }
 
 
     .is_active {
     .is_active {
       color: rgba(111, 182, 184, 1);
       color: rgba(111, 182, 184, 1);
     }
     }
   }
   }
-
+  .scroll {
+    height: calc(100% - 61px);
+    overflow: auto;
+  }
   .middle {
   .middle {
     width: 96%;
     width: 96%;
     margin: 0 auto;
     margin: 0 auto;
@@ -815,11 +820,11 @@ onUnmounted(() => {
 
 
   .footer {
   .footer {
     width: 96%;
     width: 96%;
-    height: 550px;
+    // height: 550px;
     margin: 10px auto 30px;
     margin: 10px auto 30px;
 
 
     .el-table--fit {
     .el-table--fit {
-      height: 100%;
+      // height: 100%;
 
 
       :deep(.el-table__header-wrapper) {
       :deep(.el-table__header-wrapper) {
         background-color: #000;
         background-color: #000;
@@ -844,7 +849,7 @@ onUnmounted(() => {
 
 
       :deep(.el-table__row td) {
       :deep(.el-table__row td) {
         padding: 0;
         padding: 0;
-        border: 0;
+        // border: 0;
         .normal {
         .normal {
           background-color: rgba(139, 195, 74, 1);
           background-color: rgba(139, 195, 74, 1);
           color: #fff;
           color: #fff;

文件差異過大導致無法顯示
+ 1269 - 600
src/views/student/student.vue


+ 222 - 232
src/views/task/task.vue

@@ -5,7 +5,7 @@
         <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
         <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
         <span class="cameratxt">任务管理</span>
         <span class="cameratxt">任务管理</span>
       </div>
       </div>
-      <div>
+      <div class="scroll">
         <div class="middle">
         <div class="middle">
           <div class="filter">
           <div class="filter">
             <div class="condition">
             <div class="condition">
@@ -547,193 +547,179 @@
         </div>
         </div>
       </div>
       </div>
     </div>
     </div>
-  </div>
-  <div class="bgImg" v-if="bgImg">
-    <el-carousel
-      @click="bgImg = false"
-      ref="bgImgs"
-      indicator-position
-      arrow="always"
-      :autoplay="false"
-      trigger
-    >
-      <el-carousel-item v-for="item in bgImgList" :key="item.id">
-        <img :src="item.url" alt="" />
-      </el-carousel-item>
-    </el-carousel>
-  </div>
 
 
-  <!-- 编辑按钮 -->
-  <el-dialog
-    class="editDialog"
-    v-model="editVisible"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    :title="titleDialog"
-    align-center
-    width="900"
-    :before-close="cancelEdit"
-  >
-    <el-form
-      ref="editRef"
-      :model="editRuleForm"
-      :rules="editRules"
-      label-width="100px"
-      class="demo-ruleForm"
-      :size="formSize"
-      label-position="right"
-      status-icon
+    <!-- 编辑按钮 -->
+    <el-dialog
+      class="editDialog"
+      v-model="editVisible"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      :title="titleDialog"
+      align-center
+      width="900"
+      :before-close="cancelEdit"
     >
     >
-      <el-form-item label="类型 :" prop="type">
-        <el-select
-          v-model="editRuleForm.type"
-          multiple
-          placeholder="请选择类型"
-          style="width: 740px"
-        >
-          <el-option label="学生肖像" value="1" />
-          <el-option label="车辆预约" value="2" />
-          <el-option label="校园打卡" value="3" />
-          <el-option label="校园报修" value="4" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="名称 :" prop="yname">
-        <el-input
-          v-model="editRuleForm.yname"
-          placeholder="数据源名称.如: xxx数据库"
-          clearable
-          style="width: 740px"
-        />
-      </el-form-item>
-      <div v-if="titleDialog == '新增'">
-        <span class="typeTitle">使用辅助选项请先选择类型</span>
-        <el-form-item label="辅助选项 :">
-          <el-input
-            v-model="editRuleForm.location"
-            placeholder="数据库服务IP地址"
-            clearable
-            style="width: 300px; margin-right: 10px"
-          />
-          <el-input
-            v-model="editRuleForm.port"
-            placeholder="数据库服务端口号"
-            clearable
-            style="width: 210px; margin-right: 10px"
-          />
+      <el-form
+        ref="editRef"
+        :model="editRuleForm"
+        :rules="editRules"
+        label-width="100px"
+        class="demo-ruleForm"
+        :size="formSize"
+        label-position="right"
+        status-icon
+      >
+        <el-form-item label="类型 :" prop="type">
+          <el-select
+            v-model="editRuleForm.type"
+            multiple
+            placeholder="请选择类型"
+            style="width: 740px"
+          >
+            <el-option label="学生肖像" value="1" />
+            <el-option label="车辆预约" value="2" />
+            <el-option label="校园打卡" value="3" />
+            <el-option label="校园报修" value="4" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="名称 :" prop="yname">
           <el-input
           <el-input
-            v-model="editRuleForm.kname"
-            placeholder="数据库名称"
+            v-model="editRuleForm.yname"
+            placeholder="数据源名称.如: xxx数据库"
             clearable
             clearable
-            style="width: 210px"
+            style="width: 740px"
           />
           />
         </el-form-item>
         </el-form-item>
-      </div>
-      <el-form-item label="连接地址 :" prop="link">
-        <el-input
-          v-model="editRuleForm.link"
-          placeholder="数据库连接地址"
-          clearable
-          style="width: 740px"
-        />
-      </el-form-item>
-      <div class="account">
-        <el-form-item label="数据库账号 :" prop="account">
+        <div v-if="titleDialog == '新增'">
+          <span class="typeTitle">使用辅助选项请先选择类型</span>
+          <el-form-item label="辅助选项 :">
+            <el-input
+              v-model="editRuleForm.location"
+              placeholder="数据库服务IP地址"
+              clearable
+              style="width: 300px; margin-right: 10px"
+            />
+            <el-input
+              v-model="editRuleForm.port"
+              placeholder="数据库服务端口号"
+              clearable
+              style="width: 210px; margin-right: 10px"
+            />
+            <el-input
+              v-model="editRuleForm.kname"
+              placeholder="数据库名称"
+              clearable
+              style="width: 210px"
+            />
+          </el-form-item>
+        </div>
+        <el-form-item label="连接地址 :" prop="link">
           <el-input
           <el-input
-            v-model="editRuleForm.account"
-            placeholder="请输入数据库账号"
+            v-model="editRuleForm.link"
+            placeholder="数据库连接地址"
             clearable
             clearable
+            style="width: 740px"
           />
           />
         </el-form-item>
         </el-form-item>
-        <el-form-item label="数据库密码 :" prop="password">
+        <div class="account">
+          <el-form-item label="数据库账号 :" prop="account">
+            <el-input
+              v-model="editRuleForm.account"
+              placeholder="请输入数据库账号"
+              clearable
+            />
+          </el-form-item>
+          <el-form-item label="数据库密码 :" prop="password">
+            <el-input
+              v-model="editRuleForm.password"
+              placeholder="请输入数据库密码"
+              clearable
+            />
+          </el-form-item>
+        </div>
+        <el-form-item label="描述 :" prop="describe">
           <el-input
           <el-input
-            v-model="editRuleForm.password"
-            placeholder="请输入数据库密码"
+            v-model="editRuleForm.describe"
+            placeholder="请输入该数据库相关简述"
             clearable
             clearable
+            type="textarea"
+            :rows="5"
+            style="width: 740px"
           />
           />
         </el-form-item>
         </el-form-item>
+        <el-form-item class="options">
+          <el-button
+            color="rgba(41, 109, 227, 1)"
+            class="queding"
+            type="primary"
+            @click="confirmEdit(editRef)"
+          >
+            确认
+          </el-button>
+          <el-button @click="cancelEdit(editRef)">取消</el-button>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+
+    <!-- 查看按钮 -->
+    <el-dialog
+      class="lookDialog"
+      v-model="lookVisible"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      title="交换任务详情"
+      align-center
+      width="600"
+      :before-close="cancelLook"
+    >
+      <ul>
+        <li>交换任务名称 : <span>学院部门</span></li>
+        <li>来源数据源 : <span>教务数据库</span></li>
+        <li>交换方式 : <span>自定义SQL语句</span></li>
+        <li>
+          自定义SQL :
+          <span>select jgdm bmdm, jgmc bmmc from zftal_xtgl_jgdmb</span>
+        </li>
+        <li>来源数据源 : <span>字符集UTF8</span></li>
+        <li>目标数据源 : <span>学工数据库</span></li>
+        <li>目的数据源字符集 : <span>UTF8</span></li>
+        <li>交换机 : <span>auto</span></li>
+        <li>执行方式 : <span>间隔执行</span></li>
+        <li>间隔周期 : <span>1 天</span></li>
+      </ul>
+      <div class="options">
+        <el-button @click="cancelLook">关闭</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 勾选删除 -->
+    <el-dialog
+      class="closeAccount"
+      v-model="selDelVisible"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      title="勾选删除"
+      align-center
+      width="500"
+      :before-close="cancelSelDel"
+    >
+      <div class="content">
+        <img src="@/assets/images/warning.png" alt="" />
+        <span>是否删除勾选的数据库?</span>
       </div>
       </div>
-      <el-form-item label="描述 :" prop="describe">
-        <el-input
-          v-model="editRuleForm.describe"
-          placeholder="请输入该数据库相关简述"
-          clearable
-          type="textarea"
-          :rows="5"
-          style="width: 740px"
-        />
-      </el-form-item>
-      <el-form-item class="options">
+      <div class="option">
         <el-button
         <el-button
           color="rgba(41, 109, 227, 1)"
           color="rgba(41, 109, 227, 1)"
           class="queding"
           class="queding"
           type="primary"
           type="primary"
-          @click="confirmEdit(editRef)"
+          @click="confirmSelDel"
         >
         >
           确认
           确认
         </el-button>
         </el-button>
-        <el-button @click="cancelEdit(editRef)">取消</el-button>
-      </el-form-item>
-    </el-form>
-  </el-dialog>
-
-  <!-- 查看按钮 -->
-  <el-dialog
-    class="lookDialog"
-    v-model="lookVisible"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    title="交换任务详情"
-    align-center
-    width="600"
-    :before-close="cancelLook"
-  >
-    <ul>
-      <li>交换任务名称 : <span>学院部门</span></li>
-      <li>来源数据源 : <span>教务数据库</span></li>
-      <li>交换方式 : <span>自定义SQL语句</span></li>
-      <li>
-        自定义SQL :
-        <span>select jgdm bmdm, jgmc bmmc from zftal_xtgl_jgdmb</span>
-      </li>
-      <li>来源数据源 : <span>字符集UTF8</span></li>
-      <li>目标数据源 : <span>学工数据库</span></li>
-      <li>目的数据源字符集 : <span>UTF8</span></li>
-      <li>交换机 : <span>auto</span></li>
-      <li>执行方式 : <span>间隔执行</span></li>
-      <li>间隔周期 : <span>1 天</span></li>
-    </ul>
-    <div class="options">
-      <el-button @click="cancelLook">关闭</el-button>
-    </div>
-  </el-dialog>
-
-  <!-- 勾选删除 -->
-  <el-dialog
-    class="closeAccount"
-    v-model="selDelVisible"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    title="勾选删除"
-    align-center
-    width="500"
-    :before-close="cancelSelDel"
-  >
-    <div class="content">
-      <img src="@/assets/images/warning.png" alt="" />
-      <span>是否删除勾选的数据库?</span>
-    </div>
-    <div class="option">
-      <el-button
-        color="rgba(41, 109, 227, 1)"
-        class="queding"
-        type="primary"
-        @click="confirmSelDel"
-      >
-        确认
-      </el-button>
-      <el-button @click="cancelSelDel">取消</el-button>
-    </div>
-  </el-dialog>
+        <el-button @click="cancelSelDel">取消</el-button>
+      </div>
+    </el-dialog>
+  </div>
 </template>
 </template>
 
 
 <script setup>
 <script setup>
@@ -1239,8 +1225,9 @@ onUnmounted(() => {
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
 .content-box {
 .content-box {
-  width: 97.5%;
-  height: calc(100% - 105px);
+  min-width: 1000px;
+  width: calc(100vw - 260px);
+  height: calc(100vh - 105px);
   margin: 20px auto;
   margin: 20px auto;
   background-color: #fff;
   background-color: #fff;
   color: #fff;
   color: #fff;
@@ -1249,6 +1236,7 @@ onUnmounted(() => {
   box-shadow: 0px 3px 10px rgba(0, 97, 255, 0.2);
   box-shadow: 0px 3px 10px rgba(0, 97, 255, 0.2);
   // 主页面
   // 主页面
   .home {
   .home {
+    height: 100%;
     .left {
     .left {
       // width: calc(100wh - 40px);
       // width: calc(100wh - 40px);
       display: flex;
       display: flex;
@@ -1261,15 +1249,19 @@ onUnmounted(() => {
       font-weight: 600;
       font-weight: 600;
 
 
       span {
       span {
+        height: 60px;
+        line-height: 60px;
         margin-right: 20px;
         margin-right: 20px;
-        cursor: pointer;
       }
       }
 
 
       .is_active {
       .is_active {
         color: rgba(111, 182, 184, 1);
         color: rgba(111, 182, 184, 1);
       }
       }
     }
     }
-
+    .scroll {
+      height: calc(100% - 61px);
+      overflow: auto;
+    }
     .middle {
     .middle {
       width: 96%;
       width: 96%;
       margin: 0 auto;
       margin: 0 auto;
@@ -1346,11 +1338,11 @@ onUnmounted(() => {
 
 
     .footer {
     .footer {
       width: 96%;
       width: 96%;
-      height: 550px;
+      // height: 550px;
       margin: 10px auto 30px;
       margin: 10px auto 30px;
 
 
       .el-table--fit {
       .el-table--fit {
-        height: 100%;
+        // height: 100%;
 
 
         :deep(.el-table__header-wrapper) {
         :deep(.el-table__header-wrapper) {
           background-color: #000;
           background-color: #000;
@@ -1426,6 +1418,64 @@ onUnmounted(() => {
         // }
         // }
       }
       }
     }
     }
+    .pageSize {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      margin: 0 30px;
+
+      span {
+        color: #000;
+      }
+
+      .el-pagination {
+        // width: 1600px;
+        :deep(.el-pagination__total) {
+          color: #000;
+        }
+
+        :deep(.el-pagination__goto) {
+          color: #000;
+        }
+
+        :deep(.el-pagination__classifier) {
+          color: #000;
+        }
+
+        :deep(.el-input__wrapper) {
+          border: 1px solid rgba(0, 0, 0, 1);
+          border-radius: 5px;
+          box-shadow: none;
+        }
+
+        :deep(.el-pager li) {
+          margin: 0 5px;
+          border: 1px solid rgba(0, 0, 0, 1);
+          border-radius: 5px;
+          background-color: transparent;
+        }
+
+        :deep(.el-pager li.is-active) {
+          // background-color: rgba(0, 97, 255, 0.8);
+          border: 1px solid rgba(0, 97, 255, 1);
+          color: rgba(0, 97, 255, 1);
+        }
+
+        :deep(.btn-prev) {
+          margin-right: 5px;
+          border: 1px solid rgba(0, 0, 0, 1);
+          border-radius: 5px;
+          background-color: transparent;
+        }
+
+        :deep(.btn-next) {
+          margin-left: 5px;
+          border: 1px solid rgba(0, 0, 0, 1);
+          border-radius: 5px;
+          background-color: transparent;
+        }
+      }
+    }
   }
   }
   // 编辑页面
   // 编辑页面
   .taskEdit {
   .taskEdit {
@@ -1713,7 +1763,6 @@ onUnmounted(() => {
 
 
     .el-dialog__body {
     .el-dialog__body {
       padding: 0px 20px 20px 20px;
       padding: 0px 20px 20px 20px;
-      // height: 200px;
       // display: flex;
       // display: flex;
       // flex-direction: column-reverse;
       // flex-direction: column-reverse;
       .content {
       .content {
@@ -1739,65 +1788,6 @@ onUnmounted(() => {
       }
       }
     }
     }
   }
   }
-
-  .pageSize {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    margin: 0 30px;
-
-    span {
-      color: #000;
-    }
-
-    .el-pagination {
-      // width: 1600px;
-      :deep(.el-pagination__total) {
-        color: #000;
-      }
-
-      :deep(.el-pagination__goto) {
-        color: #000;
-      }
-
-      :deep(.el-pagination__classifier) {
-        color: #000;
-      }
-
-      :deep(.el-input__wrapper) {
-        border: 1px solid rgba(0, 0, 0, 1);
-        border-radius: 5px;
-        box-shadow: none;
-      }
-
-      :deep(.el-pager li) {
-        margin: 0 5px;
-        border: 1px solid rgba(0, 0, 0, 1);
-        border-radius: 5px;
-        background-color: transparent;
-      }
-
-      :deep(.el-pager li.is-active) {
-        // background-color: rgba(0, 97, 255, 0.8);
-        border: 1px solid rgba(0, 97, 255, 1);
-        color: rgba(0, 97, 255, 1);
-      }
-
-      :deep(.btn-prev) {
-        margin-right: 5px;
-        border: 1px solid rgba(0, 0, 0, 1);
-        border-radius: 5px;
-        background-color: transparent;
-      }
-
-      :deep(.btn-next) {
-        margin-left: 5px;
-        border: 1px solid rgba(0, 0, 0, 1);
-        border-radius: 5px;
-        background-color: transparent;
-      }
-    }
-  }
 }
 }
 
 
 .el-input {
 .el-input {

文件差異過大導致無法顯示
+ 1395 - 522
src/views/teacher/teacher.vue


文件差異過大導致無法顯示
+ 884 - 340
src/views/user/user.vue


+ 3 - 4
vite.config.js

@@ -42,12 +42,11 @@ export default defineConfig({
 
 
     // // 测试地址
     // // 测试地址
     proxy: {
     proxy: {
-      "/smartApi/wanzai/api": {
-        // target: "https://chtech.ncjti.edu.cn/hotelReservation",
+      "/smartApi": {
         // target: "https://www.campussmartlife.com/smartManage", // 测试环境
         // target: "https://www.campussmartlife.com/smartManage", // 测试环境
-        target: "https://www.campussmartlife.com/smartApi/wanzai/api", // 线上环境
+        target: "https://www.campussmartlife.com/smartApi", // 线上环境
         changeOrigin: true,
         changeOrigin: true,
-        rewrite: (path) => path.replace(/^\/smartApi\/wanzai\/api/, ""),
+        rewrite: (path) => path.replace(/^\/smartApi/, ""),
       },
       },
     },
     },
   },
   },