소스 검색

数据权限

zhangjie 2 년 전
부모
커밋
9c7cd4646d

+ 11 - 1
src/assets/styles/pages.scss

@@ -409,9 +409,19 @@
 // privilege-set
 .privilege-set {
   overflow: auto;
+  .table {
+    td,
+    th {
+      padding: 8px 10px;
+    }
+
+    th:nth-of-type(4),
+    td:nth-of-type(4) {
+      text-align: center;
+    }
+  }
   .cell-check-list {
     text-align: left;
-    padding-left: 20px;
   }
 }
 // organization-manage

+ 6 - 0
src/constants/enumerate.js

@@ -69,6 +69,12 @@ export const SMS_TYPE = {
   SCHOOL_ADMIN: "管理员",
   EXAM_TEACHER: "考务老师"
 };
+export const DATA_PRIVILEGE_TYPE = {
+  SELF: "仅本人数据权限",
+  SELF_ORG: "本部门数据权限",
+  SELF_ORG_BELOW: "本部门及下级部门数据权限",
+  ALL: "全部数据权限"
+};
 
 // 通用题卡规则id
 export const COMMON_CARD_RULE_ID = "-1";

+ 14 - 5
src/modules/admin/components/ModifySystemRole.vue

@@ -100,11 +100,13 @@ export default {
       }
     },
     async visibleChange() {
-      let privilegeIds = [];
+      let privilegeIds = [],
+        datePermissionInfo = [];
       if (this.instance.id) {
         this.modalForm = this.$objAssign(initModalForm, this.instance);
-        privilegeIds = await roleBoundPrivileges(this.instance.id);
-        privilegeIds = privilegeIds || [];
+        const data = await roleBoundPrivileges(this.instance.id);
+        privilegeIds = data.privilegeIds || [];
+        datePermissionInfo = data.datePermissionInfo || [];
         this.modalForm.privilegeIds = privilegeIds;
       } else {
         this.modalForm = { ...initModalForm };
@@ -112,7 +114,10 @@ export default {
       this.$nextTick(() => {
         this.$refs.modalFormComp.clearValidate();
         this.$refs.PrivilegeSet &&
-          this.$refs.PrivilegeSet.buildTableData(privilegeIds);
+          this.$refs.PrivilegeSet.buildTableData(
+            privilegeIds,
+            datePermissionInfo
+          );
       });
     },
     cancel() {
@@ -125,7 +130,10 @@ export default {
       const valid = await this.$refs.modalFormComp.validate().catch(() => {});
       if (!valid) return;
 
-      const privilegeIds = this.$refs.PrivilegeSet.getSelectedPrivilegeIds();
+      const {
+        privilegeIds,
+        datePermissionInfo
+      } = this.$refs.PrivilegeSet.getSelectedPrivileges();
       if (!privilegeIds.length) {
         this.$emit("请设置角色权限!");
         return;
@@ -135,6 +143,7 @@ export default {
       this.isSubmit = true;
       const datas = { ...this.modalForm };
       datas.privilegeIds = privilegeIds;
+      datas.datePermissionInfo = datePermissionInfo;
       const data = await updateRole(datas).catch(() => {});
       this.isSubmit = false;
       if (!data) return;

+ 12 - 3
src/modules/admin/components/school/SchoolSetMenu.vue

@@ -35,6 +35,7 @@ export default {
     return {
       menus: [],
       privilegeIds: [],
+      datePermissionInfo: [],
       loading: false
     };
   },
@@ -46,7 +47,10 @@ export default {
       await this.getPrivileges();
       await this.getSchoolMenuInfo();
       this.$nextTick(() => {
-        this.$refs.PrivilegeSet.buildTableData(this.privilegeIds);
+        this.$refs.PrivilegeSet.buildTableData(
+          this.privilegeIds,
+          this.datePermissionInfo
+        );
       });
     },
     async getPrivileges() {
@@ -64,14 +68,19 @@ export default {
     async getSchoolMenuInfo() {
       const data = await schoolSetMenuInfo(this.school.id);
       this.privilegeIds = data.privilegeIdList || [];
+      this.datePermissionInfo = data.datePermissionInfo || [];
     },
     async confirm() {
       if (this.loading) return;
       this.loading = true;
-      const privilegeIds = this.$refs.PrivilegeSet.getSelectedPrivilegeIds();
+      const {
+        privilegeIds,
+        datePermissionInfo
+      } = this.$refs.PrivilegeSet.getSelectedPrivileges();
       const res = await schoolSetMenuUpdate({
         schoolId: this.school.id,
-        privilegeIds: privilegeIds
+        privilegeIds,
+        datePermissionInfo
       }).catch(() => {});
       this.loading = false;
       if (!res) return;

+ 8 - 3
src/modules/admin/views/SchoolMenuManage.vue

@@ -112,7 +112,8 @@ export default {
       this.modalForm.pdfSize = data.pdfSize || [...this.sysPdfSize];
       this.modalForm.accountSmsVerify = data.accountSmsVerify;
       const privilegeIds = data.privilegeIdList || [];
-      this.$refs.PrivilegeSet.buildTableData(privilegeIds);
+      const datePermissionInfo = data.datePermissionInfo || [];
+      this.$refs.PrivilegeSet.buildTableData(privilegeIds, datePermissionInfo);
     },
     async save() {
       if (!this.schoolId) {
@@ -126,10 +127,14 @@ export default {
       if (this.loading) return;
 
       this.loading = true;
-      const privilegeIds = this.$refs.PrivilegeSet.getSelectedPrivilegeIds();
+      const {
+        privilegeIds,
+        datePermissionInfo
+      } = this.$refs.PrivilegeSet.getSelectedPrivileges();
       const res = await updateSchoolMenu({
         schoolId: this.schoolId,
-        privilegeIds: privilegeIds,
+        privilegeIds,
+        datePermissionInfo,
         ...this.modalForm
       }).catch(() => {});
       this.loading = false;

+ 41 - 24
src/modules/base/components/ModifyRole.vue

@@ -13,7 +13,7 @@
       ref="modalFormComp"
       :model="modalForm"
       :rules="rules"
-      label-position="top"
+      label-width="90px"
     >
       <el-form-item prop="name" label="角色名称:">
         <el-input
@@ -26,12 +26,19 @@
       <el-form-item prop="interpret" label="角色描述:">
         <el-input
           v-model.trim="modalForm.interpret"
+          type="textarea"
           placeholder="建议不超过100个字"
+          resize="none"
           clearable
         ></el-input>
       </el-form-item>
-      <el-form-item prop="dataPrivilege" label="数据权限:">
-        <el-select v-model="modalForm.dataPrivilege" placeholder="请选择">
+      <el-form-item prop="datePermissionType" label="数据权限:">
+        <el-select
+          v-model="modalForm.datePermissionType"
+          placeholder="请选择"
+          style="width:282px;"
+          @change="datePermissionTypeChange"
+        >
           <el-option
             v-for="(val, key) in DATA_PRIVILEGE_TYPE"
             :key="key"
@@ -40,7 +47,7 @@
           ></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="角色权限:" required></el-form-item>
+      <el-form-item label="功能权限:" required></el-form-item>
     </el-form>
     <privilege-set
       v-if="menus && menus.length"
@@ -57,6 +64,7 @@
 </template>
 
 <script>
+import { DATA_PRIVILEGE_TYPE } from "../../../constants/enumerate";
 import { updateRole, privilegeList, roleBoundPrivileges } from "../api";
 import PrivilegeSet from "./PrivilegeSet";
 // import navs from "./privilege/navs.json";
@@ -65,7 +73,7 @@ const initModalForm = {
   id: null,
   name: "",
   interpret: "",
-  dataPrivilege: "SELF",
+  datePermissionType: "SELF",
   privilegeIds: []
 };
 
@@ -94,12 +102,7 @@ export default {
       isSubmit: false,
       menus: [],
       modalForm: {},
-      DATA_PRIVILEGE_TYPE: {
-        SELF: "仅本人数据权限",
-        SELF_ORG: "本部门数据权限",
-        SELF_ORG_BELOW: "本部门及下级部门数据权限",
-        ALL: "全部数据权限"
-      },
+      DATA_PRIVILEGE_TYPE,
       rules: {
         name: [
           {
@@ -109,13 +112,13 @@ export default {
             trigger: "change"
           }
         ],
-        dataPrivilege: [
-          {
-            required: true,
-            message: "请选择数据权限",
-            trigger: "change"
-          }
-        ],
+        // datePermissionType: [
+        //   {
+        //     required: true,
+        //     message: "请选择数据权限",
+        //     trigger: "change"
+        //   }
+        // ],
         interpret: [
           {
             required: false,
@@ -143,18 +146,23 @@ export default {
           });
     },
     async visibleChange() {
-      let privilegeIds = [];
+      let privilegeIds = [],
+        datePermissionInfo = [];
       if (this.instance.id) {
         this.modalForm = this.$objAssign(initModalForm, this.instance);
-        privilegeIds = await roleBoundPrivileges(this.instance.id);
-        privilegeIds = privilegeIds || [];
+        const data = await roleBoundPrivileges(this.instance.id);
+        privilegeIds = data.privilegeIds || [];
+        datePermissionInfo = data.datePermissionInfo || [];
         this.modalForm.privilegeIds = privilegeIds;
       } else {
         this.modalForm = { ...initModalForm };
       }
       this.$nextTick(() => {
         this.$refs.modalFormComp.clearValidate();
-        this.$refs.PrivilegeSet.buildTableData(privilegeIds);
+        this.$refs.PrivilegeSet.buildTableData(
+          privilegeIds,
+          datePermissionInfo
+        );
       });
     },
     cancel() {
@@ -163,13 +171,21 @@ export default {
     open() {
       this.modalIsShow = true;
     },
+    datePermissionTypeChange() {
+      this.$refs.PrivilegeSet.resetdatePermissionType(
+        this.modalForm.datePermissionType
+      );
+    },
     async submit() {
       const valid = await this.$refs.modalFormComp.validate().catch(() => {});
       if (!valid) return;
 
-      const privilegeIds = this.$refs.PrivilegeSet.getSelectedPrivilegeIds();
+      const {
+        privilegeIds,
+        datePermissionInfo
+      } = this.$refs.PrivilegeSet.getSelectedPrivileges();
       if (!privilegeIds.length) {
-        this.$emit("请设置角色权限!");
+        this.$emit("请设置功能权限!");
         return;
       }
 
@@ -177,6 +193,7 @@ export default {
       this.isSubmit = true;
       const datas = { ...this.modalForm };
       datas.privilegeIds = privilegeIds;
+      datas.datePermissionInfo = datePermissionInfo;
       const data = await updateRole(datas).catch(() => {});
       this.isSubmit = false;
       if (!data) return;

+ 47 - 10
src/modules/base/components/PrivilegeSet.vue

@@ -2,8 +2,11 @@
   <div class="privilege-set">
     <table class="table">
       <colgroup>
-        <col width="100" />
-        <col width="100" />
+        <col width="120" />
+        <col width="120" />
+        <col width="140" />
+        <col width="60" />
+        <col width="210" />
       </colgroup>
       <tbody>
         <tr>
@@ -18,6 +21,20 @@
                 @change="enable => pageSelectChange(row, enable)"
               ></el-checkbox>
             </div>
+            <div
+              v-else-if="
+                row.isPage && col && col.type === 'page-data-permission'
+              "
+            >
+              <el-select v-model="row.datePermissionType" placeholder="请选择">
+                <el-option
+                  v-for="(val, key) in DATA_PRIVILEGE_TYPE"
+                  :key="key"
+                  :value="key"
+                  :label="val"
+                ></el-option>
+              </el-select>
+            </div>
             <div v-else-if="col && col.type">
               <div
                 class="cell-check-list"
@@ -40,6 +57,8 @@
 </template>
 
 <script>
+import { DATA_PRIVILEGE_TYPE } from "../../../constants/enumerate";
+
 export default {
   name: "privilege-set",
   props: {
@@ -54,7 +73,8 @@ export default {
     return {
       maxDeep: 0,
       tableData: [],
-      tableHead: []
+      tableHead: [],
+      DATA_PRIVILEGE_TYPE
     };
   },
   created() {
@@ -89,6 +109,7 @@ export default {
       headers = [
         ...headers,
         "页面",
+        "数据权限",
         "查询条件",
         "功能按钮",
         "列表展示",
@@ -96,10 +117,15 @@ export default {
       ];
       return headers;
     },
-    buildTableData(privilegeIds = []) {
+    buildTableData(privilegeIds = [], datePermissionInfo = []) {
       let tableData = [];
-      let tableColumnCount = this.maxDeep + 5;
+      let tableColumnCount = this.maxDeep + 6;
       const pageSetTypes = ["conditions", "buttons", "lists", "links"];
+
+      let datePermissionMap = {};
+      datePermissionInfo.forEach(item => {
+        datePermissionMap[item.id] = item.datePermissionType;
+      });
       const buildData = (navs, deep) => {
         ++deep;
         navs.forEach(nav => {
@@ -108,6 +134,9 @@ export default {
           columns[this.maxDeep] = {
             type: "page-checkbox"
           };
+          columns[this.maxDeep + 1] = {
+            type: "page-data-permission"
+          };
 
           const isPage = pageSetTypes.some(
             type => nav[type] && nav[type].length
@@ -121,7 +150,7 @@ export default {
                     data.enable = privilegeIds.includes(elem.id);
                     return data;
                   });
-              columns[this.maxDeep + index + 1] = { type, datas };
+              columns[this.maxDeep + index + 2] = { type, datas };
             });
           }
 
@@ -129,6 +158,7 @@ export default {
             id: nav.id,
             name: nav.name,
             enable: privilegeIds.includes(nav.id),
+            datePermissionType: datePermissionMap[nav.id] || "SELF",
             type: nav.type,
             parentId: nav.parentId,
             isPage,
@@ -143,22 +173,29 @@ export default {
 
       this.tableData = tableData;
     },
-    getSelectedPrivilegeIds() {
+    resetdatePermissionType(val) {
+      this.tableData.forEach(item => (item.datePermissionType = val));
+    },
+    getSelectedPrivileges() {
       let privilegeIds = [];
+      let datePermissionInfo = [];
       this.tableData
         .filter(row => row.enable)
         .forEach(row => {
           privilegeIds.push(row.id);
+          datePermissionInfo.push({
+            id: row.id,
+            datePermissionType: row.datePermissionType
+          });
           row.columns.forEach(column => {
-            if (column.type === "page" || column.type === "page-checkbox")
-              return;
+            if (!column.datas || !column.datas.length) return;
 
             column.datas.forEach(item => {
               if (item.enable) privilegeIds.push(item.id);
             });
           });
         });
-      return privilegeIds;
+      return { privilegeIds, datePermissionInfo };
     },
     // set change
     pageSelectChange(row, enable) {

+ 22 - 14
src/modules/base/views/PrintPlanPushManage.vue

@@ -63,24 +63,29 @@
         ></el-table-column>
         <el-table-column
           prop="createName"
-          label="推送人"
-          min-width="100"
+          label="课程数"
+          width="100"
         ></el-table-column>
-        <el-table-column prop="createTime" label="推送时间" width="170">
-          <span slot-scope="scope">{{
-            scope.row.createTime | timestampFilter
-          }}</span>
-        </el-table-column>
-        <el-table-column prop="thirdRelateId" label="考试ID" min-width="120">
+        <el-table-column
+          prop="createName"
+          label="推送成功课程数"
+          width="140"
+        ></el-table-column>
+        <el-table-column
+          prop="createName"
+          label="推送失败课程数"
+          width="140"
+        ></el-table-column>
+        <el-table-column
+          prop="createName"
+          label="未推送课程数"
+          width="140"
+        ></el-table-column>
+        <el-table-column prop="thirdRelateId" label="考试ID" min-width="100">
           <span slot-scope="scope">{{
             scope.row.thirdRelateId | defaultFieldFilter
           }}</span>
         </el-table-column>
-        <el-table-column prop="syncStatus" label="同步结果" width="120">
-          <span slot-scope="scope">{{
-            scope.row.syncStatus | syncPrintStatusFilter
-          }}</span>
-        </el-table-column>
         <el-table-column
           class-name="action-column"
           label="操作"
@@ -115,7 +120,10 @@
       <p>说明:</p>
       <p>1、印刷计划下的印刷任务,印刷完成后才允许推送;</p>
       <p>
-        2、同步状态说明:5/0,前面表示计划下未推送的命题任务数量,后面表示已推送的命题任务数量;
+        2、未开始阅卷工作前,可以重复推送,云阅卷会以最后一次推送的数据为准;
+      </p>
+      <p>
+        3、课程数:指该计划下包含的课程总数量;推送成功课程数:成功推送到云阅卷系统课程数量;推送失败课程数:未成功推送到云阅卷系统课程数量;未推送课程数:未推送到云阅卷系统课程数量;
       </p>
     </div>