john 2 năm trước cách đây
mục cha
commit
c57e37f245
45 tập tin đã thay đổi với 23 bổ sung4111 xóa
  1. 0 60
      ClientPlatform/src 2/App.vue
  2. 0 97
      ClientPlatform/src 2/api/index.js
  3. BIN
      ClientPlatform/src 2/assets/DL_GRS.png
  4. BIN
      ClientPlatform/src 2/assets/OR_GRS.png
  5. BIN
      ClientPlatform/src 2/assets/SC_GRS.png
  6. BIN
      ClientPlatform/src 2/assets/about.jpg
  7. BIN
      ClientPlatform/src 2/assets/home_0.png
  8. BIN
      ClientPlatform/src 2/assets/home_1.png
  9. BIN
      ClientPlatform/src 2/assets/home_2.png
  10. BIN
      ClientPlatform/src 2/assets/logo.png
  11. 0 117
      ClientPlatform/src 2/components/HelloWorld.vue
  12. 0 17
      ClientPlatform/src 2/components/card.vue
  13. 0 140
      ClientPlatform/src 2/components/login.vue
  14. 0 171
      ClientPlatform/src 2/components/user-header.vue
  15. 0 21
      ClientPlatform/src 2/main.js
  16. 0 140
      ClientPlatform/src 2/pages/about/about.vue
  17. 0 85
      ClientPlatform/src 2/pages/admin/admin.vue
  18. 0 245
      ClientPlatform/src 2/pages/admin/children/blog/blog.vue
  19. 0 131
      ClientPlatform/src 2/pages/admin/children/blogs/blogs.vue
  20. 0 180
      ClientPlatform/src 2/pages/admin/children/comments/comments.vue
  21. 0 95
      ClientPlatform/src 2/pages/admin/children/info/info.vue
  22. 0 186
      ClientPlatform/src 2/pages/admin/children/tags/tags.vue
  23. 0 325
      ClientPlatform/src 2/pages/blogDetails/blogDetails.vue
  24. 0 12
      ClientPlatform/src 2/pages/comments/comments.vue
  25. 0 205
      ClientPlatform/src 2/pages/home/home.vue
  26. 0 236
      ClientPlatform/src 2/pages/order/add.vue
  27. 0 3
      ClientPlatform/src 2/pages/order/info.vue
  28. 0 210
      ClientPlatform/src 2/pages/order/order.vue
  29. 0 128
      ClientPlatform/src 2/pages/result/result.vue
  30. 0 274
      ClientPlatform/src 2/pages/server/server.vue
  31. 0 136
      ClientPlatform/src 2/pages/service/add.vue
  32. 0 201
      ClientPlatform/src 2/pages/service/service.vue
  33. 0 167
      ClientPlatform/src 2/pages/task/task.vue
  34. 0 217
      ClientPlatform/src 2/pages/userInfo/userInfo.vue
  35. 0 93
      ClientPlatform/src 2/router.js
  36. 0 16
      ClientPlatform/src 2/store.js
  37. 0 8
      ClientPlatform/src 2/style.less
  38. 0 29
      ClientPlatform/src 2/utils/config.js
  39. 0 15
      ClientPlatform/src 2/utils/cookie.js
  40. 0 3
      ClientPlatform/src 2/utils/index.js
  41. 0 147
      ClientPlatform/src 2/utils/request.js
  42. BIN
      admin_site/mysite.sqlite
  43. 16 0
      admin_site/order/tasks.py
  44. 1 1
      admin_site/order/views.py
  45. 6 0
      admin_site/readme.md

+ 0 - 60
ClientPlatform/src 2/App.vue

@@ -1,60 +0,0 @@
-<template>
-  <div id="app">
-    <userHeader :setUserInfo="setUserInfo"></userHeader>
-    <main class="main">
-      <!-- route outlet -->
-      <router-view :userInfo="userInfo"></router-view>
-    </main>
-  </div>
-</template>
-
-<script>
-import { getBlogs } from "./api";
-import HelloWorld from "./components/HelloWorld.vue";
-import userHeader from "./components/user-header.vue";
-
-export default {
-  name: "App",
-  components: {
-    HelloWorld,
-    userHeader,
-  },
-  data() {
-    return {
-      userInfo: {},
-    };
-  },
-  watch: {
-    $route(to, from) {
-      this.$nextTick(() => {
-        this.isAdmin = this.$route.path.indexOf("/admin") > -1;
-      });
-    },
-  },
-  async mounted() {
-    this.$nextTick(() => {
-      this.isAdmin = this.$route.path.indexOf("/admin") > -1;
-    });
-  },
-  methods: {
-    setUserInfo(value) {
-      this.userInfo = value;
-    },
-  },
-};
-</script>
-
-<style>
-#app {
-  font-family: Avenir, Helvetica, Arial, sans-serif;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  /*text-align: center;*/
-  color: #2c3e50;
-  /*margin-top: 60px;*/
-}
-.main {
-  margin-top: 66.5px;
-  /*margin-top: 200px;*/
-}
-</style>

+ 0 - 97
ClientPlatform/src 2/api/index.js

@@ -1,97 +0,0 @@
-import { get, post, upload } from "@/utils";
-
-export function getBlogs(params) {
-  return get("/blogs", params);
-}
-export function getBlogDetail(params) {
-  return get("/blogDetail", params);
-}
-export function putBlogDetail(params) {
-  return post("/putBlogDetail", params);
-}
-export function delBlog(params) {
-  return post("/delBlog", params);
-}
-export function getComments(params) {
-  return get("/comments", params);
-}
-export function delComments(params) {
-  return get("/delComments", params);
-}
-export function getFiles(params) {
-  return get("/files", params);
-}
-export function getTags(params) {
-  return get("/tags", params);
-}
-export function addTags(params) {
-  return get("/addTag", params);
-}
-export function editTag(params) {
-  return get("/editTag", params);
-}
-export function delTag(params) {
-  return get("/delTag", params);
-}
-export function hotTags(params) {
-  return get("/hotTags", params);
-}
-export function getTypes(params) {
-  return get("/types", params);
-}
-
-export function getClicks(params) {
-  return get("/clicks", params);
-}
-export function like(params) {
-  return get("/like", params);
-}
-export function likeComment(params) {
-  return get("/likeComment", params);
-}
-
-export function pushComment(params) {
-  return post("/pushComment", params);
-}
-
-export function login(params) {
-  return post("/user/login", params);
-}
-
-export function register(params) {
-  return post("/user/register", params);
-}
-export function userInfo(params) {
-  return post("/user/info", params);
-}
-
-export function userUpdate(data) {
-  return post("/user/update", data);
-}
-
-export function updateUserInfo(params) {
-  return post("/updateUserInfo", params);
-}
-
-export function uploadFile(params) {
-  return upload("/files/uploadFile", params);
-}
-
-export function createOrder(params) {
-  return post("/order/add", params);
-}
-
-export function orderDetail(params) {
-  return post("/order/info", params);
-}
-export function getOrder(params) {
-  const headers = {
-    "Content-Type": "application/json",
-  };
-  return post("/order/list", params, headers);
-}
-
-/* service */
-export function createService(params) {
-  return post("/service/add", params);
-}

BIN
ClientPlatform/src 2/assets/DL_GRS.png


BIN
ClientPlatform/src 2/assets/OR_GRS.png


BIN
ClientPlatform/src 2/assets/SC_GRS.png


BIN
ClientPlatform/src 2/assets/about.jpg


BIN
ClientPlatform/src 2/assets/home_0.png


BIN
ClientPlatform/src 2/assets/home_1.png


BIN
ClientPlatform/src 2/assets/home_2.png


BIN
ClientPlatform/src 2/assets/logo.png


+ 0 - 117
ClientPlatform/src 2/components/HelloWorld.vue

@@ -1,117 +0,0 @@
-<template>
-  <div class="hello">
-    <h1>{{ msg }}</h1>
-    <p>
-      For a guide and recipes on how to configure / customize this project,<br />
-      check out the
-      <a href="https://cli.vuejs.org" target="_blank" rel="noopener"
-        >vue-cli documentation</a
-      >.
-    </p>
-    <h3>Installed CLI Plugins</h3>
-    <ul>
-      <li>
-        <a
-          href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel"
-          target="_blank"
-          rel="noopener"
-          >babel</a
-        >
-      </li>
-      <li>
-        <a
-          href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint"
-          target="_blank"
-          rel="noopener"
-          >eslint</a
-        >
-      </li>
-    </ul>
-    <h3>Essential Links</h3>
-    <ul>
-      <li>
-        <a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a>
-      </li>
-      <li>
-        <a href="https://forum.vuejs.org" target="_blank" rel="noopener"
-          >Forum</a
-        >
-      </li>
-      <li>
-        <a href="https://chat.vuejs.org" target="_blank" rel="noopener"
-          >Community Chat</a
-        >
-      </li>
-      <li>
-        <a href="https://twitter.com/vuejs" target="_blank" rel="noopener"
-          >Twitter</a
-        >
-      </li>
-      <li>
-        <a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a>
-      </li>
-    </ul>
-    <h3>Ecosystem</h3>
-    <ul>
-      <li>
-        <a href="https://router.vuejs.org" target="_blank" rel="noopener"
-          >vue-router</a
-        >
-      </li>
-      <li>
-        <a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a>
-      </li>
-      <li>
-        <a
-          href="https://github.com/vuejs/vue-devtools#vue-devtools"
-          target="_blank"
-          rel="noopener"
-          >vue-devtools</a
-        >
-      </li>
-      <li>
-        <a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener"
-          >vue-loader</a
-        >
-      </li>
-      <li>
-        <a
-          href="https://github.com/vuejs/awesome-vue"
-          target="_blank"
-          rel="noopener"
-          >awesome-vue</a
-        >
-      </li>
-    </ul>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "HelloWorld",
-  props: {
-    msg: String,
-  },
-};
-</script>
-
-<!-- Add "scoped" attribute to limit CSS to this component only -->
-<style scoped>
-h3 {
-  margin: 40px 0 0;
-}
-ul {
-  list-style-type: none;
-  padding: 0;
-}
-li {
-  display: inline-block;
-  margin: 0 10px;
-}
-a {
-  color: #42b983;
-}
-body {
-  background-color: red;
-}
-</style>

+ 0 - 17
ClientPlatform/src 2/components/card.vue

@@ -1,17 +0,0 @@
-<template>
-    <div class="card-box">
-        
-    </div>
-</template>
-<script>
-export default {
-  props: {
-    
-  }
-}
-</script>
-<style lang="less" scoped>
-.card-box {
-  
-}
-</style>

+ 0 - 140
ClientPlatform/src 2/components/login.vue

@@ -1,140 +0,0 @@
-<template>
-  <el-dialog
-    :title="title"
-    :visible.sync="dialogVisible"
-    width="550px"
-    :before-close="handleClose"
-  >
-    <el-form
-      ref="form"
-      :model="form"
-      label-width="120px"
-      v-if="useType === 'login'"
-    >
-      <el-form-item label="邮箱">
-        <el-input type="email" v-model="form.email"></el-input>
-      </el-form-item>
-      <el-form-item label="密码">
-        <el-input type="password" v-model="form.password"></el-input>
-      </el-form-item>
-    </el-form>
-    <el-form ref="form" :model="form" label-width="80px" v-else>
-      <el-form-item label="登陆邮箱">
-        <el-input type="email" v-model="form.email"></el-input>
-      </el-form-item>
-      <el-form-item label="输入密码">
-        <el-input type="password" v-model="form.password"></el-input>
-      </el-form-item>
-      <el-form-item label="确认密码">
-        <el-input type="password" v-model="form.password2"></el-input>
-      </el-form-item>
-    </el-form>
-
-    <span slot="footer" class="dialog-footer">
-      <el-button v-if="useType === 'register'" type="text" @click="toLogin"
-        >取消</el-button
-      >
-      <el-button
-        v-if="useType === 'register'"
-        type="primary"
-        @click="toRegisterFn"
-        >注册</el-button
-      >
-      <el-button v-if="useType === 'login'" type="text" @click="toRegister"
-        >注册</el-button
-      >
-      <el-button v-if="useType === 'login'" type="primary" @click="toLoginFn"
-        >登陆</el-button
-      >
-    </span>
-  </el-dialog>
-</template>
-<script>
-import { login, register } from "@/api";
-
-export default {
-  name: "login",
-  data() {
-    return {
-      useType: "login",
-      title: "登陆",
-      dialogVisible: false,
-      form: {
-        name: "",
-        password: "",
-      },
-    };
-  },
-  methods: {
-    show() {
-      this.dialogVisible = true;
-    },
-    toRegister() {
-      this.useType = "register";
-      this.title = "注册";
-    },
-    handleClose() {
-      this.dialogVisible = false;
-    },
-    toLogin() {
-      this.useType = "login";
-      this.title = "登陆";
-    },
-    async toLoginFn() {
-      if (!this.form.email) {
-        this.$message.error("请输入邮箱!");
-        return;
-      }
-      if (!this.form.password) {
-        this.$message.error("请输入密码!");
-        return;
-      }
-
-      const res = await login({
-        email: this.form.email,
-        password: this.form.password,
-      });
-      if (res.code === 300) {
-        this.$message.error(res.msg);
-        return
-      }
-      console.log("loginOrRegister", res);
-      // window.localStorage.setItem("userInfo", JSON.stringify(res.data));
-      window.localStorage.setItem("token", res.data.token);
-      window.location.reload();
-    },
-    async toRegisterFn() {
-      if (!this.form.email) {
-        this.$message.error("请输入登陆邮箱!");
-        return;
-      }
-      if (!this.form.password) {
-        this.$message.error("请输入用户密码!");
-        return
-      }
-      if (this.form.password !== this.form.password2) {
-        this.$message.error("2次输入密码不一致!");
-        return
-      }
-      const res = await register({
-        email: this.form.email,
-        password: this.form.password,
-      });
-      if (res.code === 300) {
-        this.$message.error(res.msg);
-        return
-      }
-      if (res.data) {
-        this.$alert("注册成功是否现在登陆!", "提示", {
-          confirmButtonText: "确定",
-          callback: (action) => {
-            if (action === "confirm") {
-              this.toLogin();
-            }
-          },
-        });
-      }
-    },
-  },
-};
-</script>

+ 0 - 171
ClientPlatform/src 2/components/user-header.vue

