Przeglądaj źródła

基础配置初步完成

zhangjie 4 lat temu
rodzic
commit
a699e424a8

+ 25 - 25
src/modules/base/api.js

@@ -1,19 +1,5 @@
 import { $get, $post } from "@/plugins/axios";
 
-// organization-manage
-export const organizationList = datas => {
-  return $get("/api/sys/org/list", datas);
-};
-export const updateOrganization = datas => {
-  return $post("/api/sys/org/save", datas);
-};
-export const ableOrganization = ({ id, enable }) => {
-  return $post("/api/sys/org/enable", { id, enable });
-};
-export const deleteOrganization = id => {
-  return $post("/api/sys/org/remove", { id });
-};
-
 // user-manage
 export const userListPage = datas => {
   return $get("/api/sys/user/list", datas);
@@ -21,23 +7,22 @@ export const userListPage = datas => {
 export const updateUser = datas => {
   return $post("/api/sys/user/save", datas);
 };
-export const userBindRoles = ({ id, roleIds }) => {
-  return $post("/api/sys/user/bindRoles", { id, roleIds });
-};
 export const ableUser = ({ id, enable }) => {
   return $post("/api/sys/user/enable", { id, enable });
 };
 export const updatePwd = id => {
   return $post("/api/sys/user/reset", { id });
 };
-
+export const userBindRoles = ({ id, roleIds }) => {
+  return $post("/api/sys/user/bindRoles", { id, roleIds });
+};
+export const userBoundRoles = userId => {
+  return $get("/api/sys/role/boundRoles", { userId });
+};
 // role-manage
 export const roleListPage = datas => {
   return $get("/api/sys/role/list", datas);
 };
-export const rolePrivilegeList = roleId => {
-  return $get("/api/sys/privilege/boundPrivileges", { roleId });
-};
 export const ableRole = ({ id, enable }) => {
   return $post("/api/sys/role/enable", { id, enable });
 };
@@ -47,6 +32,9 @@ export const updateRole = datas => {
 export const deleteRole = datas => {
   return $post("/api/sys/role/remove", datas);
 };
+export const roleBoundPrivileges = roleId => {
+  return $get("/api/sys/privilege/boundPrivileges", { roleId });
+};
 // menu-manage
 export const menuList = datas => {
   return $get("/api/sys/privilege/list", datas);
@@ -57,14 +45,27 @@ export const updateMenu = datas => {
 export const deleteMenu = datas => {
   return $post("/api/sys/privilege/remove", datas);
 };
+// organization-manage
+export const organizationList = datas => {
+  return $get("/api/sys/org/list", datas);
+};
+export const updateOrganization = datas => {
+  return $post("/api/sys/org/save", datas);
+};
+export const ableOrganization = ({ id, enable }) => {
+  return $post("/api/sys/org/enable", { id, enable });
+};
+export const deleteOrganization = id => {
+  return $post("/api/sys/org/remove", { id });
+};
 
 // --------------------------------->
 // common-rule
 export const commonRuleDetail = schoolId => {
-  return $get("/api/sys/examRule/list", { schoolId });
+  return $get("/api/basic/examRule/list", { schoolId });
 };
 export const saveCommonBusinessRule = datas => {
-  return $post("/api/sys/examRule/save", datas);
+  return $post("/api/basic/examRule/save", datas);
 };
 // card-rule
 export const cardRuleListPage = datas => {
@@ -92,7 +93,6 @@ export const ableTemplate = ({ id, enable }) => {
 export const templateCategoryList = type => {
   return $get("/api/basic/template/list", type);
 };
-
 // course-manage
 export const courseListPage = datas => {
   return $get("/api/basic/course/list", datas);
@@ -109,7 +109,7 @@ export const updateCourse = datas => {
 
 // common
 export const uploadFile = datas => {
-  return $post("/api/print/basic/sys/saveAttachment", datas);
+  return $post("/api/common/file/upload", datas);
 };
 
 // system

+ 14 - 64
src/modules/base/components/ModifyCardRule.vue

@@ -92,7 +92,7 @@
             <el-checkbox
               v-for="column in requiredFields"
               :key="column.code"
-              v-model="column.select"
+              v-model="column.enable"
               :disabled="!editable"
               >{{ column.name }}</el-checkbox
             >
@@ -101,7 +101,7 @@
             <el-checkbox
               v-for="column in extendFields"
               :key="column.code"
-              v-model="column.select"
+              v-model="column.enable"
               :disabled="!editable"
               >{{ column.name }}</el-checkbox
             >
@@ -136,18 +136,8 @@
             :disabled="!editable"
           ></el-input>
         </el-form-item>
-        <el-form-item prop="collegeIds" label="适用学院范围:">
-          <el-checkbox-group
-            v-model="modalForm.collegeIds"
-            :disabled="!editable"
-          >
-            <el-checkbox
-              v-for="item in colleges"
-              :key="item.id"
-              :label="item.id"
-              >{{ item.name }}</el-checkbox
-            >
-          </el-checkbox-group>
+        <el-form-item prop="orgs" label="适用学院范围:">
+          <select-orgs v-model="modalForm.orgs" ref="SelectOrgs"></select-orgs>
         </el-form-item>
       </el-form>
     </div>
@@ -162,12 +152,9 @@
 </template>
 
 <script>
-import {
-  EXAM_NUMBER_STYLE,
-  PAPER_TYPE,
-  CARD_BUSINESS_FIELDS
-} from "@/constants/enumerate";
-import { organizationList, cardRuleDetail, saveCardRule } from "../api";
+import { EXAM_NUMBER_STYLE, PAPER_TYPE } from "@/constants/enumerate";
+import { saveCardRule } from "../api";
+import SelectOrgs from "./SelectOrgs";
 
 const initModalForm = {
   id: null,
@@ -183,11 +170,12 @@ const initModalForm = {
   attention: "",
   objectiveAttention: "",
   subjectiveAttention: "",
-  collegeIds: []
+  orgs: []
 };
 
 export default {
   name: "modify-card-rule",
+  components: { SelectOrgs },
   props: {
     instance: {
       type: Object,
@@ -218,20 +206,6 @@ export default {
       dataReady: false,
       requiredFields: [],
       extendFields: [],
-      colleges: [
-        {
-          id: 1,
-          name: "外语学院"
-        },
-        {
-          id: 2,
-          name: "数学学院"
-        },
-        {
-          id: 3,
-          name: "计算机学院"
-        }
-      ],
       rules: {
         cardRuleName: [
           {
@@ -304,7 +278,7 @@ export default {
             trigger: "change"
           }
         ],
-        collegeIds: [
+        orgs: [
           {
             required: true,
             validator: (rule, value, callback) => {
@@ -320,32 +294,15 @@ export default {
       }
     };
   },
-  mounted() {
-    // this.getCardRule();
-    // this.getColleges();
-    this.requiredFields = CARD_BUSINESS_FIELDS.must.map(item => {
-      item.select = false;
-      return item;
-    });
-    this.extendFields = CARD_BUSINESS_FIELDS.extend.map(item => {
-      item.select = false;
-      return item;
-    });
-  },
   methods: {
-    async getColleges() {
-      this.colleges = await organizationList();
-    },
     initData(val) {
+      this.modalForm = this.$objAssign(initModalForm, val);
+      this.requiredFields = val.requiredFields;
+      this.extendFields = val.extendFields;
       if (val.id) {
-        this.modalForm = this.$objAssign(initModalForm, val);
-        this.requiredFields = JSON.parse(val.requiredFields);
-        this.extendFields = JSON.parse(val.extendFields);
         this.modalForm.examAbsent = Boolean(val.examAbsent);
         this.modalForm.writeSign = Boolean(val.writeSign);
-        this.modalForm.collegeIds = val.collegeIds.split();
-      } else {
-        this.modalForm = { ...initModalForm };
+        this.modalForm.orgs = val.orgs.map(item => item.orgId);
       }
     },
     visibleChange() {
@@ -361,13 +318,6 @@ export default {
     open() {
       this.modalIsShow = true;
     },
-    async getCardRule() {
-      const data = await cardRuleDetail();
-      this.modalForm = Object.assign(initModalForm, data);
-      this.modalForm.examAbsent = Boolean(this.modalForm.examAbsent);
-      this.modalForm.writeSign = Boolean(this.modalForm.writeSign);
-      this.dataReady = true;
-    },
     numStyleChange() {
       this.modalForm.writeSign = this.modalForm.examNumberStyle !== "FILL";
     },

+ 4 - 2
src/modules/base/components/ModifyCourse.vue

@@ -77,14 +77,16 @@ export default {
         courseName: [
           {
             required: true,
-            message: "请输入课程名称",
+            pattern: /^[0-9a-zA-Z\u4E00-\u9FA5]{1,20}$/,
+            message: "课程名称只能输入汉字、数字和字母,长度不能超过20",
             trigger: "change"
           }
         ],
         courseCode: [
           {
             required: true,
-            message: "请输入课程编码",
+            pattern: /^[0-9a-zA-Z_-]{3,30}$/,
+            message: "课程编码只能由数字字母短横线组成,长度在3-30之间",
             trigger: "change"
           }
         ]

+ 1 - 0
src/modules/base/components/ModifyMenu.vue

@@ -81,6 +81,7 @@ const initModalForm = {
   url: "",
   parentId: null,
   parentName: "",
+  sortNum: 1,
   type: "M",
   remark: ""
 };

+ 4 - 4
src/modules/base/components/ModifyOrganization.vue

@@ -106,16 +106,16 @@ export default {
         orgName: [
           {
             required: true,
-            pattern: /^[\u4E00-\u9FA5]{1,30}$/,
-            message: "机构名称只能输入汉字,长度不能超过30",
+            pattern: /^[0-9a-zA-Z\u4E00-\u9FA5]{1,30}$/,
+            message: "机构名称只能输入汉字、数字和字母,长度不能超过30",
             trigger: "change"
           }
         ],
         orgCode: [
           {
             required: true,
-            pattern: /^[a-zA-Z_\-[](){}]{3,30}$/,
-            message: "机构代码只能由字母短横线括号组成,长度在3-30之间",
+            pattern: /^[0-9a-zA-Z_-]{3,30}$/,
+            message: "机构代码只能由数字字母短横线组成,长度在3-30之间",
             trigger: "change"
           }
         ]

+ 4 - 4
src/modules/base/components/ModifyRole.vue

@@ -52,7 +52,7 @@
 </template>
 
 <script>
-import { updateRole, rolePrivilegeList } from "../api";
+import { updateRole, roleBoundPrivileges } from "../api";
 const initModalForm = {
   id: null,
   roleName: "",
@@ -118,8 +118,8 @@ export default {
   methods: {
     async visibleChange() {
       if (this.instance.id) {
-        this.modalForm = this.$objassign(initModalForm, this.instance);
-        let privilegeIds = await rolePrivilegeList(this.instance.id);
+        this.modalForm = this.$objAssign(initModalForm, this.instance);
+        let privilegeIds = await roleBoundPrivileges(this.instance.id);
         let checkedIds = [];
         const getCheckedIds = list => {
           list.forEach(item => {
@@ -137,12 +137,12 @@ export default {
         this.modalForm.privilegeIds = checkedIds;
       } else {
         this.modalForm = { ...initModalForm };
+        this.$refs.MenuTree.setCheckedKeys([]);
       }
       this.$nextTick(() => {
         this.$refs.modalFormComp.clearValidate();
       });
     },
-    getHalfCheckedIds(list) {},
     cancel() {
       this.modalIsShow = false;
     },

+ 16 - 12
src/modules/base/components/ModifyTemplate.vue

@@ -68,14 +68,7 @@
           ></upload-file-view>
         </el-form-item>
         <el-form-item prop="orgs" label="适用学院范围:">
-          <el-checkbox-group v-model="modalForm.orgs" :disabled="!editable">
-            <el-checkbox
-              v-for="item in organizations"
-              :key="item.id"
-              :label="item.id"
-              >{{ item.name }}</el-checkbox
-            >
-          </el-checkbox-group>
+          <select-orgs v-model="modalForm.orgs" ref="SelectOrgs"></select-orgs>
         </el-form-item>
       </el-form>
     </div>
@@ -91,7 +84,9 @@
 
 <script>
 import { organizationList, updateTemplate, templateCategoryList } from "../api";
+import { attachmentPreview } from "../../login/api";
 import UploadFileView from "@/components/UploadFileView";
+import SelectOrgs from "./SelectOrgs";
 
 const initModalForm = {
   id: null,
@@ -105,7 +100,7 @@ const initModalForm = {
 
 export default {
   name: "modify-template",
-  components: { UploadFileView },
+  components: { UploadFileView, SelectOrgs },
   props: {
     instance: {
       type: Object,
@@ -131,6 +126,7 @@ export default {
       modalIsShow: false,
       isSubmit: false,
       modalForm: {},
+      attachment: {},
       organizations: [
         {
           id: 1,
@@ -203,11 +199,19 @@ export default {
     initData(val) {
       this.modalForm = this.$objAssign(initModalForm, val);
       if (val.id) {
-        this.modalForm.orgs = val.orgs.map(item => item.orgCode);
+        this.modalForm.orgs = val.orgs.map(item => item.orgId);
+        this.getAttachment();
+      }
+    },
+    async getAttachment() {
+      const data = await attachmentPreview(this.instance.attachmentId);
+      this.attachment = data;
+
+      this.$nextTick(() => {
         this.$refs.UploadFileView.setAttachmentName(
-          `${val.tcPAttachment.name}${val.tcPAttachment.type}`
+          `${data.fileName}${data.fileType}`
         );
-      }
+      });
     },
     visibleChange() {
       this.initData(this.instance);

+ 3 - 1
src/modules/base/components/ModifyUser.vue

@@ -176,7 +176,7 @@ export default {
     };
   },
   created() {
-    this.getCourseList();
+    // this.getCourseList();
   },
   methods: {
     initData(val) {
@@ -214,6 +214,8 @@ export default {
       this.isSubmit = true;
 
       const datas = { ...this.modalForm };
+      data.roleIds = data.roleIds.join();
+      data.courseCodes = data.courseCodes.join();
       // TODO:
       if (datas.roleIds !== "QUESTION_TEACHER") delete datas.courseCodes;
       const data = await updateUser(datas).catch(() => {});

+ 16 - 20
src/modules/base/components/RuleBusiness.vue

@@ -11,7 +11,7 @@
         <el-checkbox
           v-for="field in modalForm.requiredFields"
           :key="field.code"
-          v-model="field.select"
+          v-model="field.enable"
           @change="validateRequiredFields"
           >{{ field.name }}</el-checkbox
         >
@@ -25,7 +25,7 @@
               class="label-item"
             >
               <el-checkbox
-                v-model="field.select"
+                v-model="field.enable"
                 class="label-item-content"
                 @change="validateExtendFields"
                 >{{ field.name }}</el-checkbox
@@ -97,14 +97,11 @@
 
 <script>
 import ModifyField from "../components/ModifyField";
-import {
-  ABLE_TYPE,
-  CONFIRM_PRINT_TYPE,
-  CARD_BUSINESS_FIELDS
-} from "@/constants/enumerate";
+import { ABLE_TYPE, CONFIRM_PRINT_TYPE } from "@/constants/enumerate";
 import { commonRuleDetail, saveCommonBusinessRule } from "../api";
 
 const initModalForm = {
+  id: null,
   review: 1,
   includePaper: 1,
   customCard: 1,
@@ -120,14 +117,12 @@ export default {
     return {
       modalForm: { ...initModalForm },
       isSubmit: false,
-      requiredFields: [],
-      extendFields: [],
       rules: {
         requiredFields: [
           {
             required: true,
             validator: (rule, value, callback) => {
-              const selected = value.some(item => item.select);
+              const selected = value.some(item => item.enable);
               if (selected) {
                 callback();
               } else {
@@ -141,7 +136,7 @@ export default {
           {
             required: true,
             validator: (rule, value, callback) => {
-              const selected = value.some(item => item.select);
+              const selected = value.some(item => item.enable);
               if (selected) {
                 callback();
               } else {
@@ -157,17 +152,15 @@ export default {
     };
   },
   mounted() {
-    // this.init()
-    this.modalForm.requiredFields = CARD_BUSINESS_FIELDS.must;
-    this.modalForm.extendFields = CARD_BUSINESS_FIELDS.extend;
+    this.init();
   },
   methods: {
     async init() {
-      await this.getBusinessFieldsList();
       const data = await commonRuleDetail();
       this.modalForm = Object.assign(initModalForm, data);
-      // this.requiredFields = data.requiredFields;
-      // this.extendFields = data.extendFields;
+      this.modalForm.review = Number(data.review);
+      this.modalForm.includePaper = Number(data.includePaper);
+      this.modalForm.customCard = Number(data.customCard);
     },
     validateRequiredFields() {
       this.$refs.modalFormComp.validateField("requiredFields");
@@ -194,11 +187,14 @@ export default {
 
       if (this.isSubmit) return;
       this.isSubmit = true;
-      const datas = {
+      let datas = {
         ...this.modalForm
       };
-      data.requiredFields = JSON.stringify(datas.requiredFields);
-      data.extendFields = JSON.stringify(datas.extendFields);
+      datas.requiredFields = JSON.stringify(datas.requiredFields);
+      datas.extendFields = JSON.stringify(datas.extendFields);
+      datas.review = Boolean(datas.review);
+      datas.includePaper = Boolean(datas.includePaper);
+      datas.customCard = Boolean(datas.customCard);
       const data = await saveCommonBusinessRule(datas).catch(() => {});
       this.isSubmit = false;
       if (!data) return;

+ 100 - 0
src/modules/base/components/SelectOrgs.vue

@@ -0,0 +1,100 @@
+<template>
+  <div class="select-orgs">
+    <div class="part-box part-box-pad part-box-border" v-if="isTree">
+      <el-tree
+        :data="orgs"
+        show-checkbox
+        default-expand-all
+        node-key="id"
+        ref="MenuTree"
+        :props="defaultProps"
+        check-strictly
+        check-on-click-node
+        :expand-on-click-node="false"
+        @check-change="checkChange"
+      >
+      </el-tree>
+    </div>
+    <el-checkbox-group v-model="selectedOrgs" @change="selectChange" v-else>
+      <el-checkbox v-for="item in orgs" :key="item.id" :label="item.id">{{
+        item.name
+      }}</el-checkbox>
+    </el-checkbox-group>
+  </div>
+</template>
+
+<script>
+import { organizationList } from "../api";
+
+export default {
+  name: "select-orgs",
+  props: {
+    value: {
+      type: Array,
+      default() {
+        return [];
+      }
+    }
+  },
+  data() {
+    return {
+      selectedOrgs: [],
+      // orgs: [],
+      orgs: [],
+      isTree: false,
+      defaultProps: {
+        label: "orgName"
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  watch: {
+    value(val, oldVal) {
+      if (this.isTree && val.join() !== oldVal.join()) this.setCheckedNode(val);
+    }
+  },
+  methods: {
+    async getList() {
+      this.orgs = await organizationList();
+      this.isTree = !!this.orgs[0]["children"];
+
+      if (this.isTree) {
+        this.$nextTick(() => {
+          this.setCheckedNode(this.value);
+        });
+      }
+    },
+    setCheckedNode(selectedIds) {
+      const selectedOrgs = this.$refs.MenuTree.getCheckedKeys();
+      if (selectedOrgs.join() === selectedIds.join()) return;
+
+      let checkedIds = [];
+      const getCheckedIds = list => {
+        list.forEach(item => {
+          if (item["children"]) {
+            getCheckedIds(item.children);
+          } else {
+            const isChecked = selectedIds.includes(item.id);
+            if (isChecked) checkedIds.push(item.id);
+          }
+        });
+      };
+      getCheckedIds(this.orgs);
+      this.$refs.MenuTree.setCheckedKeys(checkedIds);
+    },
+    checkChange() {
+      const selectedOrgs = this.$refs.MenuTree.getCheckedKeys();
+      this.emitChange(selectedOrgs);
+    },
+    selectChange() {
+      this.emitChange(this.selectedOrgs);
+    },
+    emitChange(vals) {
+      this.$emit("input", vals);
+      this.$emit("change", vals);
+    }
+  }
+};
+</script>

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

@@ -5,15 +5,15 @@
         <el-form-item label="规则名称:">
           <el-input
             style="width: 200px;"
-            v-model.trim="filter.name"
+            v-model.trim="filter.cardRuleName"
             placeholder="请输入内容"
             clearable
           ></el-input>
         </el-form-item>
         <el-form-item label="创建时间:">
           <el-date-picker
-            v-model="filter.createdTime"
-            type="datetime"
+            v-model="filter.createTime"
+            type="date"
             placeholder="选择日期时间"
           >
           </el-date-picker>
@@ -58,7 +58,11 @@
           prop="cardRuleName"
           label="题卡规则名称"
         ></el-table-column>
-        <el-table-column prop="college" label="适用学院"> </el-table-column>
+        <el-table-column prop="orgs" label="适用学院">
+          <template slot-scope="scope">
+            {{ scope.row.orgs | orgsFilter }}
+          </template>
+        </el-table-column>
         <el-table-column prop="remark" label="备注"></el-table-column>
         <el-table-column prop="enable" label="启用/禁用">
           <template slot-scope="scope">
@@ -125,7 +129,7 @@
 
 <script>
 import { ABLE_TYPE } from "@/constants/enumerate";
-import { cardRuleListPage, ableCardRule } from "../api";
+import { commonRuleDetail, cardRuleListPage, ableCardRule } from "../api";
 import ModifyCardRule from "../components/ModifyCardRule";
 
 export default {
@@ -137,8 +141,8 @@ export default {
     return {
       filter: {
         enable: null,
-        name: "",
-        createdTime: ""
+        cardRuleName: "",
+        createTime: ""
       },
       current: 1,
       size: this.GLOBAL.pageSize,
@@ -146,13 +150,18 @@ export default {
       rules: [],
       curRule: {},
       ruleCanEdit: true,
+      commonRule: {},
       ABLE_TYPE
     };
   },
   created() {
     this.getList();
+    this.getCommonRuleDetail();
   },
   methods: {
+    async getCommonRuleDetail() {
+      this.commonRule = await commonRuleDetail();
+    },
     async getList() {
       const datas = {
         ...this.filter,
@@ -168,7 +177,17 @@ export default {
       this.getList();
     },
     toAdd() {
-      this.curRule = {};
+      this.curRule = {
+        requiredFields: this.commonRule.requiredFields.filter(
+          item => item.enable
+        ),
+        extendFields: this.commonRule.extendFields
+          .filter(item => item.enable)
+          .map(item => {
+            item.enable = false;
+            return item;
+          })
+      };
       this.ruleCanEdit = true;
       this.$refs.ModifyCardRule.open();
     },

+ 21 - 62
src/modules/base/views/MenuManage.vue

@@ -19,6 +19,14 @@
             {{ node.label }}</span
           >
           <span>
+            <el-button
+              v-if="data.type === 'M'"
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-plus-act"
+              @click="() => append(node, data)"
+              title="新增"
+            ></el-button>
             <el-button
               class="btn-table-icon"
               type="text"
@@ -33,13 +41,6 @@
               @click="() => remove(node, data)"
               title="删除"
             ></el-button>
-            <el-button
-              class="btn-table-icon"
-              type="text"
-              icon="icon icon-plus-act"
-              @click="() => append(data)"
-              title="新增"
-            ></el-button>
           </span>
         </span>
       </el-tree>
@@ -55,7 +56,7 @@
 </template>
 
 <script>
-import { organizationList, deleteOrganization } from "../api";
+import { menuList, deleteMenu } from "../api";
 import ModifyMenu from "../components/ModifyMenu";
 
 export default {
@@ -63,65 +64,19 @@ export default {
   components: { ModifyMenu },
   data() {
     return {
-      menus: [
-        {
-          id: 1,
-          schoolId: 101,
-          name: "基础配置",
-          url: "basic",
-          type: "M",
-          parentId: null,
-          sortNum: 1,
-          createId: 1,
-          createTime: "2021-03-17 14:20:30",
-          children: [
-            {
-              id: 2,
-              schoolId: 101,
-              name: "用户管理",
-              url: "user",
-              type: "M",
-              parentId: 1,
-              sortNum: 1,
-              createId: 1,
-              createTime: "2021-03-17 14:20:30",
-              children: [
-                {
-                  id: 3,
-                  schoolId: 101,
-                  name: "新增",
-                  url: "/api/sys/user/save",
-                  type: "F",
-                  parentId: 2,
-                  sortNum: 1,
-                  createId: 1,
-                  createTime: "2021-03-17 14:20:30"
-                },
-                {
-                  id: 4,
-                  schoolId: 101,
-                  name: "启用/禁用",
-                  url: "/api/sys/user/enable",
-                  type: "F",
-                  parentId: 2,
-                  sortNum: 2,
-                  createId: 1,
-                  createTime: "2021-03-17 14:20:30"
-                }
-              ]
-            }
-          ]
-        }
-      ],
+      menus: [],
       curMenu: {},
       defaultProps: {
         label: "name"
       }
     };
   },
+  created() {
+    this.getList();
+  },
   methods: {
     async getList() {
-      this.menus = await organizationList();
+      this.menus = await menuList();
     },
     toAdd() {
       this.curMenu = {};
@@ -140,7 +95,7 @@ export default {
         confirmButtonClass: "el-button--primary",
         type: "warning"
       }).then(async () => {
-        await deleteOrganization(data.id);
+        await deleteMenu(data.id);
 
         const parent = node.parent;
         const children = parent.data.children || parent.data;
@@ -150,8 +105,12 @@ export default {
         this.$message.success("删除成功!");
       });
     },
-    append(data) {
-      this.curMenu = { parentId: data.id, parentName: data.name };
+    append(node, data) {
+      this.curMenu = {
+        parentId: data.id,
+        parentName: data.name,
+        sortNum: node.parent.childNodes.length + 1
+      };
       this.$refs.ModifyMenu.open();
     }
   }

+ 4 - 34
src/modules/base/views/OrganizationManage.vue

@@ -60,46 +60,16 @@ export default {
   components: { ModifyOrganization },
   data() {
     return {
-      orgs: [
-        {
-          id: 1,
-          schoolId: 101,
-          orgCode: "A00001",
-          orgName: "学习中心",
-          parentId: null,
-          enable: 1,
-          createId: 1,
-          createTime: "2021-03-17 14:20:30",
-          children: [
-            {
-              id: 2,
-              schoolId: 101,
-              orgCode: "A000011",
-              orgName: "学习中心1",
-              parentId: 1,
-              enable: 1,
-              createId: 1,
-              createTime: "2021-03-17 14:20:30"
-            },
-            {
-              id: 3,
-              schoolId: 101,
-              orgCode: "A000012",
-              orgName: "学习中心2",
-              parentId: 1,
-              enable: 1,
-              createId: 1,
-              createTime: "2021-03-17 14:20:30"
-            }
-          ]
-        }
-      ],
+      orgs: [],
       curOrg: {},
       defaultProps: {
         label: "orgName"
       }
     };
   },
+  mounted() {
+    this.getList();
+  },
   methods: {
     async getList() {
       this.orgs = await organizationList();

+ 4 - 86
src/modules/base/views/RoleManage.vue

@@ -112,7 +112,7 @@
 
 <script>
 import { ABLE_TYPE, TEMPLATE_TYPE } from "@/constants/enumerate";
-import { organizationList, roleListPage, ableRole, deleteRole } from "../api";
+import { menuList, roleListPage, ableRole, deleteRole } from "../api";
 import ModifyRole from "../components/ModifyRole";
 
 export default {
@@ -142,98 +142,16 @@ export default {
       curRole: {},
       ABLE_TYPE,
       // menus: [],
-      menus: [
-        {
-          id: 1,
-          schoolId: 101,
-          name: "基础配置",
-          url: "basic",
-          type: "M",
-          parentId: null,
-          sortNum: 1,
-          createId: 1,
-          createTime: "2021-03-17 14:20:30",
-          children: [
-            {
-              id: 2,
-              schoolId: 101,
-              name: "用户管理",
-              url: "user",
-              type: "M",
-              parentId: 1,
-              sortNum: 1,
-              createId: 1,
-              createTime: "2021-03-17 14:20:30",
-              children: [
-                {
-                  id: 3,
-                  name: "角色管理",
-                  type: "M",
-                  parentId: 2,
-                  children: [
-                    {
-                      id: 4,
-                      schoolId: 101,
-                      name: "新增",
-                      url: "/api/sys/user/save",
-                      type: "F",
-                      parentId: 3,
-                      sortNum: 1,
-                      createId: 1,
-                      createTime: "2021-03-17 14:20:30"
-                    },
-                    {
-                      id: 5,
-                      schoolId: 101,
-                      name: "启用/禁用",
-                      url: "/api/sys/user/enable",
-                      type: "F",
-                      parentId: 3,
-                      sortNum: 2,
-                      createId: 1,
-                      createTime: "2021-03-17 14:20:30"
-                    },
-                    {
-                      id: 6,
-                      schoolId: 101,
-                      name: "启用",
-                      url: "/api/sys/user/enable",
-                      type: "F",
-                      parentId: 3,
-                      sortNum: 2,
-                      createId: 1,
-                      createTime: "2021-03-17 14:20:30"
-                    }
-                  ]
-                },
-                {
-                  id: 7,
-                  name: "用户管理",
-                  type: "M",
-                  parentId: 2,
-                  children: [
-                    {
-                      id: 8,
-                      name: "新增",
-                      type: "F",
-                      parentId: 7
-                    }
-                  ]
-                }
-              ]
-            }
-          ]
-        }
-      ]
+      menus: []
     };
   },
   created() {
     this.getList();
-    // this.getMenus();
+    this.getMenus();
   },
   methods: {
     async getMenus() {
-      this.menus = await organizationList();
+      this.menus = await menuList();
     },
     async getList() {
       const datas = {

+ 6 - 2
src/modules/base/views/TemplateManage.vue

@@ -64,7 +64,11 @@
             {{ scope.row.classify | templateClassifyFilter }}
           </template>
         </el-table-column>
-        <el-table-column prop="college" label="适用学院"></el-table-column>
+        <el-table-column prop="orgs" label="适用学院">
+          <template slot-scope="scope">
+            {{ scope.row.orgs | orgsFilter }}
+          </template>
+        </el-table-column>
         <el-table-column prop="remark" label="备注"></el-table-column>
         <el-table-column prop="enable" label="启用/禁用">
           <template slot-scope="scope">
@@ -166,7 +170,7 @@ export default {
     };
   },
   created() {
-    // this.getList();
+    this.getList();
   },
   methods: {
     async getList() {

+ 2 - 2
src/modules/base/views/UserManage.vue

@@ -188,8 +188,8 @@ export default {
     };
   },
   created() {
-    // this.getRoleList();
-    // this.getList();
+    this.getRoleList();
+    this.getList();
   },
   methods: {
     async getRoleList() {

+ 2 - 2
src/modules/login/api.js

@@ -12,6 +12,6 @@ export const logout = userId => {
 export const sysMenu = () => {
   return $get("/api/print/basic/sys/getMenu", {});
 };
-export const attachmentPreview = attachmentId => {
-  return $get("/api/print/basic/sys/attachmentPreview", { attachmentId });
+export const attachmentPreview = id => {
+  return $get("/api/common/file/getOne", { id });
 };

+ 10 - 8
src/modules/login/views/Login.vue

@@ -140,18 +140,20 @@ export default {
       this.isSubmit = false;
       if (!data) return;
 
-      data.account.roleCode = data.roles.map(item => item.roleCode).join();
+      data.account.roleIds = data.account.roles
+        .map(item => item.roleIds)
+        .join();
 
       this.$ls.set("schoolId", data.account.schoolId, this.GLOBAL.authTimeout);
       this.$ls.set("user", data.account, this.GLOBAL.authTimeout);
 
-      if (
-        data.account.roleCode.includes("QUESTION_TEACHER") &&
-        !data.account.pwChangedCount
-      ) {
-        this.$refs.ResetPwd.open();
-        return;
-      }
+      // if (
+      //   data.account.roleCode.includes("QUESTION_TEACHER") &&
+      //   !data.account.pwChangedCount
+      // ) {
+      //   this.$refs.ResetPwd.open();
+      //   return;
+      // }
 
       this.$ls.set("token", data.token, this.GLOBAL.authTimeout);
       this.$store.commit("setUser", data.account);

+ 3 - 0
src/plugins/filters.js

@@ -7,6 +7,9 @@ Vue.filter("enableFilter", function(val) {
 Vue.filter("templateClassifyFilter", function(val) {
   return TEMPLATE_CLASSIFY[val];
 });
+Vue.filter("orgsFilter", function(val) {
+  return val.map(item => item.orgName).join(",");
+});
 Vue.filter("rolesFilter", function(val) {
   return val.map(item => item.roleName).join(",");
 });

+ 12 - 5
src/views/Home.vue

@@ -135,10 +135,7 @@ export default {
       curActNav: "",
       breadcrumbs: [],
       validRoutes: [],
-      username: this.$ls.get("user", { name: "" }).name,
-      IS_SUPER_ADMIN: this.$ls
-        .get("user", { roleCode: "" })
-        .roleCode.includes("SUPER_ADMIN"),
+      username: this.$ls.get("user", { realName: "" }).realName,
       menuDailogIsShow: false,
       waitTaskCount: 0
     };
@@ -162,7 +159,17 @@ export default {
   },
   methods: {
     // ...mapActions("examCenter", ["updateWaitTaskCount"]),
-    async getMenus() {
+    getMenus() {
+      this.menus = localNavs;
+      if (this.$route.name === "Home") {
+        this.$router.replace({
+          name: "UserManage"
+        });
+      } else {
+        this.actCurNav();
+      }
+    },
+    async getMenus1() {
       const data = await sysMenu();
       const { menus, firstRouter } = this.menusToTree(data.records);
       console.log(menus, firstRouter);