zhangjie 2 yıl önce
ebeveyn
işleme
936f33a169

+ 88 - 0
src/components/base/EcsExamSelect.vue

@@ -0,0 +1,88 @@
+<template>
+  <div class="ecs-exam-select">
+    <el-select
+      v-model="selected"
+      :placeholder="placeholder"
+      filterable
+      :clearable="clearable"
+      :disabled="disabled"
+      @change="select"
+    >
+      <el-option
+        v-for="item in optionList"
+        :key="item.id"
+        :value="item.id"
+        :label="item.name"
+      >
+      </el-option>
+    </el-select>
+    <el-button
+      icon="el-icon-refresh"
+      type="primary"
+      :loading="loading"
+      @click="toSync"
+    ></el-button>
+  </div>
+</template>
+
+<script>
+import { ecsExamQuery, ecsExamSync } from "../../modules/base/api";
+
+export default {
+  name: "ecs-exam-select",
+  props: {
+    disabled: { type: Boolean, default: false },
+    placeholder: { type: String, default: "请选择考试" },
+    value: { type: [Number, String], default: "" },
+    clearable: { type: Boolean, default: true }
+  },
+  data() {
+    return {
+      optionList: [],
+      selected: "",
+      loading: false
+    };
+  },
+  watch: {
+    value: {
+      immediate: true,
+      handler(val) {
+        this.selected = val;
+      }
+    }
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    async search() {
+      this.optionList = [];
+
+      const res = await ecsExamQuery();
+      this.optionList = res;
+    },
+    async toSync() {
+      if (this.loading) return;
+      this.loading = true;
+
+      const res = await ecsExamSync().catch(() => {});
+      this.loading = false;
+      if (res) this.optionList = res;
+    },
+    select() {
+      this.$emit("input", this.selected);
+      this.$emit(
+        "change",
+        this.optionList.find(item => item.id === this.selected)
+      );
+    }
+  }
+};
+</script>
+
+<style>
+.ecs-exam-select {
+  display: inline-block;
+  vertical-align: middle;
+}
+</style>

+ 65 - 76
src/components/base/ExamSelect.vue → src/components/base/ExamTypeSelect.vue

@@ -1,76 +1,65 @@
-<template>
-  <el-select
-    v-model="selected"
-    class="exam-select"
-    :placeholder="placeholder"
-    filterable
-    :clearable="clearable"
-    :disabled="disabled"
-    @change="select"
-  >
-    <el-option
-      v-for="item in optionList"
-      :key="item.id"
-      :value="item.id"
-      :label="item.name"
-    >
-    </el-option>
-  </el-select>
-</template>
-
-<script>
-import { examQuery } from "../../modules/base/api";
-
-export default {
-  name: "exam-select",
-  props: {
-    disabled: { type: Boolean, default: false },
-    placeholder: { type: String, default: "请选择考试类型" },
-    value: { type: [Number, String], default: "" },
-    clearable: { type: Boolean, default: true },
-    semesterId: { type: String, default: "" }
-  },
-  data() {
-    return {
-      optionList: [],
-      selected: ""
-    };
-  },
-  watch: {
-    value: {
-      immediate: true,
-      handler(val) {
-        this.selected = val;
-      }
-    },
-    semesterId(val, oldval) {
-      if (val !== oldval) {
-        this.search();
-        this.$emit("input", "");
-        this.$emit("change", {});
-      }
-    }
-  },
-  created() {
-    this.search();
-  },
-  methods: {
-    async search() {
-      if (!this.semesterId) return;
-      this.optionList = [];
-
-      const res = await examQuery({
-        semesterId: this.semesterId
-      });
-      this.optionList = res;
-    },
-    select() {
-      this.$emit("input", this.selected);
-      this.$emit(
-        "change",
-        this.optionList.find(item => item.id === this.selected)
-      );
-    }
-  }
-};
-</script>
+<template>
+  <el-select
+    v-model="selected"
+    class="exam-select"
+    :placeholder="placeholder"
+    filterable
+    :clearable="clearable"
+    :disabled="disabled"
+    @change="select"
+  >
+    <el-option
+      v-for="item in optionList"
+      :key="item.id"
+      :value="item.id"
+      :label="item.name"
+    >
+    </el-option>
+  </el-select>
+</template>
+
+<script>
+import { examTypeQuery } from "../../modules/base/api";
+
+export default {
+  name: "exam-select",
+  props: {
+    disabled: { type: Boolean, default: false },
+    placeholder: { type: String, default: "请选择考试类型" },
+    value: { type: [Number, String], default: "" },
+    clearable: { type: Boolean, default: true }
+  },
+  data() {
+    return {
+      optionList: [],
+      selected: ""
+    };
+  },
+  watch: {
+    value: {
+      immediate: true,
+      handler(val) {
+        this.selected = val;
+      }
+    }
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    async search() {
+      this.optionList = [];
+
+      const res = await examTypeQuery({});
+      this.optionList = res;
+    },
+    select() {
+      this.$emit("input", this.selected);
+      this.$emit(
+        "change",
+        this.optionList.find(item => item.id === this.selected)
+      );
+    }
+  }
+};
+</script>