@@ -1,171 +0,0 @@
-<template>
-  <div>
-    <header class="header-box">
-      <div class="logo">DeepBIO</div>
-      <div class="nav-box">
-        <div
-          @click="toNewPage('home')"
-          :class="[active === 'home' && 'active', 'item']"
-        >
-          <i class="el-icon-s-home"></i>Home
-        </div>
-        <!--                <div @click="toNewPage('server')" :class="[active === 'server' &&'active', 'item']"><i class="el-icon-s-operation"></i>Server</div>-->
-        <!--        <div-->
-        <!--          @click="toNewPage('service')"-->
-        <!--          :class="[active === 'service' && 'active', 'item']"-->
-        <!--        >-->
-        <!--          <i class="el-icon-printer"></i>Service-->
-        <!--        </div>-->
-        <div
-          @click="toNewPage('order')"
-          :class="[active === 'order' && 'active', 'item']"
-        >
-          <i class="el-icon-s-claim"></i>Order
-        </div>
-
-        <!--        <div-->
-        <!--          @click="toNewPage('task')"-->
-        <!--          :class="[active === 'task' && 'active', 'item']"-->
-        <!--        >-->
-        <!--          <i class="el-icon-s-order"></i>Task-->
-        <!--        </div>-->
-        <div
-          @click="toNewPage('about')"
-          :class="[active === 'about' && 'active', 'item']"
-        >
-          <i class="el-icon-s-order"></i>Contact us
-        </div>
-      </div>
-      <div class="user-box">
-        <div class="login" @click="settingFn" v-if="userInfo && userInfo.id">
-          {{ userInfo.name || "暂无名称" }}
-        </div>
-        <div class="login" v-else @click="$refs.loginCom.show()">login</div>
-      </div>
-    </header>
-    <loginCom ref="loginCom"></loginCom>
-  </div>
-</template>
-
-<script>
-import { userInfo } from "@/api";
-import loginCom from "./login.vue";
-
-export default {
-  name: "userHeader",
-  data() {
-    return {
-      userInfo: {},
-      active: "",
-      avatar:
-        "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fsafe-img.xhscdn.com%2Fbw1%2F2b22236d-a6e4-4437-b9f6-4ca9a01bac3a%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fsafe-img.xhscdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1682345978&t=f6e3b830ea09df2467363b2681ee65c0",
-    };
-  },
-  components: { loginCom },
-  mounted() {
-    setTimeout(async () => {
-      this.active = this.$route.name;
-
-      const token = localStorage.getItem("token");
-      // const userInfoStr = localStorage.getItem("userInfo");
-      if (token) {
-        const res = await userInfo({ token });
-        this.userInfo = res.data;
-        this.$store.commit("setUserInfo", this.userInfo);
-      }
-    }, 300);
-  },
-  watch: {
-    $route(to, from) {
-      setTimeout(() => {
-        this.active = this.$route.name;
-      }, 100);
-    },
-  },
-  methods: {
-    toLogin() {
-      console.log(61);
-    },
-    toNewPage(name) {
-      // 判断是否登录
-      if (!this.userInfo?.id && !/home|about/.test(name)) {
-        this.$refs.loginCom.show();
-        return;
-      }
-      this.$router.push({
-        path: `/${name}`,
-      });
-    },
-    settingFn() {
-      this.$router.push({ name: "userInfo" });
-    },
-  },
-};
-</script>
-<style lang="less" scoped>
-.header-box {
-  color: #ffffff;
-  background-color: rgb(16, 126, 100);
-  //background-color: #ffffff;
-  font-size: 34px;
-  display: flex;
-  padding: 10px 40px;
-  flex-direction: row;
-  transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
-  box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 4px -1px,
-    rgba(0, 0, 0, 0.14) 0px 4px 5px 0px, rgba(0, 0, 0, 0.12) 0px 1px 10px 0px;
-  position: fixed;
-  z-index: 100;
-  right: 0;
-  left: 0;
-  top: 0;
-  .logo {
-    margin-right: 40px;
-  }
-
-  .nav-box {
-    font-size: 20px;
-    display: flex;
-    margin-right: 30px;
-    align-items: center;
-    font-weight: bold;
-
-    .item {
-      margin-right: 24px;
-      cursor: pointer;
-      transition: all ease 50ms;
-
-      &.active {
-        color: #f6903d;
-        //color: #409eff;
-        position: relative;
-
-        &:after {
-          content: "";
-          position: absolute;
-          width: 100%;
-          height: 2px;
-          //background-color: #409eff;
-          background-color: #f6903d;
-          bottom: -20px;
-          left: 0;
-          right: 0;
-        }
-      }
-    }
-  }
-
-  .user-box {
-    color: #000000;
-    font-size: 24px;
-    line-height: 46.5px;
-    align-items: center;
-
-    .login {
-      cursor: pointer;
-    }
-
-    //font-size: ;
-  }
-}
-</style>

+ 0 - 21
ClientPlatform/src 2/main.js

@@ -1,21 +0,0 @@
-import Vue from "vue";
-import VueRouter from "vue-router";
-import ElementUI from "element-ui";
-import "element-ui/lib/theme-chalk/index.css";
-import VXETable from "vxe-table";
-import "vxe-table/lib/style.css";
-import App from "./App.vue";
-import router from "./router";
-import "./style.less";
-import store from "./store";
-import Vuex from "vuex";
-Vue.config.productionTip = false;
-Vue.use(VueRouter);
-Vue.use(ElementUI);
-Vue.use(VXETable);
-Vue.prototype.$store = store;
-new Vue({
-  router,
-  store,
-  render: (h) => h(App),
-}).$mount("#app");

+ 0 - 140
ClientPlatform/src 2/pages/about/about.vue

@@ -1,140 +0,0 @@
-<template>
-  <div class="page-box">
-    <div class="about-title">Contact us</div>
-    <div class="MuiCardContent-root">
-      <img src="../../assets/about.jpg" alt="" />
-      <div class="user-info">
-        <div class="name">姓名</div>
-        <div class="other">
-          <div class="icon"><i class="el-icon-picture-outline-round"></i></div>
-          <div class="content">Post code: 250101</div>
-        </div>
-        <div class="other">
-          <div class="icon"><i class="el-icon-s-home"></i></div>
-          <div class="content">
-            E-mail: <a href="mailto:weileyi@sdu.edu.cn">weileyi@sdu.edu.cn</a>
-          </div>
-        </div>
-        <div class="other">
-          <div class="icon"><i class="el-icon-camera"></i></div>
-          <div class="content">
-            Room 404,Joint SDU-NTU Centre for Artificial Intelligence Research
-            (C-FAIR) Shandong University, Jinan, Shandong, China
-          </div>
-        </div>
-      </div>
-    </div>
-    <div class="send-message">
-      <div class="about-title sub-title">
-        If you have any questions, please send message below.
-      </div>
-      <div>
-        <el-form ref="form" :model="form" label-width="80px">
-          <el-form-item label="Name">
-            <el-input v-model="form.name"></el-input>
-          </el-form-item>
-          <el-form-item label="E-Mail">
-            <el-input v-model="form.email"></el-input>
-          </el-form-item>
-
-          <el-form-item label="Message">
-            <el-input type="textarea" v-model="form.desc"></el-input>
-          </el-form-item>
-          <el-form-item>
-            <el-button type="primary" @click="onSubmit">SENF EMAIL</el-button>
-          </el-form-item>
-        </el-form>
-      </div>
-    </div>
-  </div>
-</template>
-<script>
-export default {
-  data() {
-    return {
-      form: {},
-    };
-  },
-  methods: {
-    onSubmit() {},
-  },
-};
-</script>
-<style lang="less" scoped>
-.page-box {
-  padding: 24px;
-  .about-title {
-    margin: 20px auto;
-    width: 300px;
-    font-size: 40px;
-    text-align: center;
-    &::before,
-    &::after {
-      content: "";
-      display: block;
-      width: 50%;
-      border-bottom: solid 2px currentColor;
-    }
-    &::after {
-      margin-left: 50%;
-    }
-    .about-title-text {
-      color: black;
-      text-align: center;
-    }
-  }
-  .MuiCardContent-root {
-    background-color: rgb(255, 255, 255);
-    color: rgba(0, 0, 0, 0.87);
-    transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
-    border-radius: 4px;
-    box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 1px -1px,
-      rgba(0, 0, 0, 0.14) 0px 1px 1px 0px, rgba(0, 0, 0, 0.12) 0px 1px 3px 0px;
-    overflow: hidden;
-    min-width: 300px;
-    border-left: 6px solid #f6903d;
-    display: flex;
-    img {
-      display: block;
-      width: 200px;
-      margin-top: 10px;
-      margin-left: 24px;
-      margin-bottom: 24px;
-    }
-    .user-info {
-      margin-left: 10px;
-      margin-top: 24px;
-      .name {
-        margin: 24px 0px;
-        font-family: Roboto, Helvetica, Arial, sans-serif;
-        line-height: 1.167;
-        letter-spacing: 0em;
-        color: #f6903d;
-        font-size: 30px;
-        font-weight: 700;
-      }
-      .other {
-        display: flex;
-        margin-bottom: 10px;
-        .icon {
-          display: flex;
-          align-items: center;
-          margin-right: 3px;
-        }
-        .content {
-        }
-      }
-    }
-  }
-
-  .sub-title {
-    white-space: nowrap;
-    // margin: initial;
-    text-align: center;
-    font-size: 20px;
-    width: 500px;
-    margin-top: 40px;
-    margin-bottom: 40px;
-  }
-}
-</style>

+ 0 - 85
ClientPlatform/src 2/pages/admin/admin.vue

@@ -1,85 +0,0 @@
-<template>
-  <div class="page">
-    <el-menu class="menu-box" :default-active="active" @select="select">
-      <el-menu-item index="info">
-        <i class="el-icon-document"></i>
-        <span slot="title">个人用户信息管理</span>
-      </el-menu-item>
-      <el-menu-item index="blog">
-        <i class="el-icon-document"></i>
-        <span slot="title">撰写博客</span>
-      </el-menu-item>
-      <el-menu-item index="blogs">
-        <i class="el-icon-document"></i>
-        <span slot="title">个人博客管理</span>
-      </el-menu-item>
-      <el-menu-item index="tags">
-        <i class="el-icon-document"></i>
-        <span slot="title">标签管理</span>
-      </el-menu-item>
-      <el-menu-item index="comments">
-        <i class="el-icon-document"></i>
-        <span slot="title">评论管理</span>
-      </el-menu-item>
-    </el-menu>
-    <div class="sub-page-box">
-      <router-view :userInfo="userInfo"></router-view>
-    </div>
-  </div>
-</template>
-<script>
-export default {
-  name: "admin",
-  data() {
-    return {
-      active: "info",
-      userInfo: {},
-    };
-  },
-  watch: {
-    $route(to, from) {},
-  },
-  created() {
-    let userInfo = localStorage.getItem("userInfo");
-    if (userInfo) {
-      if (typeof userInfo === "string") {
-        userInfo = JSON.parse(userInfo);
-      }
-      this.userInfo = userInfo;
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      console.log(this.$route);
-      this.active = this.$route.name;
-    });
-  },
-  methods: {
-    select(name) {
-      if (this.$route.name !== name) {
-        this.$router.push({
-          name: name,
-        });
-      }
-    },
-  },
-};
-</script>
-<style lang="less" scoped>
-.page {
-  //margin-left: 0;
-  //width: 100vw;
-  background-color: #f8f9fb;
-  margin-top: 350px;
-  display: flex;
-  .menu-box {
-    text-align: left;
-    width: 250px;
-  }
-  .sub-page-box {
-    flex: 1;
-    height: calc(100vh - 65px);
-    overflow-y: scroll;
-  }
-}
-</style>

+ 0 - 245
ClientPlatform/src 2/pages/admin/children/blog/blog.vue

