Pārlūkot izejas kodu

页面详情权限添加

zhangjie 3 gadi atpakaļ
vecāks
revīzija
ed20435ca3

+ 11 - 1
src/constants/navs.js

@@ -159,12 +159,22 @@ const navs = [
             name: "印刷计划合并管理",
             url: "PrintPlanPushManage",
             isRouter: true
+          },
+          {
+            name: "流程管理",
+            url: "FlowManage",
+            isRouter: true
+          },
+          {
+            name: "审批记录管理",
+            url: "ApproveRecordManage",
+            isRouter: true
           }
         ]
       },
       {
         name: "字典管理",
-        url: "rule",
+        url: "dictionary",
         icon: "el-icon-s-tools",
         children: [
           {

+ 6 - 0
src/modules/base/api.js

@@ -127,10 +127,16 @@ export const updateCourse = datas => {
 export const flowListPage = datas => {
   return $postParam("/api/admin/flow/list", datas);
 };
+export const flowPublish = id => {
+  return $post("/api/admin/flow/publish", { id });
+};
 // approve-record
 export const approveRecordListPage = datas => {
   return $postParam("/api/admin/flow/approve/list", datas);
 };
+export const deleteApproveRecord = datas => {
+  return $postParam("/api/admin/flow/approve/enable", datas);
+};
 
 // dict --------------------------------->
 // campus-manage

+ 6 - 6
src/modules/base/components/ModifyUser.vue

@@ -33,10 +33,10 @@
             clearable
           ></el-input>
         </el-form-item>
-        <el-form-item prop="jobNumber" label="工号:">
+        <el-form-item prop="code" label="工号:">
           <el-input
             style="width:100%;"
-            v-model.trim="modalForm.jobNumber"
+            v-model.trim="modalForm.code"
             placeholder="请输入工号"
             clearable
           ></el-input>
@@ -95,7 +95,7 @@ const initModalForm = {
   id: "",
   loginName: "",
   realName: "",
-  jobNumber: "",
+  code: "",
   mobileNumber: "",
   roleIds: [],
   courseIds: [],
@@ -142,7 +142,7 @@ export default {
         callback();
       }
     };
-    const jobNumberValidator = (rule, value, callback) => {
+    const codeValidator = (rule, value, callback) => {
       if (value && value.length > 50) {
         callback(new Error("工号长度不要超过50字符"));
       } else {
@@ -183,10 +183,10 @@ export default {
             trigger: "change"
           }
         ],
-        jobNumber: [
+        code: [
           {
             required: false,
-            validator: jobNumberValidator,
+            validator: codeValidator,
             trigger: "change"
           }
         ],

+ 4 - 4
src/modules/base/router.js

@@ -9,7 +9,7 @@ import CommonCardTemplate from "./views/CommonCardTemplate.vue";
 import ParamPrintTemplate from "./views/ParamPrintTemplate.vue";
 import CommonPrintTemplate from "./views/CommonPrintTemplate.vue";
 import PrintPlanPushManage from "./views/PrintPlanPushManage.vue";
-import ApproveRecord from "./views/ApproveRecord.vue";
+import ApproveRecordManage from "./views/ApproveRecordManage.vue";
 // dict
 import CampusManage from "./views/CampusManage.vue";
 import StudentManage from "./views/StudentManage.vue";
@@ -62,9 +62,9 @@ export default [
     component: PrintPlanPushManage
   },
   {
-    path: "/base/approve-record",
-    name: "ApproveRecord",
-    component: ApproveRecord
+    path: "/base/approve-record-manage",
+    name: "ApproveRecordManage",
+    component: ApproveRecordManage
   },
   {
     path: "/base/course-manage",

+ 54 - 18
src/modules/base/views/ApproveRecord.vue → src/modules/base/views/ApproveRecordManage.vue

@@ -1,17 +1,23 @@
 <template>
-  <div class="approve-record">
+  <div class="approve-record-manage">
     <div class="part-box part-box-filter part-box-border">
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
-        <el-form-item label="发起人:" label-width="75px">
-          <el-input
-            style="width: 142px;"
-            v-model.trim="filter.startName"
-            placeholder="请输入发起人"
-            clearable
-          ></el-input>
-        </el-form-item>
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="发起人:" label-width="75px">
+            <el-input
+              style="width: 142px;"
+              v-model.trim="filter.startName"
+              placeholder="请输入发起人"
+              clearable
+            ></el-input>
+          </el-form-item>
+        </template>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            icon="el-icon-search"
+            @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
@@ -46,7 +52,24 @@
         </el-table-column>
         <el-table-column prop="secondApproveRemark" label="审核意见">
         </el-table-column>
-        <el-table-column prop="statusStr" label="状态"> </el-table-column>
+        <el-table-column prop="statusStr" label="状态"></el-table-column>
+        <el-table-column
+          class-name="action-column"
+          label="操作"
+          align="center"
+          width="120px"
+        >
+          <template slot-scope="scope">
+            <el-button
+              v-if="checkPrivilege('link', 'delete')"
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-edit"
+              @click="toDelete(scope.row)"
+              title="删除"
+            ></el-button>
+          </template>
+        </el-table-column>
       </el-table>
       <div class="part-page">
         <el-pagination
@@ -64,10 +87,10 @@
 </template>
 
 <script>
-import { approveRecordListPage } from "../api";
+import { approveRecordListPage, deleteApproveRecord } from "../api";
 
 export default {
-  name: "approve-record",
+  name: "approve-record-manage",
   data() {
     return {
       filter: {
@@ -79,16 +102,13 @@ export default {
       dataList: []
     };
   },
-  computed: {
-    IS_SCHOOL_ADMIN() {
-      return this.userRoles.includes("SCHOOL_ADMIN");
-    }
-  },
   created() {
     this.toPage(1);
   },
   methods: {
     async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
       const datas = {
         ...this.filter,
         pageNumber: this.current,
@@ -101,6 +121,22 @@ export default {
     toPage(page) {
       this.current = page;
       this.getList();
+    },
+    toDelete(row) {
+      this.$confirm(`确定要删除当前记录吗?`, "提示", {
+        cancelButtonClass: "el-button--danger is-plain",
+        confirmButtonClass: "el-button--primary",
+        type: "warning"
+      })
+        .then(async () => {
+          await deleteApproveRecord({
+            flowId: row.flowId,
+            enable: false
+          });
+          this.$message.success("操作成功!");
+          this.getList();
+        })
+        .catch(() => {});
     }
   }
 };

+ 5 - 0
src/modules/base/views/CampusManage.vue

@@ -4,6 +4,7 @@
       <div></div>
       <div class="part-box-action">
         <el-button
+          v-if="checkPrivilege('button', 'add')"
           type="primary"
           icon="el-icon-circle-plus-outline"
           @click="toAdd"
@@ -18,6 +19,7 @@
         <el-table-column label="操作" align="center" width="120px">
           <template slot-scope="scope">
             <el-button
+              v-if="checkPrivilege('link', 'edit')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-edit"
@@ -25,6 +27,7 @@
               title="编辑"
             ></el-button>
             <el-button
+              v-if="checkPrivilege('link', 'delete')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-delete"
@@ -62,6 +65,8 @@ export default {
   },
   methods: {
     async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
       this.dataList = await campusQuery();
     },
     toAdd() {

+ 47 - 33
src/modules/base/views/CardRuleManage.vue

@@ -2,46 +2,53 @@
   <div class="card-rule-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 label="规则名称:">
-          <el-input
-            style="width: 200px;"
-            v-model.trim="filter.name"
-            placeholder="请输入内容"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="创建时间:">
-          <el-date-picker
-            v-model="filter.createTime"
-            type="date"
-            value-format="timestamp"
-            placeholder="选择日期时间"
-          >
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="启用/禁用:" label-width="90px">
-          <el-select
-            v-model="filter.enable"
-            style="width: 100px;"
-            placeholder="请选择"
-            clearable
-          >
-            <el-option
-              v-for="(val, key) in ABLE_TYPE"
-              :key="key"
-              :value="key * 1"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="规则名称:">
+            <el-input
+              style="width: 200px;"
+              v-model.trim="filter.name"
+              placeholder="请输入内容"
+              clearable
+            ></el-input>
+          </el-form-item>
+          <el-form-item label="创建时间:">
+            <el-date-picker
+              v-model="filter.createTime"
+              type="date"
+              value-format="timestamp"
+              placeholder="选择日期时间"
+            >
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="启用/禁用:" label-width="90px">
+            <el-select
+              v-model="filter.enable"
+              style="width: 100px;"
+              placeholder="请选择"
+              clearable
+            >
+              <el-option
+                v-for="(val, key) in ABLE_TYPE"
+                :key="key"
+                :value="key * 1"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </template>
         <el-form-item>
-          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            icon="el-icon-search"
+            @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
         <el-button
+          v-if="checkPrivilege('button', 'add')"
           type="primary"
           icon="el-icon-circle-plus-outline"
           @click="toAdd"
@@ -83,6 +90,7 @@
         >
           <template slot-scope="scope">
             <el-button
+              v-if="checkPrivilege('link', 'preview')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-circle-right"
@@ -90,6 +98,7 @@
               title="查看"
             ></el-button>
             <el-button
+              v-if="checkPrivilege('link', 'edit')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-edit"
@@ -97,6 +106,7 @@
               title="编辑"
             ></el-button>
             <el-button
+              v-if="checkPrivilege('link', 'enable')"
               class="btn-table-icon"
               type="text"
               :icon="
@@ -168,6 +178,8 @@ export default {
   },
   methods: {
     async getExamRule() {
+      if (!this.checkPrivilege("button", "add")) return;
+
       const examRequiredFields = await getEnums("REQUIRED_FIELDS");
       this.cardRequiredFields = await getEnums("CARD_REQUIRED_FIELDS");
       const cardRequiredFieldCodes = this.cardRequiredFields.map(
@@ -196,6 +208,8 @@ export default {
       ];
     },
     async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
       const datas = {
         ...this.filter,
         pageNumber: this.current,

+ 4 - 1
src/modules/base/views/CommonRule.vue

@@ -9,7 +9,10 @@
         >{{ item.name }}</el-button
       >
     </div>
-    <component :is="curMenu.component"></component>
+    <component
+      v-if="checkPrivilege('button', 'add')"
+      :is="curMenu.component"
+    ></component>
   </div>
 </template>
 

+ 37 - 25
src/modules/base/views/CourseManage.vue

@@ -2,52 +2,60 @@
   <div class="course-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 label="课程名称:">
-          <el-input
-            style="width: 142px;"
-            v-model.trim="filter.courseName"
-            placeholder="请输入内容"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="创建时间:">
-          <el-date-picker
-            v-model="createTime"
-            type="datetimerange"
-            :picker-options="pickerOptions"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            value-format="timestamp"
-            align="right"
-            unlink-panels
-          >
-          </el-date-picker>
-        </el-form-item>
-        <!-- <el-form-item label="所属教研室:">
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="课程名称:">
+            <el-input
+              style="width: 142px;"
+              v-model.trim="filter.courseName"
+              placeholder="请输入内容"
+              clearable
+            ></el-input>
+          </el-form-item>
+          <el-form-item label="创建时间:">
+            <el-date-picker
+              v-model="createTime"
+              type="datetimerange"
+              :picker-options="pickerOptions"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              value-format="timestamp"
+              align="right"
+              unlink-panels
+            >
+            </el-date-picker>
+          </el-form-item>
+          <!-- <el-form-item label="所属教研室:">
           <teaching-room-select
             style="width: 142px;"
             v-model.trim="filter.staffRoomId"
             clearable
           ></teaching-room-select>
         </el-form-item> -->
+        </template>
         <el-form-item>
-          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            icon="el-icon-search"
+            @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
         <el-button
+          v-if="checkPrivilege('button', 'add')"
           type="primary"
           icon="el-icon-circle-plus-outline"
           @click="toAdd"
           >新增课程</el-button
         >
-        <el-button
+        <el-button v-if="checkPrivilege('button', 'TempleteDownload')"
           ><a :href="downloadUrl" :download="dfilename">模板下载</a></el-button
         >
         <upload-button
+          v-if="checkPrivilege('button', 'Import')"
           btn-icon="el-icon-upload"
           btn-content="批量导入"
           btn-type="primary"
@@ -77,6 +85,7 @@
         <el-table-column label="操作" align="center" width="120px">
           <template slot-scope="scope">
             <el-button
+              v-if="checkPrivilege('link', 'edit')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-edit"
@@ -84,6 +93,7 @@
               title="编辑"
             ></el-button>
             <el-button
+              v-if="checkPrivilege('link', 'delete')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-delete"
@@ -149,6 +159,8 @@ export default {
   },
   methods: {
     async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
       const datas = {
         ...this.filter,
         pageNumber: this.current,

+ 46 - 20
src/modules/base/views/FlowManage.vue

@@ -2,22 +2,29 @@
   <div class="flow-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 label="名称:">
-          <el-input
-            style="width: 200px;"
-            v-model.trim="filter.name"
-            placeholder="请输入内容"
-            clearable
-          ></el-input>
-        </el-form-item>
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="名称:">
+            <el-input
+              style="width: 200px;"
+              v-model.trim="filter.name"
+              placeholder="请输入内容"
+              clearable
+            ></el-input>
+          </el-form-item>
+        </template>
         <el-form-item>
-          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            icon="el-icon-search"
+            @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
         <el-button
+          v-if="checkPrivilege('button', 'add')"
           type="primary"
           icon="el-icon-circle-plus-outline"
           @click="toAdd"
@@ -35,6 +42,11 @@
           :index="indexMethod"
         ></el-table-column>
         <el-table-column prop="name" label="流程名称"></el-table-column>
+        <el-table-column prop="publish" label="状态">
+          <span slot-scope="scope">
+            {{ scope.row.publish ? "已发布" : "未发布" }}</span
+          >
+        </el-table-column>
         <el-table-column
           class-name="action-column"
           label="操作"
@@ -43,19 +55,20 @@
         >
           <template slot-scope="scope">
             <el-button
+              v-if="checkPrivilege('link', 'publish')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-edit"
-              @click="toEdit(scope.row)"
-              title="编辑"
+              @click="toPublish(scope.row)"
+              title="发布"
             ></el-button>
-            <el-button
+            <!-- <el-button
               class="btn-table-icon"
               type="text"
               icon="icon icon-delete"
               @click="toDelete(scope.row)"
               title="删除"
-            ></el-button>
+            ></el-button> -->
           </template>
         </el-table-column>
       </el-table>
@@ -74,14 +87,14 @@
     <!-- ModifyRole -->
     <modify-role
       ref="ModifyRole"
-      :instance="curRole"
+      :instance="curFlow"
       @modified="getList"
     ></modify-role>
   </div>
 </template>
 
 <script>
-import { flowListPage } from "../api";
+import { flowListPage, flowPublish } from "../api";
 import ModifyRole from "../components/ModifyRole";
 
 export default {
@@ -98,7 +111,7 @@ export default {
       size: this.GLOBAL.pageSize,
       total: 0,
       dataList: [],
-      curRole: {}
+      curFlow: {}
     };
   },
   created() {
@@ -106,6 +119,8 @@ export default {
   },
   methods: {
     async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
       const datas = {
         ...this.filter,
         pageNumber: this.current,
@@ -120,12 +135,23 @@ export default {
       this.getList();
     },
     toAdd() {
-      this.curRole = {};
+      this.curFlow = {};
       this.$refs.ModifyRole.open();
     },
-    toEdit(row) {
-      this.curRole = row;
-      this.$refs.ModifyRole.open();
+    toPublish(row) {
+      if (row.publish) return;
+
+      this.$confirm(`确定要发布流程【${row.name}】吗?`, "提示", {
+        cancelButtonClass: "el-button--danger is-plain",
+        confirmButtonClass: "el-button--primary",
+        type: "warning"
+      })
+        .then(async () => {
+          await flowPublish(row.id);
+          this.$message.success("操作成功!");
+          row.publish = !row.publish;
+        })
+        .catch(() => {});
     }
   }
 };

+ 7 - 1
src/modules/base/views/OrganizationManage.vue

@@ -12,6 +12,7 @@
           <span>{{ node.label }}</span>
           <span v-if="data.isRoot">
             <el-button
+              v-if="checkPrivilege('button', 'Add')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-plus-act"
@@ -23,7 +24,9 @@
             <el-button type="text">{{ data.type | orgTypeFilter }}</el-button>
             <el-button
               v-if="
-                data.type !== 'PRINTING_HOUSE' && data.type !== 'TEACHING_ROOM'
+                data.type !== 'PRINTING_HOUSE' &&
+                  data.type !== 'TEACHING_ROOM' &&
+                  checkPrivilege('link', 'Add')
               "
               class="btn-table-icon"
               type="text"
@@ -32,6 +35,7 @@
               title="新增子机构"
             ></el-button>
             <el-button
+              v-if="checkPrivilege('link', 'Edit')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-edit"
@@ -39,6 +43,7 @@
               title="修改"
             ></el-button>
             <el-button
+              v-if="checkPrivilege('link', 'Delete')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-delete"
@@ -84,6 +89,7 @@ export default {
   },
   methods: {
     async getList() {
+      if (!this.checkPrivilege("list", "LIST")) return;
       const orgs = await organizationList();
       this.orgs = [
         {

+ 23 - 12
src/modules/base/views/RoleManage.vue

@@ -2,15 +2,16 @@
   <div class="role-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 label="角色名称:">
-          <el-input
-            style="width: 200px;"
-            v-model.trim="filter.name"
-            placeholder="请输入内容"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <!-- <el-form-item label="启用/禁用:" label-width="90px">
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="角色名称:">
+            <el-input
+              style="width: 200px;"
+              v-model.trim="filter.name"
+              placeholder="请输入内容"
+              clearable
+            ></el-input>
+          </el-form-item>
+          <!-- <el-form-item label="启用/禁用:" label-width="90px">
           <el-select
             v-model="filter.enable"
             style="width: 100px;"
@@ -25,14 +26,20 @@
             ></el-option>
           </el-select>
         </el-form-item> -->
+        </template>
         <el-form-item>
-          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            icon="el-icon-search"
+            @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
         <el-button
+          v-if="checkPrivilege('button', 'add')"
           type="primary"
           icon="el-icon-circle-plus-outline"
           @click="toAdd"
@@ -68,6 +75,7 @@
         >
           <template slot-scope="scope">
             <el-button
+              v-if="checkPrivilege('link', 'edit')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-edit"
@@ -75,13 +83,14 @@
               title="编辑"
             ></el-button>
             <el-button
+              v-if="checkPrivilege('link', 'delete')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-delete"
               @click="toDelete(scope.row)"
               title="删除"
             ></el-button>
-            <el-button
+            <!-- <el-button
               class="btn-table-icon"
               type="text"
               :icon="
@@ -91,7 +100,7 @@
               "
               @click="toEnable(scope.row)"
               :title="scope.row.enable ? '禁用' : '启用'"
-            ></el-button>
+            ></el-button> -->
           </template>
         </el-table-column>
       </el-table>
@@ -146,6 +155,8 @@ export default {
   },
   methods: {
     async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
       const datas = {
         ...this.filter,
         pageNumber: this.current,

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

@@ -11,22 +11,28 @@
           ></el-input>
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            icon="el-icon-search"
+            @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
         <el-button
+          v-if="checkPrivilege('button', 'add')"
           type="primary"
           icon="el-icon-circle-plus-outline"
           @click="toAdd"
           >新增学生</el-button
         >
-        <el-button
+        <el-button v-if="checkPrivilege('button', 'import')"
           ><a :href="downloadUrl" :download="dfilename">模板下载</a></el-button
         >
         <upload-button
+          v-if="checkPrivilege('button', 'import')"
           btn-icon="el-icon-upload"
           btn-content="批量导入"
           btn-type="primary"
@@ -54,6 +60,7 @@
         <el-table-column label="操作" align="center" width="120px">
           <template slot-scope="scope">
             <el-button
+              v-if="checkPrivilege('link', 'edit')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-edit"
@@ -61,11 +68,12 @@
               title="编辑"
             ></el-button>
             <el-button
+              v-if="checkPrivilege('link', 'delete')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-delete"
               @click="toDelete(scope.row)"
-              title="禁用"
+              title="删除"
             ></el-button>
           </template>
         </el-table-column>
@@ -120,6 +128,8 @@ export default {
   },
   methods: {
     async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
       const datas = {
         ...this.filter,
         pageNumber: this.current,

+ 50 - 38
src/modules/base/views/TemplateManage.vue

@@ -2,51 +2,58 @@
   <div class="template-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 label="模板名称:">
-          <el-input
-            style="width: 200px;"
-            v-model.trim="filter.name"
-            placeholder="请输入内容"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="创建时间:">
-          <el-date-picker
-            v-model="createTime"
-            type="datetimerange"
-            :picker-options="pickerOptions"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            value-format="timestamp"
-            align="right"
-            unlink-panels
-          >
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="启用/禁用:" label-width="90px">
-          <el-select
-            v-model="filter.enable"
-            style="width: 100px;"
-            placeholder="请选择"
-            clearable
-          >
-            <el-option
-              v-for="(val, key) in ABLE_TYPE"
-              :key="key"
-              :value="key * 1"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="模板名称:">
+            <el-input
+              style="width: 200px;"
+              v-model.trim="filter.name"
+              placeholder="请输入内容"
+              clearable
+            ></el-input>
+          </el-form-item>
+          <el-form-item label="创建时间:">
+            <el-date-picker
+              v-model="createTime"
+              type="datetimerange"
+              :picker-options="pickerOptions"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              value-format="timestamp"
+              align="right"
+              unlink-panels
+            >
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="启用/禁用:" label-width="90px">
+            <el-select
+              v-model="filter.enable"
+              style="width: 100px;"
+              placeholder="请选择"
+              clearable
+            >
+              <el-option
+                v-for="(val, key) in ABLE_TYPE"
+                :key="key"
+                :value="key * 1"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </template>
         <el-form-item>
-          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            icon="el-icon-search"
+            @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
         <el-button
+          v-if="checkPrivilege('button', 'add')"
           type="primary"
           icon="el-icon-circle-plus-outline"
           @click="toAdd"
@@ -97,6 +104,7 @@
         >
           <template slot-scope="scope">
             <el-button
+              v-if="checkPrivilege('link', 'preview')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-circle-right"
@@ -104,6 +112,7 @@
               title="查看"
             ></el-button>
             <el-button
+              v-if="checkPrivilege('link', 'edit')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-edit"
@@ -111,6 +120,7 @@
               title="编辑"
             ></el-button>
             <el-button
+              v-if="checkPrivilege('link', 'enable')"
               class="btn-table-icon"
               type="text"
               :icon="
@@ -206,6 +216,8 @@ export default {
   },
   methods: {
     async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
       const datas = {
         ...this.filter,
         type: this.templateType,

+ 60 - 44
src/modules/base/views/UserManage.vue

@@ -2,63 +2,71 @@
   <div class="user-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 label="用户名:" label-width="75px">
-          <el-input
-            style="width: 142px;"
-            v-model.trim="filter.loginName"
-            placeholder="请输入内容"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="角色:" label-width="55px">
-          <el-select
-            v-model="filter.roleId"
-            style="width: 142px;"
-            placeholder="请选择"
-            filterable
-            clearable
-          >
-            <el-option
-              v-for="item in roles"
-              :key="item.id"
-              :value="item.id"
-              :label="item.name"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="启用/禁用:" label-width="90px">
-          <el-select
-            v-model="filter.enable"
-            style="width: 142px;"
-            placeholder="请选择"
-            clearable
-          >
-            <el-option
-              v-for="(val, key) in ABLE_TYPE"
-              :key="key"
-              :value="key * 1"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="用户名:" label-width="75px">
+            <el-input
+              style="width: 142px;"
+              v-model.trim="filter.loginName"
+              placeholder="请输入内容"
+              clearable
+            ></el-input>
+          </el-form-item>
+          <el-form-item label="角色:" label-width="55px">
+            <el-select
+              v-model="filter.roleId"
+              style="width: 142px;"
+              placeholder="请选择"
+              filterable
+              clearable
+            >
+              <el-option
+                v-for="item in roles"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="启用/禁用:" label-width="90px">
+            <el-select
+              v-model="filter.enable"
+              style="width: 142px;"
+              placeholder="请选择"
+              clearable
+            >
+              <el-option
+                v-for="(val, key) in ABLE_TYPE"
+                :key="key"
+                :value="key * 1"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </template>
 
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            icon="el-icon-search"
+            @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
         <el-button
+          v-if="checkPrivilege('button', 'add')"
           type="primary"
           icon="el-icon-circle-plus-outline"
           @click="toAdd"
           >新增用户</el-button
         >
-        <el-button
+        <el-button v-if="checkPrivilege('button', 'export')"
           ><a :href="downloadUrl" :download="dfilename">模板下载</a></el-button
         >
         <upload-button
+          v-if="checkPrivilege('button', 'export')"
           btn-icon="el-icon-upload"
           btn-content="批量导入"
           btn-type="primary"
@@ -112,6 +120,7 @@
         >
           <template slot-scope="scope">
             <el-button
+              v-if="checkPrivilege('link', 'edit')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-edit"
@@ -119,6 +128,7 @@
               title="编辑"
             ></el-button>
             <el-button
+              v-if="checkPrivilege('link', 'enable')"
               class="btn-table-icon"
               type="text"
               :icon="
@@ -130,6 +140,7 @@
               :title="scope.row.enable ? '禁用' : '启用'"
             ></el-button>
             <el-button
+              v-if="checkPrivilege('link', 'reset')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-circle-lock"
@@ -199,13 +210,18 @@ export default {
   },
   methods: {
     async getRoleList() {
+      if (
+        !this.checkPrivilege("button", "add") &&
+        !this.checkPrivilege("link", "edit")
+      )
+        return;
+
       const data = await userRoleListPage();
       this.roles = data || [];
-      this.roles = this.roles.filter(
-        item => item.type !== "ADMIN" && item.type !== "CUSTOMER"
-      );
+      this.roles = this.roles.filter(item => item.type !== "ADMIN");
     },
     async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
       const datas = {
         ...this.filter,
         pageNumber: this.current,

+ 55 - 35
src/modules/customer/views/CustomerCard.vue

@@ -11,10 +11,16 @@
     </div>
     <div class="part-box part-box-filter part-box-flex">
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
-        <el-form-item label="学校名称:">
-          <school-select v-model="filter.schoolId"></school-select>
-        </el-form-item>
-        <!-- <el-form-item label="试卷编号:">
+        <template
+          v-if="
+            (AUDITED && checkPrivilege('condition', 'reviewCondition')) ||
+              (!AUDITED && checkPrivilege('condition', 'notReviewCondition'))
+          "
+        >
+          <el-form-item label="学校名称:">
+            <school-select v-model="filter.schoolId"></school-select>
+          </el-form-item>
+          <!-- <el-form-item label="试卷编号:">
           <paper-number-select
             ref="PaperNumberSelect"
             v-model="filter.paperNumber"
@@ -30,43 +36,52 @@
             placeholder="请选择"
           ></question-teacher-select>
         </el-form-item> -->
-        <el-form-item label="申请时间:">
-          <el-date-picker
-            v-model="createTime"
-            type="datetimerange"
-            :picker-options="pickerOptions"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            value-format="timestamp"
-            align="right"
-            unlink-panels
-          >
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="完成时间:" v-if="AUDITED">
-          <el-date-picker
-            v-model="finishTime"
-            type="datetimerange"
-            :picker-options="pickerOptions"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            value-format="timestamp"
-            align="right"
-            unlink-panels
-          >
-          </el-date-picker>
-        </el-form-item>
+          <el-form-item label="申请时间:">
+            <el-date-picker
+              v-model="createTime"
+              type="datetimerange"
+              :picker-options="pickerOptions"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              value-format="timestamp"
+              align="right"
+              unlink-panels
+            >
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="完成时间:" v-if="AUDITED">
+            <el-date-picker
+              v-model="finishTime"
+              type="datetimerange"
+              :picker-options="pickerOptions"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              value-format="timestamp"
+              align="right"
+              unlink-panels
+            >
+            </el-date-picker>
+          </el-form-item>
+        </template>
 
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
+          <el-button
+            v-if="
+              (AUDITED && checkPrivilege('button', 'reviewSelect')) ||
+                (!AUDITED && checkPrivilege('button', 'notReviewSelect'))
+            "
+            type="primary"
+            icon="el-icon-search"
+            @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action" v-if="!AUDITED">
         <el-button
+          v-if="checkPrivilege('button', 'notReviewBatchDownload')"
           icon="el-icon-download"
           type="primary"
           :disabled="loading"
@@ -119,7 +134,7 @@
         >
           <template slot-scope="scope">
             <el-button
-              v-if="AUDITED"
+              v-if="AUDITED && checkPrivilege('link', 'reviewPreview')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-circle-right"
@@ -127,7 +142,7 @@
               title="查看详情"
             ></el-button>
             <el-button
-              v-else
+              v-if="!AUDITED && checkPrivilege('link', 'notReviewDesign')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-edit"
@@ -219,6 +234,11 @@ export default {
       this.$ls.remove("cachePageInfo");
     },
     async getList() {
+      const valid =
+        (this.AUDITED && this.checkPrivilege("list", "reviewList")) ||
+        (!this.AUDITED && this.checkPrivilege("list", "notReviewList"));
+      if (!valid) return;
+
       const datas = {
         ...this.filter,
         pageNumber: this.current,

+ 46 - 34
src/modules/exam/views/DataTaskManage.vue

@@ -2,38 +2,44 @@
   <div class="data-task-manage">
     <div class="part-box part-box-filter part-box-flex">
       <el-form ref="FilterForm" label-position="left" label-width="55px" inline>
-        <el-form-item label="状态:">
-          <el-select v-model="filter.status" placeholder="请选择" clearable>
-            <el-option
-              v-for="(val, key) in DATA_TASK_STATUS"
-              :key="key"
-              :value="key"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="类别:">
-          <el-select v-model="filter.type" placeholder="请选择" clearable>
-            <el-option
-              v-for="(val, key) in DATA_TASK_TYPE"
-              :key="key"
-              :value="key"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="数据结果:" label-width="85px">
-          <el-select v-model="filter.result" placeholder="请选择" clearable>
-            <el-option
-              v-for="(val, key) in DATA_TASK_RESULT"
-              :key="key"
-              :value="key"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="状态:">
+            <el-select v-model="filter.status" placeholder="请选择" clearable>
+              <el-option
+                v-for="(val, key) in DATA_TASK_STATUS"
+                :key="key"
+                :value="key"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="类别:">
+            <el-select v-model="filter.type" placeholder="请选择" clearable>
+              <el-option
+                v-for="(val, key) in DATA_TASK_TYPE"
+                :key="key"
+                :value="key"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="数据结果:" label-width="85px">
+            <el-select v-model="filter.result" placeholder="请选择" clearable>
+              <el-option
+                v-for="(val, key) in DATA_TASK_RESULT"
+                :key="key"
+                :value="key"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </template>
         <el-form-item>
-          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            icon="el-icon-search"
+            @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
@@ -86,7 +92,7 @@
         >
           <template slot-scope="scope">
             <el-button
-              v-if="scope.row.hasReportFile"
+              v-if="scope.row.hasReportFile && checkPrivilege('link', 'export')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-circle-share"
@@ -95,7 +101,9 @@
               title="导出日志"
             ></el-button>
             <el-button
-              v-if="scope.row.resetCreatePdf"
+              v-if="
+                scope.row.resetCreatePdf && checkPrivilege('link', 'createPdf')
+              "
               class="btn-table-icon"
               type="text"
               icon="icon icon-modify"
@@ -104,7 +112,9 @@
               title="重新生成PDF"
             ></el-button>
             <el-button
-              v-else
+              v-if="
+                !scope.row.resetCreatePdf && checkPrivilege('link', 'download')
+              "
               class="btn-table-icon"
               type="text"
               icon="icon icon-download-act"
@@ -166,6 +176,8 @@ export default {
   },
   methods: {
     async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
       const datas = {
         ...this.filter,
         pageNumber: this.current,

+ 92 - 79
src/modules/exam/views/ExamTaskManage.vue

@@ -2,91 +2,98 @@
   <div class="exam-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 label="命题状态:">
-          <el-select
-            v-model="filter.status"
-            style="width: 142px;"
-            placeholder="请选择"
-            clearable
-          >
-            <el-option
-              v-for="(val, key) in EXAM_TASK_STATUS"
-              :key="key"
-              :value="key"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="题卡规则:">
-          <card-rule-select
-            ref="CardRuleSelect"
-            v-model.trim="filter.cardRuleId"
-            placeholder="请选择"
-            clearable
-          ></card-rule-select>
-        </el-form-item>
-        <el-form-item label="课程(代码):" label-width="110px">
-          <course-select
-            ref="CourseSelect"
-            v-model.trim="filter.courseCode"
-            placeholder="请选择"
-            clearable
-          ></course-select>
-        </el-form-item>
-        <el-form-item label="命题老师:">
-          <question-teacher-user-select
-            v-model="filter.teacherId"
-            :course-code="filter.courseCode"
-            placeholder="请选择"
-          ></question-teacher-user-select>
-        </el-form-item>
-        <!-- TODO:创建人--查询条件 -->
-        <el-form-item label="试卷编号:">
-          <paper-number-select
-            ref="PaperNumberSelect"
-            v-model="filter.paperNumber"
-            placeholder="请选择"
-            clearable
-          ></paper-number-select>
-        </el-form-item>
-        <el-form-item label="命题时间:">
-          <el-date-picker
-            v-model="createTime"
-            type="datetimerange"
-            :picker-options="pickerOptions"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            value-format="timestamp"
-            align="right"
-            unlink-panels
-          >
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="启用/禁用:" label-width="90px">
-          <el-select
-            v-model="filter.enable"
-            style="width: 142px;"
-            placeholder="请选择"
-            clearable
-          >
-            <el-option
-              v-for="(val, key) in ABLE_TYPE"
-              :key="key"
-              :value="key * 1"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="命题状态:">
+            <el-select
+              v-model="filter.status"
+              style="width: 142px;"
+              placeholder="请选择"
+              clearable
+            >
+              <el-option
+                v-for="(val, key) in EXAM_TASK_STATUS"
+                :key="key"
+                :value="key"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="题卡规则:">
+            <card-rule-select
+              ref="CardRuleSelect"
+              v-model.trim="filter.cardRuleId"
+              placeholder="请选择"
+              clearable
+            ></card-rule-select>
+          </el-form-item>
+          <el-form-item label="课程(代码):" label-width="110px">
+            <course-select
+              ref="CourseSelect"
+              v-model.trim="filter.courseCode"
+              placeholder="请选择"
+              clearable
+            ></course-select>
+          </el-form-item>
+          <el-form-item label="命题老师:">
+            <question-teacher-user-select
+              v-model="filter.teacherId"
+              :course-code="filter.courseCode"
+              placeholder="请选择"
+            ></question-teacher-user-select>
+          </el-form-item>
+          <!-- TODO:创建人--查询条件 -->
+          <el-form-item label="试卷编号:">
+            <paper-number-select
+              ref="PaperNumberSelect"
+              v-model="filter.paperNumber"
+              placeholder="请选择"
+              clearable
+            ></paper-number-select>
+          </el-form-item>
+          <el-form-item label="命题时间:">
+            <el-date-picker
+              v-model="createTime"
+              type="datetimerange"
+              :picker-options="pickerOptions"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              value-format="timestamp"
+              align="right"
+              unlink-panels
+            >
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="启用/禁用:" label-width="90px">
+            <el-select
+              v-model="filter.enable"
+              style="width: 142px;"
+              placeholder="请选择"
+              clearable
+            >
+              <el-option
+                v-for="(val, key) in ABLE_TYPE"
+                :key="key"
+                :value="key * 1"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </template>
 
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            icon="el-icon-search"
+            @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
         <el-button
+          v-if="checkPrivilege('button', 'BatchAdd')"
           icon="el-icon-circle-plus-outline"
           type="warning"
           @click="toBatchAdd"
@@ -94,6 +101,7 @@
           批量新建命题任务
         </el-button>
         <el-button
+          v-if="checkPrivilege('button', 'add')"
           icon="el-icon-circle-plus-outline"
           type="primary"
           @click="toAdd"
@@ -158,6 +166,7 @@
         >
           <template slot-scope="scope">
             <el-button
+              v-if="checkPrivilege('link', 'preview')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-circle-right"
@@ -168,7 +177,8 @@
               v-if="
                 ((scope.row.status === 'READY' && !scope.row.enable) ||
                   scope.row.status === 'NEW') &&
-                  scope.row.createId === curUserId
+                  scope.row.createId === curUserId &&
+                  checkPrivilege('link', 'edit')
               "
               class="btn-table-icon"
               type="text"
@@ -179,7 +189,8 @@
             <el-button
               v-if="
                 scope.row.status !== 'FINISH' &&
-                  scope.row.createId === curUserId
+                  scope.row.createId === curUserId &&
+                  checkPrivilege('link', 'cancel')
               "
               class="btn-table-icon"
               type="text"
@@ -269,6 +280,8 @@ export default {
   methods: {
     ...mapActions("exam", ["updateWaitTaskCount"]),
     async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
       const datas = {
         ...this.filter,
         pageNumber: this.current,

+ 103 - 81
src/modules/exam/views/TaskApplyManage.vue

@@ -2,89 +2,100 @@
   <div class="task-apply-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 label="审核状态:">
-          <el-select
-            v-model="filter.auditStatus"
-            style="width: 142px;"
-            placeholder="请选择"
-            clearable
-          >
-            <el-option
-              v-for="(val, key) in AUDITING_STATUS"
-              :key="key"
-              :value="key"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="审核结果:">
-          <el-select
-            v-model="filter.reviewStatus"
-            style="width: 142px;"
-            placeholder="请选择"
-            clearable
-          >
-            <el-option
-              v-for="(val, key) in AUDITING_RESULT"
-              :key="key"
-              :value="key"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="题卡规则:">
-          <card-rule-select
-            ref="CardRuleSelect"
-            v-model.trim="filter.cardRuleId"
-            placeholder="请选择"
-            clearable
-          ></card-rule-select>
-        </el-form-item>
-        <el-form-item label="课程(代码):" label-width="110px">
-          <course-select
-            ref="CourseSelect"
-            v-model.trim="filter.courseCode"
-            placeholder="请选择"
-            clearable
-          ></course-select>
-        </el-form-item>
-        <el-form-item label="命题老师:">
-          <question-teacher-user-select
-            v-model="filter.teacherId"
-            :course-code="filter.courseCode"
-            placeholder="请选择"
-          ></question-teacher-user-select>
-        </el-form-item>
-        <el-form-item label="试卷编号:">
-          <paper-number-select
-            ref="PaperNumberSelect"
-            v-model="filter.paperNumber"
-            placeholder="请选择"
-            clearable
-          ></paper-number-select>
-        </el-form-item>
-        <el-form-item label="命题时间:">
-          <el-date-picker
-            v-model="createTime"
-            type="datetimerange"
-            :picker-options="pickerOptions"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            value-format="timestamp"
-            align="right"
-            unlink-panels
-          >
-          </el-date-picker>
-        </el-form-item>
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="审核状态:">
+            <el-select
+              v-model="filter.auditStatus"
+              style="width: 142px;"
+              placeholder="请选择"
+              clearable
+            >
+              <el-option
+                v-for="(val, key) in AUDITING_STATUS"
+                :key="key"
+                :value="key"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="审核结果:">
+            <el-select
+              v-model="filter.reviewStatus"
+              style="width: 142px;"
+              placeholder="请选择"
+              clearable
+            >
+              <el-option
+                v-for="(val, key) in AUDITING_RESULT"
+                :key="key"
+                :value="key"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="题卡规则:">
+            <card-rule-select
+              ref="CardRuleSelect"
+              v-model.trim="filter.cardRuleId"
+              placeholder="请选择"
+              clearable
+            ></card-rule-select>
+          </el-form-item>
+          <el-form-item label="课程(代码):" label-width="110px">
+            <course-select
+              ref="CourseSelect"
+              v-model.trim="filter.courseCode"
+              placeholder="请选择"
+              clearable
+            ></course-select>
+          </el-form-item>
+          <el-form-item label="命题老师:">
+            <question-teacher-user-select
+              v-model="filter.teacherId"
+              :course-code="filter.courseCode"
+              placeholder="请选择"
+            ></question-teacher-user-select>
+          </el-form-item>
+          <el-form-item label="试卷编号:">
+            <paper-number-select
+              ref="PaperNumberSelect"
+              v-model="filter.paperNumber"
+              placeholder="请选择"
+              clearable
+            ></paper-number-select>
+          </el-form-item>
+          <el-form-item label="命题时间:">
+            <el-date-picker
+              v-model="createTime"
+              type="datetimerange"
+              :picker-options="pickerOptions"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              value-format="timestamp"
+              align="right"
+              unlink-panels
+            >
+            </el-date-picker>
+          </el-form-item>
+        </template>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            icon="el-icon-search"
+            @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
-        <el-button icon="el-icon-download" type="primary" @click="toAddApply">
+        <el-button
+          v-if="checkPrivilege('button', 'add')"
+          icon="el-icon-download"
+          type="primary"
+          @click="toAddApply"
+        >
           新建命题申请
         </el-button>
       </div>
@@ -143,7 +154,10 @@
         >
           <template slot-scope="scope">
             <el-button
-              v-if="scope.row.auditStatus || scope.row.reviewStatus"
+              v-if="
+                (scope.row.auditStatus || scope.row.reviewStatus) &&
+                  checkPrivilege('link', 'preview')
+              "
               class="btn-table-icon"
               type="text"
               icon="icon icon-circle-right"
@@ -151,7 +165,11 @@
               title="查看详情"
             ></el-button>
             <el-button
-              v-if="!scope.row.auditStatus && !scope.row.reviewStatus"
+              v-if="
+                !scope.row.auditStatus &&
+                  !scope.row.reviewStatus &&
+                  checkPrivilege('link', 'edit')
+              "
               class="btn-table-icon"
               type="text"
               icon="icon icon-edit"
@@ -161,7 +179,8 @@
             <el-button
               v-if="
                 scope.row.auditStatus === 'AUDITED' &&
-                  scope.row.reviewStatus === 'NOT_PASS'
+                  scope.row.reviewStatus === 'NOT_PASS' &&
+                  checkPrivilege('link', 'edit')
               "
               class="btn-table-icon"
               type="text"
@@ -172,7 +191,8 @@
             <el-button
               v-if="
                 scope.row.auditStatus === 'NOT_AUDITED' &&
-                  scope.row.status === 'SUBMIT'
+                  scope.row.status === 'SUBMIT' &&
+                  checkPrivilege('link', 'end')
               "
               class="btn-table-icon"
               type="text"
@@ -277,6 +297,8 @@ export default {
       this.$ls.remove("cachePageInfo");
     },
     async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
       const datas = {
         ...this.filter,
         pageNumber: this.current,

+ 76 - 53
src/modules/exam/views/TaskPaperManage.vue

@@ -2,63 +2,74 @@
   <div class="task-paper-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 label="课程(代码):" label-width="110px">
-          <course-select
-            ref="CourseSelect"
-            v-model.trim="filter.courseCode"
-            placeholder="请选择"
-            clearable
-          ></course-select>
-        </el-form-item>
-        <el-form-item label="试卷编号:">
-          <paper-number-select
-            ref="PaperNumberSelect"
-            v-model="filter.paperNumber"
-            placeholder="请选择"
-            clearable
-          ></paper-number-select>
-        </el-form-item>
-        <el-form-item label="题卡规则:">
-          <card-rule-select
-            v-model="filter.cardRuleId"
-            placeholder="请选择"
-            clearable
-          ></card-rule-select>
-        </el-form-item>
-        <el-form-item label="题卡创建类型:">
-          <el-select v-model="filter.makeMethod" placeholder="请选择" clearable>
-            <el-option
-              v-for="(val, key) in CARD_SOURCE_TYPE"
-              :key="key"
-              :value="key"
-              :label="val"
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="课程(代码):" label-width="110px">
+            <course-select
+              ref="CourseSelect"
+              v-model.trim="filter.courseCode"
+              placeholder="请选择"
+              clearable
+            ></course-select>
+          </el-form-item>
+          <el-form-item label="试卷编号:">
+            <paper-number-select
+              ref="PaperNumberSelect"
+              v-model="filter.paperNumber"
+              placeholder="请选择"
+              clearable
+            ></paper-number-select>
+          </el-form-item>
+          <el-form-item label="题卡规则:">
+            <card-rule-select
+              v-model="filter.cardRuleId"
+              placeholder="请选择"
+              clearable
+            ></card-rule-select>
+          </el-form-item>
+          <el-form-item label="题卡创建类型:">
+            <el-select
+              v-model="filter.makeMethod"
+              placeholder="请选择"
+              clearable
             >
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="入库时间:">
-          <el-date-picker
-            v-model="createTime"
-            type="datetimerange"
-            :picker-options="pickerOptions"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            value-format="timestamp"
-            align="right"
-            unlink-panels
-          >
-          </el-date-picker>
-        </el-form-item>
-        <!-- TODO:申请时间-创建人--查询条件 -->
+              <el-option
+                v-for="(val, key) in CARD_SOURCE_TYPE"
+                :key="key"
+                :value="key"
+                :label="val"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="入库时间:">
+            <el-date-picker
+              v-model="createTime"
+              type="datetimerange"
+              :picker-options="pickerOptions"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              value-format="timestamp"
+              align="right"
+              unlink-panels
+            >
+            </el-date-picker>
+          </el-form-item>
+          <!-- TODO:申请时间-创建人--查询条件 -->
+        </template>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            icon="el-icon-search"
+            @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
-      <div class="part-box-action" v-if="IS_EXAM_TEACHER">
+      <div class="part-box-action">
         <el-button
+          v-if="checkPrivilege('button', 'BatchDownload')"
           icon="el-icon-download"
           type="primary"
           :loading="loading"
@@ -132,6 +143,7 @@
         >
           <template slot-scope="scope">
             <el-button
+              v-if="checkPrivilege('link', 'preview')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-circle-right"
@@ -139,7 +151,7 @@
               title="查看"
             ></el-button>
             <el-button
-              v-if="IS_QUESTION_TEACHER"
+              v-if="checkPrivilege('link', 'edit')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-edit"
@@ -147,7 +159,7 @@
               title="修改"
             ></el-button>
             <el-button
-              v-if="!IS_QUESTION_TEACHER"
+              v-if="checkPrivilege('link', 'enable')"
               class="btn-table-icon"
               type="text"
               :icon="
@@ -159,7 +171,7 @@
               :title="scope.row.enable ? '禁用' : '启用'"
             ></el-button>
             <el-button
-              v-if="!IS_QUESTION_TEACHER"
+              v-if="checkPrivilege('link', 'download')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-download-act"
@@ -167,6 +179,14 @@
               @click="toDownload(scope.row)"
               title="下载"
             ></el-button>
+            <el-button
+              v-if="checkPrivilege('link', 'publish')"
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-download-act"
+              @click="toPublishPrintTask(scope.row)"
+              title="发布印刷任务"
+            ></el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -264,6 +284,8 @@ export default {
       this.$ls.remove("cachePageInfo");
     },
     async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
       const datas = {
         ...this.filter,
         pageNumber: this.current,
@@ -319,6 +341,7 @@ export default {
       this.editType = "PREVIEW";
       this.$refs.ModifyTaskPaper.open();
     },
+    toPublishPrintTask(row) {},
     async toDownload(row) {
       if (this.loading) return;
 

+ 88 - 65
src/modules/exam/views/TaskReviewManage.vue

@@ -11,76 +11,91 @@
     </div>
     <div class="part-box part-box-filter part-box-flex">
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
-        <el-form-item label="题卡规则:">
-          <card-rule-select
-            ref="CardRuleSelect"
-            v-model.trim="filter.cardRuleId"
-            placeholder="请选择"
-            clearable
-          ></card-rule-select>
-        </el-form-item>
-        <el-form-item label="课程(代码):" label-width="110px">
-          <course-select
-            ref="CourseSelect"
-            v-model.trim="filter.courseCode"
-            placeholder="请选择"
-            clearable
-          ></course-select>
-        </el-form-item>
-        <el-form-item label="试卷编号:">
-          <paper-number-select
-            ref="PaperNumberSelect"
-            v-model="filter.paperNumber"
-            placeholder="请选择"
-            clearable
-          ></paper-number-select>
-        </el-form-item>
-        <el-form-item label="命题老师:">
-          <question-teacher-select
-            ref="QuestionTeacherSelect"
-            v-model="filter.userId"
-            :course-code="filter.courseCode"
-            placeholder="请选择"
-          ></question-teacher-select>
-        </el-form-item>
-        <el-form-item label="命题时间:">
-          <el-date-picker
-            v-model="createTime"
-            type="datetimerange"
-            :picker-options="pickerOptions"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            value-format="timestamp"
-            align="right"
-            unlink-panels
-          >
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="审核结果:" v-if="AUDITED">
-          <el-select
-            v-model="filter.reviewStatus"
-            style="width: 142px;"
-            placeholder="请选择"
-            clearable
-          >
-            <el-option
-              v-for="(val, key) in AUDITING_RESULT"
-              :key="key"
-              :value="key"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
+        <template
+          v-if="
+            (AUDITED && checkPrivilege('condition', 'reviewCondition')) ||
+              (!AUDITED && checkPrivilege('condition', 'notReviewCondition'))
+          "
+        >
+          <el-form-item label="题卡规则:">
+            <card-rule-select
+              ref="CardRuleSelect"
+              v-model.trim="filter.cardRuleId"
+              placeholder="请选择"
+              clearable
+            ></card-rule-select>
+          </el-form-item>
+          <el-form-item label="课程(代码):" label-width="110px">
+            <course-select
+              ref="CourseSelect"
+              v-model.trim="filter.courseCode"
+              placeholder="请选择"
+              clearable
+            ></course-select>
+          </el-form-item>
+          <el-form-item label="试卷编号:">
+            <paper-number-select
+              ref="PaperNumberSelect"
+              v-model="filter.paperNumber"
+              placeholder="请选择"
+              clearable
+            ></paper-number-select>
+          </el-form-item>
+          <el-form-item label="命题老师:">
+            <question-teacher-select
+              ref="QuestionTeacherSelect"
+              v-model="filter.userId"
+              :course-code="filter.courseCode"
+              placeholder="请选择"
+            ></question-teacher-select>
+          </el-form-item>
+          <el-form-item label="命题时间:">
+            <el-date-picker
+              v-model="createTime"
+              type="datetimerange"
+              :picker-options="pickerOptions"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              value-format="timestamp"
+              align="right"
+              unlink-panels
+            >
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="审核结果:" v-if="AUDITED">
+            <el-select
+              v-model="filter.reviewStatus"
+              style="width: 142px;"
+              placeholder="请选择"
+              clearable
+            >
+              <el-option
+                v-for="(val, key) in AUDITING_RESULT"
+                :key="key"
+                :value="key"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </template>
 
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
+          <el-button
+            v-if="
+              (AUDITED && checkPrivilege('button', 'reviewSelect')) ||
+                (!AUDITED && checkPrivilege('button', 'notReviewSelect'))
+            "
+            type="primary"
+            icon="el-icon-search"
+            @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action" v-if="!AUDITED">
         <el-button
+          v-if="checkPrivilege('button', 'notReviewExport')"
           icon="el-icon-download"
           type="primary"
           :disabled="loading"
@@ -89,6 +104,7 @@
           导出审核样本
         </el-button>
         <el-button
+          v-if="checkPrivilege('button', 'notReviewBatchNotPass')"
           icon="el-icon-coordinate"
           type="danger"
           @click="toBatchAudit(0)"
@@ -96,6 +112,7 @@
           批量不通过
         </el-button>
         <el-button
+          v-if="checkPrivilege('button', 'notReviewBatchPass')"
           icon="el-icon-coordinate"
           type="primary"
           @click="toBatchAudit(1)"
@@ -166,7 +183,7 @@
         >
           <template slot-scope="scope">
             <el-button
-              v-if="auditStatus === 'AUDITED'"
+              v-if="AUDITED && checkPrivilege('link', 'reviewPreview')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-circle-right"
@@ -175,8 +192,9 @@
             ></el-button>
             <el-button
               v-if="
-                auditStatus === 'NOT_AUDITED' &&
-                  scope.row.createId === curUserId
+                !AUDITED &&
+                  scope.row.createId === curUserId &&
+                  checkPrivilege('link', 'notReviewEdit')
               "
               class="btn-table-icon"
               type="text"
@@ -306,6 +324,11 @@ export default {
   methods: {
     ...mapActions("exam", ["updateWaitTaskCount"]),
     async getList() {
+      const valid =
+        (this.AUDITED && this.checkPrivilege("list", "reviewList")) ||
+        (!this.AUDITED && this.checkPrivilege("list", "notReviewList"));
+      if (!valid) return;
+
       const datas = {
         ...this.filter,
         pageNumber: this.current,

+ 58 - 49
src/modules/print/views/BusinessDataDetail.vue

@@ -2,56 +2,62 @@
   <div class="business-data-detail">
     <div class="part-box part-box-filter part-box-flex">
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
-        <el-form-item label="印刷计划:">
-          <print-plan-select
-            v-model.trim="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-            @change="printPlanChange"
-          ></print-plan-select>
-        </el-form-item>
-        <el-form-item label="课程(代码):" label-width="110px">
-          <course-select
-            v-model.trim="filter.courseCode"
-            :print-plan-id="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-          ></course-select>
-        </el-form-item>
-        <el-form-item label="试卷编号:">
-          <paper-number-select
-            ref="PaperNumberSelect"
-            v-model="filter.paperNumber"
-            :print-plan-id="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-          ></paper-number-select>
-        </el-form-item>
-        <el-form-item label="考点:" label-width="55px">
-          <place-select
-            v-model.trim="filter.examPlace"
-            :print-plan-id="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-          ></place-select>
-        </el-form-item>
-        <el-form-item label="考场:" label-width="55px">
-          <room-select
-            v-model.trim="filter.examRoom"
-            :print-plan-id="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-          ></room-select>
-        </el-form-item>
-        <el-form-item label="考生:" label-width="70px">
-          <el-input
-            v-model="filter.studentParams"
-            placeholder="请输入"
-            clearable
-          ></el-input>
-        </el-form-item>
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="印刷计划:">
+            <print-plan-select
+              v-model.trim="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+              @change="printPlanChange"
+            ></print-plan-select>
+          </el-form-item>
+          <el-form-item label="课程(代码):" label-width="110px">
+            <course-select
+              v-model.trim="filter.courseCode"
+              :print-plan-id="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+            ></course-select>
+          </el-form-item>
+          <el-form-item label="试卷编号:">
+            <paper-number-select
+              ref="PaperNumberSelect"
+              v-model="filter.paperNumber"
+              :print-plan-id="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+            ></paper-number-select>
+          </el-form-item>
+          <el-form-item label="考点:" label-width="55px">
+            <place-select
+              v-model.trim="filter.examPlace"
+              :print-plan-id="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+            ></place-select>
+          </el-form-item>
+          <el-form-item label="考场:" label-width="55px">
+            <room-select
+              v-model.trim="filter.examRoom"
+              :print-plan-id="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+            ></room-select>
+          </el-form-item>
+          <el-form-item label="考生:" label-width="70px">
+            <el-input
+              v-model="filter.studentParams"
+              placeholder="请输入"
+              clearable
+            ></el-input>
+          </el-form-item>
+        </template>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="el-icon-search" @click="search"
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            icon="el-icon-search"
+            @click="search"
             >查询</el-button
           >
         </el-form-item>
@@ -94,6 +100,7 @@
         >
           <template slot-scope="scope">
             <el-button
+              v-if="checkPrivilege('link', 'preview')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-circle-right"
@@ -154,6 +161,8 @@ export default {
   },
   methods: {
     async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
       const datas = {
         ...this.filter,
         pageNumber: this.current,

+ 66 - 50
src/modules/print/views/BusinessDataExport.vue

@@ -2,62 +2,69 @@
   <div class="business-data-export">
     <div class="part-box part-box-filter part-box-flex">
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
-        <el-form-item label="印刷计划:">
-          <print-plan-select
-            v-model.trim="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-            @change="printPlanChange"
-          ></print-plan-select>
-        </el-form-item>
-        <el-form-item label="课程(代码):" label-width="110px">
-          <course-select
-            v-model.trim="filter.courseCode"
-            :print-plan-id="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-          ></course-select>
-        </el-form-item>
-        <el-form-item label="试卷编号:">
-          <paper-number-select
-            ref="PaperNumberSelect"
-            v-model="filter.paperNumber"
-            :print-plan-id="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-          ></paper-number-select>
-        </el-form-item>
-        <el-form-item label="考点:" label-width="55px">
-          <place-select
-            v-model.trim="filter.examPlace"
-            :print-plan-id="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-          ></place-select>
-        </el-form-item>
-        <el-form-item label="考场:" label-width="55px">
-          <room-select
-            v-model.trim="filter.examRoom"
-            :print-plan-id="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-          ></room-select>
-        </el-form-item>
-        <el-form-item label="卷袋号:" label-width="70px">
-          <el-input
-            v-model="filter.packageCode"
-            placeholder="请输入"
-            clearable
-          ></el-input>
-        </el-form-item>
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="印刷计划:">
+            <print-plan-select
+              v-model.trim="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+              @change="printPlanChange"
+            ></print-plan-select>
+          </el-form-item>
+          <el-form-item label="课程(代码):" label-width="110px">
+            <course-select
+              v-model.trim="filter.courseCode"
+              :print-plan-id="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+            ></course-select>
+          </el-form-item>
+          <el-form-item label="试卷编号:">
+            <paper-number-select
+              ref="PaperNumberSelect"
+              v-model="filter.paperNumber"
+              :print-plan-id="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+            ></paper-number-select>
+          </el-form-item>
+          <el-form-item label="考点:" label-width="55px">
+            <place-select
+              v-model.trim="filter.examPlace"
+              :print-plan-id="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+            ></place-select>
+          </el-form-item>
+          <el-form-item label="考场:" label-width="55px">
+            <room-select
+              v-model.trim="filter.examRoom"
+              :print-plan-id="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+            ></room-select>
+          </el-form-item>
+          <el-form-item label="卷袋号:" label-width="70px">
+            <el-input
+              v-model="filter.packageCode"
+              placeholder="请输入"
+              clearable
+            ></el-input>
+          </el-form-item>
+        </template>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="el-icon-search" @click="search"
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            icon="el-icon-search"
+            @click="search"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
         <el-button
+          v-if="checkPrivilege('button', 'TempleteDownload')"
           icon="el-icon-download"
           :loading="loading"
           @click="toDownloadTemplate"
@@ -65,6 +72,7 @@
           考务数据模板下载
         </el-button>
         <el-button
+          v-if="checkPrivilege('button', 'export')"
           icon="el-icon-download"
           type="primary"
           :loading="loading"
@@ -72,7 +80,12 @@
         >
           导出查询结果
         </el-button>
-        <el-button icon="el-icon-upload2" type="warning" @click="toUpload">
+        <el-button
+          v-if="checkPrivilege('button', 'import')"
+          icon="el-icon-upload2"
+          type="warning"
+          @click="toUpload"
+        >
           导入
         </el-button>
       </div>
@@ -109,6 +122,7 @@
         >
           <template slot-scope="scope">
             <el-button
+              v-if="checkPrivilege('link', 'preview')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-circle-right"
@@ -208,6 +222,8 @@ export default {
   },
   methods: {
     async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
       const datas = {
         ...this.filter,
         pageNumber: this.current,

+ 50 - 41
src/modules/print/views/PlanLinkPaper.vue

@@ -2,48 +2,54 @@
   <div class="plan-link-paper">
     <div class="part-box part-box-filter part-box-flex">
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
-        <el-form-item label="关联状态:">
-          <el-select
-            v-model="filter.relateType"
-            style="width: 100px;"
-            placeholder="请选择"
-            clearable
-          >
-            <el-option
-              v-for="(val, key) in RELATE_TYPE"
-              :key="key"
-              :value="key"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="印刷计划:">
-          <print-plan-select
-            v-model.trim="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-            @change="printPlanChange"
-          ></print-plan-select>
-        </el-form-item>
-        <el-form-item label="课程(代码):" label-width="110px">
-          <course-select
-            v-model.trim="filter.courseCode"
-            :print-plan-id="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-          ></course-select>
-        </el-form-item>
-        <el-form-item label="试卷编号:">
-          <paper-number-select
-            ref="PaperNumberSelect"
-            v-model="filter.paperNumber"
-            :print-plan-id="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-          ></paper-number-select>
-        </el-form-item>
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="关联状态:">
+            <el-select
+              v-model="filter.relateType"
+              style="width: 100px;"
+              placeholder="请选择"
+              clearable
+            >
+              <el-option
+                v-for="(val, key) in RELATE_TYPE"
+                :key="key"
+                :value="key"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="印刷计划:">
+            <print-plan-select
+              v-model.trim="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+              @change="printPlanChange"
+            ></print-plan-select>
+          </el-form-item>
+          <el-form-item label="课程(代码):" label-width="110px">
+            <course-select
+              v-model.trim="filter.courseCode"
+              :print-plan-id="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+            ></course-select>
+          </el-form-item>
+          <el-form-item label="试卷编号:">
+            <paper-number-select
+              ref="PaperNumberSelect"
+              v-model="filter.paperNumber"
+              :print-plan-id="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+            ></paper-number-select>
+          </el-form-item>
+        </template>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="el-icon-search" @click="search"
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            icon="el-icon-search"
+            @click="search"
             >查询</el-button
           >
         </el-form-item>
@@ -100,6 +106,7 @@
         >
           <template slot-scope="scope">
             <el-button
+              v-if="checkPrivilege('link', 'edit')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-edit"
@@ -164,6 +171,8 @@ export default {
   },
   methods: {
     async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
       const datas = {
         ...this.filter,
         pageNumber: this.current,

+ 53 - 39
src/modules/print/views/PrintPlanManage.vue

@@ -2,50 +2,57 @@
   <div class="print-plan-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 label="印刷计划:">
-          <print-plan-select
-            v-model.trim="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-          ></print-plan-select>
-        </el-form-item>
-        <el-form-item label="当前状态:">
-          <el-select
-            v-model="filter.status"
-            style="width: 142px;"
-            placeholder="请选择"
-            clearable
-          >
-            <el-option
-              v-for="(val, key) in PRINT_PLAN_STATUS"
-              :key="key"
-              :value="key"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="创建时间:">
-          <el-date-picker
-            v-model="createTime"
-            type="datetimerange"
-            :picker-options="pickerOptions"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            value-format="timestamp"
-            align="right"
-            unlink-panels
-          >
-          </el-date-picker>
-        </el-form-item>
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="印刷计划:">
+            <print-plan-select
+              v-model.trim="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+            ></print-plan-select>
+          </el-form-item>
+          <el-form-item label="当前状态:">
+            <el-select
+              v-model="filter.status"
+              style="width: 142px;"
+              placeholder="请选择"
+              clearable
+            >
+              <el-option
+                v-for="(val, key) in PRINT_PLAN_STATUS"
+                :key="key"
+                :value="key"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="创建时间:">
+            <el-date-picker
+              v-model="createTime"
+              type="datetimerange"
+              :picker-options="pickerOptions"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              value-format="timestamp"
+              align="right"
+              unlink-panels
+            >
+            </el-date-picker>
+          </el-form-item>
+        </template>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="el-icon-search" @click="search"
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            icon="el-icon-search"
+            @click="search"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
         <el-button
+          v-if="checkPrivilege('button', 'add')"
           icon="el-icon-circle-plus-outline"
           type="primary"
           @click="toAdd"
@@ -100,6 +107,7 @@
         >
           <template slot-scope="scope">
             <el-button
+              v-if="checkPrivilege('link', 'preview')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-circle-right"
@@ -113,7 +121,9 @@
               @click="toEdit(scope.row)"
               title="修改"
               v-if="
-                scope.row.createId === curUserId && scope.row.status === 'NEW'
+                scope.row.createId === curUserId &&
+                  scope.row.status === 'NEW' &&
+                  checkPrivilege('link', 'edit')
               "
             ></el-button>
             <el-button
@@ -123,7 +133,9 @@
               @click="toDelete(scope.row)"
               title="删除"
               v-if="
-                scope.row.createId === curUserId && scope.row.status === 'NEW'
+                scope.row.createId === curUserId &&
+                  scope.row.status === 'NEW' &&
+                  checkPrivilege('link', 'delete')
               "
             ></el-button>
           </template>
@@ -187,6 +199,8 @@ export default {
   },
   methods: {
     async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
       const datas = {
         ...this.filter,
         pageNumber: this.current,

+ 101 - 87
src/modules/print/views/PrintTaskManage.vue

@@ -2,98 +2,105 @@
   <div class="print-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 label="印刷计划:">
-          <print-plan-select
-            v-model.trim="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-            @change="printPlanChange"
-          ></print-plan-select>
-        </el-form-item>
-        <el-form-item label="印刷状态:">
-          <el-select
-            v-model="filter.status"
-            style="width: 100px;"
-            placeholder="请选择"
-            clearable
-          >
-            <el-option
-              v-for="(val, key) in PRINT_TASK_STATUS"
-              :key="key"
-              :value="key"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="课程(代码):" label-width="110px">
-          <course-select
-            v-model.trim="filter.courseCode"
-            :print-plan-id="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-          ></course-select>
-        </el-form-item>
-        <el-form-item label="试卷编号:">
-          <paper-number-select
-            ref="PaperNumberSelect"
-            v-model="filter.paperNumber"
-            :print-plan-id="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-          ></paper-number-select>
-        </el-form-item>
-        <el-form-item label="考点:" label-width="55px">
-          <place-select
-            v-model.trim="filter.examPlace"
-            :print-plan-id="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-          ></place-select>
-        </el-form-item>
-        <el-form-item label="考场:" label-width="55px">
-          <room-select
-            v-model.trim="filter.examRoom"
-            :print-plan-id="filter.printPlanId"
-            placeholder="请选择"
-            clearable
-          ></room-select>
-        </el-form-item>
-        <el-form-item label="考试日期:">
-          <el-date-picker
-            v-model="createTime"
-            type="datetimerange"
-            :picker-options="pickerOptions"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            value-format="timestamp"
-            align="right"
-            unlink-panels
-          >
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="打印时间:">
-          <el-date-picker
-            v-model="printTime"
-            type="datetimerange"
-            :picker-options="pickerOptions"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            value-format="timestamp"
-            align="right"
-            unlink-panels
-          >
-          </el-date-picker>
-        </el-form-item>
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="印刷计划:">
+            <print-plan-select
+              v-model.trim="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+              @change="printPlanChange"
+            ></print-plan-select>
+          </el-form-item>
+          <el-form-item label="印刷状态:">
+            <el-select
+              v-model="filter.status"
+              style="width: 100px;"
+              placeholder="请选择"
+              clearable
+            >
+              <el-option
+                v-for="(val, key) in PRINT_TASK_STATUS"
+                :key="key"
+                :value="key"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="课程(代码):" label-width="110px">
+            <course-select
+              v-model.trim="filter.courseCode"
+              :print-plan-id="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+            ></course-select>
+          </el-form-item>
+          <el-form-item label="试卷编号:">
+            <paper-number-select
+              ref="PaperNumberSelect"
+              v-model="filter.paperNumber"
+              :print-plan-id="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+            ></paper-number-select>
+          </el-form-item>
+          <el-form-item label="考点:" label-width="55px">
+            <place-select
+              v-model.trim="filter.examPlace"
+              :print-plan-id="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+            ></place-select>
+          </el-form-item>
+          <el-form-item label="考场:" label-width="55px">
+            <room-select
+              v-model.trim="filter.examRoom"
+              :print-plan-id="filter.printPlanId"
+              placeholder="请选择"
+              clearable
+            ></room-select>
+          </el-form-item>
+          <el-form-item label="考试日期:">
+            <el-date-picker
+              v-model="createTime"
+              type="datetimerange"
+              :picker-options="pickerOptions"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              value-format="timestamp"
+              align="right"
+              unlink-panels
+            >
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="打印时间:">
+            <el-date-picker
+              v-model="printTime"
+              type="datetimerange"
+              :picker-options="pickerOptions"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              value-format="timestamp"
+              align="right"
+              unlink-panels
+            >
+            </el-date-picker>
+          </el-form-item>
+        </template>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="el-icon-search" @click="search"
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            icon="el-icon-search"
+            @click="search"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
         <el-button
+          v-if="checkPrivilege('button', 'BatchDownload')"
           icon="el-icon-download"
           type="primary"
           :disabled="loading"
@@ -222,6 +229,7 @@
         >
           <template slot-scope="scope">
             <el-button
+              v-if="checkPrivilege('link', 'download')"
               class="btn-table-icon"
               type="text"
               icon="icon icon-download-act"
@@ -229,7 +237,9 @@
               title="查看pdf"
             ></el-button>
             <el-button
-              v-if="scope.row.status === 'READY'"
+              v-if="
+                scope.row.status === 'READY' && checkPrivilege('link', 'submit')
+              "
               class="btn-table-icon"
               type="text"
               icon="icon icon-circle-share"
@@ -245,7 +255,9 @@
               title="重新提交"
             ></el-button> -->
             <el-button
-              v-if="scope.row.status === 'WAITING'"
+              v-if="
+                scope.row.status === 'WAITING' && checkPrivilege('link', 'end')
+              "
               class="btn-table-icon"
               type="text"
               icon="icon icon-close-act"
@@ -337,6 +349,8 @@ export default {
   },
   methods: {
     async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
       const datas = {
         ...this.filter,
         pageNumber: this.current,

+ 4 - 2
src/views/Home.vue

@@ -268,12 +268,14 @@ export default {
         pageSetTypes.forEach((type, index) => {
           if (item[type] && item[type].length) {
             item[type].forEach(elem => {
-              privilegeMap[item.url].push(`${type}_${elem.url}`.toLowerCase());
+              privilegeMap[item.url].push(
+                `${elem.type}_${elem.url}`.toLowerCase()
+              );
             });
           }
         });
       });
-      this.$store.dispatch("setPrivilegeMap", privilegeMap);
+      this.$store.commit("setPrivilegeMap", privilegeMap);
     },
     menusToTree(menus) {
       let navTree = deepCopy(localNavs);