Browse Source

feat: 超管页面调整

zhangjie 10 months ago
parent
commit
889ed14d4d

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "teachcloud-platform-web",
-  "version": "3.4.0",
+  "version": "3.4.1",
   "scripts": {
     "start": "vue-cli-service serve",
     "serve": "vue-cli-service serve",

+ 6 - 0
src/constants/adminNavs.js

@@ -35,6 +35,12 @@ const navs = [
     name: "自动升级",
     url: "PackageManage",
   },
+  {
+    id: "9",
+    parentId: "1",
+    name: "工具管理",
+    url: "ToolManage",
+  },
 ];
 
 export default navs;

+ 9 - 1
src/modules/admin/api.js

@@ -145,6 +145,14 @@ export const schoolSetCourseTargetSave = (datas) => {
 export const packageInfo = () => {
   return $postParam("/api/admin/sys/client/package/external", {});
 };
-export const updatePackage = (datas, config = {}) => {
+export const uploadPackage = (datas, config = {}) => {
   return $post("/api/admin/sys/client/package/upload", datas, config);
 };
+
+// tool-manage
+export const toolInfo = () => {
+  return $postParam("/api/admin/sys/client/tool/external", {});
+};
+export const uploadTool = (datas, config = {}) => {
+  return $post("/api/admin/sys/client/tool/upload", datas, config);
+};

+ 2 - 1
src/modules/admin/components/ModifySchool.vue

@@ -250,7 +250,8 @@ export default {
 
       if (this.isSubmit) return;
       this.isSubmit = true;
-      let datas = { ...this.modalForm };
+      const datas = { ...this.modalForm };
+      if (!datas.examTaskInstr) datas.examTaskInstr = "";
       const data = await updateSchool(datas).catch(() => {
         this.isSubmit = false;
       });

+ 6 - 0
src/modules/admin/router.js

@@ -4,6 +4,7 @@ import SchoolManage from "./views/SchoolManage.vue";
 import AuthSet from "./views/AuthSet.vue";
 import ScanLogManage from "./views/ScanLogManage.vue";
 import PackageManage from "./views/PackageManage.vue";
+import ToolManage from "./views/ToolManage.vue";
 import Admin from "./views/Admin.vue";
 
 export default {
@@ -41,5 +42,10 @@ export default {
       name: "PackageManage",
       component: PackageManage,
     },
+    {
+      path: "tool-manage",
+      name: "ToolManage",
+      component: ToolManage,
+    },
   ],
 };

+ 2 - 2
src/modules/admin/views/PackageManage.vue

@@ -96,7 +96,7 @@
 </template>
 
 <script>
-import { packageInfo, updatePackage } from "../api";
+import { packageInfo, uploadPackage } from "../api";
 import { fileMD5 } from "@/plugins/md5";
 
 export default {
@@ -170,7 +170,7 @@ export default {
       const md5 = await fileMD5(options.file);
       formData.append("md5", md5);
 
-      return updatePackage(formData, {
+      return uploadPackage(formData, {
         timeout: 60 * 60 * 1000,
         signal: this.uploadController.signal,
         onUploadProgress: ({ loaded, total }) => {

+ 162 - 0
src/modules/admin/views/ToolManage.vue

@@ -0,0 +1,162 @@
+<template>
+  <div class="tool-manage package-manage">
+    <el-row :gutter="20" type="flex">
+      <el-col :span="12">
+        <el-card class="card-box upload-card" header="包上传">
+          <h3 class="mb-2">图片下载工具:</h3>
+          <el-upload
+            drag
+            action="/api/admin/sys/client/package/upload"
+            accept=".zip"
+            :show-file-list="false"
+            :on-error="handleError"
+            :on-success="handleSuccess"
+            :http-request="upload"
+            :disabled="loading"
+            :on-change="handleFileChange"
+            ref="UploadComp"
+          >
+            <i class="el-icon-upload"></i><br />
+            <em class="el-upload__text">点击或将文件拖拽到这里上传</em>
+            <p
+              slot="tip"
+              :class="[
+                `info-tips`,
+                {
+                  'tips-success': result.success,
+                  'tips-error': !result.success,
+                },
+              ]"
+              v-if="result.message"
+            >
+              {{ result.message }}
+            </p>
+          </el-upload>
+          <div
+            v-if="curProcess.filename && loading"
+            class="upload-precess box-justify"
+          >
+            <div class="upload-name">
+              <p>{{ curProcess.filename }}</p>
+              <el-progress :percentage="curProcess.progress"></el-progress>
+            </div>
+            <i class="icon icon-close-act" @click="toDelete"></i>
+          </div>
+        </el-card>
+      </el-col>
+      <el-col :span="12">
+        <el-card class="card-box package-card" header="包信息">
+          <h3>
+            安装包(更新时间:{{ info.installUploadTime | timestampFilter }})
+          </h3>
+          <p>
+            <span>下载地址:</span>
+            <a v-if="installUrl" :href="installUrl" download>
+              {{ info.fileName }}</a
+            >
+            <span v-else>--</span>
+          </p>
+        </el-card>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { toolInfo, uploadTool } from "../api";
+import { fileMD5 } from "@/plugins/md5";
+
+export default {
+  name: "tool-manage",
+  data() {
+    return {
+      info: {},
+      result: {
+        message: "",
+        success: true,
+      },
+      curProcess: {
+        filename: "",
+        progress: 0,
+      },
+      loading: false,
+      uploadController: null,
+    };
+  },
+  computed: {
+    installUrl() {
+      return this.info.prefix ? `${this.info.prefix}/${this.info.url}` : "";
+    },
+  },
+  mounted() {
+    // this.getInfo();
+  },
+  methods: {
+    initData() {
+      this.result = {
+        message: "",
+        success: true,
+      };
+      this.curProcess = {
+        filename: "",
+        progress: 0,
+      };
+      this.loading = false;
+      this.uploadController = null;
+    },
+    async getInfo() {
+      const res = await toolInfo();
+      this.info = res || {};
+    },
+    handleFileChange(file) {
+      if (file.status === "ready") {
+        this.initData();
+      }
+      this.curProcess.filename = file.name;
+    },
+    async upload(options) {
+      this.uploadController = new AbortController();
+      this.loading = true;
+      let formData = new FormData();
+      formData.append("file", options.file);
+      const md5 = await fileMD5(options.file);
+      formData.append("md5", md5);
+
+      return uploadTool(formData, {
+        timeout: 60 * 60 * 1000,
+        signal: this.uploadController.signal,
+        onUploadProgress: ({ loaded, total }) => {
+          this.curProcess.progress = Math.floor((100 * loaded) / total);
+        },
+      });
+    },
+    handleError(error) {
+      const message = error.message === "canceled" ? "已取消" : error.message;
+
+      this.loading = false;
+      this.result = {
+        success: false,
+        message,
+      };
+    },
+    handleSuccess(responseData) {
+      this.loading = false;
+      this.result = {
+        success: true,
+        message: "导入成功!",
+      };
+      this.initData();
+      this.getInfo();
+    },
+    async toDelete() {
+      const confirm = await this.$confirm(`确定要取消上传吗?`, "提示", {
+        type: "warning",
+      }).catch(() => {});
+      if (confirm !== "confirm") return;
+
+      this.uploadController && this.uploadController.abort();
+      this.initData();
+    },
+  },
+};
+</script>