@@ -1,245 +0,0 @@
-<template>
-  <div class="blog-page">
-    <div class="title">撰写博客</div>
-    <div class="edit-box">
-      <div class="nav">
-        <div class="nav-item">
-          <div class="label">选择分类</div>
-          <div class="value">
-            <el-select
-              size="mini"
-              v-model="typeValue"
-              multiple
-              class="dom"
-              placeholder="请选择"
-            >
-              <el-option
-                v-for="item in typeList"
-                :key="item"
-                :label="item"
-                :value="item"
-              >
-              </el-option>
-            </el-select>
-          </div>
-        </div>
-        <div class="nav-item">
-          <div class="label">添加标签</div>
-          <div class="value">
-            <el-select
-              class="dom"
-              size="mini"
-              v-model="tagValue"
-              multiple
-              placeholder="请选择"
-            >
-              <el-option
-                v-for="item in tags"
-                :key="item.name"
-                :label="item.name"
-                :value="item.id"
-                >{{ item.name }}
-              </el-option>
-            </el-select>
-          </div>
-        </div>
-      </div>
-      <div class="edit">
-        <vue2-tinymce-editor
-          :options="options"
-          ref="tinymce"
-          v-model="content"
-        ></vue2-tinymce-editor>
-        <div class="btn">
-          <el-button class="push-blog" type="primary" @click="pushBlog"
-            >发布</el-button
-          >
-        </div>
-      </div>
-      <div class="upload-box">
-        <el-upload
-          class="upload-demo"
-          ref="upload"
-          action="string"
-          :before-upload="onBeforeUploadImage"
-          :http-request="UploadImage"
-          :on-change="fileChange"
-          :on-remove="removeFile"
-          :file-list="fileList"
-        >
-          <el-button size="small" type="primary">点击上传</el-button>
-          <div slot="tip" class="el-upload__tip">
-            只能上传jpg/png文件,且不超过500kb
-          </div>
-        </el-upload>
-      </div>
-    </div>
-  </div>
-</template>
-<script>
-import { Vue2TinymceEditor } from "vue2-tinymce-editor";
-import {
-  getBlogDetail,
-  getTags,
-  getTypes,
-  putBlogDetail,
-  getFiles,
-  uploadFile,
-} from "@/api";
-export default {
-  props: {
-    userInfo: {
-      type: Object,
-      default: () => {},
-    },
-  },
-  data() {
-    return {
-      typeValue: [],
-      typeList: [],
-      tagValue: [],
-      tags: [],
-      content: "",
-
-      options: {
-        language_url: "./tinymce/lang/zh-Hans.js",
-        language: "zh-Hans", // 注意大小写
-      },
-      tinymceKey: "12131",
-      // 记录旧的博文信息
-      blogDetail: {},
-      fileList: [], // 上传文件
-    };
-  },
-  components: { Vue2TinymceEditor },
-  mounted() {
-    this.pageInit();
-  },
-  methods: {
-    async pageInit() {
-      const tags = await getTags({
-        type: "all",
-        userId: this.userInfo.id,
-        token: window.localStorage.getItem("token"),
-      });
-      console.log(858585, tags);
-      this.tags = tags.data;
-      const typeList = await getTypes();
-      this.typeList = typeList.data;
-      if (this.$route.query?.id) {
-        const res = await getBlogDetail(this.$route.query);
-        console.log(93, res);
-        this.blogDetail = res.data;
-        this.content = res.data.content;
-        this.typeValue = res.data.types;
-        this.tagValue = res.data.tags;
-        this.getFiles();
-      }
-    },
-    async getFiles() {
-      if (this.$route.query?.id) {
-        const res = await getFiles({
-          blogId: this.$route.query?.id,
-        });
-        // res.
-        this.fileList = res.data;
-      }
-    },
-    async pushBlog() {
-      if (!this.userInfo?.id) return;
-      const params = {
-        ...this.blogDetail,
-        types: this.typeValue,
-        tags: this.tagValue,
-        content: this.content,
-        userId: this.userInfo.id,
-        token: window.localStorage.getItem("token"),
-        fileList: this.fileList,
-      };
-      console.log(110, params);
-      const res = await putBlogDetail(params);
-      console.log(res);
-      this.$message({
-        message: "发布成功",
-        type: "success",
-      });
-    },
-    onBeforeUploadImage(file) {
-      const isIMAGE = file.type === "image/jpeg" || "image/jpg" || "image/png";
-      const isLt1M = file.size / 1024 / 1024 < 1;
-      if (!isIMAGE) {
-        this.$message.error("上传文件只能是图片格式!");
-      }
-      if (!isLt1M) {
-        this.$message.error("上传文件大小不能超过 1MB!");
-      }
-      return isIMAGE && isLt1M;
-    },
-    UploadImage(param) {
-      const formData = new FormData();
-      formData.append("file", param.file);
-      formData.append("userId", this.userInfo?.id);
-      uploadFile(formData)
-        .then((response) => {
-          console.log(response);
-          console.log("上传图片成功");
-          this.fileList.push(response.data);
-          param.onSuccess(); // 上传成功的图片会显示绿色的对勾
-          // 但是我们上传成功了图片, fileList 里面的值却没有改变,还好有on-change指令可以使用
-        })
-        .catch((response) => {
-          console.log("图片上传失败");
-          param.onError();
-        });
-    },
-    fileChange(file) {
-      // console.log(194, file);
-      // this.$refs.upload.clearFiles(); // 清除文件对象
-      // this.logo = file.raw; // 取出上传文件的对象,在其它地方也可以使用
-      // this.fileList = [{ name: file.name, url: file.url }]; // 重新手动赋值filstList, 免得自定义上传成功了, 而fileList并没有动态改变, 这样每次都是上传一个对象
-    },
-    removeFile(file, fileList) {
-      this.fileList = fileList;
-    },
-  },
-};
-</script>
-<style lang="less" scoped>
-.blog-page {
-  //margin-left: 0;
-  //width: 100vw;
-  background-color: #f8f9fb;
-  padding: 24px;
-  //background-color: #fff;
-  //margin-top: 350px;
-  .title {
-    text-align: left;
-  }
-  .edit-box {
-    .nav {
-      display: flex;
-      margin-bottom: 24px;
-      .nav-item {
-        display: flex;
-        font-size: 14px;
-        margin-right: 10px;
-        .label {
-          margin-right: 5px;
-        }
-        .value {
-          width: 300px;
-          .dom {
-            width: 100%;
-          }
-        }
-      }
-    }
-    .edit {
-      .btn {
-        text-align: right;
-        margin-top: 5px;
-      }
-    }
-  }
-}
-</style>

+ 0 - 131
ClientPlatform/src 2/pages/admin/children/blogs/blogs.vue

