zhangjie 2 ani în urmă
părinte
comite
0e0b3e5e02

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

@@ -103,7 +103,10 @@
 .property-tree {
   .el-tree-node__content {
     padding: 5px 10px !important;
-    height: 36px;
+    height: auto;
+    min-height: 36px;
+    word-wrap: break-word;
+    white-space: normal;
   }
   .el-tree-node.is-current > .el-tree-node__content {
     border-radius: 5px;

+ 27 - 23
src/modules/portal/views/Login.vue

@@ -81,35 +81,39 @@ export default {
             trigger: "change",
           },
         ],
-        // password: [
-        //   {
-        //     validator: (rule, value, callback) => {
-        //       if (value && /^([0-9]+|[a-z]+|[A-Z]+)$/.test(value)) {
-        //         callback(
-        //           new Error("密码只能大写字母、小写字母、数字至少两种组成")
-        //         );
-        //       } else {
-        //         callback();
-        //       }
-        //     },
-        //     trigger: "change",
-        //   },
-        //   {
-        //     required: true,
-        //     min: 8,
-        //     max: 16,
-        //     message: "密码只能8-16个字符",
-        //     trigger: "change",
-        //   },
-        // ],
         password: [
+          {
+            validator: (rule, value, callback) => {
+              if (
+                value &&
+                (/^([0-9]+|[a-z]+|[A-Z]+)$/.test(value) ||
+                  !/^[a-zA-Z0-9_]+$/.test(value))
+              ) {
+                callback(
+                  new Error("密码只能大写字母、小写字母、数字至少两种组成")
+                );
+              } else {
+                callback();
+              }
+            },
+            trigger: "change",
+          },
           {
             required: true,
-            pattern: /^[a-zA-Z0-9_]{1,20}$/,
-            message: "密码只能由数字、字母和下划线组成,长度1-20个字符",
+            min: 8,
+            max: 16,
+            message: "密码只能8-16个字符",
             trigger: "change",
           },
         ],
+        // password: [
+        //   {
+        //     required: true,
+        //     pattern: /^[a-zA-Z0-9_]{1,20}$/,
+        //     message: "密码只能由数字、字母和下划线组成,长度1-20个字符",
+        //     trigger: "change",
+        //   },
+        // ],
         smsCode: [
           {
             required: true,

+ 7 - 4
src/modules/portal/views/home/Home.vue

@@ -40,7 +40,7 @@
     <!-- 添加用户信息弹出框 -->
     <el-dialog
       title="个人信息"
-      width="460px"
+      width="620px"
       :visible.sync="userDialog"
       :modal="false"
       append-to-body
@@ -63,7 +63,6 @@
         <el-tab-pane label="修改密码" name="second">
           <el-form
             ref="passForm"
-            :inline="true"
             inline-message
             class="form-tight"
             :model="passForm"
@@ -101,7 +100,7 @@
     <!-- 修改密码 -->
     <el-dialog
       title="修改密码"
-      width="460px"
+      width="560px"
       :lock-scroll="true"
       :close-on-click-modal="false"
       :close-on-press-escape="false"
@@ -199,7 +198,11 @@ export default {
     const pwdRule = [
       {
         validator: (rule, value, callback) => {
-          if (value && /^([0-9]+|[a-z]+|[A-Z]+)$/.test(value)) {
+          if (
+            value &&
+            (/^([0-9]+|[a-z]+|[A-Z]+)$/.test(value) ||
+              !/^[a-zA-Z0-9_]+$/.test(value))
+          ) {
             callback(new Error("密码只能大写字母、小写字母、数字至少两种组成"));
           } else {
             callback();

+ 5 - 5
src/modules/questions/views/CheckDuplicateInfo.vue

@@ -75,9 +75,9 @@ export default {
   },
   //钩子函数
   created() {
-    this.from = this.$route.params.from;
+    this.from = this.$route.query.from;
     if ("question" == this.from) {
-      this.curQuestionId = this.$route.params.quesId;
+      this.curQuestionId = this.$route.query.quesId;
       this.queryData();
     } else if ("list" == this.from) {
       this.$http
@@ -97,9 +97,9 @@ export default {
           }
         });
     } else if ("paper" == this.from) {
-      this.basePaperId = this.$route.params.basePaperId;
-      if (this.$route.params.quesId) {
-        this.curQuestionId = this.$route.params.quesId;
+      this.basePaperId = this.$route.query.basePaperId;
+      if (this.$route.query.quesId) {
+        this.curQuestionId = this.$route.query.quesId;
         this.queryData();
       } else {
         this.$http

+ 2 - 2
src/modules/questions/views/CheckDuplicateList.vue

@@ -310,7 +310,7 @@ export default {
     dispose() {
       this.$router.push({
         name: "check_duplicate_info",
-        params: {
+        query: {
           from: "list",
         },
       });
@@ -435,7 +435,7 @@ export default {
     info(row) {
       this.$router.push({
         name: "check_duplicate_info",
-        params: {
+        query: {
           quesId: row.id,
           from: "question",
         },

+ 3 - 12
src/modules/questions/views/CourseProperty.vue

@@ -14,11 +14,8 @@
           <el-select
             v-model="formSearch.courseId"
             filterable
-            :remote-method="getCourses"
-            remote
             clearable
             placeholder="请选择"
-            @focus="(e) => getCourses(e.target.value)"
           >
             <el-option
               v-for="item in courseInfoSelect"
@@ -190,11 +187,8 @@
             v-model="coursePropertyForm.courseId"
             class="dialog-input-width"
             filterable
-            :remote-method="getCourses"
-            remote
             clearable
             placeholder="请选择课程"
-            @focus="(e) => getCourses(e.target.value)"
           >
             <el-option
               v-for="item in courseInfoSelect"
@@ -379,6 +373,7 @@ export default {
       key: this.user.key,
       token: this.user.token,
     };
+    this.getCourses();
   },
 
   methods: {
@@ -671,15 +666,11 @@ export default {
       });
     },
     //查询所有课程
-    getCourses(query) {
-      query = query.trim();
-      if (!query) return;
-      this.courseLoading = true;
+    getCourses() {
       this.$http
-        .get(QUESTION_API + "/course/query?name=" + query + "&enable=true")
+        .get(QUESTION_API + "/course/query?name=&enable=true")
         .then((response) => {
           this.courseList = response.data;
-          this.courseLoading = false;
         });
     },
     removeItem() {

+ 2 - 2
src/modules/questions/views/EditPaper.vue

@@ -1369,7 +1369,7 @@ export default {
     checkDuplicate() {
       this.$router.push({
         name: "check_duplicate_info",
-        params: {
+        query: {
           basePaperId: this.paper.id,
           from: "paper",
         },
@@ -1378,7 +1378,7 @@ export default {
     checkDuplicateQuestion(questionId) {
       this.$router.push({
         name: "check_duplicate_info",
-        params: {
+        query: {
           quesId: questionId,
           basePaperId: this.paper.id,
           from: "paper",

+ 2 - 2
src/modules/questions/views/EditPaperPendingTrial.vue

@@ -1427,7 +1427,7 @@ export default {
     checkDuplicate() {
       this.$router.push({
         name: "check_duplicate_info",
-        params: {
+        query: {
           basePaperId: this.paper.id,
           from: "paper",
         },
@@ -1436,7 +1436,7 @@ export default {
     checkDuplicateQuestion(questionId) {
       this.$router.push({
         name: "check_duplicate_info",
-        params: {
+        query: {
           quesId: questionId,
           basePaperId: this.paper.id,
           from: "paper",

+ 48 - 17
src/modules/questions/views/InsertBluePaperStructureInfo.vue

@@ -100,11 +100,13 @@
           <template slot-scope="scope">
             <div
               class="el_table_inner_left"
-              @mouseenter="showActiveIn(1, 1, scope.row)"
+              @mouseenter="showActiveIn(1, 1, scope.row, scope.$index)"
               @mouseleave="showActiveOff"
             >
               <el-tooltip placement="top">
-                <div slot="content">{{ message }}</div>
+                <div slot="content">
+                  {{ coursePropertyQuestionCountMap[`${scope.$index}_1_1`] }}
+                </div>
                 <el-input
                   v-model="scope.row.publicSimple"
                   class="input_width_ss"
@@ -121,11 +123,13 @@
           <template slot-scope="scope">
             <div
               class="el_table_inner_left"
-              @mouseenter="showActiveIn(1, 2, scope.row)"
+              @mouseenter="showActiveIn(1, 2, scope.row, scope.$index)"
               @mouseleave="showActiveOff"
             >
               <el-tooltip placement="top">
-                <div slot="content">{{ message }}</div>
+                <div slot="content">
+                  {{ coursePropertyQuestionCountMap[`${scope.$index}_1_2`] }}
+                </div>
                 <el-input
                   v-model="scope.row.publicMedium"
                   class="input_width_ss"
@@ -142,11 +146,13 @@
           <template slot-scope="scope">
             <div
               class="el_table_inner_left"
-              @mouseenter="showActiveIn(1, 3, scope.row)"
+              @mouseenter="showActiveIn(1, 3, scope.row, scope.$index)"
               @mouseleave="showActiveOff"
             >
               <el-tooltip placement="top">
-                <div slot="content">{{ message }}</div>
+                <div slot="content">
+                  {{ coursePropertyQuestionCountMap[`${scope.$index}_1_3`] }}
+                </div>
                 <el-input
                   v-model="scope.row.publicDifficulty"
                   class="input_width_ss"
@@ -167,11 +173,13 @@
           <template slot-scope="scope">
             <div
               class="el_table_inner_left"
-              @mouseenter="showActiveIn(0, 1, scope.row)"
+              @mouseenter="showActiveIn(0, 1, scope.row, scope.$index)"
               @mouseleave="showActiveOff"
             >
               <el-tooltip placement="top">
-                <div slot="content">{{ message }}</div>
+                <div slot="content">
+                  {{ coursePropertyQuestionCountMap[`${scope.$index}_0_1`] }}
+                </div>
                 <el-input
                   v-model="scope.row.noPublicSimple"
                   class="input_width_ss"
@@ -188,11 +196,13 @@
           <template slot-scope="scope">
             <div
               class="el_table_inner_left"
-              @mouseenter="showActiveIn(0, 2, scope.row)"
+              @mouseenter="showActiveIn(0, 2, scope.row, scope.$index)"
               @mouseleave="showActiveOff"
             >
               <el-tooltip placement="top">
-                <div slot="content">{{ message }}</div>
+                <div slot="content">
+                  {{ coursePropertyQuestionCountMap[`${scope.$index}_0_2`] }}
+                </div>
                 <el-input
                   v-model="scope.row.noPublicMedium"
                   class="input_width_ss"
@@ -209,11 +219,13 @@
           <template slot-scope="scope">
             <div
               class="el_table_inner_left"
-              @mouseenter="showActiveIn(0, 3, scope.row)"
+              @mouseenter="showActiveIn(0, 3, scope.row, scope.$index)"
               @mouseleave="showActiveOff"
             >
               <el-tooltip placement="top">
-                <div slot="content">{{ message }}</div>
+                <div slot="content">
+                  {{ coursePropertyQuestionCountMap[`${scope.$index}_0_3`] }}
+                </div>
                 <el-input
                   v-model="scope.row.noPublicDifficulty"
                   class="input_width_ss"
@@ -336,6 +348,7 @@ export default {
         firstPropertyId: "",
         secondPropertyId: "",
       },
+      coursePropertyQuestionCountMap: {},
     };
   },
   computed: { ...mapState({ user: (state) => state.user }) },
@@ -387,7 +400,10 @@ export default {
           if (paperDetailStruct.id == this.paperDetailStructId) {
             this.paperDetailStruct = paperDetailStruct;
             //新增,做初始化查询
-            if (this.paperDetailStruct.coursePropertyNumberDtos.length == 0) {
+            if (
+              !this.paperDetailStruct.coursePropertyNumberDtos ||
+              this.paperDetailStruct.coursePropertyNumberDtos.length == 0
+            ) {
               //查询课程下的所有属性
               this.$http
                 .get(QUESTION_API + "/property/" + blueStruct.coursePropertyId)
@@ -413,6 +429,20 @@ export default {
           }
         }
       }
+
+      const coursePropertyQuestionCountMap = {};
+      for (
+        let i = 0, len = this.coursePropertyNumberDtos.length;
+        i < len;
+        i++
+      ) {
+        for (let p = 0; p < 2; p++) {
+          for (let d = 1; d < 4; d++) {
+            coursePropertyQuestionCountMap[`${i}_${p}_${d}`] = null;
+          }
+        }
+      }
+      this.coursePropertyQuestionCountMap = coursePropertyQuestionCountMap;
     },
     //初始化方法
     init() {
@@ -738,12 +768,12 @@ export default {
       return true;
     },
     //鼠标悬浮事件
-    showActiveIn(publicity, difficulty, row) {
+    showActiveIn(publicity, difficulty, row, rindex) {
       this.question.questionType = this.paperDetailStruct.questionType;
       this.question.courseId = this.blueStruct.courseId;
       this.question.coursePropertyId = this.blueStruct.coursePropertyId;
       this.question.quesNames = this.paperDetailStruct.quesNames.join(",");
-      console.log("this.question:", this.question);
+      // console.log("this.question:", this.question);
       if (publicity == 0) {
         this.question.publicity = false;
       } else {
@@ -767,8 +797,9 @@ export default {
       this.$http
         .get(QUESTION_API + "/question/count", { params: this.question })
         .then((response) => {
-          this.message = response.data;
-          console.log("this.message:", this.message);
+          const k = `${rindex}_${publicity}_${difficulty}`;
+          this.coursePropertyQuestionCountMap[k] = response.data;
+          // console.log(`${k}:`, response.data);
         });
     },
     //鼠标离开事件

+ 14 - 3
src/modules/questions/views/PropertyInfo.vue

@@ -116,7 +116,9 @@
       :title="title"
       :visible.sync="propertyDialog"
       :modal="false"
-      width="520px"
+      width="620px"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
       append-to-body
       custom-class="side-dialog"
       @close="closeModel"
@@ -124,7 +126,6 @@
       <el-form
         ref="propertyForm"
         :model="propertyForm"
-        :inline="true"
         :rules="rules"
         inline-message
         class="form-tight"
@@ -162,7 +163,7 @@
             <el-input
               v-model="propertyForm.remark"
               auto-complete="off"
-              class="dialog-input-width"
+              :maxlength="100"
             ></el-input>
           </el-form-item>
         </el-row>
@@ -222,6 +223,11 @@ export default {
             message: "请输入编码",
             trigger: "blur",
           },
+          {
+            max: 100,
+            message: "编码最多100个字符",
+            trigger: "blur",
+          },
         ],
         name: [
           {
@@ -229,6 +235,11 @@ export default {
             message: "请输入名称",
             trigger: "blur",
           },
+          {
+            max: 100,
+            message: "名称最多100个字符",
+            trigger: "blur",
+          },
         ],
       },
     };

+ 32 - 9
src/modules/questions/views/user.vue

@@ -223,12 +223,7 @@
                       size="mini"
                       type="primary"
                       plain
-                      @click="
-                        () =>
-                          $router.push(
-                            `./user/data_previllege/${scope.row.rootOrgId}/${scope.row.id}`
-                          )
-                      "
+                      @click="setPrivilege(scope.row)"
                       >权限设置
                     </el-button>
                   </el-dropdown-item>
@@ -269,8 +264,8 @@
       </el-table>
       <div class="part-page">
         <el-pagination
-          :current-page="currentPage"
-          :page-size="10"
+          :current-page.sync="currentPage"
+          :page-size.sync="pageSize"
           :page-sizes="[10, 20, 50, 100, 200, 300]"
           layout="total, sizes, prev, pager, next, jumper"
           :total="total"
@@ -644,7 +639,11 @@ export default {
         password: [
           {
             validator: (rule, value, callback) => {
-              if (value && /^([0-9]+|[a-z]+|[A-Z]+)$/.test(value)) {
+              if (
+                value &&
+                (/^([0-9]+|[a-z]+|[A-Z]+)$/.test(value) ||
+                  !/^[a-zA-Z0-9_]+$/.test(value))
+              ) {
                 callback(
                   new Error("密码只能大写字母、小写字母、数字至少两种组成")
                 );
@@ -1023,6 +1022,19 @@ export default {
       var param = new URLSearchParams(this.searchForm);
       window.open(QUESTION_API + "/user/export?" + param);
     },
+    // 设置权限
+    setPrivilege(row) {
+      window.sessionStorage.setItem(
+        "userPageCache",
+        JSON.stringify({
+          searchFilter: this.userForm,
+          currentPage: this.currentPage,
+          pageSize: this.pageSize,
+          total: this.total,
+        })
+      );
+      this.$router.push(`./user/data_previllege/${row.rootOrgId}/${row.id}`);
+    },
     //保存
     add() {
       var url = QUESTION_API + "/user";
@@ -1220,6 +1232,17 @@ export default {
         this.rootOrgList = resp1.data;
         this.roleList4Search = resp2.data;
         this.roleList4InsertOrUpdate = resp2.data;
+
+        const cacheInfo = window.sessionStorage.getItem("userPageCache");
+        if (cacheInfo) {
+          const { searchFilter, currentPage, pageSize, total } =
+            JSON.parse(cacheInfo);
+          this.userForm = searchFilter;
+          this.currentPage = currentPage;
+          this.pageSize = pageSize;
+          this.total = total;
+          window.sessionStorage.removeItem("userPageCache");
+        }
         this.search();
       });
     },