+ 2 - 12
src/components/base/SemesterSelect.vue

@@ -27,8 +27,7 @@ export default {
     disabled: { type: Boolean, default: false },
     placeholder: { type: String, default: "请选择学期" },
     value: { type: [Number, String], default: "" },
-    clearable: { type: Boolean, default: true },
-    schoolId: { type: String, default: "" }
+    clearable: { type: Boolean, default: true }
   },
   data() {
     return {
@@ -42,13 +41,6 @@ export default {
       handler(val) {
         this.selected = val;
       }
-    },
-    schoolId(val, oldval) {
-      if (val !== oldval) {
-        this.search();
-        this.$emit("input", "");
-        this.$emit("change", {});
-      }
     }
   },
   created() {
@@ -56,10 +48,8 @@ export default {
   },
   methods: {
     async search() {
-      if (!this.schoolId) return;
-
       this.optionList = [];
-      const res = await semesterQuery({ schoolId: this.schoolId });
+      const res = await semesterQuery({});
       this.optionList = res;
     },
     select() {

+ 3 - 3
src/modules/admin/api.js

@@ -2,14 +2,14 @@ import { $post } from "@/plugins/axios";
 
 // auth-set
 export const authSelect = () => {
-  return $post("/api/admin/auth/select", {});
+  return $post("/api/auth/select", {});
 };
 export const offlineActivation = datas => {
-  return $post("/api/admin/auth/offline/activation", datas);
+  return $post("/api/auth/offline/activation", datas);
 };
 export const exportDeviceInfo = () => {
   return $post(
-    "/api/admin/auth/export/device/info",
+    "/api/auth/export/device/info",
     {},
     {
       responseType: "blob"

+ 24 - 75
src/modules/base/api.js

@@ -3,10 +3,15 @@ import { $postParam, $post } from "@/plugins/axios";
 export const semesterQuery = datas => {
   return $postParam("/api/exam_semester/list", datas);
 };
-export const examQuery = datas => {
+export const ecsExamQuery = () => {
+  return $postParam("/api/cloud_marking_exam/list", {});
+};
+export const ecsExamSync = () => {
+  return $postParam("/api/cloud_marking_exam/sync", {});
+};
+export const examTypeQuery = datas => {
   return $postParam("/api/exam_type/list", datas);
 };
-
 // user --------------------------------->
 // user-manage
 export const userListPage = datas => {
@@ -25,95 +30,32 @@ export const userRoleListPage = () => {
   return $postParam("/api/sys_role/list", {});
 };
 
-export const userBindRoles = ({ id, roleIds }) => {
-  return $post("/api/admin/sys/user/bind_roles", { id, roleIds });
-};
-
-export const syncUserToEcs = () => {
-  return $postParam("/api/admin/sys/user/push", {});
-};
-export const roleUserTree = () => {
-  return $postParam("/api/admin/sys/user/org-tree", {});
-};
-
-// role-manage
-export const roleListPage = datas => {
-  return $postParam("/api/admin/sys/role/list", datas);
-};
-export const ableRole = ({ id, enable }) => {
-  return $post("/api/admin/sys/role/enable", { id, enable });
-};
-export const updateRole = datas => {
-  return $post("/api/admin/sys/role/save", datas);
-};
-export const deleteRole = id => {
-  return $postParam("/api/admin/sys/role/remove", { id });
-};
-export const userBoundRoles = userId => {
-  return $postParam("/api/admin/sys/role/get_user_roles", { userId });
-};
-// role-user-manage
-export const roleGroupList = datas => {
-  return $postParam("/api/admin/sys/role/group/list", datas);
-};
-export const updateRoleGroup = datas => {
-  return $post("/api/admin/sys/role/group/save", datas);
-};
-// menu-manage
-export const menuAuthList = datas => {
-  return $postParam("/api/admin/sys/privilege/list_auth", datas);
-};
-export const privilegeList = datas => {
-  return $postParam("/api/admin/sys/privilege/list", datas);
-};
-export const roleBoundPrivileges = roleId => {
-  return $postParam("/api/admin/sys/privilege/get_role_privileges", { roleId });
-};
-// organization-manage
-export const organizationList = datas => {
-  return $postParam("/api/admin/sys/org/list", datas);
-};
-export const organizationFindByTypeList = datas => {
-  return $postParam("/api/admin/sys/org/find_by_type", datas);
-};
-export const updateOrganization = datas => {
-  return $post("/api/admin/sys/org/save", datas);
-};
-export const ableOrganization = ({ id, enable }) => {
-  return $post("/api/admin/sys/org/enable", { id, enable });
-};
-export const deleteOrganization = id => {
-  return $post("/api/admin/sys/org/remove", { id });
-};
-
 // semester-manage
 export const semesterListQuery = datas => {
-  return $postParam("/api/admin/basic/semester/query", datas);
-};
-export const examSemesterList = datas => {
-  return $postParam("/api/admin/basic/semester/list", datas);
+  return $postParam("/api/exam_semester/page", datas);
 };
 export const deleteSemester = id => {
-  return $postParam("/api/admin/basic/semester/delete", { id });
+  return $postParam("/api/exam_semester/delete", { id });
 };
 export const updateSemester = datas => {
-  return $post("/api/admin/basic/semester/save", datas);
+  return $post("/api/exam_semester/save", datas);
 };
+// no user
 export const semesterSetInUsed = id => {
-  return $postParam("/api/admin/basic/semester/set_in_used", { id });
+  return $postParam("/api/exam_semester/set_in_used", { id });
 };
 
 // exam-type-manage
 export const examTypeListQuery = datas => {
-  return $postParam("/api/admin/paper/exam_type/page", datas);
+  return $postParam("/api/exam_type/page", datas);
 };
-export const deleteExamType = ids => {
-  return $postParam("/api/admin/paper/exam_type/delete", {
-    ids: ids.join()
+export const deleteExamType = id => {
+  return $postParam("/api/exam_type/delete", {
+    id
   });
 };
 export const updateExamType = datas => {
-  return $post("/api/admin/paper/exam_type/save", datas);
+  return $post("/api/exam_type/save", datas);
 };
 // setting --------------------------------->
 // time-task
@@ -150,6 +92,13 @@ export const downloadList = datas => {
 export const signPurpose = datas => {
   return $postParam("/api/exam_download_record/used", datas);
 };
+// ecs-data-manage
+export const ecsDataList = datas => {
+  return $postParam("/api/cloud_marking_score/page", datas);
+};
+export const syncEcsData = datas => {
+  return $postParam("/api/cloud_marking_score/sync_student_score", datas);
+};
 
 // common
 export const uploadFile = datas => {

+ 5 - 5
src/modules/base/components/ModifySemester.vue

@@ -16,9 +16,9 @@
       :rules="rules"
       label-position="top"
     >
-      <el-form-item prop="semesterName" label="学期名称:">
+      <el-form-item prop="name" label="学期名称:">
         <el-input
-          v-model.trim="modalForm.semesterName"
+          v-model.trim="modalForm.name"
           placeholder="请输入学期名称"
           clearable
         ></el-input>
@@ -39,7 +39,7 @@ import { updateSemester } from "../api";
 
 const initModalForm = {
   id: null,
-  semesterName: ""
+  name: ""
 };
 
 export default {
@@ -57,7 +57,7 @@ export default {
       return !!this.instance.id;
     },
     title() {
-      return (this.isEdit ? "编辑" : "新增") + "学年学期";
+      return (this.isEdit ? "编辑" : "新增") + "学期";
     }
   },
   data() {
@@ -66,7 +66,7 @@ export default {
       isSubmit: false,
       modalForm: { ...initModalForm },
       rules: {
-        semesterName: [
+        name: [
           {
             required: true,
             message: "请输入学期名称",

+ 12 - 0
src/modules/base/router.js

@@ -5,6 +5,8 @@ import ExamTypeManage from "./views/ExamTypeManage.vue";
 import TimeTaskManage from "./views/TimeTaskManage.vue";
 import BusinessDataManage from "./views/BusinessDataManage.vue";
 import DownloadManage from "./views/DownloadManage.vue";
+import EcsDataManage from "./views/EcsDataManage.vue";
+import DataReturnManage from "./views/DataReturnManage.vue";
 
 export default [
   {
@@ -36,5 +38,15 @@ export default [
     path: "/base/download-manage",
     name: "DownloadManage",
     component: DownloadManage
+  },
+  {
+    path: "/base/ecs-data-manage",
+    name: "EcsDataManage",
+    component: EcsDataManage
+  },
+  {
+    path: "/base/data-return-manage",
+    name: "DataReturnManage",
+    component: DataReturnManage
   }
 ];

+ 15 - 0
src/modules/base/views/DataReturnManage.vue

@@ -0,0 +1,15 @@
+<template>
+  <div class="data-return-manage">
+    data-return-manage
+  </div>
+</template>
+
+<script>
+export default {
+  name: "data-return-manage",
+  data() {
+    return {};
+  },
+  methods: {}
+};
+</script>

+ 116 - 0
src/modules/base/views/EcsDataManage.vue

@@ -0,0 +1,116 @@
+<template>
+  <div class="ecs-data-manage">
+    <div class="part-box part-box-filter part-box-flex">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <el-form-item prop="semesterId" label="学期:">
+          <semester-select v-model="filter.semesterId"></semester-select>
+        </el-form-item>
+        <el-form-item prop="examTypeId" label="考试类型:">
+          <exam-type-select v-model="filter.examTypeId"></exam-type-select>
+        </el-form-item>
+        <el-form-item label="考试:">
+          <ecs-exam-select v-model="filter.examId"></ecs-exam-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="toPage(1)">查询</el-button>
+        </el-form-item>
+      </el-form>
+      <div class="part-box-action">
+        <el-button
+          type="primary"
+          icon="el-icon-circle-plus-outline"
+          @click="toSync"
+          >同步</el-button
+        >
+        <el-button type="success" icon="el-icon-s-order" @click="toSyncResult"
+          >同步结果</el-button
+        >
+      </div>
+    </div>
+    <div class="part-box part-box-pad">
+      <el-table ref="TableList" :data="dataList">
+        <el-table-column
+          type="index"
+          label="序号"
+          width="70"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column prop="semesterName" label="学期"></el-table-column>
+        <el-table-column prop="examTypeName" label="考试类型"></el-table-column>
+        <el-table-column prop="examName" label="考试"></el-table-column>
+        <el-table-column prop="userName" label="操作人"> </el-table-column>
+        <el-table-column prop="createTime" label="操作时间">
+          <span slot-scope="scope">{{
+            scope.row.createTime | timestampFilter
+          }}</span>
+        </el-table-column>
+      </el-table>
+      <div class="part-page">
+        <el-pagination
+          background
+          layout="total,prev, pager, next"
+          :current-page="current"
+          :total="total"
+          :page-size="size"
+          :page-sizes="[20, 50, 100]"
+          @current-change="toPage"
+        >
+        </el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { ecsDataList, syncEcsData } from "../api";
+
+export default {
+  name: "ecs-data-manage",
+  data() {
+    return {
+      filter: {
+        semesterId: "",
+        examTypeId: "",
+        examId: ""
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      dataList: []
+    };
+  },
+  mounted() {
+    this.getList();
+  },
+  methods: {
+    async getList() {
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size
+      };
+
+      const data = await ecsDataList(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    async toSync() {
+      const result = await this.$confirm(`确定要同步吗?`, "提示", {
+        type: "warning"
+      });
+      if (result !== "confirm") return;
+
+      await syncEcsData({
+        type: "CLOUD_MARKING_STUDENT_SCORE",
+        ...this.filter
+      });
+      this.$message.success("任务提交成功!");
+    },
+    toSyncResult() {}
+  }
+};
+</script>

+ 1 - 11
src/modules/base/views/ExamTypeManage.vue

@@ -2,16 +2,10 @@
   <div class="exam-type-manage">
     <div class="part-box part-box-filter part-box-flex">
       <div>
-        <el-button
-          v-if="checkPrivilege('button', 'select')"
-          type="primary"
-          @click="toPage(1)"
-          >查询</el-button
-        >
+        <el-button type="primary" @click="toPage(1)">查询</el-button>
       </div>
       <div class="part-box-action">
         <el-button
-          v-if="checkPrivilege('button', 'add')"
           type="primary"
           icon="el-icon-circle-plus-outline"
           @click="toAdd"
@@ -31,14 +25,12 @@
         <el-table-column class-name="action-column" label="操作" width="160px">
           <template slot-scope="scope">
             <el-button
-              v-if="checkPrivilege('link', 'edit')"
               class="btn-primary"
               type="text"
               @click="toEdit(scope.row)"
               >编辑</el-button
             >
             <el-button
-              v-if="checkPrivilege('link', 'delete')"
               class="btn-danger"
               type="text"
               @click="toDelete(scope.row)"
@@ -90,8 +82,6 @@ export default {
   },
   methods: {
     async getList() {
-      if (!this.checkPrivilege("list", "list")) return;
-
       const datas = {
         ...this.filter,
         pageNumber: this.current,

+ 4 - 43
src/modules/base/views/SemesterManage.vue

@@ -2,16 +2,10 @@
   <div class="semester-manage">
     <div class="part-box part-box-filter part-box-flex">
       <div>
-        <el-button
-          v-if="checkPrivilege('button', 'select')"
-          type="primary"
-          @click="toPage(1)"
-          >查询</el-button
-        >
+        <el-button type="primary" @click="toPage(1)">查询</el-button>
       </div>
       <div class="part-box-action">
         <el-button
-          v-if="checkPrivilege('button', 'add')"
           type="primary"
           icon="el-icon-circle-plus-outline"
           @click="toAdd"
@@ -27,32 +21,16 @@
           width="70"
           :index="indexMethod"
         ></el-table-column>
-        <el-table-column prop="semesterName" label="学期"></el-table-column>
-        <el-table-column prop="inUsed" label="当前学期">
-          <span
-            :class="{ 'color-success': scope.row.inUsed }"
-            slot-scope="scope"
-            >{{ scope.row.inUsed ? "是" : "否" }}</span
-          >
-        </el-table-column>
+        <el-table-column prop="name" label="学期"></el-table-column>
         <el-table-column class-name="action-column" label="操作" width="200px">
           <template slot-scope="scope">
             <el-button
-              v-if="checkPrivilege('link', 'edit') && !scope.row.inUsed"
-              class="btn-primary"
-              type="text"
-              @click="setUsed(scope.row)"
-              >设置为当前学期</el-button
-            >
-            <el-button
-              v-if="checkPrivilege('link', 'edit')"
               class="btn-primary"
               type="text"
               @click="toEdit(scope.row)"
               >编辑</el-button
             >
             <el-button
-              v-if="checkPrivilege('link', 'delete')"
               class="btn-danger"
               type="text"
               @click="toDelete(scope.row)"
@@ -83,7 +61,7 @@
 </template>
 
 <script>
-import { semesterListQuery, deleteSemester, semesterSetInUsed } from "../api";
+import { semesterListQuery, deleteSemester } from "../api";
 import ModifySemester from "../components/ModifySemester";
 
 export default {
@@ -104,8 +82,6 @@ export default {
   },
   methods: {
     async getList() {
-      if (!this.checkPrivilege("list", "list")) return;
-
       const datas = {
         ...this.filter,
         pageNumber: this.current,
@@ -129,7 +105,7 @@ export default {
     },
     async toDelete(row) {
       const result = await this.$confirm(
-        `确定要删除学期【${row.semesterName}】吗?`,
+        `确定要删除学期【${row.name}】吗?`,
         "提示",
         {
           type: "warning"
@@ -140,21 +116,6 @@ export default {
       await deleteSemester(row.id);
       this.$message.success("删除成功!");
       this.deletePageLastItem();
-    },
-    async setUsed(row) {
-      const result = await this.$confirm(
-        `确定要将学期【${row.semesterName}】设置成当前学期吗?`,
-        "提示",
-        {
-          type: "warning"
-        }
-      ).catch(() => {});
-      if (result !== "confirm") return;
-
-      await semesterSetInUsed(row.id);
-
-      this.getList();
-      this.$message.success("设置成功!");
     }
   }
 };

+ 3 - 13
src/modules/base/views/TimeTaskManage.vue

@@ -2,23 +2,14 @@
   <div class="time-task-manage">
     <div class="part-box part-box-filter part-box-flex">
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
-        <el-form-item prop="schoolId" label="学校:">
-          <school-select
-            v-model="filter.schoolId"
-            select-default
-          ></school-select>
-        </el-form-item>
         <el-form-item prop="semesterId" label="学期:">
-          <semester-select
-            v-model="filter.semesterId"
-            :school-id="filter.schoolId"
-          ></semester-select>
+          <semester-select v-model="filter.semesterId"></semester-select>
         </el-form-item>
         <el-form-item prop="examTypeId" label="考试:">
-          <exam-select
+          <exam-type-select
             v-model="filter.examTypeId"
             :semester-id="filter.semesterId"
-          ></exam-select>
+          ></exam-type-select>
         </el-form-item>
         <el-form-item label="定时任务时间:">
           <el-date-picker
@@ -120,7 +111,6 @@ export default {
   data() {
     return {
       filter: {
-        schoolId: "",
         semesterId: "",
         examTypeId: "",
         startTime: "",

+ 7 - 1
src/modules/login/views/Login.vue

@@ -92,8 +92,14 @@ export default {
 
       if (data.orgInfo)
         this.$ls.set("orgId", data.orgInfo.id, this.GLOBAL.authTimeout);
-      if (data.schoolInfo)
+      if (data.schoolInfo) {
         this.$ls.set("schoolId", data.schoolInfo.id, this.GLOBAL.authTimeout);
+        this.$ls.set(
+          "schoolName",
+          data.schoolInfo.name,
+          this.GLOBAL.authTimeout
+        );
+      }
       this.$ls.set("user", data, this.GLOBAL.authTimeout);
       this.$ls.set("token", data.accessToken, this.GLOBAL.authTimeout);
 

+ 4 - 2
src/plugins/globalVuePlugins.js

@@ -6,14 +6,16 @@ import ViewFooter from "@/components/ViewFooter.vue";
 import MoreText from "@/components/MoreText.vue";
 import SchoolSelect from "@/components/base/SchoolSelect.vue";
 import SemesterSelect from "@/components/base/SemesterSelect.vue";
-import ExamSelect from "@/components/base/ExamSelect.vue";
+import EcsExamSelect from "@/components/base/EcsExamSelect.vue";
+import ExamTypeSelect from "@/components/base/ExamTypeSelect.vue";
 
 const components = {
   ViewFooter,
   MoreText,
   SchoolSelect,
   SemesterSelect,
-  ExamSelect
+  EcsExamSelect,
+  ExamTypeSelect
 };
 
 export default {