Explorar el Código

字典管理接口调试

zhangjie hace 3 años
padre
commit
51ec9fc36a

BIN
public/temps/学生导入模板.xlsx


BIN
public/temps/课程导入模板.xlsx


+ 1 - 1
src/components/base/CampusSelect.vue

@@ -13,7 +13,7 @@
       v-for="item in optionList"
       :key="item.id"
       :value="item.id"
-      :label="item.name"
+      :label="item.campusName"
     >
     </el-option>
   </el-select>

+ 4 - 4
src/components/base/StaffRoomSelect.vue → src/components/base/TeachingRoomSelect.vue

@@ -1,7 +1,7 @@
 <template>
   <el-select
     v-model="selected"
-    class="campus-select"
+    class="teaching-room-select"
     placeholder="请选择"
     :style="styles"
     filterable
@@ -20,10 +20,10 @@
 </template>
 
 <script>
-import { staffRoomQuery } from "../../modules/base/api";
+import { teachingRoomQuery } from "../../modules/base/api";
 
 export default {
-  name: "campus-select",
+  name: "teaching-room-select",
   props: {
     disabled: { type: Boolean, default: false },
     value: { type: [Number, String], default: "" },
@@ -49,7 +49,7 @@ export default {
   },
   methods: {
     async search() {
-      const res = await staffRoomQuery();
+      const res = await teachingRoomQuery();
       this.optionList = res;
     },
     select() {

+ 19 - 0
src/constants/navs.js

@@ -135,6 +135,25 @@ const navs = [
             title: "普通印品模板",
             router: "CommonPrintTemplate"
           },
+          {
+            title: "印刷计划合并管理",
+            router: "PrintPlanPushManage"
+          }
+        ]
+      },
+      {
+        title: "字典管理",
+        name: "rule",
+        icon: "el-icon-s-tools",
+        children: [
+          {
+            title: "校区管理",
+            router: "CampusManage"
+          },
+          {
+            title: "学生基本信息管理",
+            router: "StudentManage"
+          },
           {
             title: "课程管理",
             router: "CourseManage"

+ 7 - 4
src/modules/base/api.js

@@ -112,7 +112,7 @@ export const courseQuery = datas => {
   return $postParam("/api/admin/basic/course/query", datas);
 };
 export const deleteCourse = idList => {
-  return $post("/api/admin/basic/course/delete_batch", { idList });
+  return $postParam("/api/admin/basic/course/delete_batch", { idList });
 };
 export const updateCourse = datas => {
   return $post("/api/admin/basic/course/save", datas);
@@ -124,7 +124,7 @@ export const campusQuery = () => {
   return $postParam("/api/admin/basic/campus/query", {});
 };
 export const deleteCampus = id => {
-  return $post("/api/admin/basic/campus/delete", { id });
+  return $postParam("/api/admin/basic/campus/delete", { id });
 };
 export const updateCampus = datas => {
   return $post("/api/admin/basic/campus/save", datas);
@@ -135,7 +135,7 @@ export const printRoomQuery = () => {
 };
 
 // staff-room-manage
-export const staffRoomQuery = () => {
+export const teachingRoomQuery = () => {
   return $postParam("/api/admin/basic/staff_room/list", {});
 };
 
@@ -144,7 +144,7 @@ export const studentListQuery = datas => {
   return $postParam("/api/admin/basic/student/query", datas);
 };
 export const deleteStudent = idList => {
-  return $post("/api/admin/basic/student/delete_batch", { idList });
+  return $postParam("/api/admin/basic/student/delete_batch", { idList });
 };
 export const updateStudent = datas => {
   return $post("/api/admin/basic/student/save", datas);
@@ -165,5 +165,8 @@ export const printPlanMergePush = datas => {
 export const uploadFile = datas => {
   return $post("/api/admin/common/file/upload", datas);
 };
+export const getCode = type => {
+  return $postParam("/api/admin/common/get_code", { type });
+};
 
 // system

+ 18 - 12
src/modules/base/components/ModifyCampus.vue

@@ -17,18 +17,18 @@
       :key="modalForm.id"
       label-width="100px"
     >
-      <el-form-item prop="name" label="校区名称:">
+      <el-form-item prop="campusName" label="校区名称:">
         <el-input
-          v-model.trim="modalForm.name"
+          v-model.trim="modalForm.campusName"
           placeholder="请输入校区名称"
           clearable
         ></el-input>
       </el-form-item>
-      <el-form-item prop="code" label="校区编码:">
+      <el-form-item prop="campusCode" label="校区编码:">
         <el-input
-          v-model.trim="modalForm.code"
+          v-model.trim="modalForm.campusCode"
           placeholder="请输入校区编码"
-          clearable
+          disabled
         ></el-input>
       </el-form-item>
     </el-form>
@@ -42,12 +42,12 @@
 </template>
 
 <script>
-import { updateCampus } from "../api";
+import { updateCampus, getCode } from "../api";
 
 const initModalForm = {
   id: null,
-  name: "",
-  code: ""
+  campusName: "",
+  campusCode: ""
 };
 
 export default {
@@ -74,7 +74,7 @@ export default {
       isSubmit: false,
       modalForm: { ...initModalForm },
       rules: {
-        name: [
+        campusName: [
           {
             required: true,
             // pattern: /^[0-9a-zA-Z\u4E00-\u9FA5]{1,20}$/,
@@ -84,11 +84,13 @@ export default {
             trigger: "change"
           }
         ],
-        code: [
+        campusCode: [
           {
             required: true,
-            pattern: /^[0-9a-zA-Z_-]{3,30}$/,
-            message: "校区编码只能由数字字母短横线组成,长度在3-30之间",
+            // pattern: /^[0-9a-zA-Z_-]{3,30}$/,
+            // message: "校区编码只能由数字字母短横线组成,长度在3-30之间",
+            message: "校区名称不能超过30个字",
+            max: 30,
             trigger: "change"
           }
         ]
@@ -101,8 +103,12 @@ export default {
         this.modalForm = this.$objAssign(initModalForm, val);
       } else {
         this.modalForm = { ...initModalForm };
+        this.createCode();
       }
     },
+    async createCode() {
+      this.modalForm.campusCode = await getCode("CAMPUS_CODE");
+    },
     visibleChange() {
       this.initData(this.instance);
     },

+ 20 - 13
src/modules/base/components/ModifyCourse.vue

@@ -17,32 +17,34 @@
       :key="modalForm.id"
       label-width="100px"
     >
-      <el-form-item prop="name" label="课程名称:">
+      <el-form-item prop="courseName" label="课程名称:">
         <el-input
-          v-model.trim="modalForm.name"
+          v-model.trim="modalForm.courseName"
           placeholder="请输入课程名称"
           clearable
         ></el-input>
       </el-form-item>
-      <el-form-item prop="code" label="课程编码:">
+      <el-form-item prop="courseCode" label="课程编码:">
         <el-input
-          v-model.trim="modalForm.code"
+          v-model.trim="modalForm.courseCode"
           placeholder="请输入课程编码"
           clearable
         ></el-input>
       </el-form-item>
       <el-form-item prop="teachingRoomId" label="所属教研室:">
-        <staff-room-select
+        <teaching-room-select
           v-model.trim="modalForm.teachingRoomId"
           clearable
-        ></staff-room-select>
+        ></teaching-room-select>
       </el-form-item>
       <el-form-item prop="clazz" label="授课班级:">
         <el-input
           v-model.trim="modalForm.clazz"
+          type="textarea"
           placeholder="请输入授课班级"
           clearable
         ></el-input>
+        <p class="tips-info">多个班级请用英文逗号分隔</p>
       </el-form-item>
     </el-form>
     <div slot="footer">
@@ -55,12 +57,12 @@
 </template>
 
 <script>
-import { updateCourse } from "../api";
+import { updateCourse, getCode } from "../api";
 
 const initModalForm = {
   id: null,
-  name: "",
-  code: "",
+  courseName: "",
+  courseCode: "",
   teachingRoomId: "",
   clazz: ""
 };
@@ -89,7 +91,7 @@ export default {
       isSubmit: false,
       modalForm: { ...initModalForm },
       rules: {
-        name: [
+        courseName: [
           {
             required: true,
             // pattern: /^[0-9a-zA-Z\u4E00-\u9FA5]{1,20}$/,
@@ -99,7 +101,7 @@ export default {
             trigger: "change"
           }
         ],
-        code: [
+        courseCode: [
           {
             required: true,
             pattern: /^[0-9a-zA-Z_-]{3,30}$/,
@@ -128,11 +130,14 @@ export default {
     initData(val) {
       if (val.id) {
         this.modalForm = this.$objAssign(initModalForm, val);
-        this.modalForm.courseId = val["id"] || "";
       } else {
         this.modalForm = { ...initModalForm };
+        this.createCode();
       }
     },
+    async createCode() {
+      this.modalForm.courseCode = await getCode("COURSE_CODE");
+    },
     visibleChange() {
       this.initData(this.instance);
     },
@@ -148,7 +153,9 @@ export default {
 
       if (this.isSubmit) return;
       this.isSubmit = true;
-      const data = await updateCourse(this.modalForm).catch(() => {
+      let datas = { ...this.modalForm };
+      datas.clazzList = datas.clazz.split(",");
+      const data = await updateCourse(datas).catch(() => {
         this.isSubmit = false;
       });
 

+ 15 - 4
src/modules/base/components/ModifyStudent.vue

@@ -40,12 +40,16 @@
       </el-form-item>
       <el-form-item prop="campusId" label="校区:">
         <campus-select
-          v-model.trim="modalForm.campus"
+          v-model.trim="modalForm.campusId"
           clearable
         ></campus-select>
       </el-form-item>
-      <el-form-item prop="orgs" label="组织架构:">
-        <!-- 学院-专业-班级 -->
+      <el-form-item prop="clazz" label="班级信息:">
+        <el-input
+          v-model.trim="modalForm.clazz"
+          placeholder="请输入班级信息"
+          clearable
+        ></el-input>
       </el-form-item>
     </el-form>
     <div slot="footer">
@@ -63,7 +67,7 @@ import { phone } from "@/plugins/formRules";
 
 const initModalForm = {
   id: null,
-  name: "",
+  studentName: "",
   studentCode: "",
   phoneNumber: "",
   campusId: "",
@@ -125,6 +129,13 @@ export default {
             message: "请选择校区",
             trigger: "change"
           }
+        ],
+        clazz: [
+          {
+            required: true,
+            message: "请输入班级信息",
+            trigger: "change"
+          }
         ]
       }
     };

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

@@ -8,7 +8,9 @@ import CardRuleManage from "./views/CardRuleManage.vue";
 import CommonCardTemplate from "./views/CommonCardTemplate.vue";
 import ParamPrintTemplate from "./views/ParamPrintTemplate.vue";
 import CommonPrintTemplate from "./views/CommonPrintTemplate.vue";
+import CampusManage from "./views/CampusManage.vue";
 import CourseManage from "./views/CourseManage.vue";
+import StudentManage from "./views/StudentManage.vue";
 import PrintPlanPushManage from "./views/PrintPlanPushManage.vue";
 
 export default [
@@ -57,6 +59,16 @@ export default [
     name: "CourseManage",
     component: CourseManage
   },
+  {
+    path: "/base/campus-manage",
+    name: "CampusManage",
+    component: CampusManage
+  },
+  {
+    path: "/base/student-manage",
+    name: "StudentManage",
+    component: StudentManage
+  },
   {
     path: "/base/print-plan-push-manage",
     name: "PrintPlanPushManage",

+ 2 - 13
src/modules/base/views/CampusManage.vue

@@ -34,17 +34,6 @@
           </template>
         </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"
-          @current-change="toPage"
-        >
-        </el-pagination>
-      </div>
     </div>
 
     <modify-campus
@@ -84,7 +73,7 @@ export default {
       this.$refs.ModifyCampus.open();
     },
     toDelete(row) {
-      this.$confirm(`确定要删除校区【${row.name}】吗?`, "提示", {
+      this.$confirm(`确定要删除校区【${row.campusName}】吗?`, "提示", {
         cancelButtonClass: "el-button--danger is-plain",
         confirmButtonClass: "el-button--primary",
         type: "warning"
@@ -92,7 +81,7 @@ export default {
         .then(async () => {
           await deleteCampus(row.id);
           this.$message.success("删除成功!");
-          this.deletePageLastItem();
+          this.getList();
         })
         .catch(() => {});
     }

+ 11 - 11
src/modules/base/views/CourseManage.vue

@@ -5,7 +5,7 @@
         <el-form-item label="课程名称:">
           <el-input
             style="width: 142px;"
-            v-model.trim="filter.name"
+            v-model.trim="filter.courseName"
             placeholder="请输入内容"
             clearable
           ></el-input>
@@ -25,11 +25,11 @@
           </el-date-picker>
         </el-form-item>
         <!-- <el-form-item label="所属教研室:">
-          <staff-room-select
+          <teaching-room-select
             style="width: 142px;"
             v-model.trim="filter.staffRoomId"
             clearable
-          ></staff-room-select>
+          ></teaching-room-select>
         </el-form-item> -->
         <el-form-item>
           <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
@@ -126,10 +126,9 @@ export default {
   data() {
     return {
       filter: {
-        name: "",
-        staffRoomId: "",
-        startTime: "",
-        endTime: ""
+        courseName: "",
+        startCreateTime: "",
+        endCreateTime: ""
       },
       pickerOptions,
       current: 1,
@@ -156,8 +155,8 @@ export default {
         pageSize: this.size
       };
       if (this.createTime) {
-        datas.startTime = this.createTime[0];
-        datas.endTime = this.createTime[1];
+        datas.startCreateTime = this.createTime[0];
+        datas.endCreateTime = this.createTime[1];
       }
       const data = await courseQuery(datas);
       this.courses = data.records;
@@ -176,13 +175,13 @@ export default {
       this.$refs.ModifyCourse.open();
     },
     toDelete(row) {
-      this.$confirm(`确定要删除课程【${row.name}】吗?`, "提示", {
+      this.$confirm(`确定要删除课程【${row.courseName}】吗?`, "提示", {
         cancelButtonClass: "el-button--danger is-plain",
         confirmButtonClass: "el-button--primary",
         type: "warning"
       })
         .then(async () => {
-          await deleteCourse(row.id);
+          await deleteCourse([row.id]);
           this.$message.success("删除成功!");
           this.deletePageLastItem();
         })
@@ -193,6 +192,7 @@ export default {
       this.$notify.error({ title: "错误提示", message: errorData.message });
     },
     uploadSuccess() {
+      this.$message.success("文件上传成功,后台正在导入!");
       this.getList();
     }
   }

+ 13 - 9
src/modules/base/views/StudentManage.vue

@@ -1,11 +1,11 @@
 <template>
   <div class="student-manage">
     <div class="part-box part-box-filter part-box-flex">
-      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+      <el-form ref="FilterForm" label-position="left" label-width="90px" inline>
         <el-form-item label="姓名/学号:">
           <el-input
             style="width: 142px;"
-            v-model.trim="filter.name"
+            v-model.trim="filter.queryParams"
             placeholder="姓名/学号"
             clearable
           ></el-input>
@@ -45,10 +45,12 @@
         <el-table-column prop="studentCode" label="学号"></el-table-column>
         <el-table-column prop="phoneNumber" label="手机号"></el-table-column>
         <el-table-column prop="campusName" label="校区"></el-table-column>
-        <el-table-column prop="college" label="学院"></el-table-column>
-        <el-table-column prop="subject" label="专业"></el-table-column>
         <el-table-column prop="clazz" label="班级"></el-table-column>
-        <el-table-column prop="status" label="状态"></el-table-column>
+        <el-table-column prop="enable" label="状态">
+          <template slot-scope="scope">
+            {{ scope.row.enable | enableFilter }}
+          </template>
+        </el-table-column>
         <el-table-column label="操作" align="center" width="120px">
           <template slot-scope="scope">
             <el-button
@@ -100,14 +102,15 @@ export default {
   data() {
     return {
       filter: {
-        name: ""
+        queryParams: ""
       },
       current: 1,
       size: this.GLOBAL.pageSize,
       total: 0,
       dataList: [],
+      curRow: {},
       // import
-      uploadUrl: "/api/admin/basic/course/import",
+      uploadUrl: "/api/admin/basic/student/data_import",
       downloadUrl: "/temps/学生导入模板.xlsx",
       dfilename: "学生导入模板.xlsx"
     };
@@ -139,13 +142,13 @@ export default {
       this.$refs.ModifyStudent.open();
     },
     toDelete(row) {
-      this.$confirm(`确定要删除学生【${row.name}】吗?`, "提示", {
+      this.$confirm(`确定要删除学生【${row.studentName}】吗?`, "提示", {
         cancelButtonClass: "el-button--danger is-plain",
         confirmButtonClass: "el-button--primary",
         type: "warning"
       })
         .then(async () => {
-          await deleteStudent(row.id);
+          await deleteStudent([row.id]);
           this.$message.success("删除成功!");
           this.deletePageLastItem();
         })
@@ -156,6 +159,7 @@ export default {
       this.$notify.error({ title: "错误提示", message: errorData.message });
     },
     uploadSuccess() {
+      this.$message.success("文件上传成功,后台正在导入!");
       this.getList();
     }
   }

+ 27 - 8
src/modules/base/views/UserManage.vue

@@ -56,11 +56,19 @@
           >新增用户</el-button
         >
         <el-button
-          type="primary"
-          icon="el-icon-circle-plus-outline"
-          @click="toExport"
-          >批量导入</el-button
+          ><a :href="downloadUrl" :download="dfilename">模板下载</a></el-button
+        >
+        <upload-button
+          btn-icon="el-icon-upload"
+          btn-content="批量导入"
+          btn-type="primary"
+          :upload-url="uploadUrl"
+          :format="['xls', 'xlsx']"
+          @upload-error="uplaodError"
+          @upload-success="uploadSuccess"
+          style="margin: 0;"
         >
+        </upload-button>
       </div>
     </div>
 
@@ -79,7 +87,7 @@
           label="姓名"
           width="120"
         ></el-table-column>
-        <el-table-column prop="roles" label="工号"></el-table-column>
+        <el-table-column prop="workNo" label="工号"></el-table-column>
         <el-table-column
           prop="mobileNumber"
           label="手机号"
@@ -160,10 +168,11 @@ import ModifyUser from "../components/ModifyUser";
 import { ABLE_TYPE, SYS_ADMIN_NAME } from "@/constants/enumerate";
 import { userListPage, ableUser, resetPwd, userRoleListPage } from "../api";
 // import { logout } from "@/modules/login/api";
+import UploadButton from "../../../components/UploadButton";
 
 export default {
   name: "user-manage",
-  components: { ModifyUser },
+  components: { ModifyUser, UploadButton },
   data() {
     const IS_SUPER_ADMIN =
       this.$ls.get("user", { loginName: "" }).loginName === SYS_ADMIN_NAME;
@@ -182,7 +191,11 @@ export default {
       users: [],
       curUser: {},
       userRoles: this.$ls.get("user", { roleList: [] }).roleList,
-      IS_SUPER_ADMIN
+      IS_SUPER_ADMIN,
+      // import
+      uploadUrl: "/api/admin/sys/user/import",
+      downloadUrl: "/temps/用户导入模板.xlsx",
+      dfilename: "用户导入模板.xlsx"
     };
   },
   computed: {
@@ -274,7 +287,13 @@ export default {
     //   this.$router.push({ name: "Login" });
     //   this.$message.info("您的密码已经变更,请重新登录系统!");
     // },
-    toExport() {}
+    // import
+    uplaodError(errorData) {
+      this.$notify.error({ title: "错误提示", message: errorData.message });
+    },
+    uploadSuccess() {
+      this.getList();
+    }
   }
 };
 </script>

+ 2 - 2
src/modules/exam/components/CreateTaskApply.vue

@@ -20,9 +20,9 @@
         <el-row>
           <el-col :span="12">
             <el-form-item prop="teachingRoomId" label="教研室:">
-              <staff-room-select
+              <teaching-room-select
                 v-model="modalForm.teachingRoomId"
-              ></staff-room-select>
+              ></teaching-room-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">

+ 1 - 0
src/modules/exam/store.js

@@ -17,6 +17,7 @@ const mutations = {
 
 const actions = {
   async updateWaitTaskCount({ commit }, userRoles = []) {
+    // TODO:需要调整:/api/admin/work/exam/task/ready_count
     const apis = {
       QUESTION_TEACHER: [waitExamTaskCount],
       EXAM_TEACHER: [waitExamTaskNewCount, waitTaskReviewCount]

+ 4 - 4
src/modules/login/views/Login.vue

@@ -175,10 +175,10 @@ export default {
       this.$ls.set("user", data, this.GLOBAL.authTimeout);
 
       // 强制修改密码
-      if (!data.user.pwdUpdateTime) {
-        this.$refs.ResetPwd.open();
-        return;
-      }
+      // if (!data.user.pwdUpdateTime) {
+      //   this.$refs.ResetPwd.open();
+      //   return;
+      // }
 
       this.$ls.set("token", data.accessToken, this.GLOBAL.authTimeout);
       // this.$store.commit("setUser", data);

+ 1 - 1
src/plugins/axios.js

@@ -214,7 +214,7 @@ const $get = (url, datas) => {
  */
 const $postParam = (url, datas, config = {}) => {
   const sqDatas = qs.stringify(mdData(datas), {
-    arrayFormat: "brackets"
+    arrayFormat: "repeat"
   });
   if (sqDatas) url += "?" + sqDatas;
 

+ 3 - 1
src/plugins/filters.js

@@ -61,5 +61,7 @@ Vue.filter("orgTypeFilter", function(val) {
   return ORG_TYPE[val] || DEFAULT_FIELD;
 });
 Vue.filter("timestampFilter", function(val) {
-  return val ? formatDate("YYYY-MM-DD HH:mm:ss", new Date(val)) : DEFAULT_FIELD;
+  return val
+    ? formatDate("YYYY-MM-DD HH:mm:ss", new Date(val * 1))
+    : DEFAULT_FIELD;
 });

+ 2 - 2
src/plugins/globalVuePlugins.js

@@ -15,7 +15,7 @@ import QuestionTeacherUserSelect from "../components/base/QuestionTeacherUserSel
 import SchoolSelect from "../components/base/SchoolSelect.vue";
 import CampusSelect from "../components/base/CampusSelect.vue";
 import PrintRoomSelect from "../components/base/PrintRoomSelect.vue";
-import StaffRoomSelect from "../components/base/StaffRoomSelect.vue";
+import TeachingRoomSelect from "../components/base/TeachingRoomSelect.vue";
 
 const components = {
   ViewFooter,
@@ -30,7 +30,7 @@ const components = {
   SchoolSelect,
   CampusSelect,
   PrintRoomSelect,
-  StaffRoomSelect
+  TeachingRoomSelect
 };
 
 export default {

+ 1 - 1
src/views/Home.vue

@@ -228,7 +228,7 @@ export default {
       this.menus = localNavs;
       if (this.$route.name === "Home") {
         this.$router.replace({
-          name: "ExamTaskManage"
+          name: "CampusManage"
         });
       } else {
         this.actCurNav();