Tang 3 жил өмнө
parent
commit
7a30f471ef
69 өөрчлөгдсөн 4081 нэмэгдсэн , 2100 устгасан
  1. 31 5
      src/components/Editor/index.vue
  2. 55 1
      src/components/busIns.vue
  3. 1 1
      src/components/pagination.vue
  4. 73 2
      src/components/questionBank.vue
  5. 76 36
      src/components/searchBoxNew.vue
  6. 1 1
      src/components/tableList.vue
  7. 33 1
      src/newApi/applicationData.js
  8. 50 25
      src/utils/methodsTool.js
  9. 282 114
      src/views/Marketing/goods/commodityManageMent/add/index.vue
  10. 274 99
      src/views/Marketing/goods/commodityManageMent/edit/index.vue
  11. 7 1
      src/views/Marketing/goods/commodityManageMent/index.vue
  12. 4 1
      src/views/Marketing/goods/courseInquiryList/index.vue
  13. 26 26
      src/views/Marketing/order/orderList/details/goodsManage.vue
  14. 2 1
      src/views/Marketing/order/orderList/index.vue
  15. 29 9
      src/views/education/classManageMent/classHours/index.vue
  16. 586 547
      src/views/education/classManageMent/classHoursReview/studyTimes.vue
  17. 7 2
      src/views/education/classManageMent/classList/addClass/index.vue
  18. 2 2
      src/views/education/classManageMent/classList/index.vue
  19. 58 50
      src/views/education/classManageMent/classList/manageClass/baseInfo.vue
  20. 1 1
      src/views/education/classManageMent/learningHoursRecordList/exportTable.vue
  21. 36 3
      src/views/education/classManageMent/learningHoursRecordList/hoursTimesRecord.vue
  22. 12 4
      src/views/education/classManageMent/learningHoursRecordList/index.vue
  23. 550 512
      src/views/education/classManageMent/learningHoursRecordList/studyTimesRecord.vue
  24. 22 2
      src/views/education/classManageMent/listOfhoursToBeReviewed/index.vue
  25. 3 3
      src/views/education/classManageMent/studentMenu/index.vue
  26. 6 4
      src/views/education/dataReview/dataConfig/index.vue
  27. 110 22
      src/views/education/dataReview/informationTemplate/index.vue
  28. 4 3
      src/views/education/dataReview/stamp/index.vue
  29. 4 3
      src/views/education/examManagement/applicationData/bulkImportPlan/newRegister.vue
  30. 37 12
      src/views/education/examManagement/applicationData/bulkImportPlan/newYY.vue
  31. 106 55
      src/views/education/examManagement/applicationData/examRegistration/index.vue
  32. 1 0
      src/views/education/examManagement/examArrangement/index.vue
  33. 4 0
      src/views/education/notificationManageMent/notificationList/index.vue
  34. 2 2
      src/views/education/qaManagement/qaList/ask.vue
  35. 2 2
      src/views/education/qaManagement/qaList/reply.vue
  36. 6 6
      src/views/education/studentManageMent/studentXQ/studyRecord.vue
  37. 6 6
      src/views/resource/bankManagement/chapterVolumeManagement/add/index.vue
  38. 6 6
      src/views/resource/bankManagement/chapterVolumeManagement/edit/index.vue
  39. 5 2
      src/views/resource/bankManagement/chapterVolumeManagement/index.vue
  40. 62 8
      src/views/resource/bankManagement/knowledgeManagement/index.vue
  41. 3 1
      src/views/resource/bankManagement/testPaperManagement/addPaper/baseAddPaper/index.vue
  42. 95 27
      src/views/resource/bankManagement/testPaperManagement/addPaper/topicAddPaper/index.vue
  43. 4 1
      src/views/resource/bankManagement/testPaperManagement/editPaper/baseEditPaper/index.vue
  44. 146 32
      src/views/resource/bankManagement/testPaperManagement/editPaper/topicEditPaper/index.vue
  45. 7 4
      src/views/resource/bankManagement/testPaperManagement/index.vue
  46. 64 7
      src/views/resource/bankManagement/topicManagement/index.vue
  47. 7 3
      src/views/resource/bankManagement/volumeManagement/add/index.vue
  48. 3 3
      src/views/resource/bankManagement/volumeManagement/edit/index.vue
  49. 2 1
      src/views/resource/bankManagement/volumeManagement/index.vue
  50. 1 1
      src/views/resource/baseManageInfos/index.vue
  51. 9 7
      src/views/resource/baseManageInfos/resource/businessLevel/index.vue
  52. 8 2
      src/views/resource/baseManageInfos/resource/suject/index.vue
  53. 60 3
      src/views/resource/handoutManagement/handoutList/add/index.vue
  54. 61 1
      src/views/resource/handoutManagement/handoutList/edit/index.vue
  55. 4 1
      src/views/resource/handoutManagement/handoutList/index.vue
  56. 112 34
      src/views/resource/videoManagement/chapter/add/index.vue
  57. 112 34
      src/views/resource/videoManagement/chapter/edit/index.vue
  58. 5 4
      src/views/resource/videoManagement/chapter/index.vue
  59. 66 46
      src/views/resource/videoManagement/courseManagement/basicInfoAdd/index.vue
  60. 43 30
      src/views/resource/videoManagement/courseManagement/basicInfoEdit/index.vue
  61. 9 7
      src/views/resource/videoManagement/courseManagement/chapterContent/index.vue
  62. 14 7
      src/views/resource/videoManagement/courseManagement/index.vue
  63. 108 36
      src/views/resource/videoManagement/festival/add/index.vue
  64. 108 35
      src/views/resource/videoManagement/festival/edit/index.vue
  65. 31 18
      src/views/resource/videoManagement/festival/index.vue
  66. 145 57
      src/views/resource/videoManagement/flow/index.vue
  67. 154 78
      src/views/resource/videoManagement/moduleManagement/add/index.vue
  68. 112 36
      src/views/resource/videoManagement/moduleManagement/edit/index.vue
  69. 6 4
      src/views/resource/videoManagement/moduleManagement/index.vue

+ 31 - 5
src/components/Editor/index.vue