@@ -1,131 +0,0 @@
-<template>
-  <div class="blogs-page">
-    <div class="title">个人博客管理</div>
-    <el-table :data="tableData" border style="width: 100%">
-      <el-table-column fixed prop="id" label="博客id" />
-      <el-table-column fixed prop="name" label="博客名称">
-        <template slot-scope="scope">
-          <el-button type="text" @click="showBlog(scope.row)" size="small">{{
-            scope.row.name
-          }}</el-button>
-        </template>
-      </el-table-column>
-      <el-table-column fixed prop="time" label="发布时间" />
-      <el-table-column fixed prop="updateTime" label="修改时间" />
-      <el-table-column fixed prop="likes" label="点赞量" />
-      <el-table-column label="操作">
-        <!--        <template slot-scope="scope">-->
-        <template slot-scope="scope">
-          <!--          <el-button @click="handleClick(scope.row)" type="text" size="small">查看</el-button>-->
-          <el-button type="text" @click="editBlog(scope.row)" size="small"
-            >编辑</el-button
-          >
-          <el-button type="text" @click="deleteBlog(scope.row)" size="small"
-            >删除</el-button
-          >
-        </template>
-      </el-table-column>
-    </el-table>
-    <br />
-    <el-pagination
-      background
-      layout="prev, pager, next"
-      :current-page="size"
-      :total="total"
-      @current-change="sizeChange"
-      :pager-count="this.pageSize"
-    >
-    </el-pagination>
-  </div>
-</template>
-
-<script>
-import { getBlogs, delBlog } from "@/api";
-
-export default {
-  name: " blogs",
-  data() {
-    return {
-      tableData: [],
-      total: 0,
-      pageSize: 15,
-      size: 1,
-    };
-  },
-  props: {
-    userInfo: {
-      type: Object,
-      default: () => {},
-    },
-  },
-  mounted() {
-    this.pageInit();
-  },
-  methods: {
-    async pageInit() {
-      if (!this.userInfo?.id) return;
-      const res = await getBlogs({
-        userId: this.userInfo.id,
-        size: this.size,
-        pageSize: this.pageSize,
-      });
-      console.log(48, res);
-      this.tableData = res.data.list;
-      this.total = res.data.total;
-    },
-    deleteBlog(row) {
-      this.$confirm("此操作将永久删除该文章, 是否继续?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-      })
-        .then(async () => {
-          const res = await delBlog({ id: row.id });
-          this.$message({
-            type: "success",
-            message: "删除成功!",
-          });
-        })
-        .catch(() => {
-          this.$message({
-            type: "info",
-            message: "已取消删除",
-          });
-        });
-    },
-    editBlog(row) {
-      this.$router.push({
-        path: "blog",
-        query: {
-          id: row.id,
-        },
-      });
-    },
-    sizeChange(size) {
-      this.size = size;
-      this.pageInit();
-    },
-    showBlog(row) {
-      this.$router.push({
-        path: "/blogDetails",
-        query: {
-          id: row.id,
-        },
-      });
-    },
-  },
-};
-</script>
-
-<style lang="less" scoped>
-.blogs-page {
-  //margin-left: 0;
-  //width: 100vw;
-  background-color: #f8f9fb;
-  padding: 24px;
-  //margin-top: 350px;
-  .title {
-    text-align: left;
-  }
-}
-</style>

+ 0 - 180
ClientPlatform/src 2/pages/admin/children/comments/comments.vue

@@ -1,180 +0,0 @@
-<template>
-  <div class="blogs-page">
-    <div class="title">
-      <div>评论管理</div>
-    </div>
-    <el-table :data="tableData" border style="width: 100%">
-      <el-table-column fixed prop="id" label="评论id" />
-      <el-table-column fixed prop="content" label="评论内容">
-        <template slot-scope="scope">
-          <div v-html="scope.row.content"></div>
-        </template>
-      </el-table-column>
-      <el-table-column fixed prop="time" label="发布时间" />
-      <el-table-column fixed prop="updateTime" label="修改时间" />
-      <el-table-column label="操作">
-        <!--        <template slot-scope="scope">-->
-        <template slot-scope="scope">
-          <!--          <el-button @click="handleClick(scope.row)" type="text" size="small">查看</el-button>-->
-          <el-button type="text" @click="editComments(scope.row)" size="small"
-            >编辑</el-button
-          >
-          <el-button type="text" @click="deleteTag(scope.row)" size="small"
-            >删除</el-button
-          >
-        </template>
-      </el-table-column>
-    </el-table>
-    <br />
-    <el-pagination
-      background
-      layout="prev, pager, next"
-      :current-page="size"
-      :total="total"
-      @current-change="sizeChange"
-      :pager-count="this.pageSize"
-    >
-    </el-pagination>
-
-    <el-dialog
-      :title="form.id ? '编辑' : '新增'"
-      :visible.sync="dialogVisible"
-      width="70%"
-      :before-close="handleClose"
-    >
-      <div>
-        <vue2-tinymce-editor
-          :options="options"
-          ref="tinymce"
-          v-model="form.content"
-        ></vue2-tinymce-editor>
-      </div>
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="dialogVisible = false">取 消</el-button>
-        <el-button type="primary" @click="pushCommentFn">确 定</el-button>
-      </span>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { getComments, delComments, pushComment } from "@/api";
-import loginCom from "@/components/login.vue";
-import { Vue2TinymceEditor } from "vue2-tinymce-editor";
-
-export default {
-  name: " blogs",
-  data() {
-    return {
-      tableData: [],
-      total: 0,
-      pageSize: 15,
-      size: 1,
-      dialogVisible: false,
-      form: {
-        content: "",
-      },
-      options: {
-        language_url: "./tinymce/lang/zh-Hans.js",
-        language: "zh-Hans", // 注意大小写
-      },
-      tinymceKey: "12131",
-    };
-  },
-  components: { Vue2TinymceEditor, loginCom },
-  props: {
-    userInfo: {
-      type: Object,
-      default: () => {},
-    },
-  },
-  mounted() {
-    this.pageInit();
-  },
-  methods: {
-    async pageInit() {
-      if (!this.userInfo?.id) return;
-      const res = await getComments({
-        userId: this.userInfo.id,
-        size: this.size,
-        pageSize: this.pageSize,
-      });
-      this.tableData = res.data.list;
-      this.total = res.data.total;
-    },
-    deleteTag(row) {
-      this.$confirm("此操作将永久删除该评论, 是否继续?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-      })
-        .then(async () => {
-          const res = await delComments({ id: row.id });
-          this.$message({
-            type: "success",
-            message: "删除成功!",
-          });
-          this.pageSize = 15;
-          this.size = 1;
-          this.pageInit();
-        })
-        .catch(() => {
-          this.$message({
-            type: "info",
-            message: "已取消删除",
-          });
-        });
-    },
-
-    editComments(row) {
-      this.dialogVisible = true;
-      this.form = {
-        ...row,
-      };
-    },
-    openAddTag() {
-      this.dialogVisible = true;
-      this.form = {};
-    },
-    async pushCommentFn() {
-      if (this.form?.id) {
-        const res = await pushComment({
-          ...this.form,
-          userId: this.userInfo.id,
-          token: window.localStorage.getItem("token"),
-        });
-        console.log(res);
-        this.dialogVisible = false;
-        this.$message({
-          type: "success",
-          message: "编辑成功!",
-        });
-      }
-      this.pageSize = 15;
-      this.size = 1;
-      this.pageInit();
-    },
-    sizeChange(size) {
-      this.size = size;
-      this.pageInit();
-    },
-    handleClose() {},
-  },
-};
-</script>
-
-<style lang="less" scoped>
-.blogs-page {
-  //margin-left: 0;
-  //width: 100vw;
-  background-color: #f8f9fb;
-  padding: 24px;
-  //margin-top: 350px;
-  .title {
-    text-align: left;
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-  }
-}
-</style>

+ 0 - 95
ClientPlatform/src 2/pages/admin/children/info/info.vue

@@ -1,95 +0,0 @@
-<template>
-  <div class="info-page">
-    <div class="title">个人信息管理</div>
-    <el-form
-      ref="form"
-      class="form-box"
-      :model="form"
-      label-width="80px"
-      placeholder="请输入名称"
-    >
-      <el-form-item label="名称">
-        <el-input v-model="form.name" placeholder="请输入名称"></el-input>
-      </el-form-item>
-      <el-form-item label="密码">
-        <el-input
-          type="password"
-          placeholder="请输入密码"
-          v-model="form.password"
-        ></el-input>
-      </el-form-item>
-      <el-form-item label="性别">
-        <el-select v-model="form.sex" placeholder="请选择性别">
-          <el-option label="保密" value="other"></el-option>
-          <el-option label="男" value="man"></el-option>
-          <el-option label="女" value="woman"></el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="电话">
-        <el-input v-model="form.mobile" placeholder="请输入电话"></el-input>
-      </el-form-item>
-      <el-form-item>
-        <el-button>取消</el-button>
-        <el-button type="primary" @click="onSubmit">立即更新</el-button>
-      </el-form-item>
-    </el-form>
-  </div>
-</template>
-
-<script>
-import { updateUserInfo } from "../../../../api/index";
-export default {
-  name: "info",
-  props: {
-    userInfo: {
-      type: Object,
-      default: () => {},
-    },
-  },
-  data() {
-    return {
-      form: {
-        name: "",
-        sex: "",
-        mobile: "",
-      },
-    };
-  },
-  mounted() {
-    this.pageInit();
-  },
-  methods: {
-    pageInit() {
-      if (this.userInfo?.id) {
-        this.form.name = this.userInfo.name;
-        this.form.sex = this.userInfo.sex;
-        this.form.mobile = this.userInfo.mobile;
-      }
-    },
-    async onSubmit() {
-      const res = await updateUserInfo({
-        userId: this.userInfo?.id,
-        ...this.form,
-      });
-      console.log(res);
-    },
-  },
-};
-</script>
-<style lang="less" scoped>
-.info-page {
-  //margin-left: 0;
-  //width: 100vw;
-  background-color: #f8f9fb;
-  padding: 24px;
-  .title {
-    text-align: left;
-    margin-bottom: 24px;
-  }
-  //margin-top: 350px;
-  .form-box {
-    //margin-left: 24px;
-    width: 500px;
-  }
-}
-</style>

+ 0 - 186
ClientPlatform/src 2/pages/admin/children/tags/tags.vue

@@ -1,186 +0,0 @@
-<template>
-  <div class="blogs-page">
-    <div class="title">
-      <div>个人标签管理</div>
-      <div></div>
-      <el-button @click="openAddTag" size="small">新增</el-button>
-    </div>
-    <el-table :data="tableData" border style="width: 100%">
-      <el-table-column fixed prop="id" label="标签id" />
-      <el-table-column fixed prop="name" label="标签名称" />
-      <el-table-column fixed prop="time" label="发布时间" />
-      <el-table-column fixed prop="updateTime" label="修改时间" />
-      <el-table-column label="操作">
-        <!--        <template slot-scope="scope">-->
-        <template slot-scope="scope">
-          <!--          <el-button @click="handleClick(scope.row)" type="text" size="small">查看</el-button>-->
-          <el-button type="text" @click="editTag(scope.row)" size="small"
-            >编辑</el-button
-          >
-          <el-button type="text" @click="deleteTag(scope.row)" size="small"
-            >删除</el-button
-          >
-        </template>
-      </el-table-column>
-    </el-table>
-    <br />
-    <el-pagination
-      background
-      layout="prev, pager, next"
-      :current-page="size"
-      :total="total"
-      @current-change="sizeChange"
-      :pager-count="this.pageSize"
-    >
-    </el-pagination>
-
-    <el-dialog
-      :title="form.id ? '编辑' : '新增'"
-      :visible.sync="dialogVisible"
-      width="30%"
-      :before-close="handleClose"
-    >
-      <el-form ref="form" :model="form" label-width="80px">
-        <el-form-item label="标签名称">
-          <el-input v-model="form.name"></el-input>
-        </el-form-item>
-      </el-form>
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="dialogVisible = false">取 消</el-button>
-        <el-button type="primary" @click="pushTag">确 定</el-button>
-      </span>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { getTags, delTag, addTags, editTag } from "@/api";
-
-export default {
-  name: " blogs",
-  data() {
-    return {
-      tableData: [],
-      total: 0,
-      pageSize: 15,
-      size: 1,
-      dialogVisible: false,
-      form: {},
-    };
-  },
-  props: {
-    userInfo: {
-      type: Object,
-      default: () => {},
-    },
-  },
-  mounted() {
-    this.pageInit();
-  },
-  methods: {
-    async pageInit() {
-      if (!this.userInfo?.id) return;
-      const res = await getTags({
-        userId: this.userInfo.id,
-        size: this.size,
-        pageSize: this.pageSize,
-      });
-      this.tableData = res.data.list;
-      this.total = res.data.total;
-    },
-    deleteTag(row) {
-      this.$confirm("此操作将永久删除该标签, 是否继续?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-      })
-        .then(async () => {
-          const res = await delTag({ id: row.id });
-          this.$message({
-            type: "success",
-            message: "删除成功!",
-          });
-          this.pageSize = 15;
-          this.size = 1;
-          this.pageInit();
-        })
-        .catch(() => {
-          this.$message({
-            type: "info",
-            message: "已取消删除",
-          });
-        });
-    },
-
-    editTag(row) {
-      this.dialogVisible = true;
-      this.form = {
-        ...row,
-      };
-    },
-    openAddTag() {
-      this.dialogVisible = true;
-      this.form = {};
-    },
-    async pushTag() {
-      if (this.form?.id) {
-        const res = await editTag({
-          ...this.form,
-          userId: this.userInfo.id,
-          token: window.localStorage.getItem("token"),
-        });
-        console.log(res);
-        this.dialogVisible = false;
-        this.$message({
-          type: "success",
-          message: "编辑成功!",
-        });
-      } else {
-        const res = await addTags({
-          ...this.form,
-          userId: this.userInfo.id,
-          token: window.localStorage.getItem("token"),
-        });
-        this.dialogVisible = false;
-        this.$message({
-          type: "success",
-          message: "新增成功!",
-        });
-      }
-      this.pageSize = 15;
-      this.size = 1;
-      this.pageInit();
-    },
-    addTag() {
-      this.dialogVisible = false;
-      addTags({
-        ...this.from,
-        userId: this.userInfo.id,
-        token: window.localStorage.getItem("token"),
-      });
-      this.form = {};
-    },
-    sizeChange(size) {
-      this.size = size;
-      this.pageInit();
-    },
-    handleClose() {},
-  },
-};
-</script>
-
-<style lang="less" scoped>
-.blogs-page {
-  //margin-left: 0;
-  //width: 100vw;
-  background-color: #f8f9fb;
-  padding: 24px;
-  //margin-top: 350px;
-  .title {
-    text-align: left;
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-  }
-}
-</style>

+ 0 - 325
ClientPlatform/src 2/pages/blogDetails/blogDetails.vue

@@ -1,325 +0,0 @@
-<template>
-  <div class="page-box">
-    <div class="blogDetails-box">
-      <div class="name">
-        {{ blogDetail.name }}
-      </div>
-      <div class="info-box">
-        <div class="info">
-          <div class="author">发布人: {{ blogDetail.author }}</div>
-          <div class="createTime">发布时间: {{ blogDetail.createTime }}</div>
-          <div class="likes">
-            点赞量:
-            <i class="el-icon-thumb icon" @click="like"
-              >&nbsp;{{ blogDetail.likes }}</i
-            >
-          </div>
-        </div>
-        <div class="search-box">
-          <el-input
-            placeholder="请输入内容"
-            v-model="searchText"
-            @keyup.enter="search()"
-          >
-            <el-button slot="append" @click="search()">搜索</el-button>
-          </el-input>
-        </div>
-      </div>
-      <div class="content-box">
-        <div v-html="blogDetail.content" />
-      </div>
-      <div class="files-box">
-        <div class="title">附件:</div>
-        <div class="file" v-for="item in files" :key="item.id">
-          <i class="el-icon-document icon" @click="download(item)"></i>
-        </div>
-      </div>
-    </div>
-    <div class="comments-box">
-      <div class="title">评论: {{ total }}</div>
-      <div class="comments">
-        <div class="item-box" v-for="item in comments" :key="item.id">
-          <div class="content-box">
-            <div class="id">#{{ item.id }}</div>
-            <div class="content">
-              <div v-html="item.content"></div>
-            </div>
-          </div>
-          <div class="info-box">
-            <div class="author">评论用户: {{ item.author }}</div>
-            <div class="createTime">评论时间: {{ item.createTime }}</div>
-            <div class="likes">
-              点赞量:
-              <i class="el-icon-thumb icon" @click="likeComment(item)"
-                >&nbsp;{{ item.likes }}</i
-              >
-            </div>
-          </div>
-        </div>
-      </div>
-      <div class="pagination-box">
-        <el-pagination
-          background
-          layout="prev, pager, next"
-          :current-page="size"
-          :total="total"
-          @current-change="sizeChange"
-          :pager-count="this.pageSize"
-        >
-        </el-pagination>
-      </div>
-      <div class="editor-box" :key="tinymceKey">
-        <vue2-tinymce-editor
-          :options="options"
-          ref="tinymce"
-          v-model="content"
-        ></vue2-tinymce-editor>
-        <el-button class="push-comment" type="primary" @click="pushComment"
-          >发布</el-button
-        >
-      </div>
-    </div>
-    <loginCom ref="loginCom" />
-  </div>
-</template>
-
-<script>
-import { Vue2TinymceEditor } from "vue2-tinymce-editor";
-import loginCom from "../../components/login.vue";
-
-import {
-  getBlogDetail,
-  getComments,
-  getFiles,
-  like,
-  likeComment,
-  pushComment,
-} from "@/api";
-
-export default {
-  name: "blogDetail",
-  data() {
-    return {
-      blogDetail: {},
-      searchText: "",
-      total: 0,
-      comments: [],
-      files: [],
-      pageSize: 15,
-      size: 1,
-      content: "",
-      options: {
-        language_url: "./tinymce/lang/zh-Hans.js",
-        language: "zh-Hans", // 注意大小写
-      },
-      tinymceKey: "12131",
-    };
-  },
-  components: { Vue2TinymceEditor, loginCom },
-  mounted() {
-    this.getBlogDetailFn();
-    this.getFilesFn();
-    this.getCommentsFn();
-  },
-  methods: {
-    async getBlogDetailFn() {
-      const res = await getBlogDetail(this.$route.query);
-      console.log(17, res);
-      this.blogDetail = res.data;
-    },
-    async getFilesFn() {
-      const res = await getFiles(this.$route.query);
-      this.files = res.data;
-      console.log(17, res);
-    },
-    async getCommentsFn() {
-      const params = {
-        ...this.$route.query,
-        size: this.size,
-        pageSize: this.pageSize,
-      };
-      const res = await getComments(params);
-      this.total = res.data.total;
-      this.comments = res.data.list;
-      console.log(17, res);
-    },
-    // 喜欢文章
-    like() {
-      like({
-        id: this.blogDetail.id,
-      }).then(() => {
-        this.blogDetail.likes++;
-      });
-    },
-    likeComment(item) {
-      likeComment({
-        id: item.id,
-      }).then(() => {
-        item.likes++;
-      });
-    },
-    // 搜索
-    search() {
-      this.$router.push({
-        name: "home",
-        query: {
-          search: this.searchText,
-        },
-      });
-    },
-    // 分页
-    sizeChange(size) {
-      console.log(200, size);
-      this.size = size;
-      this.getCommentsFn();
-    },
-    download(item) {
-      console.log(167, item);
-      window.open(item.download, "_blank");
-    },
-    async pushComment() {
-      if (!this.content.length) {
-        this.$message.error("请输入评论内容");
-        return;
-      }
-      if (window.localStorage.getItem("token")) {
-        let userInfo = window.localStorage.getItem("userInfo");
-        if (typeof userInfo === "string" && userInfo) {
-          userInfo = JSON.parse(userInfo);
-        }
-        const params = {
-          userId: userInfo?.userId || "999",
-          blogId: this.blogDetail?.id,
-          content: this.content,
-        };
-
-        const res = await pushComment(params);
-        console.log(res);
-        this.pageSize = 15;
-        this.size = 1;
-        this.content = "";
-        this.tinymceKey = new Date().getTime();
-        this.getCommentsFn();
-      } else {
-        // 提示登陆
-        this.$refs.loginCom.show();
-      }
-    },
-  },
-};
-</script>
-
-<style lang="less" scoped>
-.page-box {
-  .blogDetails-box {
-    background-color: #ffffff;
-    border-radius: 4px;
-    padding: 0 24px;
-    .name {
-      padding-top: 24px;
-    }
-    .info-box {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      padding-bottom: 24px;
-      .info {
-        display: flex;
-        font-size: 14px;
-
-        flex: 1;
-        align-items: center;
-        .author {
-          margin-right: 10px;
-        }
-        .createTime {
-          margin-right: 10px;
-        }
-        .likes {
-          .icon {
-            user-select: none;
-            cursor: pointer;
-          }
-        }
-      }
-      .search-box {
-        width: 300px;
-      }
-    }
-    .content-box {
-      padding-bottom: 24px;
-    }
-    .files-box {
-      display: flex;
-      .title {
-        font-weight: bold;
-      }
-      .file {
-        margin-right: 5px;
-        .icon {
-          user-select: none;
-          cursor: pointer;
-          &:hover {
-            color: #409eff;
-          }
-        }
-      }
-    }
-  }
-  .comments-box {
-    margin-top: 24px;
-    background-color: #ffffff;
-    border-radius: 4px;
-    .title {
-      text-align: left;
-      font-weight: 600;
-      padding-left: 24px;
-      padding-top: 24px;
-    }
-    .comments {
-      .item-box {
-        margin-bottom: 24px;
-        .content-box {
-          display: flex;
-          .id {
-            width: 80px;
-          }
-          .content {
-            flex: 1;
-            text-align: left;
-          }
-        }
-        .info-box {
-          display: flex;
-          padding-left: 24px;
-          font-size: 14px;
-          .author {
-            margin-right: 10px;
-          }
-          .createTime {
-            margin-right: 10px;
-          }
-          .icon {
-            cursor: pointer;
-            user-select: none;
-          }
-        }
-      }
-    }
-    .pagination-box {
-      //margin-bottom: 24px;
-    }
-    .editor-box {
-      padding: 24px;
-      position: relative;
-      z-index: 1;
-      .push-comment {
-        position: absolute;
-        right: 25px;
-        top: 25px;
-        z-index: 2;
-      }
-    }
-  }
-}
-</style>

+ 0 - 12
ClientPlatform/src 2/pages/comments/comments.vue

@@ -1,12 +0,0 @@
-<template>
-  <div class="a-page">a</div>
-</template>
-
-<style lang="less" scoped>
-.a-page {
-  //margin-left: 0;
-  //width: 100vw;
-  background-color: #f8f9fb;
-  //margin-top: 350px;
-}
-</style>

+ 0 - 205
ClientPlatform/src 2/pages/home/home.vue

@@ -1,205 +0,0 @@
-<template>
-  <div class="page-box">
-    <div class="swiper-box">
-      <div class="base">
-        <div class="img">
-          <img src="../../assets/home_0.png" alt="" />
-        </div>
-        <div class="text-box">
-          <div class="title">What is DeepBIO?</div>
-          <div class="content">
-            DeepBIO is a user-friendly interpretable deep-learning platform for
-            biological sequence functional analysis, such as sequence-level
-            functional prediction and base-wise functional annotation. As for
-            the sequence-level functional prediction, DeepBIO integrates a total
-            of 42 state-of-the-art deep-learning approaches, and enables a
-            one-stop-shop web service for researchers to develop a new deep
-            learning architecture to answer any biological question. To be
-            specific, given any biological sequence data, DeepBIO allows to
-            train and evaluate deep-learning models, conduct model comparison
-            and optimization, and provide a series of visualization analyses. As
-            for the base-wise functional site annotation, DeepBIO offers
-            well-pretrained deep-learning architectures for over 20 functional
-            site annotation tasks, supports comprehensive interpretations and
-            graphical visualizations of identified sites, and validates the
-            reliability of the identified sites by conservation motif analysis.
-          </div>
-        </div>
-      </div>
-      <div class="base">
-        <div class="text-box">
-          <div class="title">What is DeepBIO?</div>
-          <div class="content">
-            DeepBIO is a user-friendly interpretable deep-learning platform for
-            biological sequence functional analysis, such as sequence-level
-            functional prediction and base-wise functional annotation. As for
-            the sequence-level functional prediction, DeepBIO integrates a total
-            of 42 state-of-the-art deep-learning approaches, and enables a
-            one-stop-shop web service for researchers to develop a new deep
-            learning architecture to answer any biological question. To be
-            specific, given any biological sequence data, DeepBIO allows to
-            train and evaluate deep-learning models, conduct model comparison
-            and optimization, and provide a series of visualization analyses. As
-            for the base-wise functional site annotation, DeepBIO offers
-            well-pretrained deep-learning architectures for over 20 functional
-            site annotation tasks, supports comprehensive interpretations and
-            graphical visualizations of identified sites, and validates the
-            reliability of the identified sites by conservation motif analysis.
-          </div>
-        </div>
-        <div class="img">
-          <img src="../../assets/home_1.png" alt="" />
-        </div>
-      </div>
-      <div class="base">
-        <div class="img">
-          <img src="../../assets/home_2.png" alt="" />
-        </div>
-        <div class="text-box">
-          <div class="title">What is DeepBIO?</div>
-          <div class="content">
-            DeepBIO is a user-friendly interpretable deep-learning platform for
-            biological sequence functional analysis, such as sequence-level
-            functional prediction and base-wise functional annotation. As for
-            the sequence-level functional prediction, DeepBIO integrates a total
-            of 42 state-of-the-art deep-learning approaches, and enables a
-            one-stop-shop web service for researchers to develop a new deep
-            learning architecture to answer any biological question. To be
-            specific, given any biological sequence data, DeepBIO allows to
-            train and evaluate deep-learning models, conduct model comparison
-            and optimization, and provide a series of visualization analyses. As
-            for the base-wise functional site annotation, DeepBIO offers
-            well-pretrained deep-learning architectures for over 20 functional
-            site annotation tasks, supports comprehensive interpretations and
-            graphical visualizations of identified sites, and validates the
-            reliability of the identified sites by conservation motif analysis.
-          </div>
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-<script>
-export default {
-  name: "home",
-  components: {},
-  data() {
-    return {
-      // modules: [Pagination],
-      swiperOption: {
-        slidesPerView: 1,
-        spaceBetween: 30,
-        direction: "vertical",
-        pagination: {
-          el: ".swiper-pagination",
-          clickable: true,
-        },
-      },
-    };
-  },
-  watch: {
-    tags() {
-      console.log(119);
-    },
-  },
-
-  mounted() {
-    console.log(this.$route.query);
-    if (this.$route.query.type === "reload") {
-      this.$router.replace({
-        name: "home",
-      });
-      window.location.reload();
-    }
-  },
-  methods: {
-    onSlideChange() {
-      console.log("111");
-    },
-    scroll() {
-      // 获取当前 swiper-wrapper 元素的 left 值,即偏移量
-      const wrapperLeft = this.$refs.mySwiper.wrapperEl.style.left;
-      // 将 left 值转换为数值
-      const left = parseInt(wrapperLeft);
-      // 计算当前滚动位置对应的 slide 的索引值
-      const currentIndex = -left / this.$refs.mySwiper.slidesGrid[0];
-      // 切换到下一个或上一个 slide
-      if (this.$refs.mySwiper.progress > 0.5) {
-        this.$refs.mySwiper.slideNext();
-      } else {
-        this.$refs.mySwiper.slidePrev();
-      }
-    },
-  },
-};
-</script>
-
-<style lang="less" scoped>
-.page-box {
-  .swiper-box {
-    height: calc(100vh - 67px);
-    //overflow: hidden;
-    //position: relative;
-
-    .base {
-      width: 100%;
-      //height: 100%;
-      height: calc(80vh - 67px);
-      padding: 20px 50px;
-      box-sizing: border-box;
-      display: flex;
-      //flex-direction: row;
-      //align-items: center;
-
-      .img {
-        box-sizing: border-box;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        width: 35%;
-
-        img {
-          width: 100%;
-          display: block;
-        }
-      }
-
-      .text-box {
-        box-sizing: border-box;
-        flex: 1;
-        padding: 40px;
-        text-align: left;
-        display: flex;
-        flex-direction: column;
-        justify-content: center;
-
-        .title {
-          box-sizing: border-box;
-          margin: 20px 0;
-          //margin: 0px;
-          font-family: Roboto, Helvetica, Arial, sans-serif;
-          font-size: 2.125rem;
-          line-height: 1.235;
-          letter-spacing: 0.00735em;
-          font-weight: 700;
-        }
-
-        .content {
-          box-sizing: border-box;
-          width: 100%;
-        }
-      }
-
-      .text {
-        flex: 1;
-        display: flex;
-        align-items: center;
-      }
-    }
-
-    .other-box {
-      margin-top: 1px;
-    }
-  }
-}
-</style>

+ 0 - 236
ClientPlatform/src 2/pages/order/add.vue

@@ -1,236 +0,0 @@
-<template>
-  <el-dialog
-    title="添加"
-    :visible.sync="dialogVisible"
-    width="70%"
-    :before-close="handleClose"
-  >
-    <el-form ref="form" :model="form" label-width="100px">
-      <el-form-item label="任务名称">
-        <el-input v-model="form.name"></el-input>
-      </el-form-item>
-      <el-form-item label="数据来源">
-        <el-select v-model="form.source" placeholder="请选择">
-          <el-option label="SNP" value="DNA"></el-option>
-        </el-select>
-      </el-form-item>
-
-      <el-form-item label="立即执行">
-        <el-switch v-model="form.isRunNow"></el-switch>
-      </el-form-item>
-      <el-form-item label="执行时间" v-if="!form.isRunNow">
-        <el-date-picker
-          v-model="form.runTime"
-          type="datetime"
-          placeholder="选择日期时间"
-        >
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="删除时间">
-        <el-date-picker
-          v-model="form.delTime"
-          type="datetime"
-          placeholder="选择日期时间"
-        >
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="COAD.Rdata">
-        <el-upload
-          class="upload-demo"
-          action="string"
-          drag
-          :multiple="false"
-          :http-request="UploadImage"
-          :on-change="fileChange"
-          :file-list="fileList"
-        >
-          <i class="el-icon-upload"></i>
-          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
-        </el-upload>
-      </el-form-item>
-      <el-form-item label="STAD.Rdata">
-        <el-upload
-          class="upload-demo"
-          action="string"
-          drag
-          :multiple="false"
-          :http-request="UploadImage2"
-          :on-change="fileChange2"
-          :file-list="fileList2"
-        >
-          <i class="el-icon-upload"></i>
-          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
-        </el-upload>
-      </el-form-item>
-      <el-form-item label="补充说明">
-        <el-input type="textarea" v-model="form.desc"></el-input>
-      </el-form-item>
-    </el-form>
-    <span slot="footer" class="dialog-footer">
-      <el-button @click="dialogVisible = false">取 消</el-button>
-      <el-button type="primary" @click="submit">确 定</el-button>
-    </span>
-  </el-dialog>
-</template>
-
-<script>
-import { createOrder, uploadFile } from "@/api";
-import dayjs from "dayjs";
-import { mapState } from "vuex";
-
-const UploadFileApi = () => {};
-export default {
-  name: "add",
-  props: {
-    findList1: {
-      type: Function,
-      default: () => {}
-    }
-  },
-  data() {
-    return {
-      title: "",
-      dialogVisible: false,
-      form: {
-        name: "",
-        isRunNow: false,
-        source: "",
-        runTime: "",
-        delTime: "",
-      },
-      fileList: [],
-      fileList2: [],
-      fileListID: [],
-      fileListID2: [],
-    };
-  },
-  computed: {
-    ...mapState({
-      userInfo: (state) => state.userInfo,
-    }),
-  },
-  methods: {
-    show() {
-      this.dialogVisible = true;
-    },
-    handleClose(done) {
-      this.$confirm("确认关闭?")
-        .then((_) => {
-          done();
-        })
-        .catch((_) => {});
-    },
-    onBeforeUploadImage(file) {
-      // console.log("file", file);
-      return true;
-      // const isIMAGE = file.type === "image/jpeg" || "image/jpg" || "image/png";
-      // const isLt1M = file.size / 1024 / 1024 < 1;
-      // if (!isIMAGE) {
-      //   this.$message.error("上传文件只能是图片格式!");
-      // }
-      // if (!isLt1M) {
-      //   this.$message.error("上传文件大小不能超过 1MB!");
-      // }
-      // return isIMAGE && isLt1M;
-    },
-    UploadImage(param) {
-      const formData = new FormData();
-      formData.append("file", param.file);
-      uploadFile(formData)
-        .then((response) => {
-          console.log(104, response);
-          console.log("上传图片成功");
-          if (response.code === 200) {
-            this.fileListID = [response.data];
-          }
-
-          param.onSuccess(); // 上传成功的图片会显示绿色的对勾
-          // 但是我们上传成功了图片, fileList 里面的值却没有改变,还好有on-change指令可以使用
-        })
-        .catch((response) => {
-          console.log("图片上传失败");
-          param.onError();
-        });
-    },
-    UploadImage2(param) {
-      const formData = new FormData();
-      formData.append("file", param.file);
-      uploadFile(formData)
-        .then((response) => {
-          console.log(104, response);
-          console.log("上传图片成功");
-          if (response.code === 200) {
-            this.fileListID2 = [response.data];
-          }
-
-          param.onSuccess(); // 上传成功的图片会显示绿色的对勾
-          // 但是我们上传成功了图片, fileList 里面的值却没有改变,还好有on-change指令可以使用
-        })
-        .catch((response) => {
-          console.log("图片上传失败");
-          param.onError();
-        });
-    },
-    fileChange(file) {
-      // this.$refs.upload.clearFiles(); // 清除文件对象
-      // this.logo = file.raw; // 取出上传文件的对象,在其它地方也可以使用
-      this.fileList = [{ name: file.name, url: file.url }]; // 重新手动赋值filstList, 免得自定义上传成功了, 而fileList并没有动态改变, 这样每次都是上传一个对象
-    },
-    fileChange2(file) {
-      // this.$refs.upload.clearFiles(); // 清除文件对象
-      // this.logo = file.raw; // 取出上传文件的对象,在其它地方也可以使用
-      this.fileList2 = [{ name: file.name, url: file.url }]; // 重新手动赋值filstList, 免得自定义上传成功了, 而fileList并没有动态改变, 这样每次都是上传一个对象
-    },
-    async submit() {
-      if (!this.form.isRunNow) {
-        if (!this.form.runTime) {
-          this.$message({
-            type: "error",
-            message: "执行时间为必填项!",
-          });
-          return;
-        }
-        if (!dayjs(dayjs()).isBefore(this.form.runTime)) {
-          this.$message({
-            type: "error",
-            message: "任务执行时间比当前时间早!",
-          });
-          return;
-        }
-      }
-      if (!this.fileListID.length || !this.fileListID2.length) {
-        this.$message({
-          type: "error",
-          message: "基因数据为必填项!",
-        });
-        return;
-      }
-
-      // if (  ) {
-      //   this.$message({
-      //     type: "error",
-      //     message: "基因数据为必填项!",
-      //   });
-      //   return;
-      // }
-      const params = {
-        ...this.form,
-        user_id: this.userInfo.id,
-        fileListID: this.fileListID,
-        fileListID2: this.fileListID2,
-      };
-      const res = await createOrder(params);
-      if (this.findList1) {
-        this.dialogVisible = false;
-        this.findList1()
-      }
-      // console.log(139, res);
-      // this.dialogVisible = false
-    },
-  },
-};
-</script>
-<style lang="less" scoped>
-.page-box {
-}
-</style>

+ 0 - 3
ClientPlatform/src 2/pages/order/info.vue

@@ -1,3 +0,0 @@
-<template>
-  <div>info</div>
-</template>

+ 0 - 210
ClientPlatform/src 2/pages/order/order.vue

@@ -1,210 +0,0 @@
-<template>
-  <div class="page-box">
-    <div class="search-box">
-      <!--            <el-input placeholder="任务Id"></el-input>&nbsp;&nbsp;-->
-      <el-button type="primary" icon="el-icon-plus" @click="AddOrder"
-        >ADD
-      </el-button>
-    </div>
-    <div>
-      <vxe-table
-        show-overflow
-        row-id="id"
-        :loading="loading1"
-        :data="tableData1"
-      >
-        <vxe-column field="id" title="订单ID" width="80"></vxe-column>
-        <vxe-column field="name" title="name" sortable></vxe-column>
-        <vxe-column field="create_time" title="create Time"></vxe-column>
-        <vxe-column field="run_time" title="是否立即执行">
-          <template #default="{ row }">
-            {{ row.run_time ? "是" : "否" }}
-          </template>
-        </vxe-column>
-        <vxe-column field="source" title="数据来源"></vxe-column>
-        <vxe-column field="status" title="status">
-          <template #default="{ row }">
-            {{ orderStatus[row.status || 0] }}
-          </template>
-        </vxe-column>
-        <vxe-column field="Details" title="操作" width="80">
-          <template #default="{ row }">
-            <div style="text-align: center">
-              <i
-                @click="showDetail(row)"
-                class="el-icon-info"
-                style="cursor: pointer"
-              ></i>
-              <i
-                @click="delOrder(row)"
-                class="el-icon-delete"
-                style="cursor: pointer"
-              ></i>
-            </div>
-          </template>
-        </vxe-column>
-      </vxe-table>
-      <vxe-pager
-        :loading="loading1"
-        :current-page="tablePage1.currentPage"
-        :page-size="tablePage1.pageSize"
-        :total="tablePage1.totalResult"
-        :layouts="[
-          'PrevPage',
-          'JumpNumber',
-          'NextPage',
-          'FullJump',
-          'Sizes',
-          'Total',
-        ]"
-        @page-change="handlePageChange1"
-      >
-      </vxe-pager>
-    </div>
-    <AddDom ref="AddDoms" :reload="findList1"></AddDom>
-  </div>
-</template>
-<script>
-import axios from "axios";
-import { hotTags, getClicks, getBlogs, getOrder } from "@/api";
-import { mapState } from "vuex";
-import { orderStatus } from "@/utils";
-import AddDom from "./add.vue";
-
-export default {
-  name: "task",
-  components: { AddDom },
-  data() {
-    return {
-      loading1: false,
-      orderStatus,
-      tableData1: [],
-      tablePage1: {
-        currentPage: 1,
-        pageSize: 10,
-        totalResult: 0,
-      },
-    };
-  },
-  computed: {
-    ...mapState({
-      userInfo: (state) => state.userInfo,
-    }),
-  },
-  created() {
-    this.findList1();
-  },
-  methods: {
-    async findList1() {
-      const token = localStorage.getItem("token");
-      const res = await getOrder({
-        token,
-        page: this.tablePage1.currentPage,
-        pageSize: this.tablePage1.pageSize,
-      });
-      console.log(8989, res.data);
-      this.loading1 = true;
-      this.tableData1 = res.data.list;
-      this.tablePage1.totalResult = res.data.total_count;
-      this.loading1 = false;
-      // setTimeout(() => {
-      //   const list = [
-      //     {
-      //       completeTime: "not completed",
-      //       createTime: "not created",
-      //       jobId: 795,
-      //       key: 795,
-      //       requestTime: "2023-04-04 21:09:27",
-      //       deleteTime: "2023-04-04 21:09:27",
-      //       status: "waiting",
-      //     },
-      //     {
-      //       completeTime: "not completed",
-      //       createTime: "not created",
-      //       jobId: 795,
-      //       key: 795,
-      //       requestTime: "2023-04-04 21:09:27",
-      //       deleteTime: "2023-04-04 21:09:27",
-      //       status: "success",
-      //     },
-      //     {
-      //       completeTime: "not completed",
-      //       createTime: "not created",
-      //       jobId: 795,
-      //       key: 795,
-      //       requestTime: "2023-04-04 21:09:27",
-      //       deleteTime: "2023-04-04 21:09:27",
-      //       status: "failed",
-      //     },
-      //   ];
-      //   this.loading1 = false;
-      //   this.tablePage1.totalResult = list.length;
-      //   this.tableData1 = list.slice(
-      //     (this.tablePage1.currentPage - 1) * this.tablePage1.pageSize,
-      //     this.tablePage1.currentPage * this.tablePage1.pageSize
-      //   );
-      //   console.log(this.tableData1);
-      // }, 300);
-    },
-    handlePageChange1({ currentPage, pageSize }) {
-      this.tablePage1.currentPage = currentPage;
-      this.tablePage1.pageSize = pageSize;
-      this.findList1();
-    },
-    print(row) {
-      console.log(row);
-    },
-    getTag(row) {
-      if (row.status === "success") {
-        return "success";
-      }
-      if (row.status === "waiting") {
-        return "info";
-      }
-      return "danger";
-    },
-    delOrder(row) {
-      console.log(row);
-      this.$alert("删除当前订单将清理所有已生成数据!", "提示", {
-        confirmButtonText: "确定",
-        callback: (action) => {
-          console.log(123, action);
-        },
-      });
-    },
-    showDetail(row) {
-      this.$router.push({
-        path: "/result",
-        query: {
-          jobId: row.id,
-        },
-      });
-    },
-    AddOrder() {
-      this.$refs.AddDoms.show();
-    },
-  },
-};
-</script>
-
-<style lang="less" scoped>
-.page-box {
-  padding: 0 24px;
-  margin-top: 67px;
-  height: calc(100vh - 68px);
-
-  .search-box {
-    display: flex;
-    margin-top: 24px;
-    padding-top: 24px;
-    margin-bottom: 24px;
-  }
-
-  .list-box {
-    //margin-top: 24px;
-    //  box-sizing: border-box;
-    //  height: 300px;
-    //  width: 100%;
-  }
-}
-</style>

+ 0 - 128
ClientPlatform/src 2/pages/result/result.vue

@@ -1,128 +0,0 @@
-<template>
-  <div class="page-box">
-    <div class="card-box">
-      <div class="title">
-        <h5>Result Details</h5>
-      </div>
-      <div class="content-box">
-        <div class="base-info">
-          <div>任务ID:{{ jobId }}</div>
-          <div>
-            Status:
-            <el-tag type="info">{{ getStatus(detail.status) }}</el-tag>
-          </div>
-        </div>
-      </div>
-      <div>
-        <img v-if="detail.SC_GRS" :src="detail.SC_GRS" alt="" />
-        <img v-if="detail.OR_GRS" :src="detail.OR_GRS" alt="" />
-        <img v-if="detail.DL_GRS" :src="detail.DL_GRS" alt="" />
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import { createOrder, orderDetail } from "@/api";
-export default {
-  name: "result",
-  data() {
-    return {
-      jobId: "",
-      detail: {},
-    };
-  },
-  mounted() {
-    this.jobId = this.$route.query.jobId;
-    this.getDetailFn();
-  },
-  methods: {
-    async getDetailFn() {
-      if (!this.jobId) return;
-      const res = await orderDetail({
-        id: this.jobId,
-      });
-      if (res.code === 200) {
-        this.detail = res.data;
-      }
-    },
-    getTag(row) {
-      if (row.status === "success") {
-        return "success";
-      }
-      if (row.status === "waiting") {
-        return "info";
-      }
-      return "danger";
-    },
-    getStatus(status) {
-      if (status === 0) {
-        return "已创建";
-      }
-      if (status === 1) {
-        return "已创建任务";
-      }
-      if (status === 2) {
-        return "任务运行中";
-      }
-      if (status === 3) {
-        return "已完成";
-      }
-      return "正在初始化中";
-    },
-  },
-};
-</script>
-<style lang="less" scoped>
-.page-box {
-  padding: 24px;
-
-  .card-box {
-    background-color: rgb(255, 255, 255);
-    color: rgba(0, 0, 0, 0.87);
-    transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
-    border-radius: 4px;
-    box-shadow: rgba(0, 0, 0, 0.2) 0px 3px 3px -2px,
-      rgba(0, 0, 0, 0.14) 0px 3px 4px 0px, rgba(0, 0, 0, 0.12) 0px 1px 8px 0px;
-    min-width: 300px;
-    margin-top: 16px;
-    margin-bottom: 16px;
-    overflow: hidden;
-    padding-right: 15px;
-    padding-top: 15px;
-    padding-bottom: 15px;
-
-    .title {
-      border-left: 6px solid rgb(246, 144, 61);
-      border-top-color: rgb(246, 144, 61);
-      border-right-color: rgb(246, 144, 61);
-      border-bottom-color: rgb(246, 144, 61);
-      background-color: rgb(16, 126, 100);
-      color: rgb(255, 255, 255);
-      padding: 8px 8px 8px 16px;
-
-      h5 {
-        font-size: 24px;
-        margin: 0px;
-        font-family: Roboto, Helvetica, Arial, sans-serif;
-        font-weight: 400;
-        font-size: 1.5rem;
-        line-height: 1.334;
-        letter-spacing: 0em;
-        display: flex;
-        -webkit-box-align: center;
-        align-items: center;
-      }
-    }
-
-    .content-box {
-      display: flex;
-
-      .base-info {
-        width: 150px;
-        padding: 15px;
-      }
-    }
-  }
-}
-</style>

+ 0 - 274
ClientPlatform/src 2/pages/server/server.vue

@@ -1,274 +0,0 @@
-<template>
-  <div class="page-box">
-      server
-  </div>
-</template>
-<script>
-import axios from "axios";
-import { hotTags, getClicks, getBlogs } from "@/api";
-
-export default {
-  name: "home",
-  data() {
-    return {
-      /*
-       * active
-       *    浏览量排序: views
-       *    点赞量排序: likes
-       *    评论数排序: comments
-       *    发布时间排序: time
-       * */
-      active: "views",
-      tag: "",
-      searchText: "",
-      tags: [],
-      blogsList: [],
-      clickList: [],
-      color: [
-        "#2B6363",
-        "#DB704D",
-        "#63B4AE",
-        "#EA5368",
-        "#EFA19D",
-        "#E7CA65",
-        "#C7C7AB",
-        "#EA5368",
-        "#EFA19D",
-        "#2B6363",
-        "#DB704D",
-      ],
-      total: 0,
-      pageSize: 15,
-      size: 1,
-    };
-  },
-  watch: {
-    tags() {
-      console.log(119);
-    },
-  },
-  mounted() {
-    setTimeout(() => {
-      if (this.$route.query && this.$route.query.search) {
-        this.searchText = this.$route.query.search;
-      }
-      this.getList("views");
-      this.getTagsFn();
-      this.getClickListFn();
-    }, 200);
-  },
-  methods: {
-    async getList(type) {
-      if (this.active !== type) {
-        this.active = type;
-      }
-      const params = {
-        sort: this.active,
-        tag: this.tag,
-        searchText: this.searchText,
-        size: this.size,
-        pageSize: this.pageSize,
-      };
-      const res = await getBlogs(params);
-      this.total = res.data.total;
-      this.blogsList = res.data.list;
-    },
-    async getClickListFn() {
-      const res = await getClicks();
-      this.clickList = res.data;
-    },
-    async getTagsFn() {
-      const res = await hotTags();
-      console.log("8080", res);
-      this.tags = res.data.map((item) => {
-        return {
-          name: item,
-          color: this.color[Math.floor(Math.random() * 9)],
-        };
-      });
-    },
-    showDetail(id) {
-      this.$router.push({
-        path: "/blogDetails",
-        query: {
-          id,
-        },
-      });
-    },
-    search() {
-      this.tag = "";
-      this.total = 0;
-      this.pageSize = 15;
-      this.size = 1;
-      this.getList();
-    },
-    searchTag(tag) {
-      this.tag = tag;
-      this.searchText = "";
-      this.total = 0;
-      this.pageSize = 15;
-      this.size = 1;
-      this.getList();
-    },
-    sizeChange(size) {
-      this.size = size;
-      this.getList();
-    },
-  },
-};
-</script>
-
-<style lang="less" scoped>
-.home-box {
-  //background-color: #ffffff;
-  .event-box {
-    padding: 15px 20px;
-    margin-bottom: 20px;
-    background-color: #ffffff;
-    border-radius: 4px;
-    .sort-box {
-      //font-size: 14px;
-      span {
-        &:hover {
-          cursor: pointer;
-        }
-      }
-    }
-    .active {
-      color: #409eff;
-    }
-  }
-  .body-box {
-    display: flex;
-    .bolg-box {
-      flex: 1;
-      .list-box {
-        display: flex;
-        flex-wrap: wrap;
-        .item {
-          //width: 300px;
-          background-color: #ffffff;
-          flex: 1 1 260px;
-          margin-right: 15px;
-          margin-bottom: 15px;
-          img {
-            cursor: pointer;
-          }
-        }
-        img {
-        }
-      }
-    }
-    .other-box {
-      .tag-box {
-        border-radius: 4px;
-        width: 280px;
-        background-color: #f8f9fb;
-        margin-bottom: 24px;
-        .title {
-          text-align: left;
-          padding-left: 5px;
-
-          &:before {
-            content: "";
-            display: block;
-            position: relative;
-            top: 35px;
-            width: 85px;
-            height: 2px;
-            border-radius: 4px;
-            background: #2c3e50;
-          }
-        }
-        .tags {
-          padding: 0 5px;
-          text-align: left;
-          min-height: 150px;
-          .tag {
-            font-size: 14px;
-            color: #ffffff;
-            cursor: pointer;
-            padding: 1px 5px;
-            border-radius: 4px;
-            margin-right: 5px;
-            margin-bottom: 5px;
-            display: inline-block;
-            transition: all 0.3ms;
-            &:hover {
-              color: #409eff;
-            }
-          }
-        }
-      }
-      .click-box {
-        border-radius: 4px;
-        width: 280px;
-        background-color: #f8f9fb;
-        .title {
-          text-align: left;
-          padding-left: 5px;
-
-          &:before {
-            content: "";
-            display: block;
-            position: relative;
-            top: 35px;
-            width: 85px;
-            height: 2px;
-            border-radius: 4px;
-            background: #2c3e50;
-          }
-        }
-        .list-box {
-          //height: 250px;
-          min-height: 250px;
-          max-height: 470px;
-          //max-height: 50vh;
-          padding: 5px;
-          overflow: scroll;
-          background-color: #f8f9fb;
-          .item {
-            cursor: pointer;
-            .index {
-              margin-bottom: 5px;
-              img {
-                cursor: pointer;
-              }
-              .name {
-                transition: color ease-in-out 0.3s;
-                background-color: #000000;
-                color: #ffffff;
-              }
-              &:hover {
-                .name {
-                  color: #409eff;
-                }
-              }
-            }
-            .other {
-              display: flex;
-              margin-bottom: 10px;
-              img {
-                cursor: pointer;
-                width: 70px;
-                height: 70px;
-              }
-              .content {
-                text-align: left;
-                color: #333;
-                padding-left: 10px;
-                font-size: 18px;
-              }
-              &:hover {
-                .content {
-                  color: #409eff;
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
-</style>

+ 0 - 136
ClientPlatform/src 2/pages/service/add.vue

@@ -1,136 +0,0 @@
-<template>
-  <el-dialog
-    title="添加"
-    :visible.sync="dialogVisible"
-    width="70%"
-    :before-close="handleClose"
-  >
-    <el-form ref="form" :model="form" label-width="80px">
-      <el-form-item label="服务名称">
-        <el-input v-model="form.name"></el-input>
-      </el-form-item>
-      <el-form-item label="数据来源">
-        <el-select v-model="form.source" placeholder="请选择">
-          <el-option label="SNP" value="DNA"></el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="dataset">
-        <el-upload
-          class="upload-demo"
-          action="string"
-          drag
-          :http-request="UploadImage"
-          :on-change="fileChange"
-          :file-list="fileList"
-          multiple
-        >
-          <i class="el-icon-upload"></i>
-          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
-        </el-upload>
-      </el-form-item>
-      <el-form-item label="补充说明">
-        <el-input type="textarea" v-model="form.desc"></el-input>
-      </el-form-item>
-    </el-form>
-    <span slot="footer" class="dialog-footer">
-      <el-button @click="dialogVisible = false">取 消</el-button>
-      <el-button type="primary" @click="submit">确 定</el-button>
-    </span>
-  </el-dialog>
-</template>
-
-<script>
-import { createOrder, createService, uploadFile } from "@/api";
-import { mapState } from "vuex";
-
-const UploadFileApi = () => {};
-export default {
-  name: "add",
-  data() {
-    return {
-      title: "",
-      dialogVisible: false,
-      form: {
-        name: "",
-        isRunNow: false,
-        source: "",
-        runTime: "",
-        delTime: "",
-      },
-      fileList: [],
-      fileListID: [],
-    };
-  },
-  computed: {
-    ...mapState({
-      userInfo: (state) => state.userInfo,
-    }),
-  },
-  methods: {
-    show() {
-      this.dialogVisible = true;
-    },
-    handleClose(done) {
-      this.$confirm("确认关闭?")
-        .then((_) => {
-          done();
-        })
-        .catch((_) => {});
-    },
-    onBeforeUploadImage(file) {
-      // console.log("file", file);
-      return true;
-      // const isIMAGE = file.type === "image/jpeg" || "image/jpg" || "image/png";
-      // const isLt1M = file.size / 1024 / 1024 < 1;
-      // if (!isIMAGE) {
-      //   this.$message.error("上传文件只能是图片格式!");
-      // }
-      // if (!isLt1M) {
-      //   this.$message.error("上传文件大小不能超过 1MB!");
-      // }
-      // return isIMAGE && isLt1M;
-    },
-    UploadImage(param) {
-      const formData = new FormData();
-      formData.append("file", param.file);
-      uploadFile(formData)
-        .then((response) => {
-          console.log(104, response);
-          console.log("上传图片成功");
-          if (response.code === 200) {
-            this.fileListID.push(response.data);
-          }
-
-          param.onSuccess(); // 上传成功的图片会显示绿色的对勾
-          // 但是我们上传成功了图片, fileList 里面的值却没有改变,还好有on-change指令可以使用
-        })
-        .catch((response) => {
-          console.log("图片上传失败");
-          param.onError();
-        });
-    },
-    fileChange(file) {
-      console.log(114, file);
-      // this.$refs.upload.clearFiles(); // 清除文件对象
-      // this.logo = file.raw; // 取出上传文件的对象,在其它地方也可以使用
-      // this.fileList = [{ name: file.name, url: file.url }]; // 重新手动赋值filstList, 免得自定义上传成功了, 而fileList并没有动态改变, 这样每次都是上传一个对象
-    },
-    async submit() {
-      console.log(this.form);
-      console.log(140, this.userInfo);
-      const params = {
-        ...this.form,
-        user_id: this.userInfo.id,
-        fileListID: this.fileListID,
-      };
-      const res = await createService(params);
-      console.log(139, res);
-      // this.dialogVisible = false
-    },
-  },
-};
-</script>
-<style lang="less" scoped>
-.page-box {
-}
-</style>

+ 0 - 201
ClientPlatform/src 2/pages/service/service.vue

@@ -1,201 +0,0 @@
-<template>
-  <div class="page-box">
-    <div class="search-box">
-      <!--            <el-input placeholder="任务Id"></el-input>&nbsp;&nbsp;-->
-      <el-button type="primary" icon="el-icon-plus" @click="AddOrder"
-        >ADD
-      </el-button>
-    </div>
-    <div>
-      <vxe-table
-        show-overflow
-        row-id="id"
-        :loading="loading1"
-        :data="tableData1"
-      >
-        <vxe-column field="id" title="订单ID" width="80"></vxe-column>
-        <vxe-column field="name" title="name" sortable></vxe-column>
-        <vxe-column field="create_time" title="create Time"></vxe-column>
-        <vxe-column field="run_time" title="是否立即执行">
-          <template #default="{ row }">
-            {{ row.run_time ? "是" : "否" }}
-          </template>
-        </vxe-column>
-        <vxe-column field="source" title="数据来源"></vxe-column>
-        <vxe-column field="status" title="status">
-          <template #default="{ row }">
-            {{ orderStatus[row.status || 0] }}
-          </template>
-        </vxe-column>
-        <!--        <vxe-column field="status" title="Status" width="120">
-                  <template #default="{ row }">
-                    <el-tag :type="getTag(row)">{{ row.status }}</el-tag>
-                  </template>
-                </vxe-column>-->
-        <vxe-column field="Details" title="操作" width="80">
-          <template #default="{ row }">
-            <div style="text-align: center">
-              <i
-                @click="showDetail(row)"
-                class="el-icon-delete"
-                style="cursor: pointer"
-              ></i>
-            </div>
-          </template>
-        </vxe-column>
-      </vxe-table>
-      <vxe-pager
-        :loading="loading1"
-        :current-page="tablePage1.currentPage"
-        :page-size="tablePage1.pageSize"
-        :total="tablePage1.totalResult"
-        :layouts="[
-          'PrevPage',
-          'JumpNumber',
-          'NextPage',
-          'FullJump',
-          'Sizes',
-          'Total',
-        ]"
-        @page-change="handlePageChange1"
-      >
-      </vxe-pager>
-    </div>
-    <AddDom ref="AddDoms"></AddDom>
-  </div>
-</template>
-<script>
-import axios from "axios";
-import { hotTags, getClicks, getBlogs, getOrder } from "@/api";
-import { mapState } from "vuex";
-import { orderStatus } from "@/utils";
-import AddDom from "./add.vue";
-
-export default {
-  name: "task",
-  components: { AddDom },
-  data() {
-    return {
-      loading1: false,
-      orderStatus,
-      tableData1: [],
-      tablePage1: {
-        currentPage: 1,
-        pageSize: 10,
-        totalResult: 0,
-      },
-    };
-  },
-  computed: {
-    ...mapState({
-      userInfo: (state) => state.userInfo,
-    }),
-  },
-  created() {
-    this.findList1();
-  },
-  methods: {
-    async findList1() {
-      const token = localStorage.getItem("token");
-      const res = await getOrder({
-        token,
-        page: this.tablePage1.currentPage,
-        pageSize: this.tablePage1.pageSize,
-      });
-      console.log(8989, res.data);
-      this.loading1 = true;
-      this.tableData1 = res.data.list;
-      this.tablePage1.totalResult = res.data.total_count;
-      this.loading1 = false;
-      // setTimeout(() => {
-      //   const list = [
-      //     {
-      //       completeTime: "not completed",
-      //       createTime: "not created",
-      //       jobId: 795,
-      //       key: 795,
-      //       requestTime: "2023-04-04 21:09:27",
-      //       deleteTime: "2023-04-04 21:09:27",
-      //       status: "waiting",
-      //     },
-      //     {
-      //       completeTime: "not completed",
-      //       createTime: "not created",
-      //       jobId: 795,
-      //       key: 795,
-      //       requestTime: "2023-04-04 21:09:27",
-      //       deleteTime: "2023-04-04 21:09:27",
-      //       status: "success",
-      //     },
-      //     {
-      //       completeTime: "not completed",
-      //       createTime: "not created",
-      //       jobId: 795,
-      //       key: 795,
-      //       requestTime: "2023-04-04 21:09:27",
-      //       deleteTime: "2023-04-04 21:09:27",
-      //       status: "failed",
-      //     },
-      //   ];
-      //   this.loading1 = false;
-      //   this.tablePage1.totalResult = list.length;
-      //   this.tableData1 = list.slice(
-      //     (this.tablePage1.currentPage - 1) * this.tablePage1.pageSize,
-      //     this.tablePage1.currentPage * this.tablePage1.pageSize
-      //   );
-      //   console.log(this.tableData1);
-      // }, 300);
-    },
-    handlePageChange1({ currentPage, pageSize }) {
-      this.tablePage1.currentPage = currentPage;
-      this.tablePage1.pageSize = pageSize;
-      this.findList1();
-    },
-    print(row) {
-      console.log(row);
-    },
-    getTag(row) {
-      if (row.status === "success") {
-        return "success";
-      }
-      if (row.status === "waiting") {
-        return "info";
-      }
-      return "danger";
-    },
-    showDetail(row) {
-      this.$router.push({
-        path: "/result",
-        query: {
-          jobId: row.jobId,
-        },
-      });
-    },
-    AddOrder() {
-      this.$refs.AddDoms.show();
-    },
-  },
-};
-</script>
-
-<style lang="less" scoped>
-.page-box {
-  padding: 0 24px;
-  margin-top: 67px;
-  height: calc(100vh - 68px);
-
-  .search-box {
-    display: flex;
-    margin-top: 24px;
-    padding-top: 24px;
-    margin-bottom: 24px;
-  }
-
-  .list-box {
-    //margin-top: 24px;
-    //  box-sizing: border-box;
-    //  height: 300px;
-    //  width: 100%;
-  }
-}
-</style>

+ 0 - 167
ClientPlatform/src 2/pages/task/task.vue

@@ -1,167 +0,0 @@
-<template>
-    <div class="page-box">
-        <div class="search-box">
-            <el-input placeholder="任务Id"></el-input>&nbsp;&nbsp;
-            <el-button type="primary" icon="el-icon-search">搜索</el-button>
-        </div>
-        <div>
-            <vxe-table
-                    show-overflow
-                    height="200"
-                    row-id="id"
-                    :loading="loading1"
-                    :data="tableData1"
-            >
-                <vxe-column field="jobId" title="job Id" width="80"></vxe-column>
-                <vxe-column
-                        field="requestTime"
-                        title="request Time"
-                        sortable
-                ></vxe-column>
-                <vxe-column field="createTime" title="create Time"></vxe-column>
-                <vxe-column field="completeTime" title="complete Time"></vxe-column>
-                <vxe-column field="deleteTime" title="delete Time"></vxe-column>
-                <vxe-column field="status" title="Status" width="120">
-                    <template #default="{ row }">
-                        <el-tag :type="getTag(row)">{{ row.status }}</el-tag>
-                    </template>
-                </vxe-column>
-                <vxe-column field="Details" title="Details" width="80">
-                    <template #default="{ row }">
-                        <div style="text-align: center">
-                            <i @click="showDetail(row)" class="el-icon-search" style="cursor: pointer;"></i>
-                        </div>
-                    </template>
-                </vxe-column>
-            </vxe-table>
-            <vxe-pager
-                    :loading="loading1"
-                    :current-page="tablePage1.currentPage"
-                    :page-size="tablePage1.pageSize"
-                    :total="tablePage1.totalResult"
-                    :layouts="[
-          'PrevPage',
-          'JumpNumber',
-          'NextPage',
-          'FullJump',
-          'Sizes',
-          'Total',
-        ]"
-                    @page-change="handlePageChange1"
-            >
-            </vxe-pager>
-        </div>
-    </div>
-</template>
-<script>
-import axios from "axios";
-import { hotTags, getClicks, getBlogs } from "@/api";
-
-export default {
-  name: "task",
-  data() {
-    return {
-      loading1: false,
-      tableData1: [],
-      tablePage1: {
-        currentPage: 1,
-        pageSize: 10,
-        totalResult: 0,
-      },
-    };
-  },
-  created() {
-    this.findList1();
-  },
-  methods: {
-    findList1() {
-      this.loading1 = true;
-      setTimeout(() => {
-        const list = [
-          {
-            completeTime: "not completed",
-            createTime: "not created",
-            jobId: 795,
-            key: 795,
-            requestTime: "2023-04-04 21:09:27",
-            deleteTime: "2023-04-04 21:09:27",
-            status: "waiting",
-          },
-          {
-            completeTime: "not completed",
-            createTime: "not created",
-            jobId: 795,
-            key: 795,
-            requestTime: "2023-04-04 21:09:27",
-            deleteTime: "2023-04-04 21:09:27",
-            status: "success",
-          },
-          {
-            completeTime: "not completed",
-            createTime: "not created",
-            jobId: 795,
-            key: 795,
-            requestTime: "2023-04-04 21:09:27",
-            deleteTime: "2023-04-04 21:09:27",
-            status: "failed",
-          },
-        ];
-        this.loading1 = false;
-        this.tablePage1.totalResult = list.length;
-        this.tableData1 = list.slice(
-          (this.tablePage1.currentPage - 1) * this.tablePage1.pageSize,
-          this.tablePage1.currentPage * this.tablePage1.pageSize
-        );
-        console.log(this.tableData1);
-      }, 300);
-    },
-    handlePageChange1({ currentPage, pageSize }) {
-      this.tablePage1.currentPage = currentPage;
-      this.tablePage1.pageSize = pageSize;
-      this.findList1();
-    },
-    print(row) {
-      console.log(row);
-    },
-    getTag(row) {
-      if (row.status === "success") {
-        return "success";
-      }
-      if (row.status === "waiting") {
-        return "info";
-      }
-      return "danger";
-    },
-    showDetail(row) {
-      this.$router.push({
-        path: '/result',
-        query: {
-          jobId: row.jobId
-        }
-      })
-    }
-  },
-};
-</script>
-
-<style lang="less" scoped>
-.page-box {
-  padding: 0 24px;
-  margin-top: 67px;
-  height: calc(100vh - 68px);
-
-  .search-box {
-    display: flex;
-    margin-top: 24px;
-    padding-top: 24px;
-    margin-bottom: 24px;
-  }
-
-  .list-box {
-    //margin-top: 24px;
-    //  box-sizing: border-box;
-    //  height: 300px;
-    //  width: 100%;
-  }
-}
-</style>

+ 0 - 217
ClientPlatform/src 2/pages/userInfo/userInfo.vue

@@ -1,217 +0,0 @@
-<template>
-  <div class="page-box">
-    <el-card class="title">
-      用户详情-<span v-if="detail && detail.id">{{ detail.id }}</span>
-    </el-card>
-    <br />
-    <el-card class="el-input" v-if="detail && detail.id">
-      <el-form ref="detail" :model="detail" label-width="80px">
-        <el-form-item label="邮箱">
-          <div>{{ detail.email }}</div>
-        </el-form-item>
-        <el-form-item label="用户昵称">
-          <el-input type="text" v-model="detail.name"></el-input>
-        </el-form-item>
-        <el-form-item label="是否患病">
-          <el-switch v-model="detail.isSick"></el-switch>
-          <div v-if="detail.isSick">
-            <el-tag
-              v-for="tag in detail.sick"
-              :key="tag"
-              closable
-              style="margin-right: 5px; margin-bottom: 5px"
-              @close="handleTagClose(tag)"
-            >
-              {{ tag }}
-            </el-tag>
-            <span v-if="inputVisible">
-              <el-input
-                class="input-new-tag"
-                v-model="inputValue"
-                ref="saveTagInput"
-                size="small"
-                @keyup.enter.native="handleInputConfirm"
-                @blur="handleInputConfirm"
-              />
-              <el-button @click="inputVisible = false">取消</el-button>
-            </span>
-            <el-button
-              v-else
-              class="button-new-tag"
-              size="small"
-              @click="showInput"
-              >+ 添加</el-button
-            >
-          </div>
-        </el-form-item>
-        <el-form-item label="性别">
-          <el-select v-model="detail.sex" placeholder="请选择">
-            <el-option
-              v-for="item in sexOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            >
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="年龄">
-          <el-input v-model="detail.age" placeholder="请输入内容"></el-input>
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" @click="onSubmit">保存</el-button>
-          <el-button @click="toHome">取消</el-button>
-        </el-form-item>
-      </el-form>
-
-      <div class="del-user"><span @click="deleteUser">退出登陆</span></div>
-    </el-card>
-  </div>
-</template>
-<script>
-import { userInfo, userUpdate } from "@/api";
-
-export default {
-  data() {
-    return {
-      detail: {},
-      sexOptions: [
-        {
-          value: "woman",
-          label: "女",
-        },
-        {
-          value: "man",
-          label: "男",
-        },
-        {
-          value: "other",
-          label: "保密",
-        },
-      ],
-      inputVisible: false,
-      inputValue: "",
-    };
-  },
-  mounted() {
-    this.pageInit();
-  },
-  methods: {
-    async onSubmit() {
-      const params = {
-        ...this.detail,
-      };
-      // if (this.inputValue) {
-      //   params.isSick = true;
-      // }
-      if (!this.detail.isSick) {
-        this.detail.sick = [];
-      }
-      console.log(110, this.detail.isSick);
-      const res = await userUpdate(params);
-      if (res.data) {
-        window.location.reload();
-      }
-    },
-    async pageInit() {
-      const token = localStorage.getItem("token");
-      const res = await userInfo({ token });
-      this.detail = res.data;
-      console.log(117, this.detail);
-      if (this.detail.isSick && this.detail.isSick === true) {
-        // this.inputValue = this.detail.sick;
-      }
-      this.$set(this.detail, "isSick", this.detail.isSick === true);
-    },
-    toHome(query) {
-      console.log(101);
-      this.$router.replace({
-        name: "home",
-        query,
-      });
-    },
-    deleteUser() {
-      this.$alert("退出前用户之后无法使用订单信息!", "提示", {
-        confirmButtonText: "确定",
-        callback: (action) => {
-          this.$message({
-            type: "info",
-            message: `删除成功!`,
-          });
-          localStorage.clear();
-          this.toHome({
-            type: "reload",
-          });
-        },
-      });
-    },
-    handleTagClose(tag) {
-      console.log(tag);
-      const sick = this.detail.sick.filter((name) => name !== tag);
-      this.detail.sick = this.detail = {
-        ...this.detail,
-        sick: [...sick],
-      };
-    },
-    showInput() {
-      this.inputVisible = true;
-      const detail = {
-        ...this.detail,
-        // sick: [],
-      };
-      if (detail?.sick) {
-        detail.sick = [];
-      }
-      this.detail = { ...detail };
-      this.$nextTick((_) => {
-        this.$refs.saveTagInput.$refs.input.focus();
-      });
-    },
-    handleInputConfirm() {
-      const sick = new Set([...(this.detail?.sick || []), this.inputValue]);
-      this.detail.sick = this.detail = {
-        ...this.detail,
-        sick: [...sick],
-      };
-    },
-  },
-};
-</script>
-<style lang="less" scoped>
-.page-box {
-  padding: 24px;
-
-  .title {
-  }
-
-  .del-user {
-    text-align: right;
-
-    span {
-      background-color: rgba(255, 0, 0, 0.29);
-      color: red;
-      padding: 1px 3px;
-      font-size: 10px;
-      cursor: pointer;
-    }
-  }
-
-  .el-tag + .el-tag {
-    margin-left: 10px;
-  }
-
-  .button-new-tag {
-    margin-left: 10px;
-    height: 32px;
-    line-height: 30px;
-    padding-top: 0;
-    padding-bottom: 0;
-  }
-
-  .input-new-tag {
-    width: 90px;
-    margin-left: 10px;
-    vertical-align: bottom;
-  }
-}
-</style>

+ 0 - 93
ClientPlatform/src 2/router.js

@@ -1,93 +0,0 @@
-import VueRouter from "vue-router";
-
-const routes = [
-  { path: "/", name: "home", component: () => import("./pages/home/home.vue") },
-  {
-    path: "/home",
-    name: "home",
-    component: () => import("./pages/home/home.vue"),
-  },
-  {
-    path: "/server",
-    name: "server",
-    component: () => import("./pages/server/server.vue"),
-  },
-  {
-    path: "/order",
-    name: "order",
-    component: () => import("./pages/order/order.vue"),
-  },
-  {
-    path: "/service",
-    name: "service",
-    component: () => import("./pages/service/service.vue"),
-  },
-  {
-    path: "/task",
-    name: "task",
-    component: () => import("./pages/task/task.vue"),
-  },
-  {
-    path: "/about",
-    name: "about",
-    component: () => import("./pages/about/about.vue"),
-  },
-  {
-    path: "/result",
-    name: "result",
-    component: () => import("./pages/result/result.vue"),
-  },
-  {
-    path: "/userInfo",
-    name: "userInfo",
-    component: () => import("./pages/userInfo/userInfo.vue"),
-  },
-  {
-    path: "/blogDetails",
-    name: "blogDetails",
-    component: () => import("./pages/blogDetails/blogDetails.vue"),
-  },
-  {
-    path: "/admin",
-    name: "admin",
-    component: () => import("./pages/admin/admin.vue"),
-    children: [
-      {
-        path: "",
-        name: "info",
-        component: () => import("./pages/admin/children/info/info.vue"),
-      },
-      {
-        path: "info",
-        name: "info",
-        component: () => import("./pages/admin/children/info/info.vue"),
-      },
-      {
-        path: "blog",
-        name: "blog",
-        component: () => import("./pages/admin/children/blog/blog.vue"),
-      },
-      {
-        path: "blogs",
-        name: "blogs",
-        component: () => import("./pages/admin/children/blogs/blogs.vue"),
-      },
-      {
-        path: "tags",
-        name: "tags",
-        component: () => import("./pages/admin/children/tags/tags.vue"),
-      },
-      {
-        path: "comments",
-        name: "comments",
-        component: () => import("./pages/admin/children/comments/comments.vue"),
-      },
-    ],
-  },
-];
-
-const router = new VueRouter({
-  routes, // short for `routes: routes`
-});
-
-export default router;

+ 0 - 16
ClientPlatform/src 2/store.js

@@ -1,16 +0,0 @@
-import Vuex from "vuex";
-import Vue from "vue";
-Vue.use(Vuex);
-const store = new Vuex.Store({
-  state: {
-    userInfo: {},
-  },
-  mutations: {
-    setUserInfo(state, payload) {
-      console.log(10101010, payload);
-      state.userInfo = payload;
-    },
-  },
-});
-
-export default store;

+ 0 - 8
ClientPlatform/src 2/style.less

@@ -1,8 +0,0 @@
-@bg-color: rgb(16, 126, 100);
-
-body {
-  //background-color: @bg-color;
-  padding: 0;
-  margin: 0;
-  
-}

+ 0 - 29
ClientPlatform/src 2/utils/config.js

@@ -1,29 +0,0 @@
-const STAGE_CONFIG = {
-  "api-mock": {
-    path: "api-mock",
-  },
-  dev: {
-    path: "/api",
-  },
-  prod: {
-    path: "",
-  },
-};
-
-let stageKey = window.localStorage.getItem("stage");
-if (process.env.NODE_ENV === "production") {
-  stageKey = "prod";
-} else {
-  stageKey = "dev";
-}
-
-const stage = STAGE_CONFIG[stageKey || "api-mock"];
-
-// 0:已创建;1:已创建任务;2:任务运行中;3:已完成
-const orderStatus = {
-  0: "等待中",
-  1: "已创建任务",
-  2: "任务运行中",
-  3: "已完成",
-};
-export { stage, orderStatus };

+ 0 - 15
ClientPlatform/src 2/utils/cookie.js

@@ -1,15 +0,0 @@
-/**
- *  Set a Cookie
- * @param cName    名称
- * @param cValue   值
- * @param expDays  过期时间(天)
- * demo:
- *         let username = 'Max Brown';
- *         setCookie('username', username, 30);
- */
-export function setCookie(cName, cValue, expDays) {
-  const date = new Date();
-  date.setTime(date.getTime() + expDays * 24 * 60 * 60 * 1000);
-  const expires = "expires=" + date.toUTCString();
-  document.cookie = cName + "=" + cValue + "; " + expires + "; path=/";
-}

+ 0 - 3
ClientPlatform/src 2/utils/index.js

@@ -1,3 +0,0 @@
-export * from "./cookie";
-export * from "./request";
-export * from "./config";

+ 0 - 147
ClientPlatform/src 2/utils/request.js

@@ -1,147 +0,0 @@
-import axios from "axios";
-import { Message } from "element-ui";
-import router from "../router";
-import { stage } from "./config";
-import QS from "qs";
-// 响应拦截器
-axios.interceptors.response.use(
-  (response) => {
-    // 如果返回的状态码为200,说明接口请求成功,可以正常拿到数据
-    // 否则的话抛出错误
-    if (response.status === 200) {
-      return Promise.resolve(response);
-    } else {
-      return Promise.reject(response);
-    }
-  },
-  // 服务器状态码不是2开头的的情况
-  // 这里可以跟你们的后台开发人员协商好统一的错误状态码
-  // 然后根据返回的状态码进行一些操作,例如登录过期提示,错误提示等等
-  // 下面列举几个常见的操作,其他需求可自行扩展
-  (error) => {
-    if (error.response.status) {
-      switch (error.response.status) {
-        // 401: 未登录
-        // 未登录则跳转登录页面,并携带当前页面的路径
-        // 在登录成功后返回当前页面,这一步需要在登录页操作。
-        case 401:
-          router.replace({
-            path: "/login",
-            query: {
-              redirect: router.currentRoute.fullPath,
-            },
-          });
-          break;
-
-        // 403 token过期
-        // 登录过期对用户进行提示
-        // 清除本地token和清空vuex中token对象
-        // 跳转登录页面
-        case 403:
-          router({
-            message: "登录过期,请重新登录",
-            duration: 1000,
-            // forbidClick: true,
-          });
-          // const store = useCounterStore();
-          // 清除token
-          localStorage.removeItem("token");
-          // store.increment();
-          // store.commit("loginSuccess", null);
-          // 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面
-          setTimeout(() => {
-            router.replace({
-              path: "/login",
-              query: {
-                redirect: router.currentRoute.fullPath,
-              },
-            });
-          }, 1000);
-          break;
-
-        // 404请求不存在
-        case 404:
-          Message({
-            message: "网络请求不存在",
-            duration: 1500,
-            // forbidClick: true,
-          });
-          break;
-        // 其他错误,直接抛出错误提示
-        default:
-          Message({
-            message: error.response.data.message,
-            duration: 1500,
-            // forbidClick: true,
-          });
-      }
-      return Promise.reject(error.response);
-    }
-  }
-);
-
-// 请求超时时间
-axios.defaults.timeout = 10000;
-
-// post请求头
-axios.defaults.headers.post["Content-Type"] =
-  "application/x-www-form-urlencoded;charset=UTF-8";
-
-axios.defaults.baseURL = stage.path;
-
-/**
- * get方法,对应get请求
- * @param {String} url [请求的url地址]
- * @param {Object} params [请求时携带的参数]
- */
-export function get(url, params) {
-  return new Promise((resolve, reject) => {
-    axios
-      .get(url, {
-        params: params,
-      })
-      .then((res) => {
-        resolve(res.data);
-      })
-      .catch((err) => {
-        reject(err.data);
-      });
-  });
-}
-
-/**
- * post方法,对应post请求
- * @param {String} url [请求的url地址]
- * @param data
- * @param headers
- */
-export function post(url, data, headers) {
-  return new Promise((resolve, reject) => {
-    axios
-      .post(url, data, {
-        headers: {
-          "Content-Type": "application/json",
-          ...headers,
-        },
-      })
-      .then((res) => {
-        resolve(res.data);
-      })
-      .catch((err) => {
-        reject(err.data);
-      });
-  });
-}
-
-export function upload(url, formData) {
-  return new Promise((resolve, reject) => {
-    axios
-      .post(url, formData)
-      .then((res) => {
-        resolve(res.data);
-      })
-      .catch((err) => {
-        reject(err.data);
-      });
-  });
-}

BIN
admin_site/mysite.sqlite


+ 16 - 0
admin_site/order/tasks.py

@@ -85,6 +85,22 @@ def get_AUC(order_id):
         plt.savefig(base_path + name + '.png')
         # plt.show()
 
+    def a_curve(clf, X_test, y_test, name):
+        plt.plot(X_test, y_test, color='darkorange',
+                 lw=2, label='ROC curve (arebody = json.loads(request.body)a = %0.2f)' % auc(fpr_rf, tpr_rf))
+        plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
+        plt.xlim([0.0, 1.0])
+        plt.ylim([0.0, 1.05])
+        plt.xlabel('False Positive Rate')
+        plt.ylabel('True Positive Rate')
+        # plt.title('Receiver operating characteristic example')
+        plt.title(name)
+        plt.legend(loc="lower right")
+        # plt.savefig(plt.savefig('figs/savefig_example.png'))
+
+        plt.savefig(base_path + name + '.png')
+
+
     logger.info('797979')
     # 读取非胃癌数据
     data_health = pyreadr.read_r(str(files[0].file_path))  # 'COAD.Rdata'

+ 1 - 1
admin_site/order/views.py

@@ -221,7 +221,7 @@ def delete(request):
     }
     files = Files_models.objects.filter(order_id=order.id)
     for item in files:
-        os.remove(item.file_path)
+        os.remove(str(item.file_path))
     Files_models.objects.filter(order_id=order.id).update(**params)
     Order_models.objects.filter(id=order.id).update(**params)
     # order.delete()

+ 6 - 0
admin_site/readme.md

@@ -16,6 +16,12 @@ celery -A admin_site beat
 ```bash
 celery -A admin_site worker -l info --max-memory-per-child=524288000
 ```
+windows 下的 celery 会出现进程之间的通信问题
+```bash
+pip install eventlet
+celery -A admin_site worker -l info --max-memory-per-child=524288000 -P eventlet 
+```
+
 
 ### 4、运行项目
 ```bash