@@ -71,6 +71,10 @@ export default {
         bounds: document.body,
         debug: "warn",
         modules: {
+          clipboard: {
+            // 粘贴版,处理粘贴时候带图片
+            matchers: [[Node.ELEMENT_NODE, this.handleCustomMatcher]],
+          },
           // 工具栏配置
           toolbar: [
             ["bold", "italic", "underline", "strike"], // 加粗 斜体 下划线 删除线
@@ -145,10 +149,32 @@ export default {
     this.Quill = null;
   },
   methods: {
+    handleCustomMatcher(node, Delta) {
+      let ops = [];
+      Delta.ops.forEach((op) => {
+        if (op.insert && typeof op.insert === "string") {
+          // 如果粘贴了图片,这里会是一个对象,所以可以这样处理
+          ops.push({
+            insert: op.insert,
+          });
+        } else {
+          if (op.insert.image.includes("data:image")) {
+            //本地图片会使文件file开头
+            this.$message.warning("不允许粘贴图片,请手动上传");
+          } else {
+            ops.push({
+              insert: op.insert,
+            });
+          }
+        }
+      });
+      Delta.ops = ops;
+      return Delta;
+    },
     init() {
       const editor = this.$refs.editor;
       this.Quill = new Quill(editor, this.options);
-      console.log(this.Quill)
+      console.log(this.Quill);
       // 如果设置了上传地址则自定义图片上传事件
       if (this.uploadUrl) {
         let toolbar = this.Quill.getModule("toolbar");
@@ -192,11 +218,11 @@ export default {
       this.Quill.on("editor-change", (eventName, ...args) => {
         this.$emit("on-editor-change", eventName, ...args);
       });
-      
-      editor.onclick=() => {
-        this.Quill.enable(true)
+
+      editor.onclick = () => {
+        this.Quill.enable(true);
         this.Quill.focus();
-      }
+      };
     },
     imageChange(param, type) {
       this.$upload

+ 55 - 1
src/components/busIns.vue

@@ -43,7 +43,14 @@
             @hide="hideHandle"
             :disabled="courType ? false : true"
           >
-            <el-checkbox-group v-model="sujectArray" class="checkboxSty">
+            <el-checkbox
+              v-model="checkAll"
+              @change="handleCheckAllChange"
+              :indeterminate="isIndeterminate"
+              >全选</el-checkbox
+            >
+            <el-checkbox-group v-model="sujectArray" class="checkboxSty" 
+              @change="handleCheckedCitiesChange">
               <el-checkbox
                 v-for="(item, index) in newSujectOption"
                 :label="item.newId"
@@ -98,6 +105,8 @@ export default {
   props: ["typeBus", "sujectApisTable", "newSujectApisTable"],
   data() {
     return {
+      isIndeterminate: false,
+      checkAll: false,
       changeHeight: false,
       eduTypeOptions: [], //教育类型数据
       projectTypeOptions: [], //项目类型数据
@@ -143,6 +152,45 @@ export default {
     this.getDict();
   },
   methods: {
+    handleCheckedCitiesChange() {
+      let nid = this.newSujectOption.map((item) => {
+        return item.newId;
+      });
+      this.checkAll = this.sujectArray.length === nid.length;
+      this.isIndeterminate =
+        this.sujectArray.length > 0 && this.sujectArray.length < nid.length;
+    },
+    setFunc(arr) {
+      var arrays = [];
+      for (let i = 0; i < arr.length; i++) {
+        if (!arrays.includes(arr[i])) {
+          arrays.push(arr[i]);
+        }
+      }
+      return arrays;
+    },
+    handleCheckAllChange(val) {
+      if (val) {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let arrays = this.sujectArray.concat(nid);
+        this.sujectArray = this.setFunc(arrays);
+        this.isIndeterminate = false;
+      } else {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let newArr = [];
+        this.sujectArray.forEach((item) => {
+          if (!nid.includes(item)) {
+            newArr.push(item);
+          }
+        });
+        this.sujectArray = newArr;
+        this.isIndeterminate = false;
+      }
+    },
     getMessage() {
       if (!this.courType) {
         this.$message.warning("请先选择业务层级");
@@ -261,9 +309,15 @@ export default {
         }
       }
       this.sujectArray = array;
+      if (!this.newSujectOption.length) {
+        this.$message.warning("该业务层次暂无关联科目");
+        this.$refs.popovers[0].doClose();
+        return;
+      }
       this.newSujectOption.map((item) => {
         item.newId = this.courType + "-" + item.id;
       });
+      this.handleCheckedCitiesChange();
     },
     closeType(index) {
       this.sujectApis.splice(index, 1);

+ 1 - 1
src/components/pagination.vue

@@ -19,7 +19,7 @@ export default {
   data() {
     return {
       //   currentPage: 1, //当前位于页
-      pageSizes: [5, 10, 15, 20], //每页多少条分组
+      pageSizes: [10, 20, 50, 100, 200, 500], //每页多少条分组
     };
   },
   methods: {

+ 73 - 2
src/components/questionBank.vue

@@ -548,6 +548,7 @@ export default {
   watch: {
     dingFormInfo: {
       handler(newVal, oldVal) {
+        console.log(newVal)
         this.dingForm = newVal;
       },
       // 立即处理 进入页面就触发
@@ -556,20 +557,83 @@ export default {
   },
   methods: {
     changeTypes(int) {
-      this.dingForm = {
+      var data = {
         questionId: this.dingForm.questionId ? this.dingForm.questionId : "",
         type: int,
         optionsList: [],
         answerQuestionList: [],
         answerQuestion: "",
         content: "",
-        // status: "",
         analysisContent: "",
       };
+      switch (int) {
+        case 1:
+          for (let i = 0; i < 4; i++) {
+            data.optionsList.push({
+              content: "",
+              imgUrl: null,
+              optionsId: i + 1,
+            });
+          }
+          break;
+        case 2:
+          for (let i = 0; i < 5; i++) {
+            data.optionsList.push({
+              content: "",
+              imgUrl: null,
+              optionsId: i + 1,
+            });
+          }
+          break;
+        case 4:
+          var datas = {
+            analysisContent: "",
+            answerQuestion: "",
+            answerQuestionList: [],
+            content: "",
+            optionsList: [],
+            type: 1,
+          };
+          for (let i = 0; i < 4; i++) {
+            datas.optionsList.push({
+              content: "",
+              imgUrl: null,
+              optionsId: i + 1,
+            });
+          }
+          data.optionsList.push(datas);
+        default:
+          break;
+      }
+      this.dingForm = data;
     },
     changeTypeChild(index) {
       this.dingForm.optionsList[index].optionsList = [];
       this.dingForm.optionsList[index].answerQuestion = "";
+      switch (this.dingForm.optionsList[index].type) {
+        case 1:
+          for (let i = 0; i < 4; i++) {
+            this.dingForm.optionsList[index].optionsList.push({
+              content: "",
+              imgUrl: null,
+              optionsId: i + 1,
+            });
+          }
+          break;
+        case 2:
+          for (let i = 0; i < 5; i++) {
+            this.dingForm.optionsList[index].optionsList.push({
+              content: "",
+              imgUrl: null,
+              optionsId: i + 1,
+            });
+          }
+          break;
+        default:
+          break;
+      }
+      // this.dingForm.optionsList[index].optionsList = [];
+      // this.dingForm.optionsList[index].answerQuestion = "";
     },
     getInfosPage() {
       return this.dingForm;
@@ -703,6 +767,13 @@ export default {
         optionsList: [],
         type: 1,
       };
+      for (let i = 0; i < 4; i++) {
+        data.optionsList.push({
+          content: "",
+          imgUrl: null,
+          optionsId: i + 1,
+        });
+      }
       this.dingForm.optionsList.push(data);
     },
     // 上传图片

+ 76 - 36
src/components/searchBoxNew.vue

@@ -83,7 +83,7 @@
             v-model="formData[item.prop]"
             :placeholder="item.placeholder"
             :size="size"
-            @change="changeBusinessLevel"
+            @change="changeBusinessLevel($event)"
           >
             <el-option
               v-for="(items, indexs) in newBusinessLevel"
@@ -343,7 +343,7 @@
           <div v-else-if="item.scope === 'moreDataPicker'">
             <el-date-picker
               v-model="formData[item.prop1]"
-              :type="item.Diszing ? 'datetime':'date'"
+              :type="item.Diszing ? 'datetime' : 'date'"
               value-format="timestamp"
               :size="size"
               :placeholder="item.placeholder1"
@@ -353,7 +353,7 @@
             <el-date-picker
               style="margin-left: 10px"
               v-model="formData[item.prop2]"
-              :type="item.Diszing ? 'datetime':'date'"
+              :type="item.Diszing ? 'datetime' : 'date'"
               :size="size"
               value-format="timestamp"
               :placeholder="item.placeholder2"
@@ -538,7 +538,7 @@ export default {
       "examList",
       "beforeList",
       "applySiteAddress",
-      "certificate"
+      "certificate",
     ]),
     /**
      * @remarks 过滤选择器列表
@@ -555,26 +555,34 @@ export default {
           ) {
             if (!this.formData[items.edu]) {
             } else {
-              const indexType = this.educationType.findIndex((its) => {
-                return its.id === this.formData[items.edu];
-              });
-              if (
-                items.scope === "businessLevel" &&
-                this.educationType[indexType].tireStatus.indexOf("2") !== -1
-              ) {
-                return items;
-              }
-              if (
-                items.scope === "schoolList" &&
-                this.educationType[indexType].tireStatus.indexOf("3") !== -1
-              ) {
-                return items;
-              }
-              if (
-                items.scope === "Professional" &&
-                this.educationType[indexType].tireStatus.indexOf("4") !== -1
-              ) {
-                return items;
+              if (this.educationType) {
+                const indexType = this.educationType.findIndex((its) => {
+                  return its.id === this.formData[items.edu];
+                });
+                if (
+                  items.scope === "businessLevel" &&
+                  this.educationType[indexType].tireStatus.indexOf("2") !== -1
+                ) {
+                  return items;
+                }
+                if (
+                  items.scope === "schoolList" &&
+                  this.educationType[indexType].tireStatus.indexOf("3") !== -1
+                ) {
+                  return items;
+                }
+                if (
+                  items.scope === "Professional" &&
+                  this.educationType[indexType].tireStatus.indexOf("4") !== -1
+                ) {
+                  return items;
+                }
+                if (
+                  items.scope === "sujectType" &&
+                  this.formData["businessId"]
+                ) {
+                  return items;
+                }
               }
             }
           } else {
@@ -678,22 +686,29 @@ export default {
     /**
      *
      * @param {int} id
+     * @param {bool} status1 //是否不清空业务层级
      * @remark 点击教育类型触发事件
      */
-    changeEducationType(id) {
+    changeEducationType(id, status1) {
+      if (!id) {
+        return;
+      }
       const indexs = this.educationType.findIndex((item) => {
         return item.id === id;
       });
       this.tireStatus = this.educationType[indexs].tireStatus;
-      if (this.formData.businessId) {
-        this.formData.businessId = "";
+      if (!status1) {
+        if (this.formData.businessId) {
+          this.formData.businessId = "";
+        }
+        if (this.formData.ProfessionalId) {
+          this.formData.ProfessionalId = "";
+        }
       }
       if (this.formData.schoolId) {
         this.formData.schoolId = "";
       }
-      if (this.formData.ProfessionalId) {
-        this.formData.ProfessionalId = "";
-      }
+
       if (this.formData.subjectId) {
         this.formData.subjectId = "";
       }
@@ -713,18 +728,43 @@ export default {
         .then((res) => {
           this.newProfessional = res.rows;
         });
-      this.$api
-        .inquireCourseSubject({ status: 1, educationId: id })
-        .then((res) => {
-          this.newSujectType = res.rows;
-        });
+      if (!status1) {
+        this.$api
+          .inquireCourseSubject({ status: 1, educationId: id })
+          .then((res) => {
+            this.newSujectType = res.rows;
+          });
+      }
     },
     /**
      *
      * @param {int} id
      * @remark 点击业务层次触发事件
      */
-    changeBusinessLevel(id) {},
+    changeBusinessLevel(v) {
+      if(this.formData.subjectId){
+        this.formData.subjectId = ''
+      }
+      this.$api
+          .inquireCourseSubject({ status: 1, businessId: v })
+          .then((res) => {
+            this.newSujectType = res.rows;
+          });
+    },
+    /**
+     * 外部调用-商品新增编辑页
+     */
+    changeSuject(v) {
+      if (v) {
+        this.$api
+          .inquireCourseSubject({ status: 1, projectId: v })
+          .then((res) => {
+            this.newSujectType = res.rows;
+          });
+      } else {
+        this.newSujectType = [];
+      }
+    },
   },
 };
 </script>

+ 1 - 1
src/components/tableList.vue

@@ -235,7 +235,7 @@
             class="editInfoSty"
             @click="jumpPeolpe(scope.row, item.type)"
           >
-            {{ scope.row[item.prop] }}
+            {{ `${scope.row[item.prop]} / ${scope.row[item.prop1]}` }}
           </span>
           <span v-else-if="item.scope === 'sectionTypesTTT'">{{
             Number(scope.row[item.prop]) === 1

+ 33 - 1
src/newApi/applicationData.js

@@ -16,6 +16,14 @@ export default {
             data
         })
     },
+    //批量选考试登记状态
+    editMoresystemsubscribe(data) {
+        return request({
+            url: '/system/subscribe/editMore',
+            method: 'post',
+            data
+        })
+    },
     //预约考试身份证导入新增模板
     editsystemimportIdsData(data) {
         return request({
@@ -97,7 +105,7 @@ export default {
             data
         })
     },
-    //导出新增错误预约
+    //导出错误数据
     inquiresystemsubscribeexportErrorNew(data) {
         return request({
             url: '/system/subscribe/exportErrorNew',
@@ -105,4 +113,28 @@ export default {
             data
         })
     },
+    //导出新增含考培错误数据
+    inquiresystemsubscribeexportexportErrorTrain(data) {
+        return request({
+            url: '/system/subscribe/exportErrorTrain',
+            method: 'post',
+            data
+        })
+    },
+    //导出前培错误数据
+    inquiresystemsubscribeexportexportErrorUpdate(data) {
+        return request({
+            url: '/system/subscribe/exportErrorUpdate',
+            method: 'post',
+            data
+        })
+    },
+    //预约考试身份证导入新增模板过滤不存在
+    inquiresystemsubscribeimportIdsDataFilter(data) {
+        return request({
+            url: '/system/subscribe/importIdsDataFilter',
+            method: 'post',
+            data
+        })
+    },
 }

+ 50 - 25
src/utils/methodsTool.js

@@ -172,39 +172,39 @@ export default {
 	 * @param {Strings} pId	参数名称 例如:'pid' 默认 pid
 	 * @returns 返回树形结构
 	 */
-	arrayToTree(items,Id = 'id',pId = 'pid') {
+	arrayToTree(items, Id = 'id', pId = 'pid') {
 		const result = []; // 存放结果集
 		const itemMap = {}; //
 		for (const item of items) {
-		  const id = item[Id];
-		  const pid = item[pId];
-  
-		  if (!itemMap[id]) {
+			const id = item[Id];
+			const pid = item[pId];
+
+			if (!itemMap[id]) {
+				itemMap[id] = {
+					children: [],
+				};
+			}
+
 			itemMap[id] = {
-			  children: [],
+				...item,
+				children: itemMap[id]["children"],
 			};
-		  }
-  
-		  itemMap[id] = {
-			...item,
-			children: itemMap[id]["children"],
-		  };
-  
-		  const treeItem = itemMap[id];
-  
-		  if (pid === 0) {
-			result.push(treeItem);
-		  } else {
-			if (!itemMap[pid]) {
-			  itemMap[pid] = {
-				children: [],
-			  };
+
+			const treeItem = itemMap[id];
+
+			if (pid === 0) {
+				result.push(treeItem);
+			} else {
+				if (!itemMap[pid]) {
+					itemMap[pid] = {
+						children: [],
+					};
+				}
+				itemMap[pid].children.push(treeItem);
 			}
-			itemMap[pid].children.push(treeItem);
-		  }
 		}
 		return result;
-	  },
+	},
 	//JS计算两个时间戳相差月数、天数、时数、分钟、秒数
 	humandate(time1, time2) {
 		// var time1 = Date.parse(new Date()) / 1000;
@@ -284,5 +284,30 @@ export default {
 				})
 			}, 500)
 		}
+	},
+	/**
+	 * 
+	 * @param {strings} name 
+	 * @returns 获取localStorage缓存
+	 */
+	storageGet(name) {
+		return window.localStorage.getItem(name)
+	},
+	/**
+	 * 
+	 * @param {strings} name 
+	 * @param {strings} val 
+	 * @returns 设置localStorage缓存
+	 */
+	storageSet(name, val) {
+		return window.localStorage.setItem(name, val)
+	},
+	/**
+	 * 
+	 * @param {strings} name 
+	 * @returns 移除指定name
+	 */
+	storageRemove(name) {
+		return window.localStorage.removeItem(name)
 	}
 }

+ 282 - 114
src/views/Marketing/goods/commodityManageMent/add/index.vue

@@ -155,40 +155,48 @@
         <el-col :span="12">
           <el-form label-position="right" label-width="120px" :model="listData">
             <el-form-item label="商品封面">
-              <div class="imgBoxins">
-                <img
-                  :src="$methodsTools.splitImgHost(listData.coverUrl)"
-                  alt=""
-                />
-                <div
-                  class="posimg"
-                  v-if="
-                    listData.coverUrl === null ||
-                    listData.coverUrl === '' ||
-                    listData.coverUrl === undefined
-                  "
-                >
-                  <label for="uplose">
-                    <i class="el-icon-circle-plus-outline iconStsz"></i
-                  ></label>
-                  <input
-                    ref="file"
-                    type="file"
-                    style="display: none"
-                    id="uplose"
-                    @change="getImgFile"
-                  />
-                  <p>
-                    注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型
-                  </p>
-                </div>
-              </div>
+              <el-row :gutter="10" style="margin-bottom: 10px">
+                <el-col :span="12">
+                  <div
+                    style="
+                      width: 100%;
+                      height: 150px;
+                      border: 2px dashed #999;
+                      border-radius: 28px;
+                      line-height: 150px;
+                      text-align: center;
+                    "
+                    v-if="!listData.coverUrl"
+                  >
+                    <label for="uplose">
+                      <i class="el-icon-circle-plus-outline iconStsz"></i
+                    ></label>
+                    <input
+                      ref="file"
+                      type="file"
+                      style="display: none"
+                      id="uplose"
+                      @change="getImgFile"
+                    />
+                  </div>
+                  <el-image
+                    v-else
+                    style="width: 100%"
+                    :src="$methodsTools.splitImgHost(listData.coverUrl)"
+                    :preview-src-list="[
+                      $methodsTools.splitImgHost(listData.coverUrl),
+                    ]"
+                  >
+                  </el-image>
+                </el-col>
+                <el-col :span="11">
+                  <span style="color: #999; font-size: 13px"
+                    >注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型</span
+                  >
+                </el-col>
+              </el-row>
               <el-button
-                v-if="
-                  listData.coverUrl !== null &&
-                  listData.coverUrl !== '' &&
-                  listData.coverUrl !== undefined
-                "
+                v-if="listData.coverUrl"
                 type="danger"
                 size="mini"
                 class="margin-top: 20px;"
@@ -210,12 +218,18 @@
             ref="listData2"
           >
             <el-form-item label="商品标准价格" prop="standPrice">
-              <el-input class="numInputs" v-model="listData.standPrice"
+              <el-input
+                class="numInputs"
+                v-model="listData.standPrice"
+                @change="judgeResult1"
                 ><template slot="prepend">¥</template></el-input
               >
             </el-form-item>
             <el-form-item label="商品最低价格" prop="lowestPrice">
-              <el-input class="numInputs" v-model="listData.lowestPrice"
+              <el-input
+                class="numInputs"
+                v-model="listData.lowestPrice"
+                @change="judgeResult2"
                 ><template slot="prepend">¥</template></el-input
               >
             </el-form-item>
@@ -433,6 +447,9 @@
                   ? "回放"
                   : "未知"
               }}</span>
+              <span v-else-if="item.scope === 'businessType'">
+                {{ scope.row[item.prop1] }}-{{ scope.row[item.prop2] }}
+              </span>
               <span v-else-if="item.scope === 'type'">
                 {{
                   scope.row[item.prop] === 1
@@ -550,6 +567,7 @@
               </el-form-item>
               <el-form-item label="补考次数" prop="studyCount">
                 <el-input-number
+                  :precision="0"
                   class="numInputs"
                   v-model="listData.studyCount"
                   :min="1"
@@ -600,6 +618,7 @@
               </el-form-item>
               <el-form-item label="学习次数" prop="studyCount">
                 <el-input-number
+                  :precision="0"
                   class="numInputs"
                   v-model="listData.studyCount"
                   :min="1"
@@ -633,12 +652,11 @@
           class="dis_fs"
           v-if="listData.goodsType === 1 || listData.goodsType === 2"
         >
-          <el-popover
-            placement="bottom-start"
-            trigger="click"
-            class="checkBoxSty1"
-          >
-            <el-checkbox-group v-model="listData.certificateIds">
+          <el-popover placement="bottom-start" trigger="click">
+            <el-checkbox-group
+              v-model="listData.certificateIds"
+              class="checkBix"
+            >
               <el-checkbox
                 v-for="(item, index) in certificateOption"
                 :key="index"
@@ -803,6 +821,7 @@
       </span>
     </el-dialog>
     <el-dialog
+      @opened="prepareEnd"
       :visible.sync="dialogVisibleTableBoxs"
       width="800px"
       :show-close="false"
@@ -890,6 +909,7 @@
       </span>
     </el-dialog>
     <el-dialog
+      @opened="prepareEnd"
       :visible.sync="dialogVisibleTableBoxs2"
       width="800px"
       :show-close="false"
@@ -954,6 +974,9 @@
                     : "未知"
                 }}
               </span>
+              <span v-else-if="item.scope === 'businessType'">
+                {{ scope.row[item.prop1] }}-{{ scope.row[item.prop2] }}
+              </span>
               <span v-else-if="item.scope === 'type'">
                 {{
                   scope.row[item.prop] === 1
@@ -1115,6 +1138,9 @@
                   >
                 </el-popover>
               </ul>
+              <span v-else-if="item.scope === 'canDownload'">{{
+                scope.row[item.prop] === 1 ? "是" : "否"
+              }}</span>
               <span v-else>{{ scope.row[item.prop] }}</span></template
             >
           </el-table-column></template
@@ -1276,6 +1302,13 @@
         </div>
       </div>
       <div>
+        <search-box-new
+          ref="searchBox"
+          :formData="formDataBK"
+          :formList="formListBK"
+          @search="getGoodsList(1)"
+          @init="getGoodsList(2)"
+        />
         <el-table
           ref="multipleTable"
           :data="goodsList"
@@ -1307,14 +1340,24 @@
             header-align="center"
           >
             <template slot-scope="scope">
-              <span>{{ scope.row[item.prop] }}</span></template
+              <span v-if="item.scope === 'status'">{{
+                scope.row[item.prop] === 1 ? "上架" : "未上架"
+              }}</span>
+              <span v-else-if="item.scope === 'status1'">{{
+                scope.row[item.prop] === 1 ? "有效" : "无效"
+              }}</span>
+              <span v-else-if="item.scope === 'times'">
+                {{ $methodsTools.onlyForma(scope.row[item.prop1]) }} -
+                {{ $methodsTools.onlyForma(scope.row[item.prop2]) }}
+              </span>
+              <span v-else>{{ scope.row[item.prop] }}</span></template
             >
           </el-table-column>
         </el-table>
         <pagination
           :total="total5"
-          :pageSize="formData.pageSize"
-          :currentPage="formData.pageNum"
+          :pageSize="formDataBK.pageSize"
+          :currentPage="formDataBK.pageNum"
           @handleSizeChange="handleSizeChange5"
           @handleCurrentChange="handleCurrentChange5"
         />
@@ -1362,6 +1405,7 @@ export default {
         coverUrl: "oss/images/avatar/20211013/1634097664410_1397766697",
         educationTypeId: "",
         businessId: "",
+        status: 1,
         schoolId: "",
         majorId: "",
         subjectId: "",
@@ -1585,14 +1629,36 @@ export default {
         {
           label: "商品编码",
           prop: "code",
+          width: "140px",
         },
         {
           label: "商品名称",
           prop: "goodsName",
+          width: "260px",
         },
         {
           label: "标准价格(¥)",
           prop: "standPrice",
+          width: "140px",
+        },
+        {
+          label: "商品状态",
+          prop: "status",
+          scope: "status1",
+          width: "110px",
+        },
+        {
+          label: "商品有效期",
+          prop1: "validityStartTime",
+          prop2: "validityEndTime",
+          scope: "times",
+          width: "310px",
+        },
+        {
+          label: "商品可售状态",
+          prop: "goodsStatus",
+          scope: "status",
+          width: "130px",
         },
       ],
       total5: 0,
@@ -1616,6 +1682,19 @@ export default {
           placeholder: "请输入讲义标题/讲义编码",
         },
       ],
+      formListBK: [
+        {
+          prop: "searchKey",
+          placeholder: "请输入商品编码/商品名称",
+        },
+      ],
+      formDataBK: {
+        searchKey: "",
+        pageNum: 1,
+        pageSize: 10,
+        educationTypeId: "",
+        businessId: "",
+      },
       total3: 0,
       formData3: {
         pageNum: 1,
@@ -1624,7 +1703,8 @@ export default {
         examType: 1,
         educationTypeId: "",
         businessId: "",
-        names: "",
+        subjectId:"",
+        key: "",
       },
       formList3: [
         {
@@ -1647,25 +1727,32 @@ export default {
           ],
         },
         {
-          prop: "names",
-          placeholder: "请输入标题名称",
+          prop: "subjectId",
+          placeholder: "科目",
+          scope: "sujectType",
+          edu: "educationTypeId",
+        },
+        {
+          prop: "key",
+          placeholder: "标题前缀/标题编码/标题名称",
         },
       ],
       //   视频商品表格数据------------------------------------------------------------------------start
       tableSetTSB: [
         { label: "排序", prop: "sort", scope: "inputs", width: "100" },
-        { label: "科目名称", prop: "code" },
-        { label: "课程名称", prop: "prefixName", width: "120" },
-        { label: "科目", prop: "subjectName" },
+        { label: "课程编码", prop: "code", width: "140" },
+        { label: "课程名称", prop: "prefixName", width: "190" },
+        { label: "科目", prop: "subjectName", width: "150" },
         { label: "专业", prop: "categoryName" },
-        { label: "院校", prop: "schoolName" },
+        { label: "院校", prop: "schoolName", width: "150" },
         {
           label: "业务层次",
           prop1: "projectName",
           prop2: "businessName",
           scope: "busin",
+          width: "350px",
         },
-        { label: "教育类型", prop: "educationName" },
+        { label: "教育类型", prop: "educationName", width: "160" },
         {
           label: "发布状态",
           prop: "publishStatus",
@@ -1674,14 +1761,14 @@ export default {
         },
       ],
       tableSetTSBBOX: [
-        { label: "课程编码", prop: "code" },
-        { label: "名称前缀", prop: "prefixName", width: "120" },
-        { label: "课程标题", prop: "courseName" },
+        { label: "课程编码", prop: "code", width: "140px" },
+        { label: "名称前缀", prop: "prefixName", width: "160px" },
+        { label: "课程标题", prop: "courseName", width: "300px" },
         {
           label: "发布状态",
           prop: "publishStatus",
           scope: "Status",
-          width: "120",
+          width: "120px",
         },
       ],
       total: 0, //一共多少条
@@ -1705,18 +1792,24 @@ export default {
         //   scope: "businessLevel",
         //   edu: "educationTypeId",
         // },
-        {
-          prop: "schoolId",
-          placeholder: "院校",
-          scope: "schoolList",
-          edu: "educationTypeId",
-        },
+        // {
+        //   prop: "schoolId",
+        //   placeholder: "院校",
+        //   scope: "schoolList",
+        //   edu: "educationTypeId",
+        // },
         {
           prop: "majorId",
           placeholder: "专业",
           scope: "Professional",
           edu: "educationTypeId",
         },
+        {
+          prop: "subjectId",
+          placeholder: "科目",
+          scope: "sujectType",
+          edu: "educationTypeId",
+        },
         // {
         //   prop: "publishStatus",
         //   placeholder: "发布状态",
@@ -1734,7 +1827,7 @@ export default {
         // },
         {
           prop: "key",
-          placeholder: "请输入课程标题/课程编码",
+          placeholder: "课程标题/课程编码/标题前缀",
         },
       ],
       disCheckList: [],
@@ -1745,17 +1838,23 @@ export default {
       auditionList: [],
       aboutJYBox: false,
       jYtableSet: [
-        { label: "讲义编码", prop: "encoder" },
+        { label: "讲义编码", prop: "encoder", width: "150px" },
         { label: "讲义标题", prop: "handoutsName" },
+        // {
+        //   label: "适合业务层级",
+        //   prop: "courseHandoutsBusinessVo",
+        //   prop1: "educationName",
+        //   prop2: "projectName",
+        //   prop3: "businessName",
+        //   scope: "eduType",
+        // },
         {
-          label: "适合业务层级",
-          prop: "courseHandoutsBusinessVo",
-          prop1: "educationName",
-          prop2: "projectName",
-          prop3: "businessName",
-          scope: "eduType",
+          label: "是否可下载",
+          prop: "canDownload",
+          scope: "canDownload",
+          width: "140px",
         },
-        { label: "发布状态", prop: "status", scope: "Status" },
+        { label: "发布状态", prop: "status", scope: "Status", width: "140px" },
       ],
       jYtableData: [],
       jYactiveBoxs: false,
@@ -1767,21 +1866,37 @@ export default {
       //   题库商品表格数据------------------------------------------------------------------------start
       tableSetTSB2: [
         { label: "排序", prop: "sort", scope: "inputs", width: "100" },
+        { label: "题卷名称", prop: "name", width: "300" },
         { label: "科目", prop: "subjectName", width: "130" },
-        { label: "题卷名称", prop: "name" },
+        {
+          label: "业务层次",
+          prop1: "projectName",
+          prop2: "businessName",
+          width: "300",
+          scope: "businessType",
+        },
+        { label: "教育类型", prop: "educationName", width: "160" },
         { label: "题库类型", prop: "type", scope: "type", width: "120" },
-        // {
-        //   label: "发布状态",
-        //   prop: "publishStatus",
-        //   scope: "Status",
-        //   width: "120",
-        // },
+        {
+          label: "发布状态",
+          prop: "publishStatus",
+          scope: "Status",
+        },
       ],
       tableSetTSBBOX2: [
-        { label: "编码", prop: "code" },
-        { label: "前缀", prop: "prefixName", width: "120" },
-        { label: "名称", prop: "name" },
-        { label: "题库类型", prop: "type", scope: "type" },
+        { label: "题卷编码", prop: "code", width: "120" },
+        { label: "题卷前缀", prop: "prefixName", width: "120" },
+        { label: "题卷名称", prop: "name", width: "300" },
+        { label: "科目", prop: "subjectName", width: "160" },
+        {
+          label: "业务层次",
+          prop1: "projectName",
+          prop2: "businessName",
+          width: "300",
+          scope: "businessType",
+        },
+        { label: "教育类型", prop: "educationName", width: "160" },
+        { label: "题库类型", prop: "type", scope: "type", width: "120" },
         {
           label: "发布状态",
           prop: "publishStatus",
@@ -1833,13 +1948,32 @@ export default {
       }
     },
   },
-  created() {
-    this.getDict();
-  },
+  created() {},
   mounted() {
     // this.getJyData();
+    this.getDict();
   },
   methods: {
+    judgeResult1(v) {
+      if (
+        Number(this.listData.lowestPrice) &&
+        Number(this.listData.lowestPrice) > Number(this.listData.standPrice)
+      ) {
+        this.listData.lowestPrice = "";
+        this.$message.warning("商品最低价格高于标准价格,请重新输入");
+        return;
+      }
+    },
+    judgeResult2(v) {
+      if (
+        Number(this.listData.standPrice) &&
+        Number(this.listData.standPrice) < Number(this.listData.lowestPrice)
+      ) {
+        this.listData.lowestPrice = "";
+        this.$message.warning("商品最低价格高于标准价格,请重新输入");
+        return;
+      }
+    },
     changeTypes() {
       this.listData.studyCount = 1;
       if (this.listData.goodsType === 3 || this.listData.goodsType === 4) {
@@ -1921,21 +2055,34 @@ export default {
       this.goodsNames = "";
       this.goodsCode = "";
     },
-    getGoodsList() {
+    getGoodsList(int) {
       return new Promise((resolve, reject) => {
         if (!this.listData.businessId) {
           this.$message.warning("请先选择业务层次");
           return;
         } else {
-          this.formData.businessId = this.listData.businessId;
+          this.formDataBK.businessId = this.listData.businessId;
         }
         if (this.listData.goodsType === 3) {
-          this.formData.filtration = 2;
+          this.formDataBK.filtration = 2;
         }
         if (this.listData.goodsType === 4) {
-          this.formData.filtration = 1;
+          this.formDataBK.filtration = 1;
+        }
+        if (int === 1) {
+          this.formDataBK.pageNum = 1;
         }
-        this.$api.inquireGoodslistGoods(this.formData).then((res) => {
+        if (int === 2) {
+          this.formDataBK.searchKey = "";
+          this.formDataBK.pageNum = 1;
+        }
+        if (int === 3) {
+          this.formDataBK.searchKey = "";
+          this.formDataBK.pageNum = 1;
+          this.formDataBK.pageSize = 10;
+        }
+        var data = JSON.parse(JSON.stringify(this.formDataBK));
+        this.$api.inquireGoodslistGoods(data).then((res) => {
           for (let i = 0; i < res.rows.length; i++) {
             if (res.rows[i].goodsId === this.getNewGoodsId) {
               res.rows[i].goodsStatus = 1;
@@ -1948,16 +2095,16 @@ export default {
       });
     },
     handleSizeChange5(v) {
-      this.formData.pageSize = v;
-      this.formData.pageNum = 1;
+      this.formDataBK.pageSize = v;
+      this.formDataBK.pageNum = 1;
       this.getGoodsList();
     },
     handleCurrentChange5(v) {
-      this.formData.pageNum = v;
+      this.formDataBK.pageNum = v;
       this.getGoodsList();
     },
     async goToActiveGoods() {
-      await this.getGoodsList();
+      await this.getGoodsList(3);
       this.goodsId = this.listData.makeGoodsId;
       this.goodsNames = this.listData.makeGoodsName;
       this.goodsCode = this.listData.makeGoodsCode;
@@ -2145,7 +2292,7 @@ export default {
         res.rows.map((item, index) => {
           var array = [];
           item.courseProjectTypeVo.map((items, indexs) => {
-            array.push(items.id);
+            array.push(items.educationId);
           });
           item.courseArrays = array;
         });
@@ -2197,7 +2344,7 @@ export default {
             }
           });
           this.majorOption.map((items) => {
-            if (items.courseArrays.indexOf(item.projectId) !== -1) {
+            if (items.courseArrays.indexOf(item.educationId) != -1) {
               newMajorOption.push(items);
             }
           });
@@ -2556,6 +2703,13 @@ export default {
         );
         // this.listData.standPriceJson[this.NUMBerS] = this.listitemData;
       } else {
+        const INQU = this.listData.standPriceJson.some((item) => {
+          return item.priceTypeId === this.listitemData.priceTypeId;
+        });
+        if (INQU) {
+          this.$message.warning("已存在相同费用类型,禁止重复");
+          return;
+        }
         this.listitem[0].options.map((i, k) => {
           if (i.costId === Number(this.listitemData.priceTypeId)) {
             this.listitemData.priceTypeName = i.costName;
@@ -2575,7 +2729,9 @@ export default {
       var a = "";
       this.certificateOption.map((item, index) => {
         if (item.tpId === id) {
-          a = item.typeId ? item.certificateName + ":" + item.title : item.title;
+          a = item.typeId
+            ? item.certificateName + ":" + item.title
+            : item.title;
         }
       });
       return a;
@@ -2637,12 +2793,25 @@ export default {
         this.dialogVisibleTableBoxs = true;
         this.$nextTick(function () {
           self.$refs.multipleTable.clearSelection();
-          // self.$refs.searchBox.changeEducationType(
-          //   self.listData.educationTypeId
-          // );
         });
       });
     },
+    prepareEnd() {
+      this.$refs.searchBox.changeEducationType(
+        this.listData.educationTypeId,
+        true
+      );
+      var a = ''
+      if (this.listData.businessId) {
+        this.newCourTypeOptions.forEach(item => {
+          if(item.id == this.listData.businessId){
+            a = item.projectId
+          }
+        })
+        this.$refs.searchBox.changeSuject(a)
+      }
+      
+    },
     submitTab() {
       if (this.activeLists.length === 0) {
         this.dialogVisibleTableBoxs = false;
@@ -2732,14 +2901,14 @@ export default {
       this.formData3.pageNum = 1;
       // this.formData3.educationTypeId = "";
       // this.formData3.businessId = "";
-      this.formData3.names = "";
+      this.formData3.key = "";
+      this.formData3.subjectId = "";
       this.search3();
     },
     search3(int) {
       var self = this;
       var data = JSON.parse(JSON.stringify(self.formData3));
       if (data.examType === 1) {
-        data.moduleName = data.names;
         self.$api.inquireBankModule(data).then((res) => {
           res.rows.forEach((item) => {
             item.ids = 1 + "-" + item.moduleExamId;
@@ -2759,7 +2928,6 @@ export default {
         });
       }
       if (data.examType === 2) {
-        data.name = data.names;
         self.$api.inquirebankchapterList(data).then((res) => {
           res.rows.forEach((item) => {
             item.ids = 2 + "-" + item.chapterExamId;
@@ -2778,7 +2946,6 @@ export default {
         });
       }
       if (data.examType === 3) {
-        data.examName = data.names;
         self.$api.inquirebankexamList(data).then((res) => {
           res.rows.forEach((item) => {
             item.ids = 3 + "-" + item.examId;
@@ -2800,6 +2967,7 @@ export default {
     },
     editAddBoxs2(int) {
       var self = this;
+      this.formData3.subjectId = ''
       var data = JSON.parse(JSON.stringify(this.formData3));
       if (this.listData.educationTypeId) {
         data.educationTypeId = this.listData.educationTypeId;
@@ -2829,9 +2997,9 @@ export default {
           if (int === 1) {
             self.$nextTick(function () {
               self.$refs.multipleTable2.clearSelection();
-              self.$refs.searchBox.changeEducationType(
-                self.listData.educationTypeId
-              );
+              // self.$refs.searchBox.changeEducationType(
+              //   self.listData.educationTypeId
+              // );
               self.formData3.businessId = self.listData.businessId;
             });
           }
@@ -2857,9 +3025,9 @@ export default {
           if (int === 1) {
             self.$nextTick(function () {
               self.$refs.multipleTable2.clearSelection();
-              self.$refs.searchBox.changeEducationType(
-                self.listData.educationTypeId
-              );
+              // self.$refs.searchBox.changeEducationType(
+              //   self.listData.educationTypeId
+              // );
               self.formData3.businessId = self.listData.businessId;
             });
           }
@@ -2886,9 +3054,9 @@ export default {
           if (int === 1) {
             self.$nextTick(function () {
               self.$refs.multipleTable2.clearSelection();
-              self.$refs.searchBox.changeEducationType(
-                self.listData.educationTypeId
-              );
+              // self.$refs.searchBox.changeEducationType(
+              //   self.listData.educationTypeId
+              // );
               self.formData3.businessId = self.listData.businessId;
             });
           }
@@ -3061,7 +3229,7 @@ export default {
 </script>
 
 <style lang="less" scoped>
-.checkBoxSty1 {
+.checkBix {
   display: flex;
   flex-direction: column;
 }

+ 274 - 99
src/views/Marketing/goods/commodityManageMent/edit/index.vue

@@ -158,40 +158,48 @@
         <el-col :span="12">
           <el-form label-position="right" label-width="120px" :model="listData">
             <el-form-item label="商品封面">
-              <div class="imgBoxins">
-                <img
-                  :src="$methodsTools.splitImgHost(listData.coverUrl)"
-                  alt=""
-                />
-                <div
-                  class="posimg"
-                  v-if="
-                    listData.coverUrl === null ||
-                    listData.coverUrl === '' ||
-                    listData.coverUrl === undefined
-                  "
-                >
-                  <label for="uplose">
-                    <i class="el-icon-circle-plus-outline iconStsz"></i
-                  ></label>
-                  <input
-                    ref="file"
-                    type="file"
-                    style="display: none"
-                    id="uplose"
-                    @change="getImgFile"
-                  />
-                  <p>
-                    注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型
-                  </p>
-                </div>
-              </div>
+              <el-row :gutter="10" style="margin-bottom: 10px">
+                <el-col :span="12">
+                  <div
+                    style="
+                      width: 100%;
+                      height: 150px;
+                      border: 2px dashed #999;
+                      border-radius: 28px;
+                      line-height: 150px;
+                      text-align: center;
+                    "
+                    v-if="!listData.coverUrl"
+                  >
+                    <label for="uplose">
+                      <i class="el-icon-circle-plus-outline iconStsz"></i
+                    ></label>
+                    <input
+                      ref="file"
+                      type="file"
+                      style="display: none"
+                      id="uplose"
+                      @change="getImgFile"
+                    />
+                  </div>
+                  <el-image
+                    v-else
+                    style="width: 100%"
+                    :src="$methodsTools.splitImgHost(listData.coverUrl)"
+                    :preview-src-list="[
+                      $methodsTools.splitImgHost(listData.coverUrl),
+                    ]"
+                  >
+                  </el-image>
+                </el-col>
+                <el-col :span="11">
+                  <span style="color: #999; font-size: 13px"
+                    >注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型</span
+                  >
+                </el-col>
+              </el-row>
               <el-button
-                v-if="
-                  listData.coverUrl !== null &&
-                  listData.coverUrl !== '' &&
-                  listData.coverUrl !== undefined
-                "
+                v-if="listData.coverUrl"
                 type="danger"
                 size="mini"
                 class="margin-top: 20px;"
@@ -213,12 +221,18 @@
             ref="listData2"
           >
             <el-form-item label="商品标准价格" prop="standPrice">
-              <el-input class="numInputs" v-model="listData.standPrice"
+              <el-input
+                class="numInputs"
+                v-model="listData.standPrice"
+                @change="judgeResult1"
                 ><template slot="prepend">¥</template></el-input
               >
             </el-form-item>
             <el-form-item label="商品最低价格" prop="lowestPrice">
-              <el-input class="numInputs" v-model="listData.lowestPrice"
+              <el-input
+                class="numInputs"
+                v-model="listData.lowestPrice"
+                @change="judgeResult2"
                 ><template slot="prepend">¥</template></el-input
               >
             </el-form-item>
@@ -439,6 +453,9 @@
                   ? "回放"
                   : "未知"
               }}</span>
+              <span v-else-if="item.scope === 'businessType'">
+                {{ scope.row[item.prop1] }}-{{ scope.row[item.prop2] }}
+              </span>
               <span v-else-if="item.scope === 'type'">
                 {{
                   scope.row[item.prop] === 1
@@ -557,6 +574,7 @@
               </el-form-item>
               <el-form-item label="补考次数" prop="studyCount">
                 <el-input-number
+                  :precision="0"
                   class="numInputs"
                   v-model="listData.studyCount"
                   :min="1"
@@ -605,8 +623,9 @@
                   >
                 </div>
               </el-form-item>
-              <el-form-item label="补考次数" prop="studyCount">
+              <el-form-item label="学习次数" prop="studyCount">
                 <el-input-number
+                  :precision="0"
                   class="numInputs"
                   v-model="listData.studyCount"
                   :min="1"
@@ -643,7 +662,7 @@
           <el-popover placement="bottom-start" trigger="click">
             <el-checkbox-group
               v-model="listData.certificateIds"
-              class="checkBoxSty1"
+              class="checkBix"
             >
               <el-checkbox
                 v-for="(item, index) in certificateOption"
@@ -818,6 +837,7 @@
       </span>
     </el-dialog>
     <el-dialog
+      @opened="prepareEnd"
       :visible.sync="dialogVisibleTableBoxs"
       width="800px"
       :show-close="false"
@@ -905,6 +925,7 @@
       </span>
     </el-dialog>
     <el-dialog
+      @opened="prepareEnd"
       :visible.sync="dialogVisibleTableBoxs2"
       width="800px"
       :show-close="false"
@@ -969,6 +990,9 @@
                     : "未知"
                 }}
               </span>
+              <span v-else-if="item.scope === 'businessType'">
+                {{ scope.row[item.prop1] }}-{{ scope.row[item.prop2] }}
+              </span>
               <span v-else-if="item.scope === 'type'">
                 {{
                   scope.row[item.prop] === 1
@@ -1290,6 +1314,13 @@
         </div>
       </div>
       <div>
+        <search-box-new
+          ref="searchBox"
+          :formData="formDataBK"
+          :formList="formListBK"
+          @search="getGoodsList(1)"
+          @init="getGoodsList(2)"
+        />
         <el-table
           ref="multipleTable"
           :data="goodsList"
@@ -1321,14 +1352,24 @@
             header-align="center"
           >
             <template slot-scope="scope">
-              <span>{{ scope.row[item.prop] }}</span></template
+              <span v-if="item.scope === 'status'">{{
+                scope.row[item.prop] === 1 ? "上架" : "未上架"
+              }}</span>
+              <span v-else-if="item.scope === 'status1'">{{
+                scope.row[item.prop] === 1 ? "有效" : "无效"
+              }}</span>
+              <span v-else-if="item.scope === 'times'">
+                {{ $methodsTools.onlyForma(scope.row[item.prop1]) }} -
+                {{ $methodsTools.onlyForma(scope.row[item.prop2]) }}
+              </span>
+              <span v-else>{{ scope.row[item.prop] }}</span></template
             >
           </el-table-column>
         </el-table>
         <pagination
           :total="total5"
-          :pageSize="formData.pageSize"
-          :currentPage="formData.pageNum"
+          :pageSize="formDataBK.pageSize"
+          :currentPage="formDataBK.pageNum"
           @handleSizeChange="handleSizeChange5"
           @handleCurrentChange="handleCurrentChange5"
         />
@@ -1613,14 +1654,36 @@ export default {
         {
           label: "商品编码",
           prop: "code",
+          width: "140px",
         },
         {
           label: "商品名称",
           prop: "goodsName",
+          width: "260px",
         },
         {
           label: "标准价格(¥)",
           prop: "standPrice",
+          width: "140px",
+        },
+        {
+          label: "商品状态",
+          prop: "status",
+          scope: "status1",
+          width: "110px",
+        },
+        {
+          label: "商品有效期",
+          prop1: "validityStartTime",
+          prop2: "validityEndTime",
+          scope: "times",
+          width: "310px",
+        },
+        {
+          label: "商品可售状态",
+          prop: "goodsStatus",
+          scope: "status",
+          width: "130px",
         },
       ],
       total5: 0,
@@ -1646,21 +1709,35 @@ export default {
           placeholder: "请输入讲义标题/讲义编码",
         },
       ],
+      formListBK: [
+        {
+          prop: "searchKey",
+          placeholder: "请输入商品编码/商品名称",
+        },
+      ],
+      formDataBK: {
+        searchKey: "",
+        pageNum: 1,
+        pageSize: 10,
+        educationTypeId: "",
+        businessId: "",
+      },
       //   视频商品表格数据------------------------------------------------------------------------start
       tableSetTSB: [
         { label: "排序", prop: "sort", scope: "inputs", width: "100" },
-        { label: "科目名称", prop: "code" },
-        { label: "课程名称", prop: "prefixName", width: "120" },
-        { label: "科目", prop: "subjectName" },
+        { label: "课程编码", prop: "code", width: "140" },
+        { label: "课程名称", prop: "prefixName", width: "190" },
+        { label: "科目", prop: "subjectName", width: "150" },
         { label: "专业", prop: "categoryName" },
-        { label: "院校", prop: "schoolName" },
+        { label: "院校", prop: "schoolName", width: "150" },
         {
           label: "业务层次",
           prop1: "projectName",
           prop2: "businessName",
           scope: "busin",
+          width: "350px",
         },
-        { label: "教育类型", prop: "educationName" },
+        { label: "教育类型", prop: "educationName", width: "160" },
         {
           label: "发布状态",
           prop: "publishStatus",
@@ -1669,14 +1746,14 @@ export default {
         },
       ],
       tableSetTSBBOX: [
-        { label: "课程编码", prop: "code" },
-        { label: "名称前缀", prop: "prefixName", width: "120" },
-        { label: "课程标题", prop: "courseName" },
+        { label: "课程编码", prop: "code", width: "140px" },
+        { label: "名称前缀", prop: "prefixName", width: "160px" },
+        { label: "课程标题", prop: "courseName", width: "300px" },
         {
           label: "发布状态",
           prop: "publishStatus",
           scope: "Status",
-          width: "120",
+          width: "120px",
         },
       ],
       total: 0, //一共多少条
@@ -1690,21 +1767,27 @@ export default {
         key: "",
       },
       formLists: [
-        {
-          prop: "schoolId",
-          placeholder: "院校",
-          scope: "schoolList",
-          edu: "educationTypeId",
-        },
+        // {
+        //   prop: "schoolId",
+        //   placeholder: "院校",
+        //   scope: "schoolList",
+        //   edu: "educationTypeId",
+        // },
         {
           prop: "majorId",
           placeholder: "专业",
           scope: "Professional",
           edu: "educationTypeId",
         },
+        {
+          prop: "subjectId",
+          placeholder: "科目",
+          scope: "sujectType",
+          edu: "educationTypeId",
+        },
         {
           prop: "key",
-          placeholder: "请输入课程标题/课程编码",
+          placeholder: "课程标题/课程编码/标题前缀",
         },
       ],
       disCheckList: [],
@@ -1715,17 +1798,23 @@ export default {
       auditionList: [],
       aboutJYBox: false,
       jYtableSet: [
-        { label: "讲义编码", prop: "encoder" },
+        { label: "讲义编码", prop: "encoder", width: "150px" },
         { label: "讲义标题", prop: "handoutsName" },
+        // {
+        //   label: "适合业务层级",
+        //   prop: "courseHandoutsBusinessVo",
+        //   prop1: "educationName",
+        //   prop2: "projectName",
+        //   prop3: "businessName",
+        //   scope: "eduType",
+        // },
         {
-          label: "适合业务层级",
-          prop: "courseHandoutsBusinessVo",
-          prop1: "educationName",
-          prop2: "projectName",
-          prop3: "businessName",
-          scope: "eduType",
+          label: "是否可下载",
+          prop: "canDownload",
+          scope: "canDownload",
+          width: "140px",
         },
-        { label: "发布状态", prop: "status", scope: "Status" },
+        { label: "发布状态", prop: "status", scope: "Status", width: "140px" },
       ],
       jYtableData: [],
       jYactiveBoxs: false,
@@ -1738,9 +1827,10 @@ export default {
         pageSize: 10,
         status: 1,
         examType: 1,
+        subjectId:"",
         educationTypeId: "",
         businessId: "",
-        names: "",
+        key:""
       },
       formList3: [
         {
@@ -1763,8 +1853,14 @@ export default {
           ],
         },
         {
-          prop: "names",
-          placeholder: "请输入标题名称",
+          prop: "subjectId",
+          placeholder: "科目",
+          scope: "sujectType",
+          edu: "educationTypeId",
+        },
+        {
+          prop: "key",
+          placeholder: "标题前缀/标题编码/标题名称",
         },
       ],
       //   视频商品表格数据------------------------------------------------------------------------end
@@ -1772,15 +1868,37 @@ export default {
       //   题库商品表格数据------------------------------------------------------------------------start
       tableSetTSB2: [
         { label: "排序", prop: "sort", scope: "inputs", width: "100" },
+        { label: "题卷名称", prop: "name", width: "300" },
         { label: "科目", prop: "subjectName", width: "130" },
-        { label: "题卷名称", prop: "name" },
+        {
+          label: "业务层次",
+          prop1: "projectName",
+          prop2: "businessName",
+          width: "300",
+          scope: "businessType",
+        },
+        { label: "教育类型", prop: "educationName", width: "160" },
         { label: "题库类型", prop: "type", scope: "type", width: "120" },
+        {
+          label: "发布状态",
+          prop: "publishStatus",
+          scope: "Status",
+        },
       ],
       tableSetTSBBOX2: [
-        { label: "编码", prop: "code" },
-        { label: "前缀", prop: "prefixName", width: "120" },
-        { label: "名称", prop: "name" },
-        { label: "题库类型", prop: "type", scope: "type" },
+        { label: "题卷编码", prop: "code", width: "120" },
+        { label: "题卷前缀", prop: "prefixName", width: "120" },
+        { label: "题卷名称", prop: "name", width: "300" },
+        { label: "科目", prop: "subjectName", width: "160" },
+        {
+          label: "业务层次",
+          prop1: "projectName",
+          prop2: "businessName",
+          width: "300",
+          scope: "businessType",
+        },
+        { label: "教育类型", prop: "educationName", width: "160" },
+        { label: "题库类型", prop: "type", scope: "type", width: "120" },
         {
           label: "发布状态",
           prop: "publishStatus",
@@ -1840,6 +1958,26 @@ export default {
     this.getJyData();
   },
   methods: {
+    judgeResult1(v) {
+      if (
+        Number(this.listData.lowestPrice) &&
+        Number(this.listData.lowestPrice) > Number(this.listData.standPrice)
+      ) {
+        this.listData.lowestPrice = "";
+        this.$message.warning("商品最低价格高于标准价格,请重新输入");
+        return;
+      }
+    },
+    judgeResult2(v) {
+      if (
+        Number(this.listData.standPrice) &&
+        Number(this.listData.standPrice) < Number(this.listData.lowestPrice)
+      ) {
+        this.listData.lowestPrice = "";
+        this.$message.warning("商品最低价格高于标准价格,请重新输入");
+        return;
+      }
+    },
     zhText(param) {
       const { columns, data } = param;
       const sums = [];
@@ -1908,21 +2046,34 @@ export default {
       this.goodsNames = "";
       this.goodsCode = "";
     },
-    getGoodsList() {
+    getGoodsList(int) {
       return new Promise((resolve, reject) => {
         if (!this.listData.businessId) {
           this.$message.warning("请先选择业务层次");
           return;
         } else {
-          this.formData.businessId = this.listData.businessId;
+          this.formDataBK.businessId = this.listData.businessId;
         }
         if (this.listData.goodsType === 3) {
-          this.formData.filtration = 2;
+          this.formDataBK.filtration = 2;
         }
         if (this.listData.goodsType === 4) {
-          this.formData.filtration = 1;
+          this.formDataBK.filtration = 1;
+        }
+        if (int === 1) {
+          this.formDataBK.pageNum = 1;
+        }
+        if (int === 2) {
+          this.formDataBK.searchKey = "";
+          this.formDataBK.pageNum = 1;
         }
-        this.$api.inquireGoodslistGoods(this.formData).then((res) => {
+        if (int === 3) {
+          this.formDataBK.searchKey = "";
+          this.formDataBK.pageNum = 1;
+          this.formDataBK.pageSize = 10;
+        }
+        var data = JSON.parse(JSON.stringify(this.formDataBK));
+        this.$api.inquireGoodslistGoods(data).then((res) => {
           for (let i = 0; i < res.rows.length; i++) {
             if (res.rows[i].goodsId === this.getNewGoodsId) {
               res.rows[i].goodsStatus = 1;
@@ -1935,16 +2086,16 @@ export default {
       });
     },
     handleSizeChange5(v) {
-      this.formData.pageSize = v;
-      this.formData.pageNum = 1;
+      this.formDataBK.pageSize = v;
+      this.formDataBK.pageNum = 1;
       this.getGoodsList();
     },
     handleCurrentChange5(v) {
-      this.formData.pageNum = v;
+      this.formDataBK.pageNum = v;
       this.getGoodsList();
     },
     async goToActiveGoods() {
-      await this.getGoodsList();
+      await this.getGoodsList(3);
       this.goodsId = this.listData.makeGoodsId;
       this.goodsNames = this.listData.makeGoodsName;
       this.goodsCode = this.listData.makeGoodsCode;
@@ -2170,7 +2321,7 @@ export default {
           res.rows.map((item, index) => {
             var array = [];
             item.courseProjectTypeVo.map((items, indexs) => {
-              array.push(items.id);
+              array.push(items.educationId);
             });
             item.courseArrays = array;
           });
@@ -2358,7 +2509,7 @@ export default {
             }
           });
           this.majorOption.map((items) => {
-            if (items.courseArrays.indexOf(item.projectId) !== -1) {
+            if (items.courseArrays.indexOf(item.educationId) !== -1) {
               newMajorOption.push(items);
             }
           });
@@ -2404,7 +2555,7 @@ export default {
             }
           });
           this.majorOption.map((items) => {
-            if (items.courseArrays.indexOf(item.projectId) !== -1) {
+            if (items.courseArrays.indexOf(item.educationId) !== -1) {
               newMajorOption.push(items);
             }
           });
@@ -2755,6 +2906,13 @@ export default {
         );
         // this.listData.standPriceJson[this.NUMBerS] = this.listitemData;
       } else {
+        const INQU = this.listData.standPriceJson.some((item) => {
+          return item.priceTypeId === this.listitemData.priceTypeId;
+        });
+        if (INQU) {
+          this.$message.warning("已存在相同费用类型,禁止重复");
+          return;
+        }
         this.listitem[0].options.map((i, k) => {
           if (i.costId === Number(this.listitemData.priceTypeId)) {
             this.listitemData.priceTypeName = i.costName;
@@ -2846,6 +3004,21 @@ export default {
         });
       });
     },
+    prepareEnd() {
+      this.$refs.searchBox.changeEducationType(
+        this.listData.educationTypeId,
+        true
+      );
+      var a = ''
+      if (this.listData.businessId) {
+        this.newCourTypeOptions.forEach(item => {
+          if(item.id == this.listData.businessId){
+            a = item.projectId
+          }
+        })
+        this.$refs.searchBox.changeSuject(a)
+      }
+    },
     submitTab() {
       if (this.activeLists.length === 0) {
         this.dialogVisibleTableBoxs = false;
@@ -2946,14 +3119,15 @@ export default {
       this.formData3.pageNum = 1;
       // this.formData3.majorId = "";
       // this.formData3.schoolId = "";
-      this.formData3.names = "";
+      this.formData3.key = "";
+      this.formData3.subjectId = "";
       this.search3();
     },
     search3(int) {
       var self = this;
       var data = JSON.parse(JSON.stringify(self.formData3));
       if (self.formData3.examType === 1) {
-        data.moduleName = data.names;
+        // data.moduleName = data.names;
         self.$api.inquireBankModule(data).then((res) => {
           res.rows.forEach((item) => {
             item.ids = 1 + "-" + item.moduleExamId;
@@ -2973,7 +3147,7 @@ export default {
         });
       }
       if (self.formData3.examType === 2) {
-        data.name = data.names;
+        // data.name = data.names;
         self.$api.inquirebankchapterList(data).then((res) => {
           res.rows.forEach((item) => {
             item.ids = 2 + "-" + item.chapterExamId;
@@ -2992,7 +3166,7 @@ export default {
         });
       }
       if (self.formData3.examType === 3) {
-        data.examName = data.names;
+        // data.examName = data.names;
         self.$api.inquirebankexamList(data).then((res) => {
           res.rows.forEach((item) => {
             item.ids = 3 + "-" + item.examId;
@@ -3014,7 +3188,8 @@ export default {
     },
     editAddBoxs2(int) {
       var self = this;
-      self.formData3.examType = 1;
+      this.formData3.examType = 1;
+      this.formData3.subjectId = ''
       var data = JSON.parse(JSON.stringify(this.formData3));
       if (this.listData.educationTypeId) {
         data.educationTypeId = this.listData.educationTypeId;
@@ -3044,9 +3219,9 @@ export default {
           if (int === 1) {
             self.$nextTick(function () {
               self.$refs.multipleTable2.clearSelection();
-              self.$refs.searchBox.changeEducationType(
-                self.listData.educationTypeId
-              );
+              // self.$refs.searchBox.changeEducationType(
+              //   self.listData.educationTypeId
+              // );
               self.formData3.businessId = self.listData.businessId;
             });
           }
@@ -3072,9 +3247,9 @@ export default {
           if (int === 1) {
             self.$nextTick(function () {
               self.$refs.multipleTable2.clearSelection();
-              self.$refs.searchBox.changeEducationType(
-                self.listData.educationTypeId
-              );
+              // self.$refs.searchBox.changeEducationType(
+              //   self.listData.educationTypeId
+              // );
               self.formData3.businessId = self.listData.businessId;
             });
           }
@@ -3101,9 +3276,9 @@ export default {
           if (int === 1) {
             self.$nextTick(function () {
               self.$refs.multipleTable2.clearSelection();
-              self.$refs.searchBox.changeEducationType(
-                self.listData.educationTypeId
-              );
+              // self.$refs.searchBox.changeEducationType(
+              //   self.listData.educationTypeId
+              // );
               self.formData3.businessId = self.listData.businessId;
             });
           }
@@ -3277,7 +3452,7 @@ export default {
 </script>
 
 <style lang="less" scoped>
-.checkBoxSty1 {
+.checkBix {
   display: flex;
   flex-direction: column;
 }

+ 7 - 1
src/views/Marketing/goods/commodityManageMent/index.vue

@@ -163,11 +163,13 @@ export default {
           prop: "goodsName",
           scope: "editInfo",
           hidden: true,
+          width:"330px"
         },
         {
           label: "商品编码",
           prop: "code",
           hidden: true,
+          width:"130px"
         },
         {
           label: "专业",
@@ -184,7 +186,7 @@ export default {
           prop1: "projectName",
           prop2: "businessName",
           hidden: true,
-          width: "220px",
+          width: "380px",
           scope: "InfoMore",
         },
         {
@@ -201,6 +203,7 @@ export default {
           label: "商品内容视图",
           hidden: true,
           scope: "treeWatch",
+          width:"130px"
         },
         {
           label: "商品价格",
@@ -237,18 +240,21 @@ export default {
           label: "供应方(服务)",
           prop: "supplyName",
           hidden: true,
+          width:"130px"
         },
         {
           label: "最后编辑时间",
           prop: "updateTime",
           hidden: true,
           scope: "aTimeList",
+          width:"230px"
         },
         {
           label: "创建时间",
           prop: "createTime",
           hidden: true,
           scope: "aTimeList",
+          width:"230px"
         },
         {
           label: "可售状态",

+ 4 - 1
src/views/Marketing/goods/courseInquiryList/index.vue

@@ -214,13 +214,14 @@ export default {
           label: "教育类型",
           prop: "educationName",
           hidden: true,
+          width:"180px"
         },
         {
           label: "业务层次",
           prop1: "projectName",
           prop2: "businessName",
           hidden: true,
-          width: "220px",
+          width: "360px",
           scope: "InfoMore",
         },
         {
@@ -232,11 +233,13 @@ export default {
           label: "商品编码",
           prop: "code",
           hidden: true,
+          width:"130px"
         },
         {
           label: "商品名称",
           prop: "goodsName",
           hidden: true,
+          width:"330px"
         },
         {
           label: "商品状态",

+ 26 - 26
src/views/Marketing/order/orderList/details/goodsManage.vue

@@ -224,11 +224,11 @@ export default {
           value: 2,
         },
         {
-          label: "面授",
+          label: "补考",
           value: 3,
         },
         {
-          label: "服务",
+          label: "前培",
           value: 4,
         },
         {
@@ -252,25 +252,26 @@ export default {
       ],
       lists: [
         {
-          label: "商品标准价格",
-          prop: "standPrice",
+          label: "商品编码",
+          prop: "code",
         },
         {
           label: "商品年份",
           prop: "year",
         },
         {
-          label: "商品最低价格",
-          prop: "lowestPrice",
+          label: "商品名称",
+          prop: "goodsName",
         },
         {
           label: "供应方(服务)",
           prop: "supplyName",
         },
         {
-          label: "支付金额",
-          prop: "goodsReceived",
+          label: "支付状态",
+          prop: "payStatus",
           dataType: "listData",
+          scope: "payType",
         },
         {
           label: "商品类型",
@@ -278,18 +279,9 @@ export default {
           scope: "select",
         },
         {
-          label: "商品编码",
-          prop: "code",
-        },
-        {
-          label: "支付状态",
-          prop: "payStatus",
+          label: "支付金额",
+          prop: "goodsReceived",
           dataType: "listData",
-          scope: "payType",
-        },
-        {
-          label: "商品名称",
-          prop: "goodsName",
         },
         {
           label: "业务层级",
@@ -299,24 +291,32 @@ export default {
           scope: "yecj",
         },
         {
-          label: "商品标准价格明细",
-          prop: "payer",
-          scope: "table",
+          label: "商品标准价格",
+          prop: "standPrice",
+        },
+        {
+          label: "学时",
+          prop: "classHours",
+        },
+        {
+          label: "商品最低价格",
+          prop: "lowestPrice",
         },
         {
           label: "商品有效期",
           prop: "validity",
           scope: "startEndTime",
         },
+        {
+          label: "商品标准价格明细",
+          prop: "payer",
+          scope: "table",
+        },
         {
           label: "学习有效期",
           prop: "studentTime",
           scope: "startEndTime",
         },
-        {
-          label: "学时",
-          prop: "classHours",
-        },
       ],
       lists2: [
         {

+ 2 - 1
src/views/Marketing/order/orderList/index.vue

@@ -183,6 +183,7 @@ export default {
           label: "商品名称",
           prop: "goodsName",
           hidden: true,
+          width:"280px"
         },
         {
           label: "商品业务层级",
@@ -191,7 +192,7 @@ export default {
           prop3: "businessName",
           hidden: true,
           scope: "eduTypes",
-          width: "280px",
+          width: "380px",
         },
         {
           label: "商品年份",

+ 29 - 9
src/views/education/classManageMent/classHours/index.vue

@@ -187,7 +187,7 @@ export default {
           label: "学员编码",
           prop: "studentCode",
           hidden: true,
-          width: "130px",
+          width: "180px",
         },
         {
           label: "学员姓名",
@@ -198,7 +198,7 @@ export default {
           label: "学员身份证",
           prop: "idCard",
           hidden: true,
-          width: "160px",
+          width: "180px",
         },
         {
           label: "绑定手机号码",
@@ -206,6 +206,26 @@ export default {
           hidden: true,
           width: "130px",
         },
+        {
+          label: "所购商品",
+          prop: "goodsName",
+          hidden: true,
+          width: "280px",
+        },
+        {
+          label: "所在班级",
+          prop: "className",
+          hidden: true,
+          width: "160px",
+        },
+        {
+          label: "班级有效期",
+          prop1: "classStartTime",
+          prop2: "classEndTime",
+          hidden: true,
+          scope: "TimeLists",
+          width: "260px",
+        },
         {
           label: "学时",
           prop: "classHours",
@@ -217,7 +237,7 @@ export default {
           prop2: "secAllNum",
           hidden: true,
           scope: "computer",
-          width: "140px",
+          width: "160px",
         },
         {
           label: "做题进度(章卷)",
@@ -225,21 +245,21 @@ export default {
           prop2: "examNum",
           hidden: true,
           scope: "computer",
-          width: "130px",
+          width: "160px",
         },
         {
           label: "学习开始时间",
           prop: "startTime",
           hidden: true,
           scope: "aTimeList",
-          width: "120px",
+          width: "160px",
         },
         {
           label: "学习结束时间",
           prop: "endTime",
           hidden: true,
           scope: "aTimeList",
-          width: "120px",
+          width: "160px",
         },
         {
           label: "学习有效期",
@@ -247,14 +267,14 @@ export default {
           prop2: "studyEndTime",
           hidden: true,
           scope: "TimeLists",
-          width: "220px",
+          width: "310px",
         },
         {
           label: "填写资料审核状态",
           prop: "profileStatus",
           hidden: true,
           scope: "isOptions",
-          width: "130px",
+          width: "160px",
           options: [
             {
               label: "审核通过",
@@ -283,7 +303,7 @@ export default {
           prop1: "rebuildNum",
           hidden: true,
           scope: "againStudent",
-          width: "150px",
+          width: "160px",
         },
       ],
       tableData: [], //表单数据

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 586 - 547
src/views/education/classManageMent/classHoursReview/studyTimes.vue


+ 7 - 2
src/views/education/classManageMent/classList/addClass/index.vue

@@ -176,7 +176,7 @@
               <el-option
                 v-for="(item, index) in teacherList"
                 :key="index"
-                :label="item.userName"
+                :label="item.nickName"
                 :value="item.userId"
               >
               </el-option>
@@ -428,6 +428,7 @@ export default {
         {
           label: "商品编码",
           prop: "code",
+          width:"130px"
         },
         {
           label: "年份",
@@ -436,6 +437,7 @@ export default {
         {
           label: "商品名称",
           prop: "goodsName",
+          width:"280px"
         },
         {
           label: "业务层级",
@@ -443,21 +445,24 @@ export default {
           prop2: "projectName",
           prop3: "businessName",
           scope: "moreList",
-          width: "250px",
+          width: "340px",
         },
         {
           label: "商品类型",
           prop: "goodsType",
           scope: "goodsType",
+          width:"100px"
         },
         {
           label: "有效状态",
           prop: "status",
           scope: "status",
+          width:"100px"
         },
         {
           label: "商品标价",
           prop: "standPrice",
+          width:"100px"
         },
       ],
       templateRadio: "",

+ 2 - 2
src/views/education/classManageMent/classList/index.vue

@@ -143,7 +143,7 @@ export default {
           objProp: "goodsList",
           hidden: true,
           scope: "objType",
-          width: "130px",
+          width: "280px",
         },
         {
           label: "班级编码",
@@ -164,7 +164,7 @@ export default {
           prop: "className",
           hidden: true,
           scope: "editInfo",
-          width: "130px",
+          width: "280px",
         },
         {
           label: "学时",

+ 58 - 50
src/views/education/classManageMent/classList/manageClass/baseInfo.vue

@@ -13,7 +13,11 @@
             <el-form-item label="所属商品课程">
               <div class="flex_s">
                 <div>商品编码:{{ listData.goodsList[0].code }}</div>
-                <div>商品业务层级:{{ listData.goodsList[0].code }}</div>
+                <div style="display:flex;">
+                  <div>商品业务层级:</div><div style="flex:1">{{
+                    `${listData.goodsList[0].educationName}-${listData.goodsList[0].projectName}-${listData.goodsList[0].businessName}`
+                  }}</div>
+                </div>
                 <div>学时:{{ listData.goodsList[0].classHours }}</div>
                 <div>年份:{{ listData.goodsList[0].year }}</div>
                 <div>商品名称:{{ listData.goodsList[0].goodsName }}</div>
@@ -135,7 +139,7 @@
                 placeholder="选择开始日期时间"
                 @change="changeTimeList1"
                 :disabled="classStartStatus"
-                style="margin-bottom:10px;"
+                style="margin-bottom: 10px"
               >
               </el-date-picker>
               <el-date-picker
@@ -225,7 +229,7 @@
                 <el-option
                   v-for="(item, index) in teacherList"
                   :key="index"
-                  :label="item.userName"
+                  :label="item.nickName"
                   :value="item.userId"
                 >
                 </el-option>
@@ -401,55 +405,59 @@ export default {
     },
     //   初始获取数据
     search() {
-      this.$api.obtainGradegrade(this.$route.query.id).then((res) => {
-        if (res.data.areasId) {
-          this.newCityList = this.cityList.filter((item) => {
-            return item.parentId == res.data.areasId;
-          });
-        }
-        if (res.data.learningStatus === 3) {
-          res.data.learningTimeStart = this.$methodsTools.time10to13(
-            res.data.learningTimeStart,
-            2
-          );
-        }
-        if (res.data.classStartTime && res.data.classEndTime) {
-          res.data.classStartTime = this.$methodsTools.time10to13(
-            res.data.classStartTime,
-            2
-          );
-          res.data.classEndTime = this.$methodsTools.time10to13(
-            res.data.classEndTime,
-            2
-          );
-          // classStartStatus
-          if (new Date().getTime() > res.data.classEndTime) {
-            this.classStartStatus = true;
-            this.classEndStatus = true;
-          } else {
-            this.classStartStatus = true;
+      this.$api
+        .obtainGradegrade(this.$route.query.id)
+        .then((res) => {
+          if (res.data.areasId) {
+            this.newCityList = this.cityList.filter((item) => {
+              return item.parentId == res.data.areasId;
+            });
           }
-        }
-        if (
-          res.data.goodsList[0].studyStartTime &&
-          res.data.goodsList[0].studyEndTime
-        ) {
-          this.timeArrays = [
-            this.$methodsTools.time10to13(
-              res.data.goodsList[0].studyStartTime,
+          if (res.data.learningStatus === 3) {
+            res.data.learningTimeStart = this.$methodsTools.time10to13(
+              res.data.learningTimeStart,
+              2
+            );
+          }
+          if (res.data.classStartTime && res.data.classEndTime) {
+            res.data.classStartTime = this.$methodsTools.time10to13(
+              res.data.classStartTime,
               2
-            ),
-            this.$methodsTools.time10to13(
-              res.data.goodsList[0].studyEndTime,
+            );
+            res.data.classEndTime = this.$methodsTools.time10to13(
+              res.data.classEndTime,
               2
-            ),
-          ];
-        }
-        this.minNums = res.data.studentNum;
-        this.listData = res.data;
-      }).finally(()=>{
-        this.$modal.closeLoading();
-      })
+            );
+            // classStartStatus
+            if (new Date().getTime() > res.data.classEndTime) {
+              this.classStartStatus = true;
+              this.classEndStatus = true;
+            } else {
+              this.classStartStatus = true;
+            }
+          }
+          if (
+            res.data.goodsList[0].studyStartTime &&
+            res.data.goodsList[0].studyEndTime
+          ) {
+            this.timeArrays = [
+              this.$methodsTools.time10to13(
+                res.data.goodsList[0].studyStartTime,
+                2
+              ),
+              this.$methodsTools.time10to13(
+                res.data.goodsList[0].studyEndTime,
+                2
+              ),
+            ];
+          }
+          this.minNums = res.data.studentNum;
+          console.log(res.data);
+          this.listData = res.data;
+        })
+        .finally(() => {
+          this.$modal.closeLoading();
+        });
     },
     //官方接口是否出现
     getVoselect() {
@@ -604,7 +612,7 @@ export default {
 }
 .flex_s {
   display: flex;
-  align-items: center;
+  // align-items: center;
   flex-wrap: wrap;
   & > div {
     flex-shrink: 0;

+ 1 - 1
src/views/education/classManageMent/learningHoursRecordList/exportTable.vue

@@ -111,7 +111,7 @@ export default {
       this.copyBusiness.forEach((item) => {
         if (item.id == ids) {
           this.formData.eduId = item.educationId;
-          this.formData.businessName = `${item.projectName}-${item.businessName}`
+          this.formData.businessName = `${item.educationName}-${item.projectName}-${item.businessName}`
           this.changeEdu(item.educationId, true);
         }
       });

+ 36 - 3
src/views/education/classManageMent/learningHoursRecordList/hoursTimesRecord.vue

@@ -31,7 +31,14 @@
         <li>绑定手机号码:{{ userData.telPhone }}</li>
       </ul>
       <div class="photoSty1">
+        <img
+          style="width: 100%; height: 100%"
+          v-if="!recent_photos"
+          src="@/assets/404_images/wuyuxaog.png"
+          alt=""
+        />
         <el-image
+          v-else
           style="width: 100%; height: 100%"
           :src="$methodsTools.splitImgHost(recent_photos)"
           :preview-src-list="[$methodsTools.splitImgHost(recent_photos)]"
@@ -40,7 +47,14 @@
         <div class="pos_bottom">一寸头像图</div>
       </div>
       <div class="photoSty2">
+        <img
+          style="width: 100%; height: 100%"
+          v-if="!idcard_face_photo"
+          src="@/assets/404_images/wuyuxaog.png"
+          alt=""
+        />
         <el-image
+          v-else
           style="width: 100%; height: 100%"
           :src="$methodsTools.splitImgHost(idcard_face_photo)"
           :preview-src-list="[$methodsTools.splitImgHost(idcard_face_photo)]"
@@ -49,7 +63,14 @@
         <div class="pos_bottom">身份证正面照片</div>
       </div>
       <div class="photoSty2" style="margin-right: 0px">
+        <img
+          style="width: 100%; height: 100%"
+          v-if="!idcard_national_photo"
+          src="@/assets/404_images/wuyuxaog.png"
+          alt=""
+        />
         <el-image
+          v-else
           style="width: 100%; height: 100%"
           :src="$methodsTools.splitImgHost(idcard_national_photo)"
           :preview-src-list="[
@@ -60,7 +81,7 @@
         <div class="pos_bottom">身份证背面照片</div>
       </div>
     </div>
-    <div style="margin-top:12px;">
+    <div style="margin-top: 12px">
       <el-table
         v-loading="loading"
         ref="multipleTable"
@@ -91,6 +112,12 @@
                   : "未知"
               }}
             </span>
+            <span v-else-if="item.scope === 'durationTime'">
+              {{ $methodsTools.secondToDate(scope.row[item.prop], false) }}
+            </span>
+            <span v-else-if="item.scope === 'score'">
+              {{ scope.row[item.prop] ? scope.row[item.prop] + "分" : "" }}
+            </span>
             <span v-else>{{ scope.row[item.prop] }}</span></template
           >
         </el-table-column>
@@ -145,6 +172,7 @@ export default {
         {
           label: "节时长(秒)",
           prop: "durationTime",
+          scope: "durationTime",
         },
         {
           label: "学习/做题时间",
@@ -158,6 +186,11 @@ export default {
           label: "学习/做题状态",
           prop: "studyStatusTxt",
         },
+        {
+          label: "测试成绩",
+          prop: "score",
+          scope: "score",
+        },
       ],
       tableData: [],
       formData: {
@@ -185,7 +218,7 @@ export default {
     getUserInfo() {
       this.$api
         .inquireGradegradelistUserlistPeriod({
-          gradeId: this.objs.id,
+          gradeId: this.objs.gradeId,
           userId: this.objs.userId,
           goodsId: this.objs.goodsId,
         })
@@ -205,7 +238,7 @@ export default {
     search() {
       this.loading = true;
       let data = {
-        gradeId: this.objs.id,
+        gradeId: this.objs.gradeId,
         userId: this.objs.userId,
         goodsId: this.objs.goodsId,
         // pageSize: this.formData.pageSize,

+ 12 - 4
src/views/education/classManageMent/learningHoursRecordList/index.vue

@@ -201,8 +201,8 @@ export default {
           ],
         },
         {
-          prop: "goodsName",
-          placeholder: "请输入关键内容",
+          prop: "searchKey",
+          placeholder: "请输入姓名/身份证",
         },
       ],
       formData: {
@@ -289,7 +289,15 @@ export default {
           options: [
             {
               label: "已完成",
-              value: 0 || 1 || 2,
+              value: 0,
+            },
+            {
+              label: "已完成",
+              value: 1,
+            },
+            {
+              label: "已完成",
+              value: 2,
             },
             {
               label: "未完成",
@@ -349,7 +357,7 @@ export default {
         .inquireGradegradeListexport({
           businessId: data.businessid,
           studyStatus: data.studyStatus,
-          businessName:data.businessName,
+          businessName: data.businessName,
           officialStatus:
             data.studyStatus === 2 ? data.officialStatus : undefined,
         })

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 550 - 512
src/views/education/classManageMent/learningHoursRecordList/studyTimesRecord.vue


+ 22 - 2
src/views/education/classManageMent/listOfhoursToBeReviewed/index.vue

@@ -104,8 +104,8 @@ export default {
           scope: "moreDataPicker",
         },
         {
-          prop: "goodsName",
-          placeholder: "请输入关键内容",
+          prop: "searchKey",
+          placeholder: "请输入姓名/身份证",
         },
       ],
       formData: {
@@ -140,6 +140,26 @@ export default {
           hidden: true,
           width: "130px",
         },
+        {
+          label: "所购商品",
+          prop: "goodsName",
+          hidden: true,
+          width: "120px",
+        },
+        {
+          label: "所在班级",
+          prop: "className",
+          hidden: true,
+          width: "160px",
+        },
+        {
+          label: "班级有效期",
+          prop1: "classStartTime",
+          prop2: "classEndTime",
+          hidden: true,
+          scope: "TimeLists",
+          width: "260px",
+        },
         {
           label: "学时",
           prop: "classHours",

+ 3 - 3
src/views/education/classManageMent/studentMenu/index.vue

@@ -53,9 +53,9 @@
         <el-button :size="size" type="success" @click="moreActive(1)"
           >结业</el-button
         >
-        <el-button :size="size" type="warning" @click="moreActive(3)"
+        <!-- <el-button :size="size" type="warning" @click="moreActive(3)"
           >移除</el-button
-        >
+        > -->
         <el-select
           @change="search(3)"
           v-model="formData.studyCountMore"
@@ -83,7 +83,7 @@
         <el-button type="text" @click="addClick(props.scope.row, 2)"
           >学员详情</el-button
         >
-        <el-button type="text" @click="del(props.scope.row)">移除</el-button>
+        <!-- <el-button type="text" @click="del(props.scope.row)">移除</el-button> -->
       </template>
     </table-list>
     <pagination

+ 6 - 4
src/views/education/dataReview/dataConfig/index.vue

@@ -434,6 +434,7 @@ export default {
           label: "学员编码",
           prop: "userAccount",
           hidden: true,
+          width: "180px",
         },
         {
           label: "学员姓名",
@@ -445,7 +446,7 @@ export default {
           label: "学员身份证",
           prop: "idCard",
           hidden: true,
-          width: "160px",
+          width: "180px",
         },
         {
           label: "绑定手机号",
@@ -456,7 +457,7 @@ export default {
         {
           label: "所购商品",
           hidden: true,
-          width: "280px",
+          width: "290px",
           scope: "getShops",
         },
         {
@@ -604,11 +605,12 @@ export default {
             item.keyValue = JSON.parse(item.keyValue);
             var arst = [];
             for (let k in item.keyValue) {
-              arst.push(item.keyValue[k]);
+              if(item.keyValue[k].value){
+                arst.push(item.keyValue[k]);
+              }
             }
             item.keyValueArrays = arst;
           });
-
           this.recordList = res.rows;
           this.dialogVisibleRecord = true;
         });

+ 110 - 22
src/views/education/dataReview/informationTemplate/index.vue

@@ -111,8 +111,17 @@
                   placement="bottom"
                   trigger="click"
                   :disabled="eduType ? false : true"
-                >
-                  <el-checkbox-group v-model="cauType" class="checkboxSty">
+                  ><el-checkbox
+                    v-model="checkAll"
+                    @change="handleCheckAllChange"
+                    :indeterminate="isIndeterminate"
+                    >全选</el-checkbox
+                  >
+                  <el-checkbox-group
+                    v-model="cauType"
+                    class="checkboxSty"
+                    @change="handleCheckedCitiesChange"
+                  >
                     <el-checkbox
                       v-for="(item, index) in itemOption2"
                       :label="item.id"
@@ -583,10 +592,7 @@
             ><span>{{ item.fieldName }}</span>
           </div>
           <!-- @click="item.disable == true ? '' : changeStatus2s(item, index)" (旧)下面按钮事件 -->
-          <div
-            class="disChild"
-            @click="titleFunc"
-          >
+          <div class="disChild" @click="titleFunc">
             <i class="radiosty" :class="item.disable === true ? 'disable' : ''"
               ><div :class="item.required ? 'activeRadio' : ''"></div></i
             ><span>必填</span>
@@ -800,6 +806,8 @@ export default {
   components: { searchBoxNew, tableList, pagination },
   data() {
     return {
+      isIndeterminate: false,
+      checkAll: false,
       changeHeight: true,
       loading: false, //当前表单加载是否加载动画
       navText: {
@@ -828,13 +836,14 @@ export default {
           prop: "name",
           hidden: true,
           scope: "editInfo",
-          width: "240px",
+          // width: "240px",
         },
         {
           label: "适用业务层级",
           prop: "businessList",
           hidden: true,
           scope: "mapTypesBUS",
+          width: "380px",
         },
         // {
         //   label: "资料审核人",
@@ -854,8 +863,8 @@ export default {
           label: "状态",
           prop: "status",
           hidden: true,
-          width: "100px",
           scope: "status",
+          width: "100px",
         },
       ],
       tableData: [], //表单数据
@@ -964,6 +973,17 @@ export default {
         pageSize: 10,
       },
       formList5: [
+        {
+          prop: "educationTypeId",
+          placeholder: "教育类型",
+          scope: "educationType",
+        },
+        {
+          prop: "businessId",
+          placeholder: "业务层次",
+          scope: "businessLevel",
+          edu: "educationTypeId",
+        },
         {
           prop: "goodsName",
           placeholder: "请输入商品名称",
@@ -973,6 +993,7 @@ export default {
         {
           label: "商品编码",
           prop: "code",
+          width: "130px",
         },
         {
           label: "年份",
@@ -981,24 +1002,29 @@ export default {
         {
           label: "商品名称",
           prop: "goodsName",
+          width: "260px",
         },
         {
           label: "业务层级",
           scope: "maRY",
+          width: "360px",
         },
         {
           label: "商品类型",
           prop: "goodsType",
           scope: "types",
+          width: "100px",
         },
         {
           label: "有效状态",
           prop: "status",
           scope: "Status",
+          width: "100px",
         },
         {
           label: "商品标价",
           prop: "standPrice",
+          width: "100px",
         },
       ],
       disCheckList: [],
@@ -1009,7 +1035,7 @@ export default {
         {
           label: "商品编码",
           prop: "code",
-          width: "130",
+          width: "130px",
         },
         {
           label: "年份",
@@ -1018,26 +1044,29 @@ export default {
         {
           label: "商品名称",
           prop: "goodsName",
-          width: "230",
+          width: "260px",
         },
         {
           label: "业务层级",
           scope: "maRY",
-          width: "230",
+          width: "360px",
         },
         {
           label: "商品类型",
           prop: "goodsType",
           scope: "types",
+          width: "140px",
         },
         {
           label: "有效状态",
           prop: "status",
           scope: "Status",
+          width: "100px",
         },
         {
           label: "商品标价",
           prop: "standPrice",
+          width: "100px",
         },
       ],
       boxtableDataIsActive: [],
@@ -1077,6 +1106,63 @@ export default {
     this.getUserInfoList();
   },
   methods: {
+    handleCheckedCitiesChange() {
+      let nid = this.itemOption2.map((item) => {
+        return item.id;
+      });
+      this.checkAll = nid.every((item) => {
+        if (this.cauType.includes(item)) {
+          this.isIndeterminate = true;
+          return true;
+        } else {
+          return false;
+        }
+      });
+      if (this.cauType.length) {
+        this.isIndeterminate = true;
+      } else {
+        this.isIndeterminate = false;
+      }
+      if (this.checkAll) {
+        this.isIndeterminate = false;
+      }
+    },
+    handleCheckAllChange(val) {
+      if (val) {
+        let nid = this.itemOption2.map((item) => {
+          return item.id;
+        });
+        let arrays = this.cauType.concat(nid);
+        this.cauType = this.setFunc(arrays);
+        this.isIndeterminate = false;
+      } else {
+        let nid = this.itemOption2.map((item) => {
+          return item.id;
+        });
+        let newArr = [];
+        this.cauType.forEach((item) => {
+          if (!nid.includes(item)) {
+            newArr.push(item);
+          }
+        });
+        this.cauType = newArr;
+        console.log(this.cauType);
+        if (this.cauType.length) {
+          this.isIndeterminate = true;
+        } else {
+          this.isIndeterminate = false;
+        }
+      }
+    },
+    setFunc(arr) {
+      var arrays = [];
+      for (let i = 0; i < arr.length; i++) {
+        if (!arrays.includes(arr[i])) {
+          arrays.push(arr[i]);
+        }
+      }
+      return arrays;
+    },
     handleSizeChangea(v) {
       this.formDataa.pageSize = v;
       this.formDataa.pageNum = 1;
@@ -1118,10 +1204,10 @@ export default {
         .then((res) => {
           this.formDataa.goodsIds = ats.toString();
           this.$message.success("删除成功");
-          if(!this.formDataa.goodsIds){
-            this.dialogVisibleisActive = false
+          if (!this.formDataa.goodsIds) {
+            this.dialogVisibleisActive = false;
             this.search();
-            return
+            return;
           }
           this.getNewInfos();
         });
@@ -1243,8 +1329,8 @@ export default {
         this.total5 = res.total;
       });
     },
-    titleFunc(){
-      this.$message.warning("该选项默认必填且不允许修改")
+    titleFunc() {
+      this.$message.warning("该选项默认必填且不允许修改");
     },
     openYL() {
       this.dialogVisYL = true;
@@ -1260,9 +1346,9 @@ export default {
     changeStatus1(item, index) {
       if (item.checked) {
         item.checked = false;
-        var indexs = this.pzList1sss.findIndex(items => {
-          return items.fieldKey === item.fieldKey
-        })
+        var indexs = this.pzList1sss.findIndex((items) => {
+          return items.fieldKey === item.fieldKey;
+        });
         this.pzList1sss.splice(indexs, 1);
       } else {
         item.checked = true;
@@ -1400,12 +1486,12 @@ export default {
       }
       this.pzList2sss = JSON.parse(JSON.stringify(this.listData.keyValue2));
       data = data.filter((item) => {
-        if(item.fieldKey === "commitment_seal"){
-          item.required = true
+        if (item.fieldKey === "commitment_seal") {
+          item.required = true;
         }
         return item.fieldKey === "commitment_seal";
       });
-      console.log(data)
+      console.log(data);
       this.pzList2 = data;
       this.dialogVisibleLitsing2 = true;
     },
@@ -1449,6 +1535,7 @@ export default {
         }
       });
       this.itemOption2 = array;
+      this.handleCheckedCitiesChange();
     },
     initOptions() {
       this.$api.inquireCourseEducationType({ status: 1 }).then((res) => {
@@ -1495,6 +1582,7 @@ export default {
     },
     closeType(id) {
       this.cauType.splice(this.cauType.indexOf(id), 1);
+      this.handleCheckedCitiesChange();
     },
     del(v) {
       this.$alert(

+ 4 - 3
src/views/education/dataReview/stamp/index.vue

@@ -344,12 +344,13 @@ export default {
           label: "填写资料审核状态",
           hidden: true,
           scope: "isOKs",
-          width: "160px",
+          width: "140px",
         },
         {
           label: "学员编码",
           prop: "userAccount",
           hidden: true,
+          width: "180px",
         },
         {
           label: "学员姓名",
@@ -361,7 +362,7 @@ export default {
           label: "学员身份证",
           prop: "idCard",
           hidden: true,
-          width: "160px",
+          width: "180px",
         },
         {
           label: "绑定手机号",
@@ -372,7 +373,7 @@ export default {
         {
           label: "所购商品",
           hidden: true,
-          width: "280px",
+          width: "290px",
           scope: "getShops",
         },
         {

+ 4 - 3
src/views/education/examManagement/applicationData/bulkImportPlan/newRegister.vue

@@ -337,10 +337,11 @@ export default {
       let formData = new FormData();
       formData.append("file", file);
       this.$api
-        .editsystemsubscribeimportData(formData)
+        .editsystemimportUpdateData(formData)
         .then((res) => {
           this.tableDataSuccess = res.data.successList;
           this.tableDataError = res.data.errorList;
+          this.$message.info("导入操作执行成功")
         })
         .finally(() => {
           e.target.value = "";
@@ -376,7 +377,7 @@ export default {
       let formData = new FormData();
       formData.append("file", file);
       this.$api
-        .editsystemimportIdsData(formData)
+        .inquiresystemsubscribeimportIdsDataFilter(formData)
         .then((res) => {
           if (!res.data.length) {
             this.$message.warning("未检测到上传学员数据,请检查上传文件");
@@ -441,7 +442,7 @@ export default {
      */
     dowmErrorData() {
       this.$api
-        .inquiresystemsubscribeexportErrorNew(this.tableDataError)
+        .inquiresystemsubscribeexportexportErrorUpdate(this.tableDataError)
         .then((res) => {
           let url = baseUrls.baseURL + "common/download?fileName=" + res.msg;
           let link = document.createElement("a");

+ 37 - 12
src/views/education/examManagement/applicationData/bulkImportPlan/newYY.vue

@@ -307,18 +307,41 @@ export default {
      * 下载错误数据
      */
     dowmErrorData() {
-      this.$api
-        .inquiresystemsubscribeexportErrorNew(this.tableDataError)
-        .then((res) => {
-          let url = baseUrls.baseURL + "common/download?fileName=" + res.msg;
-          let link = document.createElement("a");
-          let fileName = "导入模板" + ".xlsx";
-          document.body.appendChild(link);
-          link.href = url;
-          link.dowmload = fileName;
-          link.click();
-          link.remove();
-        });
+      switch (this.typeInt) {
+        case 1:
+          this.$api
+            .inquiresystemsubscribeexportErrorNew(this.tableDataError)
+            .then((res) => {
+              let url =
+                baseUrls.baseURL + "common/download?fileName=" + res.msg;
+              let link = document.createElement("a");
+              let fileName = "导入模板" + ".xlsx";
+              document.body.appendChild(link);
+              link.href = url;
+              link.dowmload = fileName;
+              link.click();
+              link.remove();
+            });
+          break;
+        case 2:
+          this.$api
+            .inquiresystemsubscribeexportexportErrorTrain(this.tableDataError)
+            .then((res) => {
+              let url =
+                baseUrls.baseURL + "common/download?fileName=" + res.msg;
+              let link = document.createElement("a");
+              let fileName = "导入模板" + ".xlsx";
+              document.body.appendChild(link);
+              link.href = url;
+              link.dowmload = fileName;
+              link.click();
+              link.remove();
+            });
+          break;
+
+        default:
+          break;
+      }
     },
     /**
      *
@@ -385,6 +408,7 @@ export default {
           this.tableDataSuccess = res.data.successList;
           this.tableDataError = res.data.errorList;
           this.typeInt = 1;
+          this.$message.info("导入操作执行成功")
         })
         .finally(() => {
           e.target.value = "";
@@ -404,6 +428,7 @@ export default {
           this.tableDataSuccess = res.data.successList;
           this.tableDataError = res.data.errorList;
           this.typeInt = 2;
+          this.$message.info("导入操作执行成功")
         })
         .finally(() => {
           e.target.value = "";

+ 106 - 55
src/views/education/examManagement/applicationData/examRegistration/index.vue

@@ -87,7 +87,7 @@
       :close-on-click-modal="false"
     >
       <div slot="title" class="hearders">
-        <div class="leftTitle">考试登记</div>
+        <div class="leftTitle">成绩和证书登记</div>
         <div class="rightBoxs">
           <img
             src="@/assets/images/Close@2x.png"
@@ -97,44 +97,69 @@
         </div>
       </div>
       <div>
-        <ul>
-          <li class="liBVS" v-for="(item, index) in peopleList" :key="index">
+        <div v-for="(item, index) in peopleList" :key="index">
+          <div class="aListBottom">
             {{ item.realname }}
             <i
               v-if="peopleList.length > 1"
               class="el-icon-error clsw"
               @click="peopleList.splice(index, 1)"
             ></i>
-          </li>
-          <div style="clear: both"></div>
-        </ul>
-        <el-form
-          :model="listData"
-          label-width="120px"
-          class="demo-ruleForm"
-          :rules="rules"
-          ref="listData"
-        >
-          <el-form-item label="考试登记状态" prop="examStatus">
-            <el-radio-group v-model="listData.examStatus">
-              <el-radio :label="1">正常</el-radio>
-              <el-radio :label="2">缺考</el-radio>
-              <el-radio :label="3">作弊</el-radio>
-              <el-radio :label="4">替考</el-radio>
-            </el-radio-group>
-          </el-form-item>
-          <el-form-item label="考试登记补充" prop="remark">
-            <el-input
-              v-model="listData.remark"
-              type="textarea"
-              :rows="4"
-            ></el-input>
-          </el-form-item>
-        </el-form>
+          </div>
+          <el-form
+            label-width="120px"
+            :model="item"
+            :rules="rules"
+            ref="peopleList"
+          >
+            <el-form-item label="考试登记状态" prop="examStatus">
+              <el-radio-group v-model="item.examStatus">
+                <el-radio :label="0">待登记</el-radio>
+                <el-radio :label="1">正常</el-radio>
+                <el-radio :label="2">缺考</el-radio>
+                <el-radio :label="3">作弊</el-radio>
+                <el-radio :label="4">替考</el-radio>
+              </el-radio-group>
+            </el-form-item>
+            <el-form-item
+              v-if="getTimes(item)"
+              label="考试成绩"
+              prop="performance"
+            >
+              <el-input-number
+                size="mini"
+                :controls="false"
+                v-model="item.performance"
+                :min="0"
+              ></el-input-number>
+              <span style="margin-left: 6px">分</span>
+            </el-form-item>
+            <el-form-item
+              v-if="getTimes(item)"
+              label="考试结果"
+              prop="result"
+            >
+              <el-radio-group v-model="item.result">
+                <el-radio :label="1">通过</el-radio>
+                <el-radio :label="0">不通过</el-radio>
+              </el-radio-group>
+            </el-form-item>
+            <el-form-item v-if="getTimes(item)" label="证书编号">
+              <el-input v-model="item.certificateCode"></el-input>
+            </el-form-item>
+            <el-form-item label="登记补充">
+              <el-input
+                v-model="item.remark"
+                type="textarea"
+                :rows="4"
+              ></el-input>
+            </el-form-item>
+          </el-form>
+        </div>
       </div>
       <span slot="footer" class="dialog-footer">
         <el-button @click="dialogCG = false">取消</el-button>
-        <el-button type="primary" @click="submitChecks('listData')"
+        <el-button type="primary" @click="submitChecks('peopleList')"
           >确定</el-button
         >
       </span>
@@ -379,16 +404,38 @@ export default {
       total: 0, //一共多少条
       idcordList: "",
       copyAppid: "",
-      listData: {},
       dialogCG: false,
       peopleList: [],
       rules: {
         examStatus: [
           { required: true, message: "请选择考试登记状态", trigger: "change" },
         ],
+        performance: [
+          { required: true, message: "请输入考试成绩", trigger: "blur" },
+        ],
+        result: [
+          { required: true, message: "请选择考试结果", trigger: "change" },
+        ],
       },
     };
   },
+  computed: {
+    getTimes: function () {
+      return function (obj) {
+        var time = `${this.$methodsTools.onlyForma(
+          obj.applySiteExamTime,
+          false
+        )} ${obj.applySiteStartTime}:00`;
+        var newTime = new Date().getTime();
+        var theTime = new Date(time).getTime();
+        if (newTime > theTime && obj.examStatus == 1) {
+          return true;
+        } else {
+          return false;
+        }
+      };
+    },
+  },
   async mounted() {
     await this.getFirstOptions();
     this.search();
@@ -408,39 +455,34 @@ export default {
       this.peopleList = JSON.parse(
         JSON.stringify(this.$refs.tableList.allCheckData)
       );
-      this.listData = {};
       this.dialogCG = true;
-      this.$nextTick(() => {
-        this.$refs.listData.clearValidate();
-      });
+      // this.$nextTick(() => {
+      //   this.$refs.listData.clearValidate();
+      // });
     },
     submitChecks(formName) {
-      this.$refs[formName].validate((valid) => {
-        if (valid) {
-          if (!this.listData.examStatus) {
-            this.$message.warning("请选择考试登记状态");
-            return;
+      var num = 0;
+      for (let i = 0; i < this.$refs[formName].length; i++) {
+        this.$refs[formName][i].validate((valid) => {
+          if (valid) {
+            num++;
+          } else {
+            console.log("error submit!!");
+            return false;
           }
-          this.submitForm();
-        } else {
-          console.log("error submit!!");
-          return false;
-        }
-      });
+        });
+      }
+      if (num === this.$refs[formName].length) {
+        this.submitForm();
+      }
     },
     submitForm() {
-      var data = JSON.parse(JSON.stringify(this.listData));
-      var arrays = [];
-      this.peopleList.forEach((item) => {
-        arrays.push(item.subscribeId);
-      });
-      data.subscribeId = arrays;
-      this.$api.editsystemsubscribe(data).then((res) => {
+      var data = JSON.parse(JSON.stringify(this.peopleList));
+      this.$api.editMoresystemsubscribe(data).then((res) => {
         this.$message.success("批量考试登记修改成功");
         this.dialogCG = false;
         this.search();
-        this.$refs.tableList.allCheckData = [];
-        this.$refs.tableList.$refs.pagerset.clearSelection();
+        this.$refs.tableList.clearMoreActive();
       });
     },
     /**
@@ -562,6 +604,15 @@ export default {
 </script>
 
 <style lang="less" scoped>
+.aListBottom {
+  margin-left: 20px;
+  padding: 0px 6px;
+  border: 1px solid #999;
+  border-radius: 4px;
+  height: 30px;
+  line-height: 30px;
+  display: inline-block;
+}
 .liBVS {
   margin-right: 20px;
   margin-bottom: 12px;

+ 1 - 0
src/views/education/examManagement/examArrangement/index.vue

@@ -769,6 +769,7 @@ export default {
         {
           label: "预约/取消(人次)",
           prop: "people",
+          prop1: "cancelPeople",
           hidden: true,
           scope: "jumpPeolpe",
           type: 1,

+ 4 - 0
src/views/education/notificationManageMent/notificationList/index.vue

@@ -8,6 +8,7 @@
       @init="init"
     />
     <table-list
+      rowKey="informId"
       ref="tableList"
       :tableSets="tableSet"
       :tableData="tableData"
@@ -164,6 +165,7 @@ export default {
         num: true,
         choice: true,
         addHide: false,
+        openCheckMore: true,
         backFatherBtn: {
           status: false,
           title: "未定义",
@@ -587,6 +589,7 @@ export default {
           };
           this.$api.editsysteminform(data).then((res) => {
             this.$message.success("删除成功");
+            this.$refs.tableList.clearMoreActive();
             this.search();
           });
         })
@@ -656,6 +659,7 @@ export default {
           };
           this.$api.editsysteminform(data).then((res) => {
             this.$message.success("删除成功");
+            this.$refs.tableList.clearMoreActive();
             this.search();
           });
         })

+ 2 - 2
src/views/education/qaManagement/qaList/ask.vue

@@ -98,8 +98,8 @@ export default {
           edu: "educationTypeId",
         },
         {
-          prop: "goodsName",
-          placeholder: "请输入商品名称",
+          prop: "searchKey",
+          placeholder: "请输入商品标题/提问内容",
         },
       ],
       formData: {

+ 2 - 2
src/views/education/qaManagement/qaList/reply.vue

@@ -64,8 +64,8 @@ export default {
           edu: "educationTypeId",
         },
         {
-          prop: "goodsName",
-          placeholder: "请输入商品名称",
+          prop: "searchKey",
+          placeholder: "请输入商品标题/提问内容",
         },
       ],
       formData: {

+ 6 - 6
src/views/education/studentManageMent/studentXQ/studyRecord.vue

@@ -194,12 +194,12 @@ export default {
           label: "科目",
           prop: "subjectName",
         },
-        {
-          label: "课程开课状态",
-          prop: "beginStatus",
-          width: "160px",
-          scope: "types",
-        },
+        // {
+        //   label: "课程开课状态",
+        //   prop: "beginStatus",
+        //   width: "160px",
+        //   scope: "types",
+        // },
         {
           label: "模块",
           prop: "moduleNum",

+ 6 - 6
src/views/resource/bankManagement/chapterVolumeManagement/add/index.vue

@@ -320,14 +320,14 @@ export default {
       minTimeAll: 0, //总时长
       tableSet: [
         { label: "排序", prop: "sort", scope: "inputs", width: "100" },
-        { label: "试卷编码", prop: "code" },
-        { label: "标题前缀", prop: "prefixName", width: "120" },
-        { label: "试卷标题", prop: "examName" },
+        { label: "试卷编码", prop: "code", width: "120" },
+        { label: "标题前缀", prop: "prefixName", width: "170" },
+        { label: "试卷标题", prop: "examName", width: "300" },
         {
           label: "发布状态",
           prop: "publishStatus",
-          scope: "Status",
-          width: "120",
+          scope: "Status", 
+          width: "120" 
         },
       ],
       tableData: [],
@@ -355,7 +355,7 @@ export default {
         // },
         {
           prop: "key",
-          placeholder: "请输入试卷标题/试卷编码/标题前缀",
+          placeholder: "试卷标题/试卷编码/标题前缀",
         },
       ],
       disCheckList: [], //已选转禁用复选列表

+ 6 - 6
src/views/resource/bankManagement/chapterVolumeManagement/edit/index.vue

@@ -331,14 +331,14 @@ export default {
       minTimeAll: 0, //总时长
       tableSet: [
         { label: "排序", prop: "sort", scope: "inputs", width: "100" },
-        { label: "试卷编码", prop: "code" },
-        { label: "标题前缀", prop: "prefixName", width: "120" },
-        { label: "试卷标题", prop: "examName" },
+        { label: "试卷编码", prop: "code", width: "120" },
+        { label: "标题前缀", prop: "prefixName", width: "170" },
+        { label: "试卷标题", prop: "examName", width: "300" },
         {
           label: "发布状态",
           prop: "publishStatus",
-          scope: "Status",
-          width: "120",
+          scope: "Status", 
+          width: "120" 
         },
       ],
       tableData: [],
@@ -366,7 +366,7 @@ export default {
         // },
         {
           prop: "key",
-          placeholder: "请输入试卷标题/试卷编码/标题前缀",
+          placeholder: "试卷标题/试卷编码/标题前缀",
         },
       ],
       disCheckList: [], //已选转禁用复选列表

+ 5 - 2
src/views/resource/bankManagement/chapterVolumeManagement/index.vue

@@ -109,17 +109,20 @@ export default {
           label: "章卷编码",
           prop: "code",
           hidden: true,
+          width: "120px",
         },
         {
           label: "标题前缀",
           prop: "prefixName",
           hidden: true,
+          width: "160px",
         },
         {
           label: "章卷标题",
           prop: "name",
           hidden: true,
           scope: "editInfo",
+          width: "300px",
         },
         {
           label: "适用业务层级",
@@ -129,7 +132,7 @@ export default {
           prop4: "subjectName",
           hidden: true,
           scope: "eduTypes",
-          width: "400",
+          width: "360",
         },
         {
           label: "关联商品",
@@ -137,7 +140,7 @@ export default {
           prop1: "goodsName",
           hidden: true,
           scope: "aboutChapter",
-          width: "150",
+          width: "240",
           int: 7,
         },
         {

+ 62 - 8
src/views/resource/bankManagement/knowledgeManagement/index.vue

@@ -92,7 +92,14 @@
                 @hide="hideHandle"
                 :disabled="courType ? false : true"
               >
-                <el-checkbox-group v-model="sujectArray" class="checkboxSty">
+            <el-checkbox
+              v-model="checkAll"
+              @change="handleCheckAllChange"
+              :indeterminate="isIndeterminate"
+              >全选</el-checkbox
+            >
+                <el-checkbox-group v-model="sujectArray" class="checkboxSty" 
+              @change="handleCheckedCitiesChange">
                   <el-checkbox
                     v-for="(item, index) in newSujectOption"
                     :label="item.newId"
@@ -154,6 +161,11 @@
                 <el-input v-model="listData.knowledgeName"></el-input>
               </div>
               <div v-else>
+                <el-input
+                  style="width: 40%; margin-right: 10px"
+                  v-model="BusName"
+                ></el-input
+                ><el-button @click="addBusName">添加</el-button>
                 <!-- <div v-if="!BusNameList.length">请在下面输入框添加知识点</div> -->
                 <ul class="BusBoxs">
                   <li
@@ -169,11 +181,6 @@
                   </li>
                   <div style="clear: both"></div>
                 </ul>
-                <el-input
-                  style="width: 40%; margin-right: 10px"
-                  v-model="BusName"
-                ></el-input
-                ><el-button @click="addBusName">添加</el-button>
               </div>
             </div>
           </el-form-item>
@@ -196,6 +203,8 @@ export default {
   components: { searchBoxNew, tableList, pagination },
   data() {
     return {
+      isIndeterminate: false,
+      checkAll: false,
       loading: false, //当前表单加载是否加载动画
       navText: {
         title: "知识点",
@@ -245,19 +254,20 @@ export default {
           label: "知识点编码",
           prop: "encoder",
           hidden: true,
+          width:"140px"
         },
         {
           label: "知识点标题",
           prop: "knowledgeName",
           scope: "editInfo",
           hidden: true,
+          width:"240px"
         },
         {
           label: "适用业务层级",
           prop: "courseBusinessList",
           hidden: true,
           scope: "mapTypesMores",
-          width: "400",
         },
       ],
 
@@ -314,6 +324,45 @@ export default {
     this.search();
   },
   methods: {
+    handleCheckedCitiesChange() {
+      let nid = this.newSujectOption.map((item) => {
+        return item.newId;
+      });
+      this.checkAll = this.sujectArray.length === nid.length;
+      this.isIndeterminate =
+        this.sujectArray.length > 0 && this.sujectArray.length < nid.length;
+    },
+    setFunc(arr) {
+      var arrays = [];
+      for (let i = 0; i < arr.length; i++) {
+        if (!arrays.includes(arr[i])) {
+          arrays.push(arr[i]);
+        }
+      }
+      return arrays;
+    },
+    handleCheckAllChange(val) {
+      if (val) {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let arrays = this.sujectArray.concat(nid);
+        this.sujectArray = this.setFunc(arrays);
+        this.isIndeterminate = false;
+      } else {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let newArr = [];
+        this.sujectArray.forEach((item) => {
+          if (!nid.includes(item)) {
+            newArr.push(item);
+          }
+        });
+        this.sujectArray = newArr;
+        this.isIndeterminate = false;
+      }
+    },
     getMessage() {
       if (!this.courType) {
         this.$message.warning("请先选择业务层级");
@@ -360,7 +409,6 @@ export default {
         });
       });
       this.newSujectApis = arrays;
-      console.log(this.newSujectApis);
     },
     getDict() {
       this.$api.inquireCourseEducationType({ status: 1 }).then((res) => {
@@ -535,9 +583,15 @@ export default {
         }
       }
       this.sujectArray = array;
+      if (!this.newSujectOption.length) {
+        this.$message.warning("该业务层次暂无关联科目");
+        this.$refs.popovers[0].doClose();
+        return;
+      }
       this.newSujectOption.map((item) => {
         item.newId = this.courType + "-" + item.id;
       });
+      this.handleCheckedCitiesChange();
     },
     addClick(v, int) {
       if (v === undefined) {

+ 3 - 1
src/views/resource/bankManagement/testPaperManagement/addPaper/baseAddPaper/index.vue

@@ -45,7 +45,7 @@
             trigger="click"
             @show="showHandle"
             @hide="hideHandle"
-            :disabled="courType ? false : true"
+            :disabled="courType && newSujectOption.length ? false : true"
           >
             <el-radio-group v-model="sujectApis" class="dis_flexbox">
               <el-radio
@@ -1101,6 +1101,8 @@ export default {
     getMessage() {
       if (!this.courType) {
         this.$message.warning("请先选择业务层级");
+      } else if (!this.newSujectOption.length) {
+        this.$message.warning("该业务层级暂无关联科目");
       }
     },
     getSimpleText(html) {

+ 95 - 27
src/views/resource/bankManagement/testPaperManagement/addPaper/topicAddPaper/index.vue

@@ -109,7 +109,7 @@
                   >
                   </el-option>
                 </el-select>
-                <el-button @click="addExam">自定义添加</el-button>
+                <!-- <el-button @click="addExam">自定义添加</el-button> -->
               </div>
 
               <el-radio-group
@@ -289,7 +289,7 @@
                   }}</span>
                   <div
                     class="editInfoSty"
-                    v-else-if="item.scope === 'editInfoHTML'"
+                    v-else-if="item.scope === 'editInfoHTMLs'"
                   >
                     {{ getSimpleText(scope.row[item.prop]) }}
                   </div>
@@ -341,7 +341,7 @@
           <div class="dis_fos">
             <div>
               <div class="margin_bs">当前总分:{{ getAllpocis }}</div>
-              <div class="margin_bs">
+              <div class="margin_bs" v-if="examsType === 2">
                 及格分数:<el-input-number
                   style="margin: 0px 6px; width: 100px !important"
                   v-model="passScore"
@@ -461,7 +461,7 @@
                   }}</span>
                   <div
                     class="editInfoSty"
-                    v-else-if="item.scope === 'editInfoHTML'"
+                    v-else-if="item.scope === 'editInfoHTMLs'"
                   >
                     {{ getSimpleText(scope.row[item.prop]) }}
                   </div>
@@ -732,7 +732,7 @@ export default {
           label: "题目内容",
           prop: "content",
           hidden: true,
-          scope: "editInfoHTML",
+          scope: "editInfoHTMLs",
         },
 
         {
@@ -830,7 +830,7 @@ export default {
           label: "题目标题",
           prop: "content",
           hidden: true,
-          scope: "editInfoHTML",
+          scope: "editInfoHTMLs",
         },
         {
           label: "发布状态",
@@ -867,7 +867,7 @@ export default {
           label: "题目标题",
           prop: "content",
           hidden: true,
-          scope: "editInfoHTML",
+          scope: "editInfoHTMLs",
         },
         {
           label: "发布状态",
@@ -907,6 +907,10 @@ export default {
       djNum: 0, //答卷次数
       examsType: 1,
       businObj: {},
+      draftBox: [], //草稿箱
+      copytableData: [],
+      localStart: false, //定时器是否已经开始
+      pageId: "", //试卷ID
     };
   },
   computed: {
@@ -944,10 +948,33 @@ export default {
     tableData: {
       handler(newVal, oldVal) {
         this.navText.index = newVal.length;
+        /**
+         * 定时器触发机制 防止内存浪费
+         */
+        if (newVal.length) {
+          var a = JSON.stringify(this.tableData);
+          var b = JSON.stringify(this.copytableData);
+          if (a != b) {
+            if (!this.localStart) {
+              this.localStart = true;
+              this.setInterFunc();
+            }
+          }
+        }
       },
       // 立即处理 进入页面就触发
       immediate: true,
     },
+    $route: {
+      handler(val, oldval) {
+        this.localStart = false;
+      },
+      // 深度观察监听
+      deep: true,
+    },
+  },
+  created() {
+    this.pageId = this.$route.query.id;
   },
   async mounted() {
     this.getInfos();
@@ -955,7 +982,25 @@ export default {
     this.changeAmdis();
     this.search();
   },
+  beforeDestroy() {
+    this.localStart = false;
+  },
   methods: {
+    setInterFunc() {
+      var arr = setInterval(() => {
+        if (!this.localStart) {
+          clearInterval(arr);
+          return;
+        }
+        this.$methodsTools.storageSet(
+          "exam",
+          JSON.stringify({
+            id: this.pageId,
+            data: this.tableData,
+          })
+        );
+      }, 1500);
+    },
     getInfos() {
       this.$api.obtainbankexam(this.$route.query.id).then((res) => {
         this.businObj = {
@@ -986,6 +1031,7 @@ export default {
           res.data.map((item) => {
             item.optionsList = JSON.parse(item.jsonStr);
           });
+          this.copytableData = JSON.parse(JSON.stringify(res.data));
           this.tableData = res.data;
           // this.total = res.total;
           this.navText.index = res.total;
@@ -1106,7 +1152,7 @@ export default {
         });
       }
       this.activeLists.forEach((item) => {
-        this.tableData.unshift(item);
+        this.tableData.push(item);
       });
       // this.tableData = this.tableData.concat(this.activeLists);
       this.dialogVisibleTable = false;
@@ -1139,7 +1185,7 @@ export default {
         self.innerVisiblePaperTopic = true;
         self.showHide = true;
         self.$nextTick(() => {
-          (self.listNums = {
+          var data = {
             type: 1,
             optionsList: [],
             answerQuestionList: [],
@@ -1147,14 +1193,22 @@ export default {
             status: "",
             analysisContent: "",
             answerQuestion: "",
-          }),
-            //   (self.$refs.sujects.eduType = "");
-            // self.$refs.sujects.courType = "";
-            // self.$refs.sujects.sujectApis = [];
-            // self.$refs.sujects.newSujectApis = [];
-            (self.listData = {
-              publishStatus: 1,
+          };
+          for (let i = 0; i < 4; i++) {
+            data.optionsList.push({
+              content: "",
+              imgUrl: null,
+              optionsId: i + 1,
             });
+          }
+          self.listNums = data;
+          //   (self.$refs.sujects.eduType = "");
+          // self.$refs.sujects.courType = "";
+          // self.$refs.sujects.sujectApis = [];
+          // self.$refs.sujects.newSujectApis = [];
+          self.listData = {
+            publishStatus: 1,
+          };
           self.activeExam = [];
         });
       } else {
@@ -1445,7 +1499,7 @@ export default {
             } else {
               data.sort = 1;
             }
-            this.tableData.unshift(data);
+            this.tableData.push(data);
             // this.$api.addbankquestion(data).then((res) => {
             self.$message.success("添加成功");
             self.innerVisiblePaperTopic = false;
@@ -1478,15 +1532,17 @@ export default {
     addbankquestion(item) {
       return new Promise((resolve, reject) => {
         this.$api.addbankquestion(item).then((res) => {
-          resolve(res.data);
+          resolve(res.data.questionId);
         });
       });
     },
     async submitTableAllInfos() {
       var self = this;
-      if (Number(this.passScore) > Number(this.getAllpocis)) {
-        this.$message.warning("及格分数不得大于当前总分,请重新设置分值");
-        return;
+      if (this.examsType === 2) {
+        if (Number(this.passScore) > Number(this.getAllpocis)) {
+          this.$message.warning("及格分数不得大于当前总分,请重新设置分值");
+          return;
+        }
       }
       for (let i = 0; i < this.tableData.length; i++) {
         if (!this.tableData[i].sort && this.tableData[i].sort !== 0) {
@@ -1534,8 +1590,9 @@ export default {
         data.answerNum = this.djNum;
       }
       this.$api.editbankexam(data).then((res) => {
-        this.$message.success("修改成功");
-        setTimeout(() => {
+        this.$message.success("编辑成功");
+        setTimeout(async () => {
+          await this.removeInfo();
           this.$store.dispatch("tagsView/exitView", this.$route).then(() => {
             this.$router.push({
               path: "testPaperManagement",
@@ -1544,6 +1601,17 @@ export default {
         }, 500);
       });
     },
+    removeInfo() {
+      return new Promise((resolve, reject) => {
+        let localStatus = this.$methodsTools.storageGet("exam");
+        if (localStatus) {
+          if (JSON.parse(localStatus).id == this.$route.query.id) {
+            this.$methodsTools.storageRemove("exam");
+          }
+        }
+        resolve();
+      });
+    },
     backPage() {
       this.$store.dispatch("tagsView/delView", this.$route).then((res) => {
         this.$router.push({
@@ -1575,10 +1643,10 @@ export default {
           this.$message.warning("请设置每道题目的分值");
           return;
         }
-      }
-      if (Number(this.passScore) > Number(this.getAllpocis)) {
-        this.$message.warning("及格分数不得大于当前总分");
-        return;
+        if (Number(this.passScore) > Number(this.getAllpocis)) {
+          this.$message.warning("及格分数不得大于当前总分");
+          return;
+        }
       }
       this.tableData = this.boxtableDataPags;
       this.diansBoxStatus = false;

+ 4 - 1
src/views/resource/bankManagement/testPaperManagement/editPaper/baseEditPaper/index.vue

@@ -43,7 +43,7 @@
             trigger="click"
             @show="showHandle"
             @hide="hideHandle"
-            :disabled="courType ? false : true"
+            :disabled="courType && newSujectOption.length ? false : true"
           >
             <el-radio-group v-model="sujectApis" class="dis_flexbox">
               <el-radio
@@ -64,6 +64,7 @@
               >
             </div>
             <el-button
+            disabled
               slot="reference"
               style="margin-left: 12px"
               @click="getMessage"
@@ -247,6 +248,8 @@ export default {
     getMessage() {
       if (!this.courType) {
         this.$message.warning("请先选择业务层级");
+      } else if (!this.newSujectOption.length) {
+        this.$message.warning("该业务层级暂无关联科目");
       }
     },
     search() {

+ 146 - 32
src/views/resource/bankManagement/testPaperManagement/editPaper/topicEditPaper/index.vue

@@ -32,6 +32,13 @@
           :disabled="!noStudent"
           >确定</el-button
         >
+        <el-button
+          size="small"
+          @click="returnDatas"
+          type="info"
+          v-if="draftBox.length"
+          >恢复草稿</el-button
+        >
       </div>
       <el-dialog
         width="1080px"
@@ -109,7 +116,7 @@
                   >
                   </el-option>
                 </el-select>
-                <el-button @click="addExam">自定义添加</el-button>
+                <!-- <el-button @click="addExam">自定义添加</el-button> -->
               </div>
 
               <el-radio-group
@@ -289,7 +296,7 @@
                   }}</span>
                   <div
                     class="editInfoSty"
-                    v-else-if="item.scope === 'editInfoHTML'"
+                    v-else-if="item.scope === 'editInfoHTMLs'"
                   >
                     {{ getSimpleText(scope.row[item.prop]) }}
                   </div>
@@ -341,7 +348,7 @@
           <div class="dis_fos">
             <div>
               <div class="margin_bs">当前总分:{{ getAllpocis }}</div>
-              <div class="margin_bs">
+              <div class="margin_bs" v-if="examsType === 2">
                 及格分数:<el-input-number
                   style="margin: 0px 6px; width: 100px !important"
                   v-model="passScore"
@@ -461,7 +468,7 @@
                   }}</span>
                   <div
                     class="editInfoSty"
-                    v-else-if="item.scope === 'editInfoHTML'"
+                    v-else-if="item.scope === 'editInfoHTMLs'"
                   >
                     {{ getSimpleText(scope.row[item.prop]) }}
                   </div>
@@ -706,6 +713,7 @@ export default {
           label: "题目编码",
           prop: "code",
           hidden: true,
+          width: "120px",
         },
         {
           label: "题型",
@@ -717,6 +725,7 @@ export default {
           label: "标题前缀",
           prop: "prefixName",
           hidden: true,
+          width: "160px",
         },
         {
           label: "知识点",
@@ -730,7 +739,8 @@ export default {
           label: "题目内容",
           prop: "content",
           hidden: true,
-          scope: "editInfoHTML",
+          scope: "editInfoHTMLs",
+          width: "320px",
         },
 
         {
@@ -806,16 +816,19 @@ export default {
           prop: "type",
           hidden: true,
           scope: "topic",
+          width: "120px",
         },
         {
           label: "题目编码",
           prop: "code",
           hidden: true,
+          width: "120px",
         },
         {
           label: "标题前缀",
           prop: "prefixName",
           hidden: true,
+          width: "160px",
         },
         {
           label: "知识点",
@@ -828,7 +841,8 @@ export default {
           label: "题目标题",
           prop: "content",
           hidden: true,
-          scope: "editInfoHTML",
+          scope: "editInfoHTMLs",
+          width: "320px",
         },
         {
           label: "发布状态",
@@ -855,23 +869,27 @@ export default {
           prop: "type",
           hidden: true,
           scope: "topic",
+          width: "120px",
         },
         {
           label: "标题前缀",
           prop: "prefixName",
           hidden: true,
+          width: "160px",
         },
         {
           label: "题目标题",
           prop: "content",
           hidden: true,
-          scope: "editInfoHTML",
+          scope: "editInfoHTMLs",
+          width: "320px",
         },
         {
           label: "发布状态",
           prop: "publishStatus",
           hidden: true,
           scope: "Status",
+          width: "120px",
         },
         {
           label: "分值",
@@ -906,6 +924,10 @@ export default {
       examsType: 1,
       businObj: {}, //当前业务层次
       noStudent: true,
+      draftBox: [], //草稿箱
+      copytableData: [],
+      localStart: false, //定时器是否已经开始
+      pageId: "", //试卷ID
     };
   },
   computed: {
@@ -943,16 +965,45 @@ export default {
     tableData: {
       handler(newVal, oldVal) {
         this.navText.index = newVal.length;
+        /**
+         * 定时器触发机制 防止内存浪费
+         */
+        if (newVal.length) {
+          var a = JSON.stringify(this.tableData);
+          var b = JSON.stringify(this.copytableData);
+          if (a != b) {
+            if (!this.localStart) {
+              this.localStart = true;
+              this.setInterFunc();
+            }
+          }
+        }
       },
       // 立即处理 进入页面就触发
       immediate: true,
     },
+    $route: {
+      handler(val, oldval) {
+        this.localStart = false;
+      },
+      // 深度观察监听
+      deep: true,
+    },
+  },
+  created() {
+    this.pageId = this.$route.query.id;
   },
   async mounted() {
+    let localStatus = this.$methodsTools.storageGet("exam");
+    if (localStatus) {
+      if (JSON.parse(localStatus).id == this.pageId) {
+        let cst = JSON.parse(localStatus);
+        this.draftBox = cst.data;
+      }
+    }
     this.$api
       .gradecheckGoodsChange({ examId: this.$route.query.id })
       .then((res) => {
-        console.log(res.data);
         if (res.data > 0) {
           this.noStudent = false;
         }
@@ -962,7 +1013,47 @@ export default {
     this.changeAmdis();
     this.search();
   },
+  beforeDestroy() {
+    this.localStart = false;
+  },
   methods: {
+    /**
+     *
+     */
+    returnDatas() {
+      this.$confirm(
+        "点击【恢复】后,当前页面的数据,恢复为【上一次的操作行为数据】,请慎重使用。 ",
+        "提示",
+        {
+          confirmButtonText: "恢复",
+          cancelButtonText: "取消",
+          type: "warning",
+        }
+      )
+        .then(() => {
+          this.tableData = JSON.parse(JSON.stringify(this.draftBox));
+          this.$message({
+            type: "success",
+            message: "已恢复!",
+          });
+        })
+        .catch(() => {});
+    },
+    setInterFunc() {
+      var arr = setInterval(() => {
+        if (!this.localStart) {
+          clearInterval(arr);
+          return;
+        }
+        this.$methodsTools.storageSet(
+          "exam",
+          JSON.stringify({
+            id: this.pageId,
+            data: this.tableData,
+          })
+        );
+      }, 1500);
+    },
     getInfos() {
       this.$api.obtainbankexam(this.$route.query.id).then((res) => {
         this.businObj = {
@@ -993,17 +1084,18 @@ export default {
           res.data.map((item) => {
             item.optionsList = JSON.parse(item.jsonStr);
           });
+          this.copytableData = JSON.parse(JSON.stringify(res.data));
+          this.boxtableDataPags = JSON.parse(JSON.stringify(res.data));
           this.tableData = res.data;
-          // this.total = res.total;
           this.navText.index = res.total;
         })
         .finally(() => {
           this.loading = false;
         });
     },
-    init() {
-      this.search();
-    },
+    // init() {
+    //   this.search();
+    // },
     del(v, index) {
       this.$alert(
         "确定删除此内容?<br />内容删除后将无法恢复,请慎重考虑",
@@ -1115,7 +1207,7 @@ export default {
         });
       }
       this.activeLists.forEach((item) => {
-        this.tableData.unshift(item);
+        this.tableData.push(item);
       });
       this.dialogVisibleTable = false;
       this.$message.success("添加成功");
@@ -1147,7 +1239,7 @@ export default {
         self.innerVisiblePaperTopic = true;
         self.showHide = true;
         self.$nextTick(() => {
-          (self.listNums = {
+          var data = {
             type: 1,
             optionsList: [],
             answerQuestionList: [],
@@ -1155,14 +1247,22 @@ export default {
             status: "",
             analysisContent: "",
             answerQuestion: "",
-          }),
-            //   (self.$refs.sujects.eduType = "");
-            // self.$refs.sujects.courType = "";
-            // self.$refs.sujects.sujectApis = [];
-            // self.$refs.sujects.newSujectApis = [];
-            (self.listData = {
-              publishStatus: 1,
+          };
+          for (let i = 0; i < 4; i++) {
+            data.optionsList.push({
+              content: "",
+              imgUrl: null,
+              optionsId: i + 1,
             });
+          }
+          self.listNums = data;
+          //   (self.$refs.sujects.eduType = "");
+          // self.$refs.sujects.courType = "";
+          // self.$refs.sujects.sujectApis = [];
+          // self.$refs.sujects.newSujectApis = [];
+          self.listData = {
+            publishStatus: 1,
+          };
           self.activeExam = [];
         });
       } else {
@@ -1212,7 +1312,6 @@ export default {
         self.listData.prefixName = vres.prefixName;
         self.listData.publishStatus = vres.publishStatus;
         self.listNums = vres;
-        console.log(vres, 5515);
         // var arrays = [];
         // vres.businessList.map((item) => {
         //   arrays.push(item.businessId + "-" + item.subjectId);
@@ -1457,7 +1556,7 @@ export default {
             } else {
               data.sort = 1;
             }
-            this.tableData.unshift(data);
+            this.tableData.push(data);
             // this.$api.addbankquestion(data).then((res) => {
             self.$message.success("添加成功");
             self.innerVisiblePaperTopic = false;
@@ -1490,15 +1589,17 @@ export default {
     addbankquestion(item) {
       return new Promise((resolve, reject) => {
         this.$api.addbankquestion(item).then((res) => {
-          resolve(res.data);
+          resolve(res.data.questionId);
         });
       });
     },
     async submitTableAllInfos() {
       var self = this;
-      if (Number(this.passScore) > Number(this.getAllpocis)) {
-        this.$message.warning("及格分数不得大于当前总分,请重新设置分值");
-        return;
+      if (this.examsType === 2) {
+        if (Number(this.passScore) > Number(this.getAllpocis)) {
+          this.$message.warning("及格分数不得大于当前总分,请重新设置分值");
+          return;
+        }
       }
       for (let i = 0; i < this.tableData.length; i++) {
         if (!this.tableData[i].sort && this.tableData[i].sort !== 0) {
@@ -1547,8 +1648,10 @@ export default {
         data.answerNum = this.djNum;
       }
       this.$api.editbankexam(data).then((res) => {
+        this.localStart = false;
         this.$message.success("修改成功");
-        setTimeout(() => {
+        setTimeout(async () => {
+          await this.removeInfo();
           this.$store.dispatch("tagsView/exitView", this.$route).then((res) => {
             this.$router.push({
               path: "testPaperManagement",
@@ -1557,6 +1660,17 @@ export default {
         }, 500);
       });
     },
+    removeInfo() {
+      return new Promise((resolve, reject) => {
+        let localStatus = this.$methodsTools.storageGet("exam");
+        if (localStatus) {
+          if (JSON.parse(localStatus).id == this.$route.query.id) {
+            this.$methodsTools.storageRemove("exam");
+          }
+        }
+        resolve();
+      });
+    },
     backPage() {
       this.$store.dispatch("tagsView/delView", this.$route).then((res) => {
         this.$router.push({
@@ -1588,10 +1702,10 @@ export default {
           this.$message.warning("请设置每道题目的分值");
           return;
         }
-      }
-      if (Number(this.passScore) > Number(this.getAllpocis)) {
-        this.$message.warning("及格分数不得大于当前总分");
-        return;
+        if (Number(this.passScore) > Number(this.getAllpocis)) {
+          this.$message.warning("及格分数不得大于当前总分");
+          return;
+        }
       }
       this.tableData = this.boxtableDataPags;
       this.diansBoxStatus = false;

+ 7 - 4
src/views/resource/bankManagement/testPaperManagement/index.vue

@@ -116,17 +116,20 @@ export default {
           label: "试卷编码",
           prop: "code",
           hidden: true,
+          width:"120px"
         },
         {
           label: "名称前缀",
           prop: "prefixName",
           hidden: true,
+          width:"180px"
         },
         {
           label: "试卷名称",
           prop: "examName",
           hidden: true,
           scope: "editInfo",
+          width:"310px"
         },
         {
           label: "适用业务层级",
@@ -136,7 +139,7 @@ export default {
           prop4: "subjectName",
           hidden: true,
           scope: "eduTypes",
-          width: "230px",
+          width: "360px",
         },
         {
           label: "发布状态",
@@ -149,14 +152,14 @@ export default {
           prop: "updateTime",
           hidden: true,
           scope: "aTimeList",
-          width: "160",
+          width: "160px",
         },
         {
           label: "创建时间",
           prop: "createTime",
           hidden: true,
           scope: "aTimeList",
-          width: "160",
+          width: "160px",
         },
         {
           label: "关联商品",
@@ -164,7 +167,7 @@ export default {
           prop1: "goodsName",
           hidden: true,
           scope: "aboutChapter",
-          width: "150",
+          width: "320px",
           int: 6,
         },
       ],

+ 64 - 7
src/views/resource/bankManagement/topicManagement/index.vue

@@ -118,7 +118,7 @@
                 >
                 </el-option>
               </el-select>
-              <el-button @click="addExam">自定义添加</el-button>
+              <!-- <el-button @click="addExam">自定义添加</el-button> -->
             </div>
 
             <el-radio-group
@@ -260,6 +260,25 @@ export default {
           placeholder: "题目类型",
           scope: "selectBank",
         },
+        {
+          prop: "publishStatus",
+          placeholder: "发布状态",
+          scope: "select",
+          options: [
+            {
+              label: "已发布",
+              value: 1,
+            },
+            {
+              label: "未发布",
+              value: 0,
+            },
+          ],
+        },
+        {
+          prop: "key",
+          placeholder: "请输入题目编码/题目标题",
+        },
       ],
       formData: {
         status: "0,1",
@@ -272,17 +291,20 @@ export default {
           label: "题目编码",
           prop: "code",
           hidden: true,
+          width: "120px",
         },
         {
           label: "标题前缀",
           prop: "prefixName",
           hidden: true,
+          width: "160px",
         },
         {
           label: "题目标题",
           prop: "content",
           hidden: true,
           scope: "editInfoHTML",
+          width: "280px",
         },
         {
           label: "题目类型",
@@ -303,7 +325,23 @@ export default {
           prop: "businessList",
           hidden: true,
           scope: "mapTypesMores",
-          width: "400",
+          width: "360px",
+        },
+        {
+          label: "发布状态",
+          prop: "publishStatus",
+          hidden: true,
+          scope: "isOptions",
+          options: [
+            {
+              label: "已发布",
+              value: 1,
+            },
+            {
+              label: "未发布",
+              value: 0,
+            },
+          ],
         },
         {
           label: "关联试卷",
@@ -311,7 +349,7 @@ export default {
           prop1: "examName",
           hidden: true,
           scope: "aboutChapter",
-          width: "150",
+          width: "240",
           int: 5,
         },
       ],
@@ -382,7 +420,6 @@ export default {
       link.remove();
     },
     importMoble(e) {
-      console.log(e);
       var self = this;
       var file = e.target.files[0];
       let formData = new FormData();
@@ -390,7 +427,19 @@ export default {
       this.$api
         .importDatabankquestion(formData)
         .then((res) => {
-          self.$message.success("导入成功");
+          if (res.msg == "操作成功") {
+            self.$message.success("导入成功");
+          } else {
+            let url = baseUrls.baseURL + "common/download?fileName=" + res.msg;
+            let link = document.createElement("a");
+            let fileName = "导入模板" + ".xlsx";
+            document.body.appendChild(link);
+            link.href = url;
+            link.dowmload = fileName;
+            link.click();
+            link.remove();
+            self.$message.warning("导入有误,请打开文档查看错误原因");
+          }
         })
         .finally(() => {
           self.search();
@@ -472,7 +521,7 @@ export default {
         self.innerVisiblePaperTopic = true;
         self.statusHide = true;
         self.$nextTick(() => {
-          self.listNums.push({
+          var datas = {
             type: 1,
             optionsList: [],
             answerQuestionList: [],
@@ -480,7 +529,15 @@ export default {
             status: "",
             analysisContent: "",
             answerQuestion: "",
-          });
+          };
+          for (let i = 0; i < 4; i++) {
+            datas.optionsList.push({
+              content: "",
+              imgUrl: null,
+              optionsId: i + 1,
+            });
+          }
+          self.listNums = [datas];
           self.$refs.sujects.eduType = "";
           self.$refs.sujects.courType = "";
           self.options = [];

+ 7 - 3
src/views/resource/bankManagement/volumeManagement/add/index.vue

@@ -322,9 +322,9 @@ export default {
       minTimeAll: 0, //总时长
       tableSet: [
         { label: "排序", prop: "sort", scope: "inputs", width: "100" },
-        { label: "章卷编码", prop: "code" },
-        { label: "标题前缀", prop: "prefixName", width: "120" },
-        { label: "章卷标题", prop: "name" },
+        { label: "章卷编码", prop: "code", width: "120" },
+        { label: "标题前缀", prop: "prefixName", width: "180" },
+        { label: "章卷标题", prop: "name", width: "320" },
         {
           label: "发布状态",
           prop: "publishStatus",
@@ -639,6 +639,10 @@ export default {
 </script>
 
 <style lang="less" scoped>
+.dis_flexbox {
+  display: flex;
+  flex-direction: column;
+}
 .boxWidth {
   width: 700px;
 }

+ 3 - 3
src/views/resource/bankManagement/volumeManagement/edit/index.vue

@@ -333,9 +333,9 @@ export default {
       minTimeAll: 0, //总时长
       tableSet: [
         { label: "排序", prop: "sort", scope: "inputs", width: "100" },
-        { label: "章卷编码", prop: "code" },
-        { label: "标题前缀", prop: "prefixName", width: "120" },
-        { label: "章卷标题", prop: "name" },
+        { label: "章卷编码", prop: "code", width: "120" },
+        { label: "标题前缀", prop: "prefixName", width: "180" },
+        { label: "章卷标题", prop: "name", width: "320" },
         {
           label: "发布状态",
           prop: "publishStatus",

+ 2 - 1
src/views/resource/bankManagement/volumeManagement/index.vue

@@ -115,13 +115,14 @@ export default {
           label: "标题前缀",
           prop: "prefixName",
           hidden: true,
+          width:"180px"
         },
         {
           label: "模块卷标题",
           prop: "moduleName",
           hidden: true,
           scope: "editInfo",
-          width:"130px"
+          width:"300px"
         },
         {
           label: "适用业务层级",

+ 1 - 1
src/views/resource/baseManageInfos/index.vue

@@ -62,7 +62,7 @@ export default {
           url: "label",
         },
         {
-          title: "科目/类目",
+          title: "科目",
           url: "suject",
         },
         {

+ 9 - 7
src/views/resource/baseManageInfos/resource/businessLevel/index.vue

@@ -1,7 +1,8 @@
 <template>
   <div id="businessLevel">
     <table-list
-      ref="tablieListmest"
+      rowKey="id"
+      ref="tableList"
       :tableSets="tableSet"
       :tableData="tableData"
       :navText="navText"
@@ -231,6 +232,7 @@ export default {
         num: true,
         choice: true,
         addHide: false,
+        openCheckMore: true,
         backFatherBtn: {
           status: true,
           title: "配置下单填选模板",
@@ -377,9 +379,8 @@ export default {
   },
   methods: {
     submitLearn() {
-      console.log(this.learningOrder);
       this.disabledBtn = true;
-      if (!this.$refs.tablieListmest.allCheckData.length) {
+      if (!this.$refs.tableList.allCheckData.length) {
         this.$message.warning("请勾选需要配置的业务层次");
         this.disabledBtn = false;
         return;
@@ -389,7 +390,7 @@ export default {
         this.disabledBtn = false;
         return;
       }
-      var ast = this.$refs.tablieListmest.allCheckData.map((item) => {
+      var ast = this.$refs.tableList.allCheckData.map((item) => {
         return item.id;
       });
       this.$api
@@ -399,9 +400,9 @@ export default {
         })
         .then((res) => {
           this.$message.success("配置成功");
-          this.$refs.tablieListmest.allCheckData = [];
           this.learningOrder = "";
           this.dialogVisibleSet = false;
+          this.$refs.tableList.clearMoreActive();
           this.search();
         })
         .catch(() => {
@@ -409,7 +410,7 @@ export default {
         });
     },
     setOptions() {
-      if (!this.$refs.tablieListmest.allCheckData.length) {
+      if (!this.$refs.tableList.allCheckData.length) {
         this.$message.warning("请勾选需要配置的业务层次");
         return;
       }
@@ -469,7 +470,7 @@ export default {
           this.dialogVisiblePZDown = false;
           this.activeLists = [];
           this.radioActives = "";
-          this.$refs.tablieListmest.allCheckData = [];
+          this.$refs.tableList.clearMoreActive();
           this.search();
         })
         .catch(() => {
@@ -564,6 +565,7 @@ export default {
           };
           this.$api.editCourseBusiness(data).then((res) => {
             this.$message.success("删除成功");
+            this.$refs.tableList.clearMoreActive();
             this.$store.commit("BUSINESSLEVEL");
             this.search();
           });

+ 8 - 2
src/views/resource/baseManageInfos/resource/suject/index.vue

@@ -50,6 +50,7 @@
             :key="indexs"
             :label="items.label"
             :prop="items.prop"
+            :required="items.required"
           >
             <el-radio-group
               v-if="items.scope === 'status'"
@@ -165,7 +166,7 @@ export default {
       changeHeight: true,
       loading: false, //当前表单加载是否加载动画
       navText: {
-        title: "科目/类目",
+        title: "科目",
         index: 0,
         ch: "条",
         num: true,
@@ -221,6 +222,7 @@ export default {
         {
           label: "适用项目类型",
           scope: "certificate",
+          required:true
         },
         {
           label: "",
@@ -273,7 +275,7 @@ export default {
     this.search();
     this.initOptions();
   },
-  activated(){
+  activated() {
     this.search();
     this.initOptions();
   },
@@ -413,6 +415,10 @@ export default {
     submit(formName) {
       this.$refs[formName].validate((valid) => {
         if (valid) {
+          if (!this.cauType.length) {
+            this.$message.warning("请添加适用项目类型");
+            return;
+          }
           this.rulesTableSumbit();
         } else {
           return false;

+ 60 - 3
src/views/resource/handoutManagement/handoutList/add/index.vue

@@ -44,7 +44,17 @@
             @hide="hideHandle"
             :disabled="courType ? false : true"
           >
-            <el-checkbox-group v-model="sujectArray" class="checkboxSty">
+            <el-checkbox
+              v-model="checkAll"
+              @change="handleCheckAllChange"
+              :indeterminate="isIndeterminate"
+              >全选</el-checkbox
+            >
+            <el-checkbox-group
+              v-model="sujectArray"
+              class="checkboxSty"
+              @change="handleCheckedCitiesChange"
+            >
               <el-checkbox
                 v-for="(item, index) in newSujectOption"
                 :label="item.newId"
@@ -146,9 +156,11 @@
 
 <script>
 export default {
-  name:"HandoutListAdd",
+  name: "HandoutListAdd",
   data() {
     return {
+      isIndeterminate: false,
+      checkAll: false,
       blob: "", //pdf本地路径
       handoutsUrlLive: false, //是否存在PDF
       //   弹窗数据
@@ -173,7 +185,7 @@ export default {
         handoutsName: [
           { required: true, message: "请输入讲义标题", trigger: "blur" },
         ],
-        canDownload:[
+        canDownload: [
           { required: true, message: "请选择是否可下载", trigger: "change" },
         ],
         status: [
@@ -203,6 +215,45 @@ export default {
     this.getDict();
   },
   methods: {
+    handleCheckedCitiesChange() {
+      let nid = this.newSujectOption.map((item) => {
+        return item.newId;
+      });
+      this.checkAll = this.sujectArray.length === nid.length;
+      this.isIndeterminate =
+        this.sujectArray.length > 0 && this.sujectArray.length < nid.length;
+    },
+    setFunc(arr) {
+      var arrays = [];
+      for (let i = 0; i < arr.length; i++) {
+        if (!arrays.includes(arr[i])) {
+          arrays.push(arr[i]);
+        }
+      }
+      return arrays;
+    },
+    handleCheckAllChange(val) {
+      if (val) {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let arrays = this.sujectArray.concat(nid);
+        this.sujectArray = this.setFunc(arrays);
+        this.isIndeterminate = false;
+      } else {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let newArr = [];
+        this.sujectArray.forEach((item) => {
+          if (!nid.includes(item)) {
+            newArr.push(item);
+          }
+        });
+        this.sujectArray = newArr;
+        this.isIndeterminate = false;
+      }
+    },
     changeTypes() {
       var self = this;
       var arrays = [];
@@ -255,9 +306,15 @@ export default {
         }
       }
       this.sujectArray = array;
+      if (!this.newSujectOption.length) {
+        this.$message.warning("该业务层次暂无关联科目");
+        this.$refs.popovers.doClose();
+        return;
+      }
       this.newSujectOption.map((item) => {
         item.newId = this.courType + "-" + item.id;
       });
+      this.handleCheckedCitiesChange();
     },
     hideHandle() {},
     getDict() {

+ 61 - 1
src/views/resource/handoutManagement/handoutList/edit/index.vue

@@ -43,7 +43,17 @@
             @hide="hideHandle"
             :disabled="courType ? false : true"
           >
-            <el-checkbox-group v-model="sujectArray" class="checkboxSty">
+            <el-checkbox
+              v-model="checkAll"
+              @change="handleCheckAllChange"
+              :indeterminate="isIndeterminate"
+              >全选</el-checkbox
+            >
+            <el-checkbox-group
+              v-model="sujectArray"
+              class="checkboxSty"
+              @change="handleCheckedCitiesChange"
+            >
               <el-checkbox
                 v-for="(item, index) in newSujectOption"
                 :label="item.newId"
@@ -152,6 +162,8 @@ export default {
   name: "HandoutListEdit",
   data() {
     return {
+      isIndeterminate: false,
+      checkAll: false,
       blob: "", //pdf本地路径
       handoutsUrlLive: false, //是否存在PDF
       changeHeight: true,
@@ -209,6 +221,48 @@ export default {
     this.search();
   },
   methods: {
+<<<<<<< HEAD
+=======
+    handleCheckedCitiesChange() {
+      let nid = this.newSujectOption.map((item) => {
+        return item.newId;
+      });
+      this.checkAll = this.sujectArray.length === nid.length;
+      this.isIndeterminate =
+        this.sujectArray.length > 0 && this.sujectArray.length < nid.length;
+    },
+    setFunc(arr) {
+      var arrays = [];
+      for (let i = 0; i < arr.length; i++) {
+        if (!arrays.includes(arr[i])) {
+          arrays.push(arr[i]);
+        }
+      }
+      return arrays;
+    },
+    handleCheckAllChange(val) {
+      if (val) {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let arrays = this.sujectArray.concat(nid);
+        this.sujectArray = this.setFunc(arrays);
+        this.isIndeterminate = false;
+      } else {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let newArr = [];
+        this.sujectArray.forEach((item) => {
+          if (!nid.includes(item)) {
+            newArr.push(item);
+          }
+        });
+        this.sujectArray = newArr;
+        this.isIndeterminate = false;
+      }
+    },
+>>>>>>> 0d5b2d704ca6f89c27bdc409f0538aa9c2d0dc71
     search() {
       this.$api
         .obtainCourseHandouts(this.$route.query.id)
@@ -283,9 +337,15 @@ export default {
         }
       }
       this.sujectArray = array;
+      if (!this.newSujectOption.length) {
+        this.$message.warning("该业务层次暂无关联科目");
+        this.$refs.popovers.doClose();
+        return;
+      }
       this.newSujectOption.map((item) => {
         item.newId = this.courType + "-" + item.id;
       });
+      this.handleCheckedCitiesChange();
     },
     hideHandle() {},
     getDict() {

+ 4 - 1
src/views/resource/handoutManagement/handoutList/index.vue

@@ -108,25 +108,28 @@ export default {
           label: "讲义编码",
           prop: "encoder",
           hidden: true,
+          width: "140px",
         },
         {
           label: "讲义标题",
           prop: "handoutsName",
           hidden: true,
           scope: "editInfo",
+          width: "300px",
         },
         {
           label: "适用业务层级",
           prop: "courseHandoutsBusinessVo",
           hidden: true,
           scope: "mapTypesMores",
-          width: "400",
+          width: "340px",
         },
         {
           label: "是否可下载",
           prop: "canDownload",
           hidden: true,
           scope: "isOptions",
+          width: "120px",
           options: [
             {
               label: "是",

+ 112 - 34
src/views/resource/videoManagement/chapter/add/index.vue

@@ -43,7 +43,17 @@
             @hide="hideHandle"
             :disabled="courType ? false : true"
           >
-            <el-checkbox-group v-model="sujectArray" class="checkboxSty">
+            <el-checkbox
+              v-model="checkAll"
+              @change="handleCheckAllChange"
+              :indeterminate="isIndeterminate"
+              >全选</el-checkbox
+            >
+            <el-checkbox-group
+              v-model="sujectArray"
+              class="checkboxSty"
+              @change="handleCheckedCitiesChange"
+            >
               <el-checkbox
                 v-for="(item, index) in newSujectOption"
                 :label="item.newId"
@@ -94,43 +104,58 @@
         </el-form-item>
         <el-form-item label="标题前缀" prop="prefixName">
           <el-input v-model="listData.prefixName"></el-input>
+          <div style="color: #999">注:便于检索、归类,以及区分一样的标题</div>
         </el-form-item>
         <el-form-item label="章标题" prop="name">
           <el-input v-model="listData.name"></el-input>
+          <div style="color: #999">
+            注:请尽量规范易懂,方便在课程目录表呈现给学员
+          </div>
         </el-form-item>
 
         <el-form-item label="章封面">
-          <div class="imgBoxins">
-            <img :src="$methodsTools.splitImgHost(listData.coverUrl)" alt="" />
-            <div
-              class="posimg"
-              v-if="
-                listData.coverUrl === null ||
-                listData.coverUrl === '' ||
-                listData.coverUrl === undefined
-              "
-            >
-              <label for="uplose">
-                <i class="el-icon-circle-plus-outline iconStsz"></i
-              ></label>
-              <input
-                ref="file"
-                type="file"
-                style="display: none"
-                id="uplose"
-                @change="getImgFile"
-              />
-              <p>
-                注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型
-              </p>
-            </div>
-          </div>
+          <el-row :gutter="10" style="margin-bottom: 10px">
+            <el-col :span="12">
+              <div
+                style="
+                  width: 100%;
+                  height: 150px;
+                  border: 2px dashed #999;
+                  border-radius: 28px;
+                  line-height: 150px;
+                  text-align: center;
+                "
+                v-if="!listData.coverUrl"
+              >
+                <label for="uplose">
+                  <i class="el-icon-circle-plus-outline iconStsz"></i
+                ></label>
+                <input
+                  ref="file"
+                  type="file"
+                  style="display: none"
+                  id="uplose"
+                  @change="getImgFile"
+                />
+              </div>
+              <el-image
+                v-else
+                style="width: 100%"
+                :src="$methodsTools.splitImgHost(listData.coverUrl)"
+                :preview-src-list="[
+                  $methodsTools.splitImgHost(listData.coverUrl),
+                ]"
+              >
+              </el-image>
+            </el-col>
+            <el-col :span="11">
+              <span style="color: #999; font-size: 14px"
+                >注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型</span
+              >
+            </el-col>
+          </el-row>
           <el-button
-            v-if="
-              listData.coverUrl !== null &&
-              listData.coverUrl !== '' &&
-              listData.coverUrl !== undefined
-            "
+            v-if="listData.coverUrl"
             type="danger"
             size="mini"
             class="margin-top: 20px;"
@@ -337,6 +362,8 @@ export default {
   name: "ChapterAdd",
   data() {
     return {
+      isIndeterminate: false,
+      checkAll: false,
       //   弹窗数据
       changeHeight: true,
       bfImg: "oss/images/avatar/20211013/1634097664410_1397766697",
@@ -375,9 +402,9 @@ export default {
       minTimeAll: 0, //总时长
       tableSet: [
         { label: "排序", prop: "sort", scope: "inputs", width: "100" },
-        { label: "节编码", prop: "code" },
-        { label: "标题前缀", prop: "prefixName", width: "120" },
-        { label: "节标题", prop: "name" },
+        { label: "节编码", prop: "code", width: "120" },
+        { label: "标题前缀", prop: "prefixName", width: "180" },
+        { label: "节标题", prop: "name", width: "310" },
         { label: "节类型", prop: "sectionType", scope: "types" },
         {
           label: "发布状态",
@@ -401,6 +428,12 @@ export default {
           scope: "businessLevel",
           edu: "educationTypeId",
         },
+        {
+          prop: "subjectId",
+          placeholder: "科目",
+          scope: "sujectType",
+          edu: "educationTypeId",
+        },
         {
           prop: "sectionType",
           placeholder: "节类型",
@@ -448,6 +481,45 @@ export default {
     // this.search();
   },
   methods: {
+    handleCheckedCitiesChange() {
+      let nid = this.newSujectOption.map((item) => {
+        return item.newId;
+      });
+      this.checkAll = this.sujectArray.length === nid.length;
+      this.isIndeterminate =
+        this.sujectArray.length > 0 && this.sujectArray.length < nid.length;
+    },
+    setFunc(arr) {
+      var arrays = [];
+      for (let i = 0; i < arr.length; i++) {
+        if (!arrays.includes(arr[i])) {
+          arrays.push(arr[i]);
+        }
+      }
+      return arrays;
+    },
+    handleCheckAllChange(val) {
+      if (val) {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let arrays = this.sujectArray.concat(nid);
+        this.sujectArray = this.setFunc(arrays);
+        this.isIndeterminate = false;
+      } else {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let newArr = [];
+        this.sujectArray.forEach((item) => {
+          if (!nid.includes(item)) {
+            newArr.push(item);
+          }
+        });
+        this.sujectArray = newArr;
+        this.isIndeterminate = false;
+      }
+    },
     getMessage() {
       if (!this.courType) {
         this.$message.warning("请先选择业务层级");
@@ -574,9 +646,15 @@ export default {
         }
       }
       this.sujectArray = array;
+      if (!this.newSujectOption.length) {
+        this.$message.warning("该业务层次暂无关联科目");
+        this.$refs.popovers.doClose();
+        return;
+      }
       this.newSujectOption.map((item) => {
         item.newId = this.courType + "-" + item.id;
       });
+      this.handleCheckedCitiesChange();
     },
     hideHandle() {},
     getDict() {

+ 112 - 34
src/views/resource/videoManagement/chapter/edit/index.vue

@@ -43,7 +43,17 @@
             @hide="hideHandle"
             :disabled="courType ? false : true"
           >
-            <el-checkbox-group v-model="sujectArray" class="checkboxSty">
+            <el-checkbox
+              v-model="checkAll"
+              @change="handleCheckAllChange"
+              :indeterminate="isIndeterminate"
+              >全选</el-checkbox
+            >
+            <el-checkbox-group
+              v-model="sujectArray"
+              class="checkboxSty"
+              @change="handleCheckedCitiesChange"
+            >
               <el-checkbox
                 v-for="(item, index) in newSujectOption"
                 :label="item.newId"
@@ -93,43 +103,58 @@
         </el-form-item>
         <el-form-item label="标题前缀" prop="prefixName">
           <el-input v-model="listData.prefixName"></el-input>
+          <div style="color: #999">注:便于检索、归类,以及区分一样的标题</div>
         </el-form-item>
         <el-form-item label="章标题" prop="name">
           <el-input v-model="listData.name"></el-input>
+          <div style="color: #999">
+            注:请尽量规范易懂,方便在课程目录表呈现给学员
+          </div>
         </el-form-item>
 
         <el-form-item label="章封面">
-          <div class="imgBoxins">
-            <img :src="$methodsTools.splitImgHost(listData.coverUrl)" alt="" />
-            <div
-              class="posimg"
-              v-if="
-                listData.coverUrl === null ||
-                listData.coverUrl === '' ||
-                listData.coverUrl === undefined
-              "
-            >
-              <label for="uplose">
-                <i class="el-icon-circle-plus-outline iconStsz"></i
-              ></label>
-              <input
-                ref="file"
-                type="file"
-                style="display: none"
-                id="uplose"
-                @change="getImgFile"
-              />
-              <p>
-                注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型
-              </p>
-            </div>
-          </div>
+          <el-row :gutter="10" style="margin-bottom: 10px">
+            <el-col :span="12">
+              <div
+                style="
+                  width: 100%;
+                  height: 150px;
+                  border: 2px dashed #999;
+                  border-radius: 28px;
+                  line-height: 150px;
+                  text-align: center;
+                "
+                v-if="!listData.coverUrl"
+              >
+                <label for="uplose">
+                  <i class="el-icon-circle-plus-outline iconStsz"></i
+                ></label>
+                <input
+                  ref="file"
+                  type="file"
+                  style="display: none"
+                  id="uplose"
+                  @change="getImgFile"
+                />
+              </div>
+              <el-image
+                v-else
+                style="width: 100%"
+                :src="$methodsTools.splitImgHost(listData.coverUrl)"
+                :preview-src-list="[
+                  $methodsTools.splitImgHost(listData.coverUrl),
+                ]"
+              >
+              </el-image>
+            </el-col>
+            <el-col :span="11">
+              <span style="color: #999; font-size: 14px"
+                >注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型</span
+              >
+            </el-col>
+          </el-row>
           <el-button
-            v-if="
-              listData.coverUrl !== null &&
-              listData.coverUrl !== '' &&
-              listData.coverUrl !== undefined
-            "
+            v-if="listData.coverUrl"
             type="danger"
             size="mini"
             class="margin-top: 20px;"
@@ -341,6 +366,8 @@ export default {
   name: "ChapterEdit",
   data() {
     return {
+      isIndeterminate: false,
+      checkAll: false,
       //   弹窗数据
       changeHeight: true,
       bfImg: "oss/images/avatar/20211013/1634097664410_1397766697",
@@ -378,9 +405,9 @@ export default {
       minTimeAll: 0, //总时长
       tableSet: [
         { label: "排序", prop: "sort", scope: "inputs", width: "100" },
-        { label: "节编码", prop: "code" },
-        { label: "标题前缀", prop: "prefixName", width: "120" },
-        { label: "节标题", prop: "name" },
+        { label: "节编码", prop: "code", width: "120" },
+        { label: "标题前缀", prop: "prefixName", width: "180" },
+        { label: "节标题", prop: "name", width: "310" },
         { label: "节类型", prop: "sectionType", scope: "types" },
         {
           label: "发布状态",
@@ -404,6 +431,12 @@ export default {
           scope: "businessLevel",
           edu: "educationTypeId",
         },
+        {
+          prop: "subjectId",
+          placeholder: "科目",
+          scope: "sujectType",
+          edu: "educationTypeId",
+        },
         {
           prop: "sectionType",
           placeholder: "节类型",
@@ -461,6 +494,45 @@ export default {
     this.search();
   },
   methods: {
+    handleCheckedCitiesChange() {
+      let nid = this.newSujectOption.map((item) => {
+        return item.newId;
+      });
+      this.checkAll = this.sujectArray.length === nid.length;
+      this.isIndeterminate =
+        this.sujectArray.length > 0 && this.sujectArray.length < nid.length;
+    },
+    setFunc(arr) {
+      var arrays = [];
+      for (let i = 0; i < arr.length; i++) {
+        if (!arrays.includes(arr[i])) {
+          arrays.push(arr[i]);
+        }
+      }
+      return arrays;
+    },
+    handleCheckAllChange(val) {
+      if (val) {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let arrays = this.sujectArray.concat(nid);
+        this.sujectArray = this.setFunc(arrays);
+        this.isIndeterminate = false;
+      } else {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let newArr = [];
+        this.sujectArray.forEach((item) => {
+          if (!nid.includes(item)) {
+            newArr.push(item);
+          }
+        });
+        this.sujectArray = newArr;
+        this.isIndeterminate = false;
+      }
+    },
     getMessage() {
       if (!this.courType) {
         this.$message.warning("请先选择业务层级");
@@ -592,9 +664,15 @@ export default {
         }
       }
       this.sujectArray = array;
+      if (!this.newSujectOption.length) {
+        this.$message.warning("该业务层次暂无关联科目");
+        this.$refs.popovers.doClose();
+        return;
+      }
       this.newSujectOption.map((item) => {
         item.newId = this.courType + "-" + item.id;
       });
+      this.handleCheckedCitiesChange();
     },
     hideHandle() {},
     getDict() {

+ 5 - 4
src/views/resource/videoManagement/chapter/index.vue

@@ -116,21 +116,21 @@ export default {
           label: "标题前缀",
           prop: "prefixName",
           hidden: true,
-          width: "120",
+          width: "200",
         },
         {
           label: "章标题",
           prop: "name",
           hidden: true,
           scope: "editInfo",
-          width: "120",
+          width: "260",
         },
         {
           label: "适用业务层级",
           prop: "businessList",
           hidden: true,
           scope: "mapTypesMores",
-          width: "240",
+          width: "340",
         },
         {
           label: "关联模块",
@@ -138,7 +138,7 @@ export default {
           prop1: "moduleName",
           hidden: true,
           scope: "aboutChapter",
-          width: "150",
+          width: "200",
           int: 2,
         },
         // {
@@ -150,6 +150,7 @@ export default {
           label: "节总数",
           prop: "sectionNum",
           hidden: true,
+          width:"100px",
         },
         {
           label: "学习时长",

+ 66 - 46
src/views/resource/videoManagement/courseManagement/basicInfoAdd/index.vue

@@ -89,43 +89,57 @@
         </el-form-item>
         <el-form-item label="名称前缀" prop="prefixName">
           <el-input v-model="listData.prefixName"></el-input>
+          <div style="color: #999">注:便于检索、归类,以及区分一样的标题</div>
         </el-form-item>
         <el-form-item label="课程名称" prop="courseName">
           <el-input v-model="listData.courseName"></el-input>
+          <div style="color: #999">
+            注:请尽量规范易懂,方便在课程目录表呈现给学员
+          </div>
         </el-form-item>
-
         <el-form-item label="课程封面">
-          <div class="imgBoxins">
-            <img :src="$methodsTools.splitImgHost(listData.coverUrl)" alt="" />
-            <div
-              class="posimg"
-              v-if="
-                listData.coverUrl === null ||
-                listData.coverUrl === '' ||
-                listData.coverUrl === undefined
-              "
-            >
-              <label for="uplose">
-                <i class="el-icon-circle-plus-outline iconStsz"></i
-              ></label>
-              <input
-                ref="file"
-                type="file"
-                style="display: none"
-                id="uplose"
-                @change="getImgFile"
-              />
-              <p>
-                注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型
-              </p>
-            </div>
-          </div>
+          <el-row :gutter="10" style="margin-bottom: 10px">
+            <el-col :span="12">
+              <div
+                style="
+                  width: 100%;
+                  height: 150px;
+                  border: 2px dashed #999;
+                  border-radius: 28px;
+                  line-height: 150px;
+                  text-align: center;
+                "
+                v-if="!listData.coverUrl"
+              >
+                <label for="uplose">
+                  <i class="el-icon-circle-plus-outline iconStsz"></i
+                ></label>
+                <input
+                  ref="file"
+                  type="file"
+                  style="display: none"
+                  id="uplose"
+                  @change="getImgFile"
+                />
+              </div>
+              <el-image
+                v-else
+                style="width: 100%"
+                :src="$methodsTools.splitImgHost(listData.coverUrl)"
+                :preview-src-list="[
+                  $methodsTools.splitImgHost(listData.coverUrl),
+                ]"
+              >
+              </el-image>
+            </el-col>
+            <el-col :span="11">
+              <span style="color: #999; font-size: 14px"
+                >注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型</span
+              >
+            </el-col>
+          </el-row>
           <el-button
-            v-if="
-              listData.coverUrl !== null &&
-              listData.coverUrl !== '' &&
-              listData.coverUrl !== undefined
-            "
+            v-if="listData.coverUrl"
             type="danger"
             size="mini"
             class="margin-top: 20px;"
@@ -442,17 +456,19 @@ export default {
       this.$api.addCourse(this.listData).then((res) => {
         this.$message.success("新增成功");
         setTimeout(() => {
-          this.$store.dispatch("tagsView/exitView", this.$route).then((rest) => {
-            this.$router
-              .replace({
-                path: "chapterContent",
-                query: {
-                  id: res.data,
-                  status: "add",
-                },
-              })
-              .catch((err) => {});
-          });
+          this.$store
+            .dispatch("tagsView/exitView", this.$route)
+            .then((rest) => {
+              this.$router
+                .replace({
+                  path: "chapterContent",
+                  query: {
+                    id: res.data,
+                    status: "add",
+                  },
+                })
+                .catch((err) => {});
+            });
         }, 300);
       });
     },
@@ -539,11 +555,15 @@ export default {
   flex-wrap: wrap;
 }
 .imgBoxins {
-  width: 375px;
-  height: 220px;
+  display: flex;
   text-align: center;
-  img {
-    height: 100%;
+  .uploadImgBox {
+    width: 375px;
+    height: 220px;
+    .img {
+      width: 100%;
+      height: 100%;
+    }
   }
 }
 .iconStsz {

+ 43 - 30
src/views/resource/videoManagement/courseManagement/basicInfoEdit/index.vue

@@ -91,43 +91,56 @@
         </el-form-item>
         <el-form-item label="名称前缀" prop="prefixName">
           <el-input v-model="listData.prefixName"></el-input>
+          <div style="color: #999">注:便于检索、归类,以及区分一样的标题</div>
         </el-form-item>
         <el-form-item label="课程名称" prop="courseName">
           <el-input v-model="listData.courseName"></el-input>
+          <div style="color: #999">注:请尽量规范易懂,方便在课程目录表呈现给学员</div>
         </el-form-item>
 
         <el-form-item label="课程封面">
-          <div class="imgBoxins">
-            <img :src="$methodsTools.splitImgHost(listData.coverUrl)" alt="" />
-            <div
-              class="posimg"
-              v-if="
-                listData.coverUrl === null ||
-                listData.coverUrl === '' ||
-                listData.coverUrl === undefined
-              "
-            >
-              <label for="uplose">
-                <i class="el-icon-circle-plus-outline iconStsz"></i
-              ></label>
-              <input
-                ref="file"
-                type="file"
-                style="display: none"
-                id="uplose"
-                @change="getImgFile"
-              />
-              <p>
-                注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型
-              </p>
-            </div>
-          </div>
+          <el-row :gutter="10" style="margin-bottom: 10px">
+            <el-col :span="12">
+              <div
+                style="
+                  width: 100%;
+                  height: 150px;
+                  border: 2px dashed #999;
+                  border-radius: 28px;
+                  line-height: 150px;
+                  text-align: center;
+                "
+                v-if="!listData.coverUrl"
+              >
+                <label for="uplose">
+                  <i class="el-icon-circle-plus-outline iconStsz"></i
+                ></label>
+                <input
+                  ref="file"
+                  type="file"
+                  style="display: none"
+                  id="uplose"
+                  @change="getImgFile"
+                />
+              </div>
+              <el-image
+                v-else
+                style="width: 100%"
+                :src="$methodsTools.splitImgHost(listData.coverUrl)"
+                :preview-src-list="[
+                  $methodsTools.splitImgHost(listData.coverUrl),
+                ]"
+              >
+              </el-image>
+            </el-col>
+            <el-col :span="11">
+              <span style="color: #999; font-size: 14px"
+                >注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型</span
+              >
+            </el-col>
+          </el-row>
           <el-button
-            v-if="
-              listData.coverUrl !== null &&
-              listData.coverUrl !== '' &&
-              listData.coverUrl !== undefined
-            "
+            v-if="listData.coverUrl"
             type="danger"
             size="mini"
             class="margin-top: 20px;"

+ 9 - 7
src/views/resource/videoManagement/courseManagement/chapterContent/index.vue

@@ -250,7 +250,7 @@
     </el-dialog>
     <el-dialog
       :visible.sync="dialogVisiblePZDown"
-      width="900px"
+      width="1100px"
       :show-close="false"
       :close-on-click-modal="false"
     >
@@ -309,7 +309,7 @@
                     scope.row[item.prop3]
                   }}
                 </span>
-                <span v-else-if="item.prop === 'status'">{{
+                <span v-else-if="item.scope === 'status'">{{
                   scope.row[item.prop] === 1
                     ? "发布"
                     : scope.row[item.prop] === 0
@@ -353,14 +353,17 @@ export default {
         {
           label: "试卷编码",
           prop: "code",
+          width:"120px"
         },
         {
           label: "标题前缀",
           prop: "prefixName",
+          width:"160px"
         },
         {
           label: "试卷标题",
           prop: "examName",
+          width:"300px"
         },
         {
           label: "业务层级",
@@ -368,7 +371,7 @@ export default {
           prop2: "projectName",
           prop3: "businessName",
           scope: "moreList",
-          width: "250px",
+          width: "300px",
         },
         {
           label: "发布状态",
@@ -415,14 +418,13 @@ export default {
       tableData: [],
       tableDataInfos: [],
       tableSet: [
-        { label: "编码", prop: "code" },
-        { label: "标题前缀", prop: "prefixName", width: "120" },
-        { label: "标题", prop: "moduleName", prop1: "name", scope: "teshu" },
+        { label: "编码", prop: "code", width: "120" },
+        { label: "标题前缀", prop: "prefixName", width: "160" },
+        { label: "标题", prop: "moduleName", prop1: "name", scope: "teshu", width: "300" },
         {
           label: "发布状态",
           prop: "publishStatus",
           scope: "Status",
-          width: "120",
         },
       ],
       dialogVisible: false,

+ 14 - 7
src/views/resource/videoManagement/courseManagement/index.vue

@@ -123,21 +123,24 @@ export default {
       },
       // 表单
       tableSet: [
+        {
+          label: "课程编码",
+          prop: "code",
+          hidden: true,
+          width: "120px",
+        },
         {
           label: "名称前缀",
           prop: "prefixName",
           hidden: true,
+          width: "180px",
         },
         {
           label: "课程名称",
           prop: "courseName",
           hidden: true,
           scope: "editInfo",
-        },
-        {
-          label: "课程编码",
-          prop: "code",
-          hidden: true,
+          width: "260px",
         },
         {
           label: "科目",
@@ -153,19 +156,21 @@ export default {
           label: "院校",
           prop: "schoolName",
           hidden: true,
+          width: "120px",
         },
         {
           label: "业务层次",
           prop1: "projectName",
           prop2: "businessName",
           hidden: true,
-          width: "240px",
+          width: "340px",
           scope: "InfoMore",
         },
         {
           label: "教育类型",
           prop: "educationName",
           hidden: true,
+          width: "140px",
         },
         {
           label: "发布状态",
@@ -178,12 +183,14 @@ export default {
           prop: "updateTime",
           scope: "aTimeList",
           hidden: true,
+          width: "160px",
         },
         {
           label: "创建时间",
           prop: "createTime",
           scope: "aTimeList",
           hidden: true,
+          width: "160px",
         },
         {
           label: "课程章节",
@@ -197,7 +204,7 @@ export default {
           hidden: true,
           prop: "goodsList",
           prop1: "goodsName",
-          width: "150px",
+          width: "210px",
           scope: "aboutChapter",
           int: 4,
         },

+ 108 - 36
src/views/resource/videoManagement/festival/add/index.vue

@@ -43,7 +43,17 @@
             @hide="hideHandle"
             :disabled="courType ? false : true"
           >
-            <el-checkbox-group v-model="sujectArray" class="checkboxSty">
+            <el-checkbox
+              v-model="checkAll"
+              @change="handleCheckAllChange"
+              :indeterminate="isIndeterminate"
+              >全选</el-checkbox
+            >
+            <el-checkbox-group
+              v-model="sujectArray"
+              class="checkboxSty"
+              @change="handleCheckedCitiesChange"
+            >
               <el-checkbox
                 v-for="(item, index) in newSujectOption"
                 :label="item.newId"
@@ -94,9 +104,13 @@
         </el-form-item>
         <el-form-item label="标题前缀" prop="prefixName">
           <el-input v-model="listData.prefixName"></el-input>
+          <div style="color: #999">注:便于检索、归类,以及区分一样的标题</div>
         </el-form-item>
         <el-form-item label="节标题" prop="name">
           <el-input v-model="listData.name"></el-input>
+          <div style="color: #999">
+            注:请尽量规范易懂,方便在课程目录表呈现给学员
+          </div>
         </el-form-item>
         <el-form-item label="节类型">
           <el-select
@@ -113,15 +127,15 @@
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="直播地址" v-if="listData.sectionType === 2">
+        <el-form-item label="直播地址" v-if="listData.sectionType === 2">
           <el-input
             style="width: 300px"
             v-model="listData.liveUrl"
-            placeholder="请输入直播地址"
+            placeholder="请输入直播地址"
           ></el-input>
           <el-select
             v-model="newActiveLiveUrl"
-            placeholder="快捷选中直播地址"
+            placeholder="快捷选中直播地址"
             @change="changeLiveUrl"
           >
             <el-option
@@ -243,37 +257,48 @@
           </el-time-picker>
         </el-form-item>
         <el-form-item label="节封面">
-          <div class="imgBoxins">
-            <img :src="$methodsTools.splitImgHost(listData.coverUrl)" alt="" />
-            <div
-              class="posimg"
-              v-if="
-                listData.coverUrl === null ||
-                listData.coverUrl === '' ||
-                listData.coverUrl === undefined
-              "
-            >
-              <label for="uplose">
-                <i class="el-icon-circle-plus-outline iconStsz"></i
-              ></label>
-              <input
-                ref="file"
-                type="file"
-                style="display: none"
-                id="uplose"
-                @change="getImgFile"
-              />
-              <p>
-                注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型
-              </p>
-            </div>
-          </div>
+          <el-row :gutter="10" style="margin-bottom: 10px">
+            <el-col :span="12">
+              <div
+                style="
+                  width: 100%;
+                  height: 150px;
+                  border: 2px dashed #999;
+                  border-radius: 28px;
+                  line-height: 150px;
+                  text-align: center;
+                "
+                v-if="!listData.coverUrl"
+              >
+                <label for="uplose">
+                  <i class="el-icon-circle-plus-outline iconStsz"></i
+                ></label>
+                <input
+                  ref="file"
+                  type="file"
+                  style="display: none"
+                  id="uplose"
+                  @change="getImgFile"
+                />
+              </div>
+              <el-image
+                v-else
+                style="width: 100%"
+                :src="$methodsTools.splitImgHost(listData.coverUrl)"
+                :preview-src-list="[
+                  $methodsTools.splitImgHost(listData.coverUrl),
+                ]"
+              >
+              </el-image>
+            </el-col>
+            <el-col :span="11">
+              <span style="color: #999; font-size: 14px"
+                >注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型</span
+              >
+            </el-col>
+          </el-row>
           <el-button
-            v-if="
-              listData.coverUrl !== null &&
-              listData.coverUrl !== '' &&
-              listData.coverUrl !== undefined
-            "
+            v-if="listData.coverUrl"
             type="danger"
             size="mini"
             class="margin-top: 20px;"
@@ -342,6 +367,8 @@ export default {
   name: "FestivalAdd",
   data() {
     return {
+      isIndeterminate: false,
+      checkAll: false,
       vodPlayerJs: "https://player.polyv.net/script/player.js",
       vid: "",
       playerJs:
@@ -436,6 +463,45 @@ export default {
     this.getDict();
   },
   methods: {
+    handleCheckedCitiesChange() {
+      let nid = this.newSujectOption.map((item) => {
+        return item.newId;
+      });
+      this.checkAll = this.sujectArray.length === nid.length;
+      this.isIndeterminate =
+        this.sujectArray.length > 0 && this.sujectArray.length < nid.length;
+    },
+    setFunc(arr) {
+      var arrays = [];
+      for (let i = 0; i < arr.length; i++) {
+        if (!arrays.includes(arr[i])) {
+          arrays.push(arr[i]);
+        }
+      }
+      return arrays;
+    },
+    handleCheckAllChange(val) {
+      if (val) {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let arrays = this.sujectArray.concat(nid);
+        this.sujectArray = this.setFunc(arrays);
+        this.isIndeterminate = false;
+      } else {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let newArr = [];
+        this.sujectArray.forEach((item) => {
+          if (!nid.includes(item)) {
+            newArr.push(item);
+          }
+        });
+        this.sujectArray = newArr;
+        this.isIndeterminate = false;
+      }
+    },
     compTimeOUT(start, end) {
       if (start && end) {
         if (end < start) {
@@ -576,9 +642,9 @@ export default {
        */
       uploadFile(file, this.fileSetting, (event) => {
         this.listData.recordingUrl = event.vid;
-        this.listData.durationTime = ''
+        this.listData.durationTime = "";
         this.getApiTime(event.vid);
-      })
+      });
     },
     getMessage() {
       if (!this.courType) {
@@ -702,9 +768,15 @@ export default {
         }
       }
       this.sujectArray = array;
+      if (!this.newSujectOption.length) {
+        this.$message.warning("该业务层次暂无关联科目");
+        this.$refs.popovers.doClose();
+        return;
+      }
       this.newSujectOption.map((item) => {
         item.newId = this.courType + "-" + item.id;
       });
+      this.handleCheckedCitiesChange();
     },
     hideHandle() {},
     getDict() {

+ 108 - 35
src/views/resource/videoManagement/festival/edit/index.vue

@@ -43,7 +43,17 @@
             @hide="hideHandle"
             :disabled="courType ? false : true"
           >
-            <el-checkbox-group v-model="sujectArray" class="checkboxSty">
+            <el-checkbox
+              v-model="checkAll"
+              @change="handleCheckAllChange"
+              :indeterminate="isIndeterminate"
+              >全选</el-checkbox
+            >
+            <el-checkbox-group
+              v-model="sujectArray"
+              class="checkboxSty"
+              @change="handleCheckedCitiesChange"
+            >
               <el-checkbox
                 v-for="(item, index) in newSujectOption"
                 :label="item.newId"
@@ -94,9 +104,13 @@
         </el-form-item>
         <el-form-item label="标题前缀" prop="prefixName">
           <el-input v-model="listData.prefixName"></el-input>
+          <div style="color: #999">注:便于检索、归类,以及区分一样的标题</div>
         </el-form-item>
         <el-form-item label="节标题" prop="name">
           <el-input v-model="listData.name"></el-input>
+          <div style="color: #999">
+            注:请尽量规范易懂,方便在课程目录表呈现给学员
+          </div>
         </el-form-item>
         <el-form-item label="节类型">
           <el-select
@@ -115,15 +129,15 @@
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="直播地址" v-if="listData.sectionType === 2">
+        <el-form-item label="直播地址" v-if="listData.sectionType === 2">
           <el-input
             style="width: 300px"
             v-model="listData.liveUrl"
-            placeholder="请输入直播地址"
+            placeholder="请输入直播地址"
           ></el-input>
           <el-select
             v-model="newActiveLiveUrl"
-            placeholder="快捷选中直播地址"
+            placeholder="快捷选中直播地址"
             @change="changeLiveUrl"
           >
             <el-option
@@ -245,37 +259,48 @@
           </el-time-picker>
         </el-form-item>
         <el-form-item label="节封面">
-          <div class="imgBoxins">
-            <img :src="$methodsTools.splitImgHost(listData.coverUrl)" alt="" />
-            <div
-              class="posimg"
-              v-if="
-                listData.coverUrl === null ||
-                listData.coverUrl === '' ||
-                listData.coverUrl === undefined
-              "
-            >
-              <label for="uplose">
-                <i class="el-icon-circle-plus-outline iconStsz"></i
-              ></label>
-              <input
-                ref="file"
-                type="file"
-                style="display: none"
-                id="uplose"
-                @change="getImgFile"
-              />
-              <p>
-                注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型
-              </p>
-            </div>
-          </div>
+          <el-row :gutter="10" style="margin-bottom: 10px">
+            <el-col :span="12">
+              <div
+                style="
+                  width: 100%;
+                  height: 150px;
+                  border: 2px dashed #999;
+                  border-radius: 28px;
+                  line-height: 150px;
+                  text-align: center;
+                "
+                v-if="!listData.coverUrl"
+              >
+                <label for="uplose">
+                  <i class="el-icon-circle-plus-outline iconStsz"></i
+                ></label>
+                <input
+                  ref="file"
+                  type="file"
+                  style="display: none"
+                  id="uplose"
+                  @change="getImgFile"
+                />
+              </div>
+              <el-image
+                v-else
+                style="width: 100%"
+                :src="$methodsTools.splitImgHost(listData.coverUrl)"
+                :preview-src-list="[
+                  $methodsTools.splitImgHost(listData.coverUrl),
+                ]"
+              >
+              </el-image>
+            </el-col>
+            <el-col :span="11">
+              <span style="color: #999; font-size: 14px"
+                >注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型</span
+              >
+            </el-col>
+          </el-row>
           <el-button
-            v-if="
-              listData.coverUrl !== null &&
-              listData.coverUrl !== '' &&
-              listData.coverUrl !== undefined
-            "
+            v-if="listData.coverUrl"
             type="danger"
             size="mini"
             class="margin-top: 20px;"
@@ -350,6 +375,8 @@ export default {
   name: "FestivalEdit",
   data() {
     return {
+      isIndeterminate: false,
+      checkAll: false,
       vodPlayerJs: "https://player.polyv.net/script/player.js",
       vid: "",
       playerJs:
@@ -388,7 +415,7 @@ export default {
         coverUrl: "oss/images/avatar/20211013/1634097664410_1397766697",
       },
       newActiveLiveUrl: "",
-      newLiveUrl: [], //直播地址
+      newLiveUrl: [], //直播地址
       newActiveRecordingUrl1: "",
       newSteamUrl1: [], //录播流地址
       newActiveRecordingUrl2: "",
@@ -442,6 +469,45 @@ export default {
     this.getDict();
   },
   methods: {
+    handleCheckedCitiesChange() {
+      let nid = this.newSujectOption.map((item) => {
+        return item.newId;
+      });
+      this.checkAll = this.sujectArray.length === nid.length;
+      this.isIndeterminate =
+        this.sujectArray.length > 0 && this.sujectArray.length < nid.length;
+    },
+    setFunc(arr) {
+      var arrays = [];
+      for (let i = 0; i < arr.length; i++) {
+        if (!arrays.includes(arr[i])) {
+          arrays.push(arr[i]);
+        }
+      }
+      return arrays;
+    },
+    handleCheckAllChange(val) {
+      if (val) {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let arrays = this.sujectArray.concat(nid);
+        this.sujectArray = this.setFunc(arrays);
+        this.isIndeterminate = false;
+      } else {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let newArr = [];
+        this.sujectArray.forEach((item) => {
+          if (!nid.includes(item)) {
+            newArr.push(item);
+          }
+        });
+        this.sujectArray = newArr;
+        this.isIndeterminate = false;
+      }
+    },
     compTimeOUT(start, end) {
       if (start && end) {
         if (end < start) {
@@ -749,9 +815,16 @@ export default {
         }
       }
       this.sujectArray = array;
+
+      if (!this.newSujectOption.length) {
+        this.$message.warning("该业务层次暂无关联科目");
+        this.$refs.popovers.doClose();
+        return;
+      }
       this.newSujectOption.map((item) => {
         item.newId = this.courType + "-" + item.id;
       });
+      this.handleCheckedCitiesChange();
     },
     hideHandle() {},
     async getDict() {

+ 31 - 18
src/views/resource/videoManagement/festival/index.vue

@@ -8,6 +8,8 @@
       @init="init"
     />
     <table-list
+      rowKey="sectionId"
+      ref="tableList"
       :tableSets="tableSet"
       :tableData="tableData"
       :navText="navText"
@@ -106,6 +108,7 @@ export default {
         num: true,
         border: true,
         choice: true,
+        openCheckMore: true,
         addHide: false,
         backFatherBtn: {
           status: false,
@@ -185,27 +188,27 @@ export default {
           label: "节编码",
           prop: "code",
           hidden: true,
-          width: "140",
+          width: "140px",
         },
         {
           label: "标题前缀",
           prop: "prefixName",
           hidden: true,
-          width: "120",
+          width: "200px",
         },
         {
           label: "节标题",
           prop: "name",
           hidden: true,
           scope: "editInfo",
-          width: "120",
+          width: "260px",
         },
         {
           label: "适用业务层级",
           prop: "businessList",
           hidden: true,
           scope: "mapTypesMores",
-          width: "280",
+          width: "340px",
         },
         {
           label: "关联章",
@@ -213,7 +216,7 @@ export default {
           prop1: "chapterName",
           hidden: true,
           scope: "aboutChapter",
-          width: "150",
+          width: "200px",
           int: 1,
         },
         // {
@@ -236,23 +239,32 @@ export default {
           label: "节时长",
           prop: "durationTime",
           hidden: true,
-          width: "100",
-          scope:"convert",
+          width: "100px",
+          scope: "convert",
         },
         {
-          label: "直播开始时间",
-          prop: "liveStartTime",
-          hidden: true,
-          scope: "aTimeList",
-          width: "160",
-        },
-        {
-          label: "直播结束时间",
-          prop: "liveEndTime",
+          label: "URL地址/直播地址",
+          prop: "sectionType",
+          prop1:"recordingUrl",
+          prop2:"liveUrl",
           hidden: true,
-          scope: "aTimeList",
-          width: "160",
+          width: "280px",
+          scope: "liveAndUrl",
         },
+        // {
+        //   label: "直播开始时间",
+        //   prop: "liveStartTime",
+        //   hidden: true,
+        //   scope: "aTimeList",
+        //   width: "160",
+        // },
+        // {
+        //   label: "直播结束时间",
+        //   prop: "liveEndTime",
+        //   hidden: true,
+        //   scope: "aTimeList",
+        //   width: "160",
+        // },
         {
           label: "发布状态",
           prop: "publishStatus",
@@ -354,6 +366,7 @@ export default {
                 };
                 this.$api.editCourseSection(data).then((res) => {
                   this.$message.success("删除成功");
+                  this.$refs.tableList.clearMoreActive();
                   this.search();
                 });
               })

+ 145 - 57
src/views/resource/videoManagement/flow/index.vue

@@ -8,6 +8,8 @@
       @init="init"
     />
     <table-list
+      rowKey="id"
+      ref="tableList"
       :tableSets="tableSet"
       :tableData="tableData"
       :navText="navText"
@@ -16,6 +18,9 @@
       @editInfo="editInfo"
     >
       <template slot="customize">
+        <el-button size="small" type="warning" @click="PLDel"
+          >批量删除</el-button
+        >
         <el-button size="small" type="success" @click="moreActive"
           >同步BL频道</el-button
         >
@@ -131,7 +136,17 @@
                   trigger="click"
                   :disabled="eduType ? false : true"
                 >
-                  <el-checkbox-group v-model="cauType" class="checkboxSty">
+                  <el-checkbox
+                    v-model="checkAll"
+                    @change="handleCheckAllChange"
+                    :indeterminate="isIndeterminate"
+                    >全选</el-checkbox
+                  >
+                  <el-checkbox-group
+                    v-model="cauType"
+                    class="checkboxSty"
+                    @change="handleCheckedCitiesChange"
+                  >
                     <el-checkbox
                       v-for="(item, index) in itemOption2"
                       :label="item.id"
@@ -234,12 +249,12 @@
           </span>
         </el-tree>
       </div>
-      <div class="mat-TOP">
+      <!-- <div class="mat-TOP">
         <el-radio-group v-model="streamAddType">
           <el-radio :label="1">正式</el-radio>
           <el-radio :label="2">测试</el-radio>
         </el-radio-group>
-      </div>
+      </div> -->
       <span slot="footer" class="dialog-footer">
         <el-button @click="disBoxs = false">取 消</el-button>
         <el-button @click="submitForms" :loading="disabledBtn">确 定</el-button>
@@ -257,6 +272,8 @@ export default {
   components: { searchBoxNew, tableList, pagination },
   data() {
     return {
+      isIndeterminate: false,
+      checkAll: false,
       disBoxs: false, //弹窗Bool
       changeHeight: true,
       loading: false, //当前表单加载是否加载动画
@@ -268,6 +285,7 @@ export default {
         border: true,
         choice: true,
         addHide: false,
+        openCheckMore: true,
         backFatherBtn: {
           status: false,
           title: "未定义",
@@ -286,7 +304,7 @@ export default {
           prop: "streamingName",
           hidden: true,
           scope: "editInfo",
-          width: "120px",
+          width: "300px",
         },
         {
           label: "直播/录播/回放地址",
@@ -295,15 +313,15 @@ export default {
           prop2: "recordingVideoId",
           prop3: "playbackUrl",
           hidden: true,
-          width: "160px",
+          width: "300px",
           scope: "urlStatus",
         },
         {
           label: "适用业务层级",
           prop: "businessList",
           hidden: true,
-          scope: "mapTypes",
-          width: "240px",
+          scope: "mapTypesBUS",
+          width: "300px",
         },
         {
           label: "视频类型",
@@ -311,12 +329,12 @@ export default {
           hidden: true,
           scope: "sectionTypes",
         },
-        {
-          label: "流地址类型",
-          prop: "streamingAddressType",
-          hidden: true,
-          scope: "streamType",
-        },
+        // {
+        //   label: "流地址类型",
+        //   prop: "streamingAddressType",
+        //   hidden: true,
+        //   scope: "streamType",
+        // },
       ],
       tableData: [], //表单数据
       //搜索
@@ -351,21 +369,21 @@ export default {
             },
           ],
         },
-        {
-          prop: "streamingAddressType",
-          placeholder: "流地址类型",
-          scope: "select",
-          options: [
-            {
-              label: "正式",
-              value: 1,
-            },
-            {
-              label: "测试",
-              value: 2,
-            },
-          ],
-        },
+        // {
+        //   prop: "streamingAddressType",
+        //   placeholder: "流地址类型",
+        //   scope: "select",
+        //   options: [
+        //     {
+        //       label: "正式",
+        //       value: 1,
+        //     },
+        //     {
+        //       label: "测试",
+        //       value: 2,
+        //     },
+        //   ],
+        // },
         {
           prop: "streamingName",
           placeholder: "请输入流地址名称",
@@ -452,21 +470,21 @@ export default {
           prop: "liveUrl",
           hide: "two",
         },
-        {
-          label: "流地址类型",
-          prop: "streamingAddressType",
-          scope: "select",
-          options: [
-            {
-              label: "正式",
-              value: 1,
-            },
-            {
-              label: "测试",
-              value: 2,
-            },
-          ],
-        },
+        // {
+        //   label: "流地址类型",
+        //   prop: "streamingAddressType",
+        //   scope: "select",
+        //   options: [
+        //     {
+        //       label: "正式",
+        //       value: 1,
+        //     },
+        //     {
+        //       label: "测试",
+        //       value: 2,
+        //     },
+        //   ],
+        // },
         {
           label: "描述",
           prop: "introduce",
@@ -507,20 +525,20 @@ export default {
         playbackUrl: [
           { required: true, message: "请输入回放地址", trigger: "blur" },
         ],
-        streamingAddressType: [
-          {
-            required: true,
-            message: "请选择流地址类型",
-            trigger: ["change", "blur"],
-          },
-        ],
+        // streamingAddressType: [
+        //   {
+        //     required: true,
+        //     message: "请选择流地址类型",
+        //     trigger: ["change", "blur"],
+        //   },
+        // ],
       },
       props: {
         label: "text",
         children: "children",
       },
       cataid: "",
-      streamAddType: "",
+      // streamAddType: "",
       disabledBtn: false,
     };
   },
@@ -538,6 +556,73 @@ export default {
     this.initOptions();
   },
   methods: {
+    PLDel() {
+      if (!this.$refs.tableList.allCheckData.length) {
+        this.$message.warning("请勾选数据");
+        return;
+      }
+      const ary = this.$refs.tableList.allCheckData.map((item) => {
+        return item.id;
+      });
+      this.del(ary, true);
+    },
+    handleCheckedCitiesChange() {
+      let nid = this.itemOption2.map((item) => {
+        return item.id;
+      });
+      this.checkAll = nid.every((item) => {
+        if (this.cauType.includes(item)) {
+          this.isIndeterminate = true;
+          return true;
+        } else {
+          return false;
+        }
+      });
+      if (this.cauType.length) {
+        this.isIndeterminate = true;
+      } else {
+        this.isIndeterminate = false;
+      }
+      if (this.checkAll) {
+        this.isIndeterminate = false;
+      }
+    },
+    handleCheckAllChange(val) {
+      if (val) {
+        let nid = this.itemOption2.map((item) => {
+          return item.id;
+        });
+        let arrays = this.cauType.concat(nid);
+        this.cauType = this.setFunc(arrays);
+        this.isIndeterminate = false;
+      } else {
+        let nid = this.itemOption2.map((item) => {
+          return item.id;
+        });
+        let newArr = [];
+        this.cauType.forEach((item) => {
+          if (!nid.includes(item)) {
+            newArr.push(item);
+          }
+        });
+        this.cauType = newArr;
+        console.log(this.cauType);
+        if (this.cauType.length) {
+          this.isIndeterminate = true;
+        } else {
+          this.isIndeterminate = false;
+        }
+      }
+    },
+    setFunc(arr) {
+      var arrays = [];
+      for (let i = 0; i < arr.length; i++) {
+        if (!arrays.includes(arr[i])) {
+          arrays.push(arr[i]);
+        }
+      }
+      return arrays;
+    },
     loadingClose() {
       this.disabledBtn = false;
     },
@@ -566,7 +651,7 @@ export default {
       this.$api
         .uploadPolyvvideocata({
           cataid: this.cataid,
-          streamingAddressType: this.streamAddType,
+          // streamingAddressType: this.streamAddType,
         })
         .then((res) => {
           this.$message.success("同步成功");
@@ -582,7 +667,7 @@ export default {
     },
     moreActive() {
       this.cataid = "";
-      this.streamAddType = 1;
+      // this.streamAddType = 1;
       this.disBoxs = true;
     },
     getMessage() {
@@ -612,6 +697,7 @@ export default {
         }
       });
       this.itemOption2 = array;
+      this.handleCheckedCitiesChange();
     },
     initOptions() {
       this.$api.inquireCourseEducationType({ status: 1 }).then((res) => {
@@ -681,8 +767,9 @@ export default {
     },
     closeType(id) {
       this.cauType.splice(this.cauType.indexOf(id), 1);
+      this.handleCheckedCitiesChange();
     },
-    del(v) {
+    del(v, m) {
       this.$alert(
         "确定删除此内容?<br />内容删除后将无法恢复,请慎重考虑",
         "提示",
@@ -692,11 +779,12 @@ export default {
       )
         .then(() => {
           var data = {
-            id: v.id,
+            ids: m ? v : [v.id],
             status: -1,
           };
           this.$api.editCourseBusinessCourseStreaming(data).then((res) => {
             this.$message.success("删除成功");
+            this.$refs.tableList.clearMoreActive();
             this.search();
           });
         })
@@ -712,7 +800,7 @@ export default {
         this.statusPop = 1;
         this.listData = {
           status: 1,
-          streamingAddressType: 1,
+          // streamingAddressType: 1,
         };
         this.eduType = "";
         this.cauType = [];
@@ -760,7 +848,7 @@ export default {
         streamingName: this.listData.streamingName,
         businessList: pushRays,
         introduce: this.listData.introduce,
-        streamingAddressType: this.listData.streamingAddressType,
+        // streamingAddressType: this.listData.streamingAddressType,
       };
       if (this.listData.streamingType === 1) {
         dataInfos.streamingType = 1;

+ 154 - 78
src/views/resource/videoManagement/moduleManagement/add/index.vue

@@ -42,8 +42,17 @@
             @show="showHandle"
             @hide="hideHandle"
             :disabled="courType ? false : true"
-          >
-            <el-checkbox-group v-model="sujectArray" class="checkboxSty">
+            ><el-checkbox
+              v-model="checkAll"
+              @change="handleCheckAllChange"
+              :indeterminate="isIndeterminate"
+              >全选</el-checkbox
+            >
+            <el-checkbox-group
+              v-model="sujectArray"
+              class="checkboxSty"
+              @change="handleCheckedCitiesChange"
+            >
               <el-checkbox
                 v-for="(item, index) in newSujectOption"
                 :label="item.newId"
@@ -93,43 +102,58 @@
         </el-form-item>
         <el-form-item label="标题前缀" prop="prefixName">
           <el-input v-model="listData.prefixName"></el-input>
+          <div style="color: #999">注:便于检索、归类,以及区分一样的标题</div>
         </el-form-item>
         <el-form-item label="模块标题" prop="moduleName">
           <el-input v-model="listData.moduleName"></el-input>
+          <div style="color: #999">
+            注:请尽量规范易懂,方便在课程目录表呈现给学员
+          </div>
         </el-form-item>
 
         <el-form-item label="模块封面">
-          <div class="imgBoxins">
-            <img :src="$methodsTools.splitImgHost(listData.coverUrl)" alt="" />
-            <div
-              class="posimg"
-              v-if="
-                listData.coverUrl === null ||
-                listData.coverUrl === '' ||
-                listData.coverUrl === undefined
-              "
-            >
-              <label for="uplose">
-                <i class="el-icon-circle-plus-outline iconStsz"></i
-              ></label>
-              <input
-                ref="file"
-                type="file"
-                style="display: none"
-                id="uplose"
-                @change="getImgFile"
-              />
-              <p>
-                注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型
-              </p>
-            </div>
-          </div>
+          <el-row :gutter="10" style="margin-bottom: 10px">
+            <el-col :span="12">
+              <div
+                style="
+                  width: 100%;
+                  height: 150px;
+                  border: 2px dashed #999;
+                  border-radius: 28px;
+                  line-height: 150px;
+                  text-align: center;
+                "
+                v-if="!listData.coverUrl"
+              >
+                <label for="uplose">
+                  <i class="el-icon-circle-plus-outline iconStsz"></i
+                ></label>
+                <input
+                  ref="file"
+                  type="file"
+                  style="display: none"
+                  id="uplose"
+                  @change="getImgFile"
+                />
+              </div>
+              <el-image
+                v-else
+                style="width: 100%"
+                :src="$methodsTools.splitImgHost(listData.coverUrl)"
+                :preview-src-list="[
+                  $methodsTools.splitImgHost(listData.coverUrl),
+                ]"
+              >
+              </el-image>
+            </el-col>
+            <el-col :span="11">
+              <span style="color: #999; font-size: 14px"
+                >注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型</span
+              >
+            </el-col>
+          </el-row>
           <el-button
-            v-if="
-              listData.coverUrl !== null &&
-              listData.coverUrl !== '' &&
-              listData.coverUrl !== undefined
-            "
+            v-if="listData.coverUrl"
             type="danger"
             size="mini"
             class="margin-top: 20px;"
@@ -165,50 +189,50 @@
             }"
             :default-sort="{ prop: 'sort', order: 'ascending' }"
           >
-              <el-table-column
-               v-for="(item, index) in tableSet"
-                :width="item.width"
-                :key="index"
-                :label="item.label"
-                align="center"
-                :show-overflow-tooltip="true"
-                header-align="center"
-                :sortable="item.prop === 'sort'"
-                sort-by="sort"
-                :prop="item.prop"
-              >
-                <template slot-scope="scope">
-                  <span v-if="item.scope === 'types'">{{
+            <el-table-column
+              v-for="(item, index) in tableSet"
+              :width="item.width"
+              :key="index"
+              :label="item.label"
+              align="center"
+              :show-overflow-tooltip="true"
+              header-align="center"
+              :sortable="item.prop === 'sort'"
+              sort-by="sort"
+              :prop="item.prop"
+            >
+              <template slot-scope="scope">
+                <span v-if="item.scope === 'types'">{{
+                  scope.row[item.prop] === 1
+                    ? "录播"
+                    : scope.row[item.prop] === 2
+                    ? "直播"
+                    : scope.row[item.prop] === 3
+                    ? "回放"
+                    : "未知"
+                }}</span>
+                <span v-else-if="item.scope === 'Status'">
+                  {{
                     scope.row[item.prop] === 1
-                      ? "录播"
-                      : scope.row[item.prop] === 2
-                      ? "直播"
-                      : scope.row[item.prop] === 3
-                      ? "回放"
+                      ? "发布"
+                      : scope.row[item.prop] === 0
+                      ? "未发布"
                       : "未知"
-                  }}</span>
-                  <span v-else-if="item.scope === 'Status'">
-                    {{
-                      scope.row[item.prop] === 1
-                        ? "发布"
-                        : scope.row[item.prop] === 0
-                        ? "未发布"
-                        : "未知"
-                    }}
-                  </span>
-                  <div v-else-if="item.scope === 'inputs'">
-                    <el-input-number
-                      style="width: 50px"
-                      size="small"
-                      :controls="false"
-                      v-model="scope.row[item.prop]"
-                      controls-position="right"
-                      :min="0"
-                    ></el-input-number>
-                  </div>
-                  <span v-else>{{ scope.row[item.prop] }}</span></template
-                >
-              </el-table-column>
+                  }}
+                </span>
+                <div v-else-if="item.scope === 'inputs'">
+                  <el-input-number
+                    style="width: 50px"
+                    size="small"
+                    :controls="false"
+                    v-model="scope.row[item.prop]"
+                    controls-position="right"
+                    :min="0"
+                  ></el-input-number>
+                </div>
+                <span v-else>{{ scope.row[item.prop] }}</span></template
+              >
+            </el-table-column>
             <el-table-column
               label="操作"
               align="center"
@@ -336,6 +360,8 @@ export default {
   name: "ModuleManagementAdd",
   data() {
     return {
+      isIndeterminate: false,
+      checkAll: false,
       //   弹窗数据
       changeHeight: true,
       bfImg: "oss/images/avatar/20211013/1634097664410_1397766697",
@@ -376,14 +402,13 @@ export default {
       minTimeAll: 0, //总时长
       tableSet: [
         { label: "排序", prop: "sort", scope: "inputs", width: "100" },
-        { label: "章编码", prop: "code" },
-        { label: "标题前缀", prop: "prefixName", width: "120" },
-        { label: "章标题", prop: "name" },
+        { label: "章编码", prop: "code", width: "120" },
+        { label: "标题前缀", prop: "prefixName", width: "180" },
+        { label: "章标题", prop: "name", width: "310" },
         {
           label: "发布状态",
           prop: "publishStatus",
           scope: "Status",
-          width: "120",
         },
       ],
       tableData: [],
@@ -401,6 +426,12 @@ export default {
           scope: "businessLevel",
           edu: "educationTypeId",
         },
+        {
+          prop: "subjectId",
+          placeholder: "科目",
+          scope: "sujectType",
+          edu: "educationTypeId",
+        },
         // {
         //   prop: "publishStatus",
         //   placeholder: "发布状态",
@@ -444,6 +475,45 @@ export default {
     // this.search();
   },
   methods: {
+    handleCheckedCitiesChange() {
+      let nid = this.newSujectOption.map((item) => {
+        return item.newId;
+      });
+      this.checkAll = this.sujectArray.length === nid.length;
+      this.isIndeterminate =
+        this.sujectArray.length > 0 && this.sujectArray.length < nid.length;
+    },
+    setFunc(arr) {
+      var arrays = [];
+      for (let i = 0; i < arr.length; i++) {
+        if (!arrays.includes(arr[i])) {
+          arrays.push(arr[i]);
+        }
+      }
+      return arrays;
+    },
+    handleCheckAllChange(val) {
+      if (val) {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let arrays = this.sujectArray.concat(nid);
+        this.sujectArray = this.setFunc(arrays);
+        this.isIndeterminate = false;
+      } else {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let newArr = [];
+        this.sujectArray.forEach((item) => {
+          if (!nid.includes(item)) {
+            newArr.push(item);
+          }
+        });
+        this.sujectArray = newArr;
+        this.isIndeterminate = false;
+      }
+    },
     getMessage() {
       if (!this.courType) {
         this.$message.warning("请先选择业务层级");
@@ -572,9 +642,15 @@ export default {
         }
       }
       this.sujectArray = array;
+      if (!this.newSujectOption.length) {
+        this.$message.warning("该业务层次暂无关联科目");
+        this.$refs.popovers.doClose();
+        return;
+      }
       this.newSujectOption.map((item) => {
         item.newId = this.courType + "-" + item.id;
       });
+      this.handleCheckedCitiesChange();
     },
     hideHandle() {},
     getDict() {

+ 112 - 36
src/views/resource/videoManagement/moduleManagement/edit/index.vue

@@ -42,8 +42,17 @@
             @show="showHandle"
             @hide="hideHandle"
             :disabled="courType ? false : true"
-          >
-            <el-checkbox-group v-model="sujectArray" class="checkboxSty">
+            ><el-checkbox
+              v-model="checkAll"
+              @change="handleCheckAllChange"
+              :indeterminate="isIndeterminate"
+              >全选</el-checkbox
+            >
+            <el-checkbox-group
+              v-model="sujectArray"
+              class="checkboxSty"
+              @change="handleCheckedCitiesChange"
+            >
               <el-checkbox
                 v-for="(item, index) in newSujectOption"
                 :label="item.newId"
@@ -94,43 +103,58 @@
         </el-form-item>
         <el-form-item label="标题前缀" prop="prefixName">
           <el-input v-model="listData.prefixName"></el-input>
+          <div style="color: #999">注:便于检索、归类,以及区分一样的标题</div>
         </el-form-item>
         <el-form-item label="模块标题" prop="moduleName">
           <el-input v-model="listData.moduleName"></el-input>
+          <div style="color: #999">
+            注:请尽量规范易懂,方便在课程目录表呈现给学员
+          </div>
         </el-form-item>
 
         <el-form-item label="模块封面">
-          <div class="imgBoxins">
-            <img :src="$methodsTools.splitImgHost(listData.coverUrl)" alt="" />
-            <div
-              class="posimg"
-              v-if="
-                listData.coverUrl === null ||
-                listData.coverUrl === '' ||
-                listData.coverUrl === undefined
-              "
-            >
-              <label for="uplose">
-                <i class="el-icon-circle-plus-outline iconStsz"></i
-              ></label>
-              <input
-                ref="file"
-                type="file"
-                style="display: none"
-                id="uplose"
-                @change="getImgFile"
-              />
-              <p>
-                注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型
-              </p>
-            </div>
-          </div>
+          <el-row :gutter="10" style="margin-bottom: 10px">
+            <el-col :span="12">
+              <div
+                style="
+                  width: 100%;
+                  height: 150px;
+                  border: 2px dashed #999;
+                  border-radius: 28px;
+                  line-height: 150px;
+                  text-align: center;
+                "
+                v-if="!listData.coverUrl"
+              >
+                <label for="uplose">
+                  <i class="el-icon-circle-plus-outline iconStsz"></i
+                ></label>
+                <input
+                  ref="file"
+                  type="file"
+                  style="display: none"
+                  id="uplose"
+                  @change="getImgFile"
+                />
+              </div>
+              <el-image
+                v-else
+                style="width: 100%"
+                :src="$methodsTools.splitImgHost(listData.coverUrl)"
+                :preview-src-list="[
+                  $methodsTools.splitImgHost(listData.coverUrl),
+                ]"
+              >
+              </el-image>
+            </el-col>
+            <el-col :span="11">
+              <span style="color: #999; font-size: 14px"
+                >注:请上传小于300kb,尺寸为750*440的图片,支持gif、jpg、jpeg、png等类型</span
+              >
+            </el-col>
+          </el-row>
           <el-button
-            v-if="
-              listData.coverUrl !== null &&
-              listData.coverUrl !== '' &&
-              listData.coverUrl !== undefined
-            "
+            v-if="listData.coverUrl"
             type="danger"
             size="mini"
             class="margin-top: 20px;"
@@ -342,6 +366,8 @@ export default {
   components: { searchBoxNew, pagination },
   data() {
     return {
+      isIndeterminate: false,
+      checkAll: false,
       //   弹窗数据
       changeHeight: true,
       bfImg: "oss/images/avatar/20211013/1634097664410_1397766697",
@@ -381,14 +407,13 @@ export default {
       minTimeAll: 0, //总时长
       tableSet: [
         { label: "排序", prop: "sort", scope: "inputs", width: "100" },
-        { label: "章编码", prop: "code" },
-        { label: "标题前缀", prop: "prefixName", width: "120" },
-        { label: "章标题", prop: "name" },
+        { label: "章编码", prop: "code", width: "120" },
+        { label: "标题前缀", prop: "prefixName", width: "180" },
+        { label: "章标题", prop: "name", width: "310" },
         {
           label: "发布状态",
           prop: "publishStatus",
           scope: "Status",
-          width: "120",
         },
       ],
       tableData: [],
@@ -406,6 +431,12 @@ export default {
           scope: "businessLevel",
           edu: "educationTypeId",
         },
+        {
+          prop: "subjectId",
+          placeholder: "科目",
+          scope: "sujectType",
+          edu: "educationTypeId",
+        },
         // {
         //   prop: "publishStatus",
         //   placeholder: "发布状态",
@@ -459,6 +490,45 @@ export default {
     this.search();
   },
   methods: {
+    handleCheckedCitiesChange() {
+      let nid = this.newSujectOption.map((item) => {
+        return item.newId;
+      });
+      this.checkAll = this.sujectArray.length === nid.length;
+      this.isIndeterminate =
+        this.sujectArray.length > 0 && this.sujectArray.length < nid.length;
+    },
+    setFunc(arr) {
+      var arrays = [];
+      for (let i = 0; i < arr.length; i++) {
+        if (!arrays.includes(arr[i])) {
+          arrays.push(arr[i]);
+        }
+      }
+      return arrays;
+    },
+    handleCheckAllChange(val) {
+      if (val) {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let arrays = this.sujectArray.concat(nid);
+        this.sujectArray = this.setFunc(arrays);
+        this.isIndeterminate = false;
+      } else {
+        let nid = this.newSujectOption.map((item) => {
+          return item.newId;
+        });
+        let newArr = [];
+        this.sujectArray.forEach((item) => {
+          if (!nid.includes(item)) {
+            newArr.push(item);
+          }
+        });
+        this.sujectArray = newArr;
+        this.isIndeterminate = false;
+      }
+    },
     getMessage() {
       if (!this.courType) {
         this.$message.warning("请先选择业务层级");
@@ -592,9 +662,15 @@ export default {
         }
       }
       this.sujectArray = array;
+      if (!this.newSujectOption.length) {
+        this.$message.warning("该业务层次暂无关联科目");
+        this.$refs.popovers.doClose();
+        return;
+      }
       this.newSujectOption.map((item) => {
         item.newId = this.courType + "-" + item.id;
       });
+      this.handleCheckedCitiesChange();
     },
     hideHandle() {},
     getDict() {

+ 6 - 4
src/views/resource/videoManagement/moduleManagement/index.vue

@@ -115,21 +115,21 @@ export default {
           label: "标题前缀",
           prop: "prefixName",
           hidden: true,
-          width: "120",
+          width: "200",
         },
         {
           label: "模块标题",
           prop: "moduleName",
           hidden: true,
           scope: "editInfo",
-          width: "120",
+          width: "260",
         },
         {
           label: "适用业务层级",
           prop: "businessList",
           hidden: true,
           scope: "mapTypesMores",
-          width: "240",
+          width: "340",
         },
         {
           label: "关联课程",
@@ -137,18 +137,20 @@ export default {
           prop1: "courseName",
           hidden: true,
           scope: "aboutChapter",
-          width: "150",
+          width: "200",
           int: 3,
         },
         {
           label: "章总数",
           prop: "chapterNum",
           hidden: true,
+          width: "100",
         },
         {
           label: "节总数",
           prop: "sectionNum",
           hidden: true,
+          width: "100",
         },
         {
           label: "学习时长",

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно