Tang 4 yıl önce
ebeveyn
işleme
45807613f5
96 değiştirilmiş dosya ile 7484 ekleme ve 744 silme
  1. 7 1
      src/api/api.js
  2. 18 11
      src/components/searchBoxNew.vue
  3. 165 5
      src/components/tableList.vue
  4. 1 1
      src/layout/components/AppMain.vue
  5. 1 0
      src/main.js
  6. 66 0
      src/newApi/classTab.js
  7. 8 0
      src/newApi/course.js
  8. 21 5
      src/newApi/order.js
  9. 42 0
      src/newApi/orderSheet.js
  10. 60 0
      src/newApi/studentList.js
  11. 3 1
      src/permission.js
  12. 1 1
      src/settings.js
  13. 9 2
      src/store/getters.js
  14. 1 0
      src/store/modules/dict.js
  15. 22 1
      src/store/modules/permission.js
  16. 29 4
      src/utils/methodsTool.js
  17. 1 0
      src/utils/request.js
  18. 7 84
      src/views/Marketing/basicParameters/index.vue
  19. 4 3
      src/views/Marketing/basicParameters/marketings/beneficiary/index.vue
  20. 4 3
      src/views/Marketing/basicParameters/marketings/beneficiaryInfos/index.vue
  21. 4 3
      src/views/Marketing/basicParameters/marketings/channelSource/index.vue
  22. 4 3
      src/views/Marketing/basicParameters/marketings/natureCharge/index.vue
  23. 5 4
      src/views/Marketing/basicParameters/marketings/paymentChannel/index.vue
  24. 4 3
      src/views/Marketing/basicParameters/marketings/serviceModel/index.vue
  25. 4 3
      src/views/Marketing/basicParameters/marketings/supplier/index.vue
  26. 4 3
      src/views/Marketing/basicParameters/marketings/typesFee/index.vue
  27. 4 3
      src/views/Marketing/basicParameters/marketings/visitCampus/index.vue
  28. 2 2
      src/views/Marketing/commodityManageMent/add/index.vue
  29. 2 2
      src/views/Marketing/commodityManageMent/edit/index.vue
  30. 125 19
      src/views/Marketing/commodityManageMent/index.vue
  31. 34 10
      src/views/Marketing/orderList/add/order/index.vue
  32. 411 29
      src/views/Marketing/orderList/add/orderPrice/index.vue
  33. 254 0
      src/views/Marketing/orderList/details/costPriceManages.vue
  34. 422 0
      src/views/Marketing/orderList/details/goodsManage.vue
  35. 37 0
      src/views/Marketing/orderList/details/index.vue
  36. 277 0
      src/views/Marketing/orderList/details/studentManageOrder.vue
  37. 288 76
      src/views/Marketing/orderList/index.vue
  38. 588 0
      src/views/education/classManageMent/classList/addClass/index.vue
  39. 380 0
      src/views/education/classManageMent/classList/index.vue
  40. 467 0
      src/views/education/classManageMent/classList/manageClass/baseInfo.vue
  41. 34 0
      src/views/education/classManageMent/classList/manageClass/index.vue
  42. 138 0
      src/views/education/classManageMent/classList/manageClass/studentRecords.vue
  43. 155 0
      src/views/education/classManageMent/classList/manageClass/teacherRecords.vue
  44. 215 0
      src/views/education/classManageMent/studentMenu/index.vue
  45. 326 0
      src/views/education/studentManageMent/studentList/index.vue
  46. 422 0
      src/views/education/studentManageMent/studentXQ/BankQuestionPassRecord.vue
  47. 181 0
      src/views/education/studentManageMent/studentXQ/classRecord.vue
  48. 46 0
      src/views/education/studentManageMent/studentXQ/index.vue
  49. 205 0
      src/views/education/studentManageMent/studentXQ/studentBaseManage.vue
  50. 419 0
      src/views/education/studentManageMent/studentXQ/studyRecord.vue
  51. 0 0
      src/views/education/studentManageMent/text.md
  52. 7 4
      src/views/login.vue
  53. 19 6
      src/views/resource/bankManagement/chapterVolumeManagement/index.vue
  54. 5 2
      src/views/resource/bankManagement/knowledgeManagement/index.vue
  55. 3 2
      src/views/resource/bankManagement/testPaperManagement/addPaper/baseAddPaper/index.vue
  56. 3 2
      src/views/resource/bankManagement/testPaperManagement/editPaper/topicEditPaper/index.vue
  57. 19 5
      src/views/resource/bankManagement/testPaperManagement/index.vue
  58. 10 7
      src/views/resource/bankManagement/topicManagement/index.vue
  59. 17 3
      src/views/resource/bankManagement/volumeManagement/index.vue
  60. 123 0
      src/views/resource/baseManageInfos/index.vue
  61. 19 19
      src/views/resource/baseManageInfos/resource/businessLevel/index.vue
  62. 4 3
      src/views/resource/baseManageInfos/resource/certificate/index.vue
  63. 19 10
      src/views/resource/baseManageInfos/resource/colleges/index.vue
  64. 5 4
      src/views/resource/baseManageInfos/resource/educationTypes/index.vue
  65. 5 4
      src/views/resource/baseManageInfos/resource/enrollmentArea/index.vue
  66. 4 3
      src/views/resource/baseManageInfos/resource/label/index.vue
  67. 4 3
      src/views/resource/baseManageInfos/resource/labelInfos/index.vue
  68. 4 3
      src/views/resource/baseManageInfos/resource/papers/index.vue
  69. 18 7
      src/views/resource/baseManageInfos/resource/professional/index.vue
  70. 4 3
      src/views/resource/baseManageInfos/resource/projectType/index.vue
  71. 4 3
      src/views/resource/baseManageInfos/resource/questionType/index.vue
  72. 29 16
      src/views/resource/baseManageInfos/resource/suject/index.vue
  73. 80 29
      src/views/resource/baseManageInfos/resource/testPeriod/index.vue
  74. 64 8
      src/views/resource/handoutManagement/handoutList/index.vue
  75. 10 5
      src/views/resource/videoManagement/chapter/add/index.vue
  76. 9 5
      src/views/resource/videoManagement/chapter/edit/index.vue
  77. 86 20
      src/views/resource/videoManagement/chapter/index.vue
  78. 2 2
      src/views/resource/videoManagement/courseManagement/basicInfoAdd/index.vue
  79. 2 2
      src/views/resource/videoManagement/courseManagement/basicInfoEdit/index.vue
  80. 370 50
      src/views/resource/videoManagement/courseManagement/chapterContent/index.vue
  81. 107 33
      src/views/resource/videoManagement/courseManagement/index.vue
  82. 11 6
      src/views/resource/videoManagement/festival/add/index.vue
  83. 11 6
      src/views/resource/videoManagement/festival/edit/index.vue
  84. 117 30
      src/views/resource/videoManagement/festival/index.vue
  85. 158 53
      src/views/resource/videoManagement/flow/index.vue
  86. 9 5
      src/views/resource/videoManagement/moduleManagement/add/index.vue
  87. 9 4
      src/views/resource/videoManagement/moduleManagement/edit/index.vue
  88. 84 21
      src/views/resource/videoManagement/moduleManagement/index.vue
  89. 3 2
      src/views/systemManagement/accountManagement/index.vue
  90. 2 2
      src/views/systemManagement/myManagement/myProfile/index.vue
  91. 56 32
      src/views/systemManagement/registeredUser/index.vue
  92. 4 3
      src/views/systemManagement/roleManagement/index.vue
  93. 3 2
      src/views/systemSettings/jobManagement/index.vue
  94. 3 2
      src/views/systemSettings/modelPage/index.vue
  95. 3 2
      src/views/systemSettings/roleInfoManagement/index.vue
  96. 29 29
      src/views/systemSettings/usermanagement/index.vue

+ 7 - 1
src/api/api.js

@@ -68,6 +68,10 @@ import department from '../newApi/department'//部门信息管理
 import operationLog from '../newApi/operationLog'//操作日志记录
 import handout from '../newApi/handout'//讲义
 import order from '../newApi/order'//订单
+import orderSheet from '../newApi/orderSheet'//订单计费单
+import classTab from '../newApi/classTab'//班级
+import studentList from '../newApi/studentList'//学员
+
 
 // 导入对应模块------------------------
 export default {
@@ -114,7 +118,9 @@ export default {
     ...operationLog,
     ...handout,
     ...order,
-
+    ...orderSheet,
+    ...classTab,
+    ...studentList,
 
     // ...login,
     // ...profession,

+ 18 - 11
src/components/searchBoxNew.vue

@@ -8,7 +8,7 @@
           :size="size"
           v-for="(item, index) in lists"
           :key="index"
-          @click="formData.goodsType = item.value"
+          @click="topSearch(item.value)"
           >{{ item.label }}</el-button
         >
       </div>
@@ -125,6 +125,7 @@
             </el-select>
 
             <el-select
+              clearable
               v-else-if="item.scope === 'select'"
               v-model="formData[item.prop]"
               :placeholder="item.placeholder"
@@ -206,6 +207,7 @@
             </el-date-picker>
             <el-input
               v-else
+              clearable
               v-model="formData[item.prop]"
               :placeholder="item.placeholder"
               :size="size"
@@ -239,17 +241,21 @@ export default {
           value: 1,
         },
         {
-          label: "面授",
+          label: "题库",
           value: 2,
         },
         {
-          label: "服务",
+          label: "面授",
           value: 3,
         },
         {
-          label: "组合",
+          label: "服务",
           value: 4,
         },
+        {
+          label: "组合",
+          value: 5,
+        },
       ],
       paperType: [
         {
@@ -340,17 +346,18 @@ export default {
     };
   },
   methods: {
+    topSearch(status) {
+      this.formData.goodsType = status;
+      this.$emit("search", 3);
+    },
     ifCs(item) {
-      if (item.scope === "businessLevel" && !this.formData["educationId"]) {
+      if (item.scope === "businessLevel" && !this.formData[item.edu]) {
         return false;
-      } else if (item.scope === "schoolList" && !this.formData["educationId"]) {
+      } else if (item.scope === "schoolList" && !this.formData[item.edu]) {
         return false;
-      } else if (
-        item.scope === "Professional" &&
-        !this.formData["educationId"]
-      ) {
+      } else if (item.scope === "Professional" && !this.formData[item.edu]) {
         return false;
-      } else if (item.scope === "sujectType" && !this.formData["educationId"]) {
+      } else if (item.scope === "sujectType" && !this.formData[item.edu]) {
         return false;
       } else {
         return true;

+ 165 - 5
src/components/tableList.vue

@@ -92,6 +92,7 @@
         type="selection"
         width="55"
         header-align="center"
+        fixed="left"
       >
       </el-table-column>
       <el-table-column
@@ -171,6 +172,16 @@
                 : "未知"
             }}</span>
             <span v-else-if="item.scope === 'sectionTypes'">{{
+              Number(scope.row[item.prop]) === 2
+                ? "录播"
+                : Number(scope.row[item.prop]) === 1
+                ? "直播"
+                : Number(scope.row[item.prop]) === 3
+                ? "回放"
+                : "未知"
+            }}</span>
+
+            <span v-else-if="item.scope === 'sectionTypesTTT'">{{
               Number(scope.row[item.prop]) === 1
                 ? "录播"
                 : Number(scope.row[item.prop]) === 2
@@ -202,13 +213,36 @@
                 <el-button
                   slot="reference"
                   style="margin-left: 6px"
-                  type="primary"
+                  type="text"
                   v-if="scope.row[item.prop].length > 1"
                   size="mini"
                   >更多</el-button
                 >
               </el-popover>
             </ul>
+            <ul v-else-if="item.scope === 'classNums'" class="ulAutos">
+              <li
+                style="font-size: 12px; cursor: pointer; color: #1890ff"
+                v-if="!scope.row[item.prop].length"
+              >
+                班级({{ scope.row[item.prop].length }})
+              </li>
+              <el-popover placement="right" trigger="click">
+                <ul>
+                  <li v-for="(itm, inds) in scope.row[item.prop]" :key="inds">
+                    {{ inds + 1 }}、
+                    {{ itm.gradeName }}
+                  </li>
+                </ul>
+                <el-button
+                  v-if="scope.row[item.prop].length"
+                  slot="reference"
+                  type="text"
+                  size="mini"
+                  >班级({{ scope.row[item.prop].length }})</el-button
+                >
+              </el-popover>
+            </ul>
             <div v-else-if="item.scope === 'goodsList'" class="ulAuto">
               <ul>
                 <template v-for="(itm, inds) in scope.row[item.prop]">
@@ -227,7 +261,32 @@
                 <el-button
                   slot="reference"
                   style="margin-left: 6px"
-                  type="primary"
+                  type="text"
+                  v-if="scope.row[item.prop].length > 1"
+                  size="mini"
+                  >更多</el-button
+                >
+              </el-popover>
+            </div>
+            <div v-else-if="item.scope === 'aboutChapter'" class="ulAuto">
+              <ul>
+                <template v-for="(itm, inds) in scope.row[item.prop]">
+                  <li :key="inds" v-if="inds === 0">
+                    {{ itm[item.prop1] }}
+                  </li>
+                </template>
+              </ul>
+              <el-popover placement="right" trigger="click">
+                <ul>
+                  <li v-for="(itm, inds) in scope.row[item.prop]" :key="inds">
+                    {{ inds + 1 }}、
+                    {{ itm[item.prop1] }}
+                  </li>
+                </ul>
+                <el-button
+                  slot="reference"
+                  style="margin-left: 6px"
+                  type="text"
                   v-if="scope.row[item.prop].length > 1"
                   size="mini"
                   >更多</el-button
@@ -266,7 +325,7 @@
                 <el-button
                   slot="reference"
                   style="margin-left: 6px"
-                  type="primary"
+                  type="text"
                   v-if="scope.row[item.prop].length > 1"
                   size="mini"
                   >更多</el-button
@@ -384,6 +443,15 @@
                 ? "是"
                 : "未知"
             }}</span>
+            <span v-else-if="item.scope === 'refundPrice'">
+              {{
+                scope.row["goodsRealPrice"] && scope.row["goodsReceived"]
+                  ? Number(scope.row["goodsRealPrice"]) -
+                    Number(scope.row["goodsReceived"]) +
+                    "元"
+                  : ""
+              }}
+            </span>
             <span v-else-if="item.scope === 'peopleNum'">{{
               scope.row[item.prop] === 0 ? "不限制" : scope.row[item.prop]
             }}</span>
@@ -613,6 +681,12 @@
               @click="editInfo(scope.row)"
               >{{ scope.row[item.prop] }}
             </span>
+            <span
+              class="editInfoSty"
+              v-else-if="item.scope === 'editInfoMore'"
+              @click="editInfo(scope.row)"
+              >{{ scope.row[item.prop1] }} - {{ scope.row[item.prop2] }}
+            </span>
             <el-button
               v-else-if="item.scope === 'aboutTrees'"
               slot="reference"
@@ -634,12 +708,73 @@
               style="color: #409eff; cursor: pointer"
               >{{ scope.row[item.prop] }}</span
             >
+            <span v-else-if="item.scope === 'objType'">
+              {{
+                scope.row[item.objProp].length
+                  ? scope.row[item.objProp][0][item.prop]
+                  : ""
+              }}
+            </span>
+            <span v-else-if="item.scope === 'classTypes'">
+              {{
+                scope.row[item.prop] === 1
+                  ? "已开班:" + scope.row[item.prop1]
+                  : "未开班"
+              }}
+            </span>
+            <span v-else-if="item.scope === 'classTimeTypes'">
+              {{
+                scope.row[item.prop] === 1
+                  ? "即刻"
+                  : scope.row[item.prop] === 2
+                  ? "待定"
+                  : scope.row[item.prop] === 3
+                  ? $methodsTools.onlyForma(scope.row[item.prop1])
+                  : "未知"
+              }}
+            </span>
+            <div v-else-if="item.scope === 'objTypeYW'">
+              <span v-if="scope.row[item.objProp].length">
+                {{ scope.row[item.objProp][0][item.prop1] }}-{{
+                  scope.row[item.objProp][0][item.prop2]
+                }}-{{ scope.row[item.objProp][0][item.prop3] }}
+              </span>
+            </div>
+            <span v-else-if="item.scope === 'eduTypes'">
+              {{
+                scope.row[item.prop1] +
+                "-" +
+                scope.row[item.prop2] +
+                "-" +
+                scope.row[item.prop3]
+              }}
+            </span>
+            <span v-else-if="item.scope === 'peopleNums'">
+              {{ scope.row[item.prop1] }} / {{ scope.row[item.prop2] }}
+            </span>
             <span
               v-else-if="item.scope === 'jumpPageLabel'"
               @click="jumpPageLabel(scope.row)"
               style="color: #409eff; cursor: pointer"
               >{{ scope.row[item.prop] }}</span
             >
+            <span v-else-if="item.scope === 'urlStatus'">
+              {{
+                scope.row[item.prop] === 1
+                  ? scope.row[item.prop1]
+                  : scope.row[item.prop] === 2
+                  ? scope.row[item.prop2]
+                  : scope.row[item.prop] === 3
+                  ? scope.row[item.prop3]
+                  : ""
+              }}
+            </span>
+            <span
+              v-else-if="item.scope === 'jumpPageLabelProfess'"
+              @click="jumpPageLabelProfess(scope.row)"
+              style="color: #409eff; cursor: pointer"
+              >{{ scope.row[item.prop] }}</span
+            >
             <span
               v-else-if="item.scope === 'infoJump'"
               @click="jumpinfoJump(scope.row)"
@@ -656,7 +791,18 @@
                   : scope.row[item.prop2]
               }}分钟</span
             >
-            <span v-else>{{ scope.row[item.prop] }}</span>
+            <div v-else-if="item.scope === 'isOptions'">
+              <template v-for="(itemt, indext) in item.options">
+                <span
+                  :key="indext"
+                  v-if="itemt.value === scope.row[item.prop]"
+                  >{{ itemt.label }}</span
+                >
+              </template>
+            </div>
+            <span v-else
+              >{{ scope.row[item.prop] }}{{ item.ch ? item.ch : "" }}</span
+            >
           </template>
         </el-table-column>
       </template>
@@ -664,7 +810,7 @@
         label="操作"
         align="center"
         fixed="right"
-        width="180px"
+        :width="navText.changeWidth ? navText.changeWidth : '180px'"
         v-if="!navText.tableHide"
       >
         <template slot-scope="scope">
@@ -952,6 +1098,14 @@ export default {
           id: options.id,
         },
       });
+    }, //跳转页面
+    jumpPageLabelProfess(options) {
+      this.$router.push({
+        path: "labelInfos",
+        query: {
+          id: options.labelId,
+        },
+      });
     },
     jumpinfoJump(options) {
       this.$router.push({
@@ -1110,8 +1264,14 @@ export default {
   color: blue;
 }
 .ulAuto {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+.ulAutos {
   display: flex;
   align-items: center;
+  justify-content: center;
 }
 </style>
 

+ 1 - 1
src/layout/components/AppMain.vue

@@ -43,7 +43,7 @@ export default {
   }
 
   .fixed-header + .app-main {
-    padding-top: 84px;
+    padding-top: 96px;
   }
 }
 </style>

+ 1 - 0
src/main.js

@@ -37,6 +37,7 @@ import VueMeta from 'vue-meta'
 import DictData from '@/components/DictData'
 import methodsTools from '@/utils/methodsTool'
 // 全局方法挂载
+Vue.prototype.$store = store
 Vue.prototype.getDicts = getDicts
 Vue.prototype.getConfigKey = getConfigKey
 Vue.prototype.parseTime = parseTime

+ 66 - 0
src/newApi/classTab.js

@@ -0,0 +1,66 @@
+import request from '@/utils/request' //引入axios请求及拦截器
+export default {
+    //新增班级
+    appGradegrade(data) {
+        return request({
+            url: '/grade/grade',
+            method: 'post',
+            data
+        })
+    },
+    //修改班级
+    editGradegrade(data) {
+        return request({
+            url: '/grade/grade/edit',
+            method: 'post',
+            data
+        })
+    },
+    //查询班级列表
+    inquireGradegradeList(data) {
+        return request({
+            url: '/grade/grade/list',
+            method: 'get',
+            params: data
+        })
+    },
+    //获取班级详细信息
+    obtainGradegrade(data) {
+        return request({
+            url: `/grade/grade/` + data,
+            method: 'get',
+        })
+    },
+    //查询官方接口
+    inquirelistInterfaceVo(data) {
+        return request({
+            url: '/grade/grade/listInterfaceVo',
+            method: 'get',
+            params: data
+        })
+    },
+    //是否出现官方接口选择
+    inquirelistInterfaceVoselect(data) {
+        return request({
+            url: '/grade/grade/select',
+            method: 'get',
+            params: data
+        })
+    },
+    //查询学员记录列表
+    inquireGradegradelistUserList(data) {
+        return request({
+            url: '/grade/grade/listUser',
+            method: 'get',
+            params: data
+        })
+    },
+    //查询班主任记录列表
+    inquireGradegradelistSysList(data) {
+        return request({
+            url: '/grade/grade/listSys',
+            method: 'get',
+            params: data
+        })
+    },
+}

+ 8 - 0
src/newApi/course.js

@@ -24,6 +24,14 @@ export default {
             params: data
         })
     },
+    //查询课程目录关联卷列表
+    inquireCourseListSmenuexam(data) {
+        return request({
+            url: '/course/menu/exam/list',
+            method: 'get',
+            params: data
+        })
+    },
     //获取课程详细信息
     obtainCourseS(data) {
         return request({

+ 21 - 5
src/newApi/order.js

@@ -8,12 +8,12 @@ export default {
             data
         })
     },
-    //修改订单
-    editOrder(data) {
+    //查询订单商品列表
+    inquireOrderGoodsList(data) {
         return request({
-            url: '/order/edit',
-            method: 'post',
-            data
+            url: '/order/goods/list',
+            method: 'get',
+            params: data
         })
     },
     //查询订单列表
@@ -31,4 +31,20 @@ export default {
             method: 'get',
         })
     },
+    //修改订单商品
+    editordergoods(data) {
+        return request({
+            url: '/order/goods/edit',
+            method: 'post',
+            data
+        })
+    },
+    //获取订单商品详细信息
+    inquireOrderinfoList(data) {
+        return request({
+            url: '/order/goods/info',
+            method: 'get',
+            params: data
+        })
+    },
 }

+ 42 - 0
src/newApi/orderSheet.js

@@ -0,0 +1,42 @@
+import request from '@/utils/request' //引入axios请求及拦截器
+export default {
+    //新增订单计费单
+    appOrdersheet(data) {
+        return request({
+            url: '/order/sheet',
+            method: 'post',
+            data
+        })
+    },
+    //查询计费单商品详情
+    inquireOrdersheetgoodsList(data) {
+        return request({
+            url: '/order/sheet/goods',
+            method: 'get',
+            params: data
+        })
+    },
+    //修改订单计费单商品
+    editordersheetgoods(data) {
+        return request({
+            url: '/order/sheet/goods/edit',
+            method: 'post',
+            data
+        })
+    },
+    //查询订单计费单列表
+    inquireOrdersheetList(data) {
+        return request({
+            url: '/order/sheet/list',
+            method: 'get',
+            params: data
+        })
+    },
+    //获取订单计费单详细信息
+    obtainOrdersheet(data) {
+        return request({
+            url: `/order/sheet/` + data,
+            method: 'get',
+        })
+    },
+}

+ 60 - 0
src/newApi/studentList.js

@@ -0,0 +1,60 @@
+import request from '@/utils/request' //引入axios请求及拦截器
+export default {
+    //修改學員用户
+    editgradestudent(data) {
+        return request({
+            url: '/grade/student/edit',
+            method: 'post',
+            data
+        })
+    },
+    //查询学员商品学习记录
+    inquiregradestudentlist(data) {
+        return request({
+            url: '/grade/student/list',
+            method: 'get',
+            params: data
+        })
+    },
+    //查询学员课程节学习记录
+    inquiregradestudentlistSection(data) {
+        return request({
+            url: '/grade/student/listSection',
+            method: 'get',
+            params: data
+        })
+    },
+    //查询學員用户列表
+    inquiregradestudentlistStudent(data) {
+        return request({
+            url: '/grade/student/listStudent',
+            method: 'get',
+            params: data
+        })
+    },
+    //查询学员课程科目学习记录
+    inquiregradestudentlistSubject(data) {
+        return request({
+            url: '/grade/student/listSubject',
+            method: 'get',
+            params: data
+        })
+    },
+    //查询班级记录列表
+    inquiregradestudentlistUser(data) {
+        return request({
+            url: '/grade/student/listUser',
+            method: 'get',
+            params: data
+        })
+    },
+    //查询学员课程科目学习记录
+    inquiregradestudentlistExam(data) {
+        return request({
+            url: '/grade/student/listExam',
+            method: 'get',
+            params: data
+        })
+    },
+    
+}

+ 3 - 1
src/permission.js

@@ -11,7 +11,9 @@ NProgress.configure({ showSpinner: false })
 const whiteList = ['/login', '/auth-redirect', '/bind', '/register']
 
 router.beforeEach((to, from, next) => {
-  NProgress.start()
+  if (to.path !== from.path) {
+    NProgress.start();
+}
   if (methods.getQueryVariable('TenantId') && !sessionStorage.TenantId) {
     sessionStorage.TenantId = methods.getQueryVariable('TenantId')
   }

+ 1 - 1
src/settings.js

@@ -12,7 +12,7 @@ module.exports = {
   /**
    * 是否显示顶部导航
    */
-  topNav: true,
+  topNav: false,
 
   /**
    * 是否显示 tagsView

+ 9 - 2
src/store/getters.js

@@ -87,7 +87,7 @@ const getters = {
         state.dict.certificate = res.rows
       })
     }
-    return state.dict.courseExamine
+    return state.dict.certificate
   },
   labelList(state) {
     if (!state.dict.labelList.length) {
@@ -185,6 +185,13 @@ const getters = {
     }
     return state.dict.cityList
   },
-
+  classList(state) {
+    if (!state.dict.classList.length) {
+      api.inquireGradegradeList({ status: 1 }).then(res => {
+        state.dict.classList = res.rows
+      })
+    }
+    return state.dict.classList
+  },
 }
 export default getters

+ 1 - 0
src/store/modules/dict.js

@@ -21,6 +21,7 @@ const state = {
     paperexam: [],//试卷类型
     areas: [],//地区-省
     cityList: [],//地区-市
+    classList:[],//班级
 }
 const mutations = {
   

+ 22 - 1
src/store/modules/permission.js

@@ -2,6 +2,7 @@ import { constantRoutes } from '@/router'
 import { getRouters } from '@/api/menu'
 import Layout from '@/layout/index'
 import ParentView from '@/components/ParentView';
+import api from '@/api/api'
 import InnerLink from '@/layout/components/InnerLink'
 
 const permission = {
@@ -10,13 +11,32 @@ const permission = {
     addRoutes: [],
     defaultRoutes: [],
     topbarRouters: [],
-    sidebarRouters: []
+    sidebarRouters: [],
+    dictManages:{}//字典数据
+  },
+  getters:{
+  dictManages: state => state.dictManages
   },
   mutations: {
     SET_ROUTES: (state, routes) => {
       state.addRoutes = routes
       state.routes = constantRoutes.concat(routes)
     },
+    GET_DICT_INFO(state){
+      api.obtaindictdata().then(res => {
+        let newList = {}
+        let list = res.rows
+        for (let i = 0; i < list.length; i++) {
+          let item = list[i]
+          if (newList.hasOwnProperty(item.dictType)) {
+            newList[item.dictType].push(item.dictLabel)
+          } else {
+            newList[item.dictType] = [item.dictLabel]
+          }
+        }
+        state.dictManages = newList;
+      });
+    },
     SET_DEFAULT_ROUTES: (state, routes) => {
       state.defaultRoutes = constantRoutes.concat(routes)
     },
@@ -47,6 +67,7 @@ const permission = {
           commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(sidebarRoutes))
           commit('SET_DEFAULT_ROUTES', sidebarRoutes)
           commit('SET_TOPBAR_ROUTES', sidebarRoutes)
+          commit('GET_DICT_INFO')
           resolve(rewriteRoutes)
         })
       })

+ 29 - 4
src/utils/methodsTool.js

@@ -2,7 +2,7 @@
 const BASE_IMG_URL = 'https://file-dev.xyyxt.net'
 import router from '@/router/index'//引入路由对象
 export default {
-	getUrl(){
+	getUrl() {
 		return BASE_IMG_URL + '/'
 	},
 	isLogin() {
@@ -22,6 +22,9 @@ export default {
 		return BASE_IMG_URL + '/' + url
 	},
 	onlyForma(timeStamp, Diszing = true) {
+		if (!timeStamp) {
+			return
+		}
 		var date = new Date(timeStamp * 1000); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
 		var Y = date.getFullYear() + '-';
 		var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
@@ -70,7 +73,7 @@ export default {
 		//计算出相差天数
 		var days = Math.floor(date3 / (24 * 3600 * 1000));
 		//计算出小时数
-
+		//2021-11-15 10:48:07 2021-11-15 17:34:39 406分钟
 		var leave1 = date3 % (24 * 3600 * 1000); //计算天数后剩余的毫秒数
 		var hours = Math.floor(leave1 / (3600 * 1000));
 		//计算相差分钟数
@@ -85,7 +88,29 @@ export default {
 		// return   days + "天 " + hours + "小时 " + minutes + " 分钟" + seconds + " 秒"
 		return days + "天 " + hours + "小时 "
 	},
-
+	//JS计算两个时间戳相差月数、天数、时数、分钟、秒数
+	humandate(time1, time2) {
+		// var time1 = Date.parse(new Date()) / 1000;
+		var s = time1 - time2;
+		if (s < 0) {
+			s = Math.abs(s);
+		}
+		return parseInt(s / 60) + '分钟'
+		console.log(s)
+		// if (s > 31536000) {
+		// 	return formatDate(new Date(time2 * 1000));
+		// } else if (s > 2592000) {
+		// 	return parseInt(s / 2592000) + '月';
+		// } else if (s > 86400) {
+		// 	return parseInt(s / 86400) + '天';
+		// } else if (s > 3600) {
+		// 	return parseInt(s / 3600) + '小时';
+		// } else if (s > 60) {
+		// 	return parseInt(s / 60) + '分钟';
+		// } else {
+		// 	return parseInt(s) + '秒';
+		// }
+	},
 	getQueryVariable(variable) {
 		var query = window.location.search.substring(1);
 		var vars = query.split("&");
@@ -126,7 +151,7 @@ export default {
 	delToken(status) {
 		localStorage.removeItem('Expiration' + this.getQueryVariable('TenantId'))
 		localStorage.removeItem('token' + this.getQueryVariable('TenantId'))
-		if(status){
+		if (status) {
 			setTimeout(() => {
 				router.replace({
 					path: `/login?TenantId=${this.getQueryVariable('TenantId')}`

+ 1 - 0
src/utils/request.js

@@ -9,6 +9,7 @@ axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
 // 创建axios实例
 const service = axios.create({
   // axios中请求配置有baseURL选项,表示请求URL公共部分
+  // baseURL: 'http://192.168.1.24:5030/',
   baseURL: 'http://192.168.1.222:5030/',
   // baseURL: process.env.VUE_APP_BASE_API,
   // baseURL: 'https://cloud.xyyxt.net/',

+ 7 - 84
src/views/Marketing/basicParameters/index.vue

@@ -1,11 +1,7 @@
 <template>
   <div id="basicParameters">
-    <el-button @click="status = 1" :type="status === 1 ? 'primary' : ''"
-      >营销</el-button
-    >
-    <el-button @click="status = 2" :type="status === 2 ? 'primary' : ''"
-      >资源</el-button
-    >
+    <el-button type="primary">营销</el-button>
+    <el-button @click="changePages">资源</el-button>
     <div v-if="status === 1">
       <div class="infoBox">
         <div class="he">订单</div>
@@ -20,32 +16,6 @@
         </div>
       </div>
     </div>
-    <div v-if="status === 2" style="display: flex">
-      <div class="infoBox">
-        <div class="he">课程</div>
-        <div>
-          <el-button
-            style="margin: 10px; display: block"
-            v-for="(item, index) in list2"
-            :key="index"
-            @click="jumpPage(item)"
-            >{{ item.title }}</el-button
-          >
-        </div>
-      </div>
-      <div class="infoBox" style="margin-left: 12px;height:100%;">
-        <div class="he">题库</div>
-        <div>
-          <el-button
-            style="margin: 10px; display: block"
-            v-for="(item, index) in list3"
-            :key="index"
-            @click="jumpPage(item)"
-            >{{ item.title }}</el-button
-          >
-        </div>
-      </div>
-    </div>
   </div>
 </template>
 
@@ -88,61 +58,14 @@ export default {
           url: "typesFee",
         },
       ],
-      list2: [
-        {
-          title: "教育类型",
-          url: "educationType",
-        },
-        {
-          title: "项目类型",
-          url: "projectType",
-        },
-        {
-          title: "业务层次",
-          url: "businessLevel",
-        },
-        {
-          title: "院校",
-          url: "colleges",
-        },
-        {
-          title: "专业",
-          url: "professional",
-        },
-        {
-          title: "科目/类目",
-          url: "suject",
-        },
-        {
-          title: "考期",
-          url: "testPeriod",
-        },
-        {
-          title: "报读地区",
-          url: "enrollmentArea",
-        },
-        {
-          title: "证书",
-          url: "certificate",
-        },
-        {
-          title: "标签",
-          url: "label",
-        },
-      ],
-      list3: [
-        {
-          title: "题目类型",
-          url: "questionType",
-        },
-        {
-          title: "试卷类型",
-          url: "papers",
-        },
-      ],
     };
   },
   methods: {
+    changePages() {
+      this.$router.push({
+        name: 'BaseManageInfos',
+      });
+    },
     jumpPage(item) {
       console.log(item.url);
       this.$router.push({

+ 4 - 3
src/views/Marketing/basicParameters/marketings/beneficiary/index.vue

@@ -102,7 +102,7 @@ export default {
         title: "收款方",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -197,8 +197,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 4 - 3
src/views/Marketing/basicParameters/marketings/beneficiaryInfos/index.vue

@@ -130,7 +130,7 @@ export default {
         title: "收款方详情",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -257,8 +257,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 4 - 3
src/views/Marketing/basicParameters/marketings/channelSource/index.vue

@@ -102,7 +102,7 @@ export default {
         title: "渠道来源",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -192,8 +192,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 4 - 3
src/views/Marketing/basicParameters/marketings/natureCharge/index.vue

@@ -102,7 +102,7 @@ export default {
         title: "收费性质",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -192,8 +192,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 5 - 4
src/views/Marketing/basicParameters/marketings/paymentChannel/index.vue

@@ -102,7 +102,7 @@ export default {
         title: "支付通道",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -192,8 +192,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();
@@ -208,7 +209,7 @@ export default {
       )
         .then(() => {
           var data = {
-            id: v.id,
+            aisleId: v.aisleId,
             status: -1,
           };
           this.$api.editpayaisle(data).then((res) => {

+ 4 - 3
src/views/Marketing/basicParameters/marketings/serviceModel/index.vue

@@ -102,7 +102,7 @@ export default {
         title: "服务模式",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -192,8 +192,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 4 - 3
src/views/Marketing/basicParameters/marketings/supplier/index.vue

@@ -115,7 +115,7 @@ export default {
         title: "供应方",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -216,8 +216,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 4 - 3
src/views/Marketing/basicParameters/marketings/typesFee/index.vue

@@ -102,7 +102,7 @@ export default {
         title: "费用类型",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -192,8 +192,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 4 - 3
src/views/Marketing/basicParameters/marketings/visitCampus/index.vue

@@ -102,7 +102,7 @@ export default {
         title: "到访校区",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -192,8 +192,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 2 - 2
src/views/Marketing/commodityManageMent/add/index.vue

@@ -1372,8 +1372,8 @@ export default {
         self.$set(self.listData, "coverUrl", "");
         return;
       }
-      if (file.size > 2 * 1024 * 1024) {
-        self.$message.error("图片不得大于2MB");
+      if (file.size > 0.3 * 1024 * 1024) {
+        self.$message.error("图片不得大于300kb");
         return;
       }
       var type = self.$refs.file.value.toLowerCase().split(".").splice(-1);

+ 2 - 2
src/views/Marketing/commodityManageMent/edit/index.vue

@@ -1554,8 +1554,8 @@ export default {
         self.$set(self.listData, "coverUrl", "");
         return;
       }
-      if (file.size > 2 * 1024 * 1024) {
-        self.$message.error("图片不得大于2MB");
+      if (file.size > 0.3 * 1024 * 1024) {
+        self.$message.error("图片不得大于300kb");
         return;
       }
       var type = self.$refs.file.value.toLowerCase().split(".").splice(-1);

+ 125 - 19
src/views/Marketing/commodityManageMent/index.vue

@@ -1,5 +1,13 @@
 <template>
   <div id="commodityManageMent">
+    <search-box-new
+      ref="searchBox"
+      :formData="formData"
+      :formList="formList"
+      @search="search"
+      @init="init"
+      :topType="topType"
+    />
     <table-list
       :tableSets="tableSet"
       :tableData="tableData"
@@ -20,8 +28,8 @@
     </table-list>
     <pagination
       :total="total"
-      :pageSize="pageSize"
-      :currentPage="currentPage"
+      :pageSize="formData.pageSize"
+      :currentPage="formData.pageNum"
       @handleSizeChange="handleSizeChange"
       @handleCurrentChange="handleCurrentChange"
     />
@@ -29,11 +37,11 @@
 </template>
 
 <script>
-import searchBox from "@/components/searchBox";
+import searchBoxNew from "@/components/searchBoxNew";
 import tableList from "@/components/tableList";
 import pagination from "@/components/pagination";
 export default {
-  components: { searchBox, tableList, pagination },
+  components: { searchBoxNew, tableList, pagination },
   data() {
     return {
       loading: false, //当前表单加载是否加载动画
@@ -49,6 +57,96 @@ export default {
           title: "未定义",
         },
       },
+      topType:true,
+      //搜索
+      formList: [
+        {
+          prop: "educationTypeId",
+          placeholder: "教育类型",
+          scope: "educationType",
+        },
+        {
+          prop: "businessId",
+          placeholder: "业务层次",
+          scope: "businessLevel",
+          edu: "educationTypeId",
+        },
+        {
+          prop: "schoolId",
+          placeholder: "院校",
+          scope: "schoolList",
+          edu: "educationTypeId",
+        },
+        {
+          prop: "majorId",
+          placeholder: "专业",
+          scope: "Professional",
+          edu: "educationTypeId",
+        },
+        // {
+        //   prop: "status",
+        //   placeholder: "支付状态",
+        //   scope: "select",
+        //   options: [
+        //     {
+        //       label: "完全收费",
+        //       value: 1,
+        //     },
+        //     {
+        //       label: "部分收费",
+        //       value: 2,
+        //     },
+        //     {
+        //       label: "未收费",
+        //       value: 3,
+        //     },
+        //   ],
+        // },
+        // {
+        //   prop: "orderStatus",
+        //   placeholder: "订单状态",
+        //   scope: "select",
+        //   options: [
+        //     {
+        //       label: "已上架",
+        //       value: 1,
+        //     },
+        //     {
+        //       label: "未上架",
+        //       value: 0,
+        //     },
+        //   ],
+        // },
+        // {
+        //   prop: "orderGoodsStatus",
+        //   placeholder: "退款状态",
+        //   scope: "select",
+        //   options: [
+        //     {
+        //       label: "已退款",
+        //       value: 1,
+        //     },
+        //     {
+        //       label: "退款中",
+        //       value: 2,
+        //     },
+        //     {
+        //       label: "拒绝退款",
+        //       value: 3,
+        //     },
+        //   ],
+        // },
+        {
+          prop: "orderSn",
+          placeholder: "请输入订单编号",
+        },
+      ],
+      formData: {
+        goodsType: '',
+        status: "0,1",
+        pageSize: 10,
+        pageNum: 1,
+      },
       // 表单
       tableSet: [
         {
@@ -142,8 +240,6 @@ export default {
       ],
       tableData: [], //表单数据
       total: 0, //一共多少条
-      pageSize: 10, //每页多少条数据
-      currentPage: 1, //当前页码
     };
   },
   mounted() {
@@ -153,22 +249,32 @@ export default {
     editInfo(v) {
       this.addClick(v, 0);
     },
-    search(v) {
+    search(int) {
       this.loading = true;
-      var data = {
-        status: 1,
-        pageSize: this.pageSize,
-        pageNum: this.currentPage,
-      };
-      this.$api.inquireGoods(data).then((res) => {
+      if (int === 1) {
+        this.formData.pageNum = 1;
+      }
+      if (int === 2) {
+        this.formData = {
+          goodsType: '',
+          status: "0,1",
+          pageSize: 10,
+          pageNum: 1,
+        };
+      }
+      if(int === 3){
+        this.formData.pageNum = 1
+      }
+      this.$api.inquireGoods(this.formData).then((res) => {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
-      this.search();
+      this.search(2);
     },
     del(v) {
       this.$alert(
@@ -210,12 +316,12 @@ export default {
       }
     },
     handleSizeChange(v) {
-      this.pageSize = v;
-      this.currentPage = 1;
+      this.formData.pageSize = v;
+      this.formData.pageNum = 1;
       this.search();
     },
     handleCurrentChange(v) {
-      this.currentPage = v;
+      this.formData.pageNum = v;
       this.search();
     },
     changeStatus(item) {

+ 34 - 10
src/views/Marketing/orderList/add/order/index.vue

@@ -116,23 +116,29 @@
             <span v-if="item.scope === 'ywcs'">
               {{ zuHe(scope.row) }}
             </span>
-            <div v-else-if="item.scope === 'activeType'" class="_sty">
+            <div
+              v-else-if="
+                item.scope === 'activeType' && scope.row['goodsType'] === 1
+              "
+              class="_sty"
+            >
               <el-select
+                @change="changeClass(scope.$index, $event,scope.row)"
                 class="mar_b10"
                 v-if="getDs(scope.row['templateType'], '班级')"
                 v-model="scope.row['gradeJson']"
                 placeholder="请选择班级"
               >
                 <el-option
-                  v-for="items in options"
+                  v-for="items in classList"
                   :key="items.value"
-                  :label="items.label"
-                  :value="items.value"
+                  :label="items.className"
+                  :value="items.classId"
                 >
                 </el-option>
               </el-select>
               <el-select
-                @change="changeKQ(scope.$index, $event)"
+                @change="changeKQ(scope.$index, $event,scope.row)"
                 class="mar_b10"
                 v-if="getDs(scope.row['templateType'], '考期')"
                 v-model="scope.row['examDateJsonId']"
@@ -154,7 +160,7 @@
                   style="width: 50%"
                   v-model="scope.row.areaId"
                   placeholder="省"
-                  @change="changeArea(scope.$index, $event)"
+                  @change="changeArea(scope.$index, $event,scope.row)"
                 >
                   <el-option
                     v-for="items in areas"
@@ -369,7 +375,13 @@ export default {
     };
   },
   computed: {
-    ...mapGetters(["paysource", "payvisit", "courseExamine", "areas"]),
+    ...mapGetters([
+      "paysource",
+      "payvisit",
+      "courseExamine",
+      "areas",
+      "classList",
+    ]),
   },
   mounted() {
     this.$api.inquireapplyCityList({ status: 1, areaType: 2 }).then((res) => {
@@ -416,6 +428,7 @@ export default {
       var self = this;
       this.$api
         .inquireGoods({
+          goodsStatus:1,
           pageNum: 1,
           pageSize: 10,
         })
@@ -587,7 +600,6 @@ export default {
           this.$router.go(-1);
         }
       });
-      console.log(data);
     },
     changeKQ(index, int) {
       this.courseExamine.map((item) => {
@@ -596,7 +608,16 @@ export default {
         }
       });
     },
-    changeArea(index, int) {
+    changeClass(index, int,value) {
+      this.classList.map((item) => {
+        if (item.classId === int) {
+          this.tableData[index].goodsInputData.gradeJson = item;
+          this.tableData[index].goodsInputData.classId = item.classId
+          this.tableData[index].goodsInputData.type = value.templateType
+        }
+      });
+    },
+    changeArea(index, int,value) {
       var opst = [];
       this.cityList.map((item) => {
         if (item.parentId == int) {
@@ -615,16 +636,19 @@ export default {
           }
           this.tableData[index].goodsInputData.applyAreasJson.cityName = "";
           this.tableData[index].goodsInputData.applyAreasJson.cityId = "";
+          this.tableData[index].goodsInputData.type = value.templateType
+
         }
       });
     },
-    changeCity(index, int) {
+    changeCity(index, int,value) {
       this.cityList.map((item) => {
         if (item.areaId === int) {
           this.tableData[index].goodsInputData.applyAreasJson.cityName =
             item.areaName;
           this.tableData[index].goodsInputData.applyAreasJson.cityId =
             item.areaId;
+          this.tableData[index].goodsInputData.type = value.templateType
         }
       });
     },

+ 411 - 29
src/views/Marketing/orderList/add/orderPrice/index.vue

@@ -2,56 +2,285 @@
   <div id="orderPrice">
     <h5>计费单收费</h5>
     <div class="boxsSTTs">
-      <h5 class="fengs">付款人</h5>
-      <el-row :gutter="20">
-        <el-form
-          label-position="right"
-          label-width="120px"
-          :model="listData"
-          ref="listData"
-          :rules="rulesItem"
-        >
+      <el-form
+        label-position="right"
+        label-width="120px"
+        :model="listData"
+        ref="listData"
+        :rules="rulesItem"
+      >
+        <h5 class="fengs">付款人</h5>
+        <el-row :gutter="20">
           <el-col :span="12">
-            <el-form-item label="付款人" prop="businessOwner">
-              <el-input v-model="listData.businessOwner"></el-input>
+            <el-form-item label="付款人" prop="payer">
+              <el-input v-model="listData.payer"></el-input>
             </el-form-item>
-            <el-form-item label="付款方式" prop="source">
-              <el-select v-model="listData.source" placeholder="请选择付款方式">
+            <el-form-item label="付款方式" prop="payType">
+              <el-select
+                v-model="listData.payType"
+                placeholder="请选择付款方式"
+              >
                 <el-option
-                  v-for="(item, index) in paysource"
+                  v-for="(item, index) in payType"
                   :key="index"
-                  :label="item.sourceName"
-                  :value="item.sourceName"
+                  :label="item.label"
+                  :value="item.value"
                 >
                 </el-option>
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="付款人手机号码" prop="telphone">
-              <el-input v-model="listData.telphone"></el-input>
+            <el-form-item label="付款人手机号码" prop="payerTel">
+              <el-input v-model="listData.payerTel"></el-input>
             </el-form-item>
-            <el-form-item label="付款账号" prop="dept">
-              <el-input v-model="listData.dept"></el-input>
+            <el-form-item label="付款账号" prop="payAccount">
+              <el-input v-model="listData.payAccount"></el-input>
             </el-form-item>
           </el-col>
-        </el-form>
-      </el-row>
+        </el-row>
+        <h5 class="fengs">收款人</h5>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="收款方" prop="payee">
+              <el-select
+                v-model="listData.payee"
+                placeholder="请选择收款方"
+                @change="intePhs"
+              >
+                <el-option
+                  v-for="(item, index) in paypayee"
+                  :key="index"
+                  :label="item.payeeName"
+                  :value="item.payeeName"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="支付通道" prop="payChannel">
+              <el-select
+                v-model="listData.payChannel"
+                placeholder="请选择支付通道"
+              >
+                <el-option
+                  v-for="(item, index) in payList"
+                  :key="index"
+                  :label="item.payWay"
+                  :value="item.payWay"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="凭证号" prop="voucherNo">
+              <el-input v-model="listData.voucherNo"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item
+              v-if="listData.payee"
+              label="收款账号"
+              prop="collectionAccount"
+            >
+              <el-select
+                v-model="listData.collectionAccount"
+                placeholder="请选择收款账号"
+              >
+                <el-option
+                  v-for="(item, index) in payeeList"
+                  :key="index"
+                  :label="item.payeeAccount"
+                  :value="item.payeeAccount"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="POS机终端号" prop="posNumber">
+              <el-input v-model="listData.posNumber"></el-input>
+            </el-form-item>
+            <el-form-item label="参考号" prop="refNo">
+              <el-input v-model="listData.refNo"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <h5 class="fengs">收费总览</h5>
+        <el-row :gutter="20">
+          <div v-for="(item, index) in tableData" :key="index">
+            <table border="1" cellpadding="0" cellspacing="0" class="tableStys">
+              <tr class="headerStys">
+                <th v-for="(items, indexs) in tableHeader" :key="indexs">
+                  {{ items.label }}
+                </th>
+              </tr>
+              <tr>
+                <td v-for="(items, indexs) in tableHeader" :key="indexs">
+                  <div v-if="items.scope === 'special'">
+                    <div v-if="item['goodsType'] == 1">
+                      <div v-if="item.goodsInputData.gradeJson">
+                        班级:{{item.goodsInputData.gradeJson.className}}
+                      </div>
+                      <div v-if="item.goodsInputData.examDateJson">
+                        考期:{{ item.goodsInputData.examDateJson.examineName }}
+                      </div>
+                      <div v-if="item.goodsInputData.applyAreasJson">
+                        报考地区:{{
+                          item.goodsInputData.applyAreasJson.areaName +
+                          " - " +
+                          item.goodsInputData.applyAreasJson.cityName
+                        }}
+                      </div>
+                    </div>
+                  </div>
+                  <span v-else-if="items.scope === 'trees'">
+                    {{
+                      item[items.prop1] +
+                      "-" +
+                      item[items.prop2] +
+                      "-" +
+                      item[items.prop3]
+                    }}
+                  </span>
+                  <span v-else
+                    >{{ item[items.prop] }}{{ items.ch ? items.ch : "" }}</span
+                  >
+                </td>
+              </tr>
+            </table>
+            <el-col :span="12">
+              <el-form-item label="收费性质" prop="natureCharges">
+                <el-select
+                  v-model="listData.goodsList[index].natureCharges"
+                  placeholder="请选择收费性质"
+                >
+                  <el-option
+                    v-for="(items, indexs) in paynature"
+                    :key="indexs"
+                    :label="items.natureName"
+                    :value="items.natureName"
+                  >
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="本次收费金额" prop="amount">
+                <el-input-number
+                  :controls="false"
+                  :precision="2"
+                  v-model="listData.goodsList[index].amount"
+                  :min="0"
+                  :max="
+                    Number(item.goodsRealPrice) - Number(item.goodsReceived)
+                  "
+                ></el-input-number>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="费用类型" prop="costType">
+                <el-select
+                  v-model="listData.goodsList[index].costType"
+                  placeholder="请选择费用类型"
+                >
+                  <el-option
+                    v-for="(items, indexs) in paycost"
+                    :key="indexs"
+                    :label="items.costName"
+                    :value="items.costName"
+                  >
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="收费说明" prop="description">
+                <el-input
+                  type="textarea"
+                  v-model="listData.goodsList[index].description"
+                ></el-input>
+              </el-form-item>
+            </el-col>
+          </div>
+        </el-row>
+        <div style="text-align: center">
+          <el-button @click="clearBtns">取消</el-button>
+          <el-button type="primary" @click="submitForm('listData')"
+            >提交计费单</el-button
+          >
+        </div>
+      </el-form>
     </div>
   </div>
 </template>
 
 <script>
+import { mapGetters } from "vuex";
 export default {
   data() {
     return {
-      listData: {},
-      paysource:[],
+      tableHeader: [
+        { label: "订单编号", prop: "orderSn" },
+        { label: "商品编码", prop: "code" },
+        {
+          label: "商品业务层级",
+          prop1: "educationName",
+          prop2: "projectName",
+          prop3: "businessName",
+          scope: "trees",
+        },
+        { label: "商品名称", prop: "goodsName" },
+        { label: "请选择", prop: "goodsInputData", scope: "special" },
+        { label: "商品标价", prop: "goodsPrice", ch: "元" },
+        // { label: "使用优惠券", prop: "" },
+        { label: "商品成交价", prop: "goodsRealPrice", ch: "元" },
+        { label: "已收费金额", prop: "goodsReceived", ch: "元" },
+      ],
+      listData: {
+        collectionAccount: "",
+        orderSn: "",
+        goodsList: [],
+      },
+      payeeList: [], //收款方账号
+      payType: [
+        {
+          label: "微信",
+          value: "weChatPay",
+        },
+        {
+          label: "支付宝",
+          value: "aliPay",
+        },
+        {
+          label: "银行卡",
+          value: "bankCard",
+        },
+        {
+          label: "现金",
+          value: "cash",
+        },
+      ],
       rulesItem: {
-        telphone: [
+        payer: [
           {
             required: true,
-            message: "请输入手机号码",
+            message: "请输入付款人",
+            trigger: "blur",
+          },
+        ],
+        payType: [
+          {
+            required: true,
+            message: "请选择付款方式",
+            trigger: ["blur", "change"],
+          },
+        ],
+        payAccount: [
+          {
+            required: true,
+            message: "请输入付款账号",
+            trigger: "blur",
+          },
+        ],
+        payerTel: [
+          {
+            required: true,
+            message: "请输入付款人手机号码",
             trigger: "blur",
           },
           {
@@ -67,16 +296,156 @@ export default {
             trigger: "blur",
           },
         ],
+        payee: [
+          {
+            required: true,
+            message: "请选择收款方",
+            trigger: ["blur", "change"],
+          },
+        ],
+        voucherNo: [
+          {
+            required: true,
+            message: "请输入凭证号",
+            trigger: "blur",
+          },
+        ],
+        collectionAccount: [
+          {
+            required: true,
+            message: "请选择收款账号",
+            trigger: ["blur", "change"],
+          },
+        ],
       },
+      tableData: [],
     };
   },
+  computed: { ...mapGetters(["paypayee", "payList", "paynature", "paycost"]) },
+  mounted() {
+    console.log(this.$route.query, 11);
+    if (this.$route.query.id) {
+      this.getInsz();
+    }
+    if (this.$route.query.goodsArrays) {
+      this.getArrayInsz();
+    }
+  },
   methods: {
+    //从新增订单即刻收费进来
+    getInsz() {
+      this.$api.obtainOrder(this.$route.query.id).then((res) => {
+        this.listData.orderSn = res.data.orderSn;
+        this.$api
+          .inquireOrderGoodsList({ orderSn: this.listData.orderSn })
+          .then((result) => {
+            result.rows.forEach((item, index) => {
+              item.goodsInputData = JSON.parse(item.goodsInputData);
+              if (item.goodsInputData.gradeJson) {
+                item.goodsInputData.gradeJson = JSON.parse(
+                  item.goodsInputData.gradeJson
+                );
+              }
+              if (item.goodsInputData.applyAreasJson) {
+                item.goodsInputData.applyAreasJson = JSON.parse(
+                  item.goodsInputData.applyAreasJson
+                );
+              }
+              if (item.goodsInputData.examDateJson) {
+                item.goodsInputData.examDateJson = JSON.parse(
+                  item.goodsInputData.examDateJson
+                );
+              }
+              this.listData.goodsList.push({
+                goodsId: item.goodsId,
+                orderSn: item.orderSn,
+                costType: "",
+                description: "",
+                natureCharges: "",
+                amount: "",
+              });
+            });
+            this.tableData = result.rows;
+          });
+      });
+    },
+    //多选进来
+    getArrayInsz() {
+      const ars = this.$route.query.goodsArrays.split(",").map(Number);
+      this.$api
+        .inquireOrderGoodsList({ orderGoodsIds: ars.toString() })
+        .then((result) => {
+          result.rows.forEach((item, index) => {
+            item.goodsInputData = JSON.parse(item.goodsInputData);
+            if (item.goodsInputData.gradeJson) {
+              item.goodsInputData.gradeJson = JSON.parse(
+                item.goodsInputData.gradeJson
+              );
+            }
+            if (item.goodsInputData.applyAreasJson) {
+              item.goodsInputData.applyAreasJson = JSON.parse(
+                item.goodsInputData.applyAreasJson
+              );
+            }
+            if (item.goodsInputData.examDateJson) {
+              item.goodsInputData.examDateJson = JSON.parse(
+                item.goodsInputData.examDateJson
+              );
+            }
+            this.listData.goodsList.push({
+              goodsId: item.goodsId,
+              orderSn: item.orderSn,
+              costType: "",
+              description: "",
+              natureCharges: "",
+              amount: "",
+            });
+          });
+          this.tableData = result.rows;
+        });
+    },
+    //确认提交
+    submitForm(formName) {
+      // return
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          for (let i = 0; i < this.listData.goodsList.length; i++) {
+            if (!this.listData.goodsList[i].natureCharges) {
+              this.$message.error("请选择商品列表的收费性质");
+              return;
+            }
+            if (!this.listData.goodsList[i].amount) {
+              this.$message.error("请输入商品列表的本次收费金额");
+              return;
+            }
+          }
+          this.submit();
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
     submit() {
-      this.$api.appOrder(data).then((res) => {
+      this.$api.appOrdersheet(this.listData).then((res) => {
         this.$message.success("提交成功");
-        this.$router.go(-1);
+        setTimeout(() => {
+          this.$router.go(-1);
+        }, 500);
       });
-      console.log(data);
+    },
+    //取消
+    clearBtns() {
+      this.$router.go(-1);
+    },
+    //查询收款方账号
+    intePhs() {
+      this.$api
+        .inquirePayeeAisle({ payeeName: this.listData.payee })
+        .then((res) => {
+          this.payeeList = res.rows;
+          this.listData.collectionAccount = "";
+        });
     },
     //取消
     clearBtns() {
@@ -87,6 +456,19 @@ export default {
 </script>
 
 <style lang="less" scoped>
+.tableStys {
+  border-collapse: collapse;
+  width: 100%;
+  margin-bottom: 20px;
+}
+th,
+td {
+  font-size: 16px;
+  padding: 8px;
+}
+.headerStys {
+  background-color: #eee;
+}
 .boxsSTTs {
   margin: 10px 0px;
   border: 1px solid #a4a4a4;

+ 254 - 0
src/views/Marketing/orderList/details/costPriceManages.vue

@@ -0,0 +1,254 @@
+<template>
+  <div id="costPriceManages">
+    <el-row :gutter="20">
+      <el-col :span="5">
+        <div>
+          <ul class="ulChildSty">
+            <header class="hearderStys" @click="isShow = !isShow">
+              计费单收费 (点击{{ isShow ? "展开" : "收起" }})
+            </header>
+            <li
+              v-for="(item, index) in orderList"
+              :style="isShow ? 'height:0px;padding:0px;overflow:hidden' : ''"
+              :class="index + 1 == activeList ? 'active' : ''"
+              :key="index"
+              @click="changeLi(index)"
+            >
+              {{ item.sheetSn }}
+            </li>
+          </ul>
+        </div>
+      </el-col>
+      <el-col :span="19" class="YZsty">
+        <el-form
+          label-position="right"
+          label-width="120px"
+          :model="listData"
+          ref="listData"
+          :rules="rules"
+        >
+          <el-col :span="24" class="fgx">付款人</el-col>
+          <el-col :span="12">
+            <el-form-item label="付款人" prop="payer">
+              <el-input disabled v-model="listData.payer"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="付款人手机号码" prop="payerTel">
+              <el-input disabled v-model="listData.payerTel"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="付款方式" prop="payType">
+              <el-input disabled v-model="listData.payType"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="付款账号" prop="payAccount">
+              <el-input disabled v-model="listData.payAccount"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="付款时间">
+              <el-input
+                disabled
+                :value="$methodsTools.onlyForma(listData.createTime)"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24" class="fgx">收款人</el-col>
+          <el-col :span="12">
+            <el-form-item label="收款方" prop="payee">
+              <el-input disabled v-model="listData.payee"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="收款账号" prop="collectionAccount">
+              <el-input
+                disabled
+                v-model="listData.collectionAccount"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="支付通道" prop="payChannel">
+              <el-input disabled v-model="listData.payChannel"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="POS机终端号" prop="posNumber">
+              <el-input disabled v-model="listData.posNumber"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="凭证号" prop="voucherNo">
+              <el-input disabled v-model="listData.voucherNo"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="参考号" prop="refNo">
+              <el-input disabled v-model="listData.refNo"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="收款时间">
+              <el-input
+                disabled
+                :value="$methodsTools.onlyForma(listData.createTime)"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24" class="fgx">收费总览</el-col>
+          <el-col :span="12">
+            <el-form-item label="收费性质" prop="natureCharges">
+              <el-select
+                v-model="costList.natureCharges"
+                placeholder="请选择收费性质"
+              >
+                <el-option
+                  v-for="(item, index) in paynature"
+                  :key="index"
+                  :label="item.natureName"
+                  :value="item.natureName"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="费用类型" prop="costType">
+              <el-select
+                v-model="costList.costType"
+                placeholder="请选择费用类型"
+              >
+                <el-option
+                  v-for="(item, index) in paycost"
+                  :key="index"
+                  :label="item.costName"
+                  :value="item.costName"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="收费金额" prop="amount">
+              <el-input disabled v-model="costList.amount"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="收费说明" prop="description">
+              <el-input
+                type="textarea"
+                v-model="costList.description"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24" style="text-align:center;">
+            <el-button @click="backPage">返回</el-button>
+            <el-button type="primary" @click="submit">保存</el-button>
+          </el-col>
+        </el-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from "vuex";
+export default {
+  data() {
+    return {
+      isShow: false,
+      activeList: 1,
+      listData: {},
+      rules: {},
+      orderList: [],
+      costList: {},
+    };
+  },
+  mounted() {
+    this.getInfoUser();
+  },
+  computed: { ...mapGetters(["paynature", "paycost"]) },
+  methods: {
+    //保存
+    submit(){
+      this.$api.editordersheetgoods(this.costList).then(res => { 
+        this.$message.success("成功")
+      })
+    },
+    //返回
+    backPage(){
+      this.$router.go(-1)
+    },
+    //切换list
+    changeLi(int) {
+      if (int + 1 === this.activeList) {
+        return;
+      }
+      this.listData = this.orderList[int];
+      this.activeList = int + 1;
+      this.getCostInfos(this.orderList[int].sheetSn);
+    },
+    getInfoUser() {
+      this.$api
+        .inquireOrdersheetList({ orderSn: this.$route.query.orderSn })
+        .then((res) => {
+          this.orderList = res.rows;
+          if (res.rows.length) {
+            this.listData = res.rows[0];
+            this.getCostInfos(res.rows[0].sheetSn);
+          }
+        });
+    },
+    getCostInfos(v) {
+      this.$api
+        .inquireOrdersheetgoodsList({
+          sheetSn: v,
+          goodsId: this.$route.query.goodsId,
+        })
+        .then((res) => {
+          this.costList = res.data;
+        });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.hearderStys {
+  background-color: rgb(218, 218, 218);
+  border: 1px solid #666;
+  padding: 6px 10px;
+  font-size: 15px;
+  font-weight: bold;
+  cursor: pointer;
+}
+.ulChildSty > li {
+  border: 1px solid #666;
+  border-top: transparent;
+  font-size: 14px;
+  padding: 6px 10px;
+  word-wrap: break-word;
+  word-break: normal;
+  cursor: pointer;
+  &:hover {
+    color: red;
+  }
+}
+.active {
+  color: blue !important;
+}
+.YZsty {
+  background-color: #eee;
+  padding: 30px;
+}
+.fgx {
+  border-bottom: 1px dotted #9a9a9a;
+  padding-bottom: 4px;
+  font-size: 14px;
+  color: #666;
+  margin-bottom: 10px;
+}
+</style>

+ 422 - 0
src/views/Marketing/orderList/details/goodsManage.vue

@@ -0,0 +1,422 @@
+<template>
+  <div id="goodsManage">
+    <div class="YZsty">
+      <el-form
+        label-position="right"
+        label-width="120px"
+        :model="listData"
+        :rules="rules"
+        ref="listData"
+      >
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="订单编码" prop="orderSn">
+              <el-input disabled v-model="listData.orderSn"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="订单时间" prop="createTime">
+              <el-input
+                disabled
+                :value="$methodsTools.onlyForma(listData.createTime)"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <div class="fgx"></div>
+        <el-row :gutter="20">
+          <el-col
+            v-for="(item, index) in lists"
+            :key="index"
+            :span="item.col ? item.col : 12"
+            :offset="item.offset ? item.offset : 0"
+          >
+            <el-form-item :label="item.label" :prop="item.prop">
+              <template v-if="item.dataType === 'listData'">
+                <el-select
+                  disabled
+                  v-if="item.scope === 'payType'"
+                  v-model="listData[item.prop]"
+                  :placeholder="item.placeholder"
+                >
+                  <el-option
+                    v-for="item in payType"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  >
+                  </el-option>
+                </el-select>
+                <el-input
+                  :disabled="item.disabled ? false : true"
+                  v-else
+                  v-model="listData[item.prop]"
+                ></el-input>
+              </template>
+              <template v-else>
+                <div v-if="item.scope === 'table'">
+                  <el-table
+                    :data="goodsData.standPriceJson"
+                    show-summary
+                    border
+                    :header-cell-style="{
+                      'background-color': '#eee',
+                      padding: '8px',
+                      color: '#333',
+                    }"
+                  >
+                    <el-table-column
+                      type="index"
+                      label="序号"
+                      width="80"
+                      align="center"
+                    >
+                    </el-table-column>
+                    <template v-for="(item, index) in tableSet">
+                      <el-table-column
+                        :width="item.width"
+                        :key="index"
+                        :label="item.label"
+                        align="center"
+                        :show-overflow-tooltip="true"
+                        header-align="center"
+                        :prop="item.prop"
+                      >
+                        <template slot-scope="scope">
+                          <span>{{ scope.row[item.prop] }}</span></template
+                        >
+                      </el-table-column></template
+                    >
+                  </el-table>
+                </div>
+                <el-select
+                  disabled
+                  v-else-if="item.scope === 'select'"
+                  v-model="goodsData[item.prop]"
+                >
+                  <el-option
+                    v-for="item in optionsType"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  ></el-option>
+                </el-select>
+                <el-date-picker
+                  disabled
+                  v-else-if="item.scope === 'startEndTime'"
+                  v-model="goodsData[item.prop]"
+                  type="daterange"
+                  value-format="timestamp"
+                  range-separator="至"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期"
+                >
+                </el-date-picker>
+                <el-input
+                  disabled
+                  v-else-if="item.scope === 'yecj'"
+                  :value="
+                    goodsData[item.prop1] +
+                    '-' +
+                    goodsData[item.prop2] +
+                    '-' +
+                    goodsData[item.prop3]
+                  "
+                ></el-input>
+                <el-input
+                  :disabled="item.disabled ? false : true"
+                  v-else
+                  v-model="goodsData[item.prop]"
+                ></el-input>
+              </template>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <div class="fgx"></div>
+        <el-row :gutter="20">
+          <el-col
+            v-for="(item, index) in lists2"
+            :key="index"
+            :span="item.col ? item.col : 12"
+            :offset="item.offset ? item.offset : 0"
+          >
+            <el-form-item :label="item.label" :prop="item.prop">
+              <el-select
+                v-if="item.scope === 'select1'"
+                v-model="listData[item.prop]"
+                :placeholder="item.placeholder"
+              >
+                <el-option
+                  v-for="(item, index) in paysource"
+                  :key="index"
+                  :label="item.sourceName"
+                  :value="item.sourceName"
+                >
+                </el-option>
+              </el-select>
+              <el-select
+                v-else-if="item.scope === 'select2'"
+                v-model="listData[item.prop]"
+                :placeholder="item.placeholder"
+              >
+                <el-option
+                  v-for="(item, index) in payvisit"
+                  :key="index"
+                  :label="item.visitName"
+                  :value="item.visitName"
+                >
+                </el-option>
+              </el-select>
+              <el-input
+                :disabled="item.noDisabled ? false : true"
+                v-else
+                v-model="listData[item.prop]"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <div class="fgx"></div>
+        <el-form-item label="订单商品状态" prop="status">
+          <el-radio-group disabled v-model="listData.status">
+            <el-radio :label="0">关闭</el-radio>
+            <el-radio :label="1">正常</el-radio>
+            <el-radio :label="-1">有退款</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="订单备注" prop="remark">
+          <el-input type="textarea" v-model="listData.remark" :rows="4"></el-input>
+        </el-form-item>
+      </el-form>
+      <div style="text-align: center">
+        <el-button @click="backPage">返回</el-button>
+        <el-button type="primary" @click="submit('listData')">保存</el-button>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from "vuex";
+export default {
+  data() {
+    return {
+      tableSet: [
+        {
+          label: "费用类型",
+          prop: "priceTypeName",
+        },
+        {
+          label: "费用金额(元)",
+          prop: "price",
+        },
+      ],
+      goodsData: {}, //商品信息---部分
+      listData: {},
+      options: [],
+      optionsType: [
+        {
+          label: "视频",
+          value: 1,
+        },
+        {
+          label: "题库",
+          value: 2,
+        },
+        {
+          label: "面授",
+          value: 3,
+        },
+        {
+          label: "服务",
+          value: 4,
+        },
+        {
+          label: "组合",
+          value: 5,
+        },
+      ],
+      payType: [
+        {
+          label: "未收费",
+          value: 1,
+        },
+        {
+          label: "部分收费",
+          value: 2,
+        },
+        {
+          label: "完全收费",
+          value: 3,
+        },
+      ],
+      lists: [
+        {
+          label: "商品标准价格",
+          prop: "standPrice",
+        },
+        {
+          label: "商品年份",
+          prop: "year",
+        },
+        {
+          label: "商品最低价格",
+          prop: "lowestPrice",
+        },
+        {
+          label: "供应方(服务)",
+          prop: "supplyName",
+        },
+        {
+          label: "支付金额",
+          prop: "goodsReceived",
+          dataType: "listData",
+        },
+        {
+          label: "商品类型",
+          prop: "goodsType",
+          scope: "select",
+        },
+        {
+          label: "商品编码",
+          prop: "code",
+        },
+        {
+          label: "支付状态",
+          prop: "payStatus",
+          dataType: "listData",
+          scope: "payType",
+        },
+        {
+          label: "商品名称",
+          prop: "goodsName",
+        },
+        {
+          label: "业务层级",
+          prop1: "educationName",
+          prop2: "projectName",
+          prop3: "businessName",
+          scope: "yecj",
+        },
+        {
+          label: "商品标准价格明细",
+          prop: "payer",
+          scope: "table",
+        },
+        {
+          label: "商品有效期",
+          prop: "validity",
+          scope: "startEndTime",
+        },
+        {
+          label: "学习有效期",
+          prop: "studentTime",
+          scope: "startEndTime",
+        },
+        {
+          label: "学时",
+          prop: "classHours",
+          offset: 12,
+        },
+      ],
+      lists2: [
+        {
+          label: "业务归属人",
+          prop: "businessOwner",
+          noDisabled: true,
+        },
+        {
+          label: "归属部门",
+          prop: "dept",
+          noDisabled: true,
+        },
+        {
+          label: "渠道来源",
+          prop: "source",
+          scope: "select1",
+          noDisabled: true,
+        },
+        {
+          label: "到访校区",
+          prop: "school",
+          scope: "select2",
+          noDisabled: true,
+        },
+        {
+          label: "录单人",
+          prop: "createBy",
+        },
+      ],
+      rules: {
+        businessOwner: [
+          { required: true, message: "请输入业务归属人", trigger: "blur" },
+        ],
+        dept: [{ required: true, message: "请输入归属部门", trigger: "blur" }],
+        source: [
+          { required: true, message: "请选择渠道来源", trigger: ["change","blur"] },
+        ],
+        school: [
+          { required: true, message: "请选择到访校区", trigger: ["change","blur"] },
+        ],
+      },
+    };
+  },
+  computed: { ...mapGetters(["paysource", "payvisit"]) },
+  mounted() {
+    this.search();
+  },
+  methods: {
+    backPage() {
+      this.$router.go(-1);
+    },
+    submit(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+            var data = JSON.parse(JSON.stringify(this.listData))
+            data.goodsInputData = JSON.parse(data.goodsInputData)
+            this.$api.editordergoods(data).then(res => {
+                this.$message.success("保存成功")
+            })
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+    search() {
+      this.$api.obtainGoods(this.$route.query.goodsId).then((res) => {
+        res.data.validity = [
+          this.$methodsTools.time10to13(res.data.validityStartTime, 2),
+          this.$methodsTools.time10to13(res.data.validityEndTime, 2),
+        ];
+        res.data.studentTime = [
+          this.$methodsTools.time10to13(res.data.validityStartTime, 2),
+          this.$methodsTools.time10to13(res.data.validityEndTime, 2),
+        ];
+        res.data.standPriceJson = JSON.parse(res.data.standPriceJson);
+        this.goodsData = res.data;
+      });
+      this.$api
+        .inquireOrderinfoList({
+          orderSn: this.$route.query.orderSn,
+          goodsId: this.$route.query.goodsId,
+        })
+        .then((res) => {
+          this.listData = res.data;
+          this.$refs["listData"].resetFields();
+        });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.YZsty {
+  background-color: #eee;
+  padding: 30px;
+  margin-top: 16px;
+}
+.fgx {
+  border-bottom: 1px dotted #9a9a9a;
+  margin-bottom: 12px;
+}
+</style>

+ 37 - 0
src/views/Marketing/orderList/details/index.vue

@@ -0,0 +1,37 @@
+<template>
+  <div id="orderDetails">
+    <el-tabs type="border-card" v-model="activeName" style="margin-top: 20px">
+      <el-tab-pane label="商品信息" name="commodInfo"
+        ><goods-manage
+      /></el-tab-pane>
+      <el-tab-pane label="学员信息" name="studentInfo"
+        ><student-manage-order
+      /></el-tab-pane>
+      <el-tab-pane label="收费信息" name="chargeInfo"
+        ><cost-price-manages
+      /></el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+import goodsManage from "./goodsManage.vue";
+import studentManageOrder from "./studentManageOrder.vue";
+import costPriceManages from "./costPriceManages.vue";
+export default {
+  components: { goodsManage, studentManageOrder, costPriceManages },
+  data() {
+    return {
+      activeName: "commodInfo",
+    };
+  },
+  methods: {},
+};
+</script>
+
+<style lang="less" scoped>
+.fgx {
+  border-bottom: 1px dotted #9a9a9a;
+  margin-bottom: 12px;
+}
+</style>

+ 277 - 0
src/views/Marketing/orderList/details/studentManageOrder.vue

@@ -0,0 +1,277 @@
+<template>
+  <div id="studentManageOrder">
+    <div class="YZsty">
+      <el-form
+        label-position="right"
+        label-width="120px"
+        :model="listDataSubmitForm"
+        ref="listDataSubmitForm"
+        :rules="rules"
+      >
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="手机号码" prop="telphone">
+              <el-input disabled v-model="listData.telphone"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="选择班级" prop="classId">
+              <el-select
+                v-model="listDataSubmitForm.goodsInputData.classId"
+                placeholder="请选择班级"
+              >
+                <el-option
+                  v-for="(item, index) in classList"
+                  :key="index"
+                  :label="item.className"
+                  :value="item.classId"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="姓名" prop="realname">
+              <el-input disabled v-model="listData.realname"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="选择考期" prop="examDateJson">
+              <el-select
+                v-model="listDataSubmitForm.goodsInputData.examDateJsonName"
+                placeholder="请选择考期"
+              >
+                <el-option
+                  v-for="(item, index) in courseExamine"
+                  :key="index"
+                  :label="item.examineName"
+                  :value="item.examineName"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="身份证号码" prop="idCard">
+              <el-input disabled v-model="listData.idCard"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item
+              label="选择报考地区"
+              :prop="listDataSubmitForm.areaId ? 'cityId' : ''"
+            >
+              <el-col :span="12"
+                ><el-select
+                  v-model="listDataSubmitForm.areaId"
+                  placeholder="选择省"
+                  @change="changeArea"
+                >
+                  <el-option
+                    v-for="(item, index) in areas"
+                    :key="index"
+                    :label="item.areaName"
+                    :value="item.areaId"
+                  >
+                  </el-option> </el-select
+              ></el-col>
+              <el-col :span="12"
+                ><el-select
+                  v-model="listDataSubmitForm.cityId"
+                  placeholder="选择地市"
+                >
+                  <el-option
+                    v-for="(item, index) in newCityList"
+                    :key="index"
+                    :label="item.areaName"
+                    :value="item.areaId"
+                  >
+                  </el-option> </el-select
+              ></el-col>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="微信绑定">
+              <el-input disabled v-model="listData.wechatCode"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="所在公司" prop="company">
+              <el-input v-model="listDataSubmitForm.company"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12" :offset="12">
+            <el-form-item label="收件地址" prop="address">
+              <el-input
+                type="textarea"
+                :rows="4"
+                v-model="listDataSubmitForm.address"
+                placeholder="请输入收件地址"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div style="text-align: center">
+        <el-button @click="backPage">返回</el-button>
+        <el-button type="primary" @click="submit('listDataSubmitForm')"
+          >保存</el-button
+        >
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from "vuex";
+export default {
+  data() {
+    return {
+      listData: {},
+      listDataSubmitForm: {
+        goodsInputData: {
+          applyAreasJson: {},
+        },
+      },
+      options: [],
+      cityList: [],
+      newCityList: [],
+      rules: {
+        company: [
+          { required: true, message: "请输入所在公司", trigger: "blur" },
+        ],
+        cityId: [
+          {
+            required: true,
+            message: "请选择城市",
+            trigger: ["blur", "changes"],
+          },
+        ],
+        address: [
+          { required: true, message: "请填写收件地址", trigger: "blur" },
+        ],
+      },
+    };
+  },
+  computed: { ...mapGetters(["courseExamine", "areas", "classList"]) },
+  mounted() {
+    this.getInfoCity();
+    this.search();
+  },
+  methods: {
+    getInfoCity() {
+      this.$api.inquireapplyCityList({ status: 1, areaType: 2 }).then((res) => {
+        this.cityList = res.rows;
+      });
+    },
+    //选择省改变市
+    changeArea() {
+      this.newCityList = this.cityList.filter((item) => {
+        return item.parentId == this.listDataSubmitForm.areaId;
+      });
+      this.listDataSubmitForm.cityId = "";
+    },
+    search() {
+      this.$api.obtainappuser(this.$route.query.userId).then((res) => {
+        this.listData = res.data;
+      });
+      this.$api
+        .inquireOrderinfoList({
+          orderSn: this.$route.query.orderSn,
+          goodsId: this.$route.query.goodsId,
+        })
+        .then((res) => {
+          res.data.goodsInputData = JSON.parse(res.data.goodsInputData);
+          if (res.data.goodsInputData.applyAreasJson) {
+            res.data.goodsInputData.applyAreasJson = JSON.parse(
+              res.data.goodsInputData.applyAreasJson
+            );
+            res.data.areaId = res.data.goodsInputData.applyAreasJson.areaId;
+            res.data.cityId = res.data.goodsInputData.applyAreasJson.cityId;
+            this.newCityList = this.cityList.filter((item) => {
+              return item.parentId == res.data.areaId;
+            });
+          }
+          if (res.data.goodsInputData.examDateJson) {
+            res.data.goodsInputData.examDateJson = JSON.parse(
+              res.data.goodsInputData.examDateJson
+            );
+            res.data.goodsInputData.examDateJsonName =
+              res.data.goodsInputData.examDateJson.examineName;
+          }
+          if (
+            res.data.goodsInputData.gradeJson
+          ) {
+            res.data.goodsInputData.gradeJson = JSON.parse(
+              res.data.goodsInputData.gradeJson
+            );
+            res.data.goodsInputData.classId =
+              res.data.goodsInputData.gradeJson.classId;
+          }
+          this.listDataSubmitForm = res.data;
+          this.$refs["listDataSubmitForm"].resetFields();
+        });
+    },
+    backPage() {
+      this.$router.go(-1);
+    },
+    submit(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          this.submitForm();
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+    submitForm() {
+      if (this.listDataSubmitForm.areaId && !this.listDataSubmitForm.cityId) {
+        this.$message.error("请选择报考地市");
+        return;
+      }
+      let data = JSON.parse(JSON.stringify(this.listDataSubmitForm));
+      for (let i = 0; i < this.cityList.length; i++) {
+        if (this.cityList[i].areaId == data.cityId) {
+          data.goodsInputData.applyAreasJson = {
+            areaId: this.cityList[i].parentId,
+            areaName: this.cityList[i].parentName,
+            cityId: this.cityList[i].areaId,
+            cityName: this.cityList[i].areaName,
+          };
+        }
+      }
+      this.courseExamine.forEach((item) => {
+        if (item.examineName == data.goodsInputData.examDateJsonName) {
+          data.goodsInputData.examDateJson = JSON.stringify(item);
+        }
+      });
+      this.classList.forEach((item) => {
+        if (item.classId == data.goodsInputData.classId) {
+          data.goodsInputData.gradeJson = JSON.stringify(item);
+        }
+      });
+      data.orderSn = this.$route.query.orderSn;
+      data.goodsId = this.$route.query.goodsId;
+      data.goodsInputData.applyAreasJson = JSON.stringify(
+        data.goodsInputData.applyAreasJson
+      );
+      this.$api.editordergoods(data).then((res) => {
+        this.$message.success("保存成功");
+      });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.YZsty {
+  background-color: #eee;
+  padding: 30px;
+  margin-top: 16px;
+}
+.fgx {
+  border-bottom: 1px dotted #9a9a9a;
+  margin-bottom: 12px;
+}
+</style>

+ 288 - 76
src/views/Marketing/orderList/index.vue

@@ -6,6 +6,7 @@
       :formList="formList"
       @search="search"
       @init="init"
+      :topType="topType"
     />
     <table-list
       :tableSets="tableSet"
@@ -14,10 +15,11 @@
       @addClick="addClick"
       :loading="loading"
       @editInfo="editInfo"
+      @emitData="emitData"
     >
       <template slot="btn" slot-scope="props">
-        <el-button type="text" @click="addClick(props.scope.row, 0)"
-          >修改</el-button
+        <el-button type="text" @click="jumpDetail(props.scope.row)"
+          >详情</el-button
         >
         <el-button type="text" @click="del(props.scope.row)">删除</el-button>
       </template>
@@ -46,17 +48,19 @@ export default {
         index: 0,
         ch: "条",
         num: false,
+        border: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
-          status: false,
-          title: "未定义",
+          status: true,
+          title: "计费单收费",
         },
       },
+      topType:true,
       //搜索
       formList: [
         {
-          prop: "educationId",
+          prop: "educationTypeId",
           placeholder: "教育类型",
           scope: "educationType",
         },
@@ -64,60 +68,155 @@ export default {
           prop: "businessId",
           placeholder: "业务层次",
           scope: "businessLevel",
-        }
+          edu: "educationTypeId",
+        },
+        {
+          prop: "schoolId",
+          placeholder: "院校",
+          scope: "schoolList",
+          edu: "educationTypeId",
+        },
+        {
+          prop: "majorId",
+          placeholder: "专业",
+          scope: "Professional",
+          edu: "educationTypeId",
+        },
+        {
+          prop: "payStatus",
+          placeholder: "支付状态",
+          scope: "select",
+          options: [
+            {
+              label: "未收费",
+              value: 1,
+            },
+            {
+              label: "部分收费",
+              value: 2,
+            },
+            {
+              label: "完全收费",
+              value: 3,
+            },
+          ],
+        },
+        {
+          prop: "orderStatus",
+          placeholder: "订单状态",
+          scope: "select",
+          options: [
+            {
+              label: "超时关闭",
+              value: -2,
+            },
+            {
+              label: "手动关闭",
+              value: -1,
+            },
+            {
+              label: "普通状态",
+              value: 0,
+            },
+            {
+              label: "已付款",
+              value: 1,
+            },
+            {
+              label: "成功",
+              value: 3,
+            }
+          ],
+        },
+        {
+          prop: "refundStatus",
+          placeholder: "退款状态",
+          scope: "select",
+          options: [
+            {
+              label: "退款中",
+              value: 1,
+            },
+            {
+              label: "已退款",
+              value: 2,
+            },
+            {
+              label: "拒绝退款",
+              value: 3,
+            },
+          ],
+        },
+        {
+          prop: "orderSn",
+          placeholder: "请输入订单编号",
+        },
       ],
       formData: {
+        goodsType: '',
         status: "0,1",
         pageSize: 10,
         pageNum: 1,
       },
       // 表单
       tableSet: [
-        // {
-        //   label: "订单时间",
-        //   prop: "code",
-        //   hidden: true,
-        // },
+        {
+          label: "订单时间",
+          prop: "createTime",
+          hidden: true,
+          scope: "aTimeList",
+          width:"180px"
+        },
         {
           label: "订单编码",
-          prop: "oderSn",
+          prop: "orderSn",
           hidden: true,
+          width:"210px"
+        },
+        {
+          label: "手机号码",
+          prop: "telphone",
+          hidden: true,
+          width:"120px"
+        },
+        {
+          label: "学员姓名",
+          prop: "realname",
+          hidden: true,
+        },
+        {
+          label: "学员身份证",
+          prop: "idCard",
+          hidden: true,
+          width:"190px"
+        },
+        {
+          label: "商品名称",
+          prop: "goodsName",
+          hidden: true,
+        },
+        {
+          label: "商品业务层级",
+          prop1: "educationName",
+          prop2: "projectName",
+          prop3: "businessName",
+          hidden: true,
+          scope: "eduTypes",
+          width:"280px"
+        },
+        {
+          label: "商品年份",
+          prop: "year",
+          hidden: true,
+          ch: "年",
+        },
+        {
+          label: "商品标准价格",
+          prop: "goodsPrice",
+          hidden: true,
+          ch:"元",
+          width:"120px"
         },
-        // {
-        //   label: "手机号码",
-        //   prop: "name",
-        //   hidden: true,
-        // },
-        // {
-        //   label: "学员姓名",
-        //   prop: "businessList",
-        //   hidden: true,
-        // },
-        // {
-        //   label: "学员身份证",
-        //   prop: "publishStatus",
-        //   hidden: true,
-        // },
-        // {
-        //   label: "商品名称",
-        //   prop: "publishStatus",
-        //   hidden: true,
-        // },
-        // {
-        //   label: "商品业务层级",
-        //   prop: "publishStatus",
-        //   hidden: true,
-        // },
-        // {
-        //   label: "商品年份",
-        //   prop: "publishStatus",
-        //   hidden: true,
-        // },
-        // {
-        //   label: "商品标准价格",
-        //   prop: "publishStatus",
-        //   hidden: true,
-        // },
         // {
         //   label: "使用优惠劵",
         //   prop: "publishStatus",
@@ -125,39 +224,112 @@ export default {
         // },
         {
           label: "商品成交价",
-          prop: "orderPrice",
+          prop: "goodsRealPrice",
           hidden: true,
+          ch:"元",
+          width:"110px"
         },
         {
           label: "支付状态",
-          prop: "orderStatus",
+          prop: "payStatus",
           hidden: true,
+          scope: "isOptions",
+          options: [
+            {
+              label: "未收费",
+              value: 1,
+            },
+            {
+              label: "部分收费",
+              value: 2,
+            },
+            {
+              label: "完全收费",
+              value: 3,
+            },
+          ],
+        },
+        {
+          label: "已收金额",
+          prop: "goodsReceived",
+          hidden: true,
+          ch:"元"
+        },
+        {
+          label: "未收金额",
+          hidden: true,
+          scope:"refundPrice",
+          ch:"元"
+        },
+        {
+          label: "订单来源",
+          prop: "orderFrom",
+          hidden: true,
+          scope: "isOptions",
+          width:"130px",
+          options: [
+            {
+              label: "业务员录单",
+              value: 1,
+            },
+            {
+              label: "员工录单",
+              value: 2,
+            },
+          ],
+        },
+        {
+          label: "订单商品状态",
+          prop: "orderGoodsStatus",
+          hidden: true,
+          scope: "isOptions",
+          options: [
+            {
+              label: "关闭",
+              value: 0,
+            },
+            {
+              label: "正常",
+              value: 1,
+            },
+            {
+              label: "退款中",
+              value: 2,
+            },
+            {
+              label: "已退款",
+              value: 3,
+            },
+            {
+              label: "拒绝退款",
+              value: 4,
+            },
+          ],
+        },
+        {
+          label: "退款状态",
+          prop: "refundStatus",
+          hidden: true,
+          scope: "isOptions",
+          options: [
+            {
+              label: "无",
+              value: 0,
+            },
+            {
+              label: "退款中",
+              value: 1,
+            },
+            {
+              label: "已退款",
+              value: 2,
+            },
+            {
+              label: "拒绝退款",
+              value: 3,
+            },
+          ],
         },
-        // {
-        //   label: "已收金额",
-        //   prop: "publishStatus",
-        //   hidden: true,
-        // },
-        // {
-        //   label: "未收金额",
-        //   prop: "publishStatus",
-        //   hidden: true,
-        // },
-        // {
-        //   label: "订单来源",
-        //   prop: "publishStatus",
-        //   hidden: true,
-        // },
-        // {
-        //   label: "订单状态",
-        //   prop: "publishStatus",
-        //   hidden: true,
-        // },
-        // {
-        //   label: "退款状态",
-        //   prop: "publishStatus",
-        //   hidden: true,
-        // },
       ],
       tableData: [], //表单数据
       total: 0, //一共多少条
@@ -167,6 +339,31 @@ export default {
     this.search();
   },
   methods: {
+    emitData(option) {
+      console.log(option,156)
+      if (!option.length) {
+        this.$message.error("请勾选需要操作的订单");
+        return;
+      }
+      var statues = option.some(item => {
+        return item.payStatus === 3
+      })
+      if(statues){
+        this.$message.warning("请勿勾选完全收费订单");
+          return;
+      }
+      var arrayId = [];
+      for (let i = 0; i < option.length; i++) {
+        arrayId.push(option[i].orderGoodsId);
+      }
+      this.$router.push({
+        path: "orderPrice",
+        query: {
+          goodsArrays: arrayId.toString(),
+        },
+      });
+      this.$message.success("成功");
+    },
     editInfo(v) {
       this.addClick(v, 0);
     },
@@ -177,17 +374,22 @@ export default {
       }
       if (int === 2) {
         this.formData = {
+          goodsType: '',
           status: "0,1",
           pageSize: 10,
           pageNum: 1,
         };
       }
+      if(int === 3){
+        this.formData.pageNum = 1
+      }
       this.$api.inquireOrderList(this.formData).then((res) => {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search(2);
@@ -231,6 +433,16 @@ export default {
         });
       }
     },
+    jumpDetail(v) {
+      this.$router.push({
+        path: "orderDetail",
+        query: {
+          goodsId: v.goodsId,
+          orderSn: v.orderSn,
+          userId:v.userId
+        },
+      });
+    },
     handleSizeChange(v) {
       this.formData.pageSize = v;
       this.formData.pageNum = 1;

+ 588 - 0
src/views/education/classManageMent/classList/addClass/index.vue

@@ -0,0 +1,588 @@
+<template>
+  <div id="addClass">
+    <el-row :gutter="20">
+      <el-form
+        label-position="right"
+        label-width="130px"
+        :model="listData"
+        :rules="rules"
+        ref="listData"
+      >
+        <el-col :span="12">
+          <el-form-item label="所属商品课程" prop="payer">
+            <span
+              style="margin-right: 20px"
+              v-if="listData.classGradeGoodsAddBos.length"
+              >{{ listData.goodsName }}</span
+            >
+            <el-button type="success" size="small" @click="openGoodsBox">{{
+              listData.classGradeGoodsAddBos.length ? "更换商品" : "添加商品"
+            }}</el-button>
+          </el-form-item>
+          <el-form-item label="班级号">
+            <el-radio-group
+              v-model="listData.classStatus"
+              @change="changeClassStatus"
+            >
+              <el-radio :label="0">未开班</el-radio>
+              <el-radio :label="1">已开班</el-radio>
+            </el-radio-group>
+            <el-input
+              placeholder="请填写继教二建官方班级"
+              v-if="listData.classStatus === 1"
+              v-model="listData.officialName"
+            ></el-input>
+          </el-form-item>
+          <el-form-item label="班级名称" prop="className">
+            <el-input
+              v-model="listData.className"
+              placeholder="请填写班级名称"
+            ></el-input>
+          </el-form-item>
+          <el-form-item label="学员上限" prop="studentUpper">
+            <el-input
+              v-model="listData.studentUpper"
+              placeholder="请填写学员上限"
+            ></el-input>
+          </el-form-item>
+          <el-form-item
+            label="开放学习时间"
+            :prop="
+              listData.learningStatus == 3
+                ? 'learningTimeStart'
+                : 'learningStatus'
+            "
+          >
+            <el-radio-group
+              v-model="listData.learningStatus"
+              @change="changeLearning"
+            >
+              <el-radio :label="1">即刻</el-radio>
+              <el-radio :label="2">待定</el-radio>
+              <el-radio :label="3">日期</el-radio>
+            </el-radio-group>
+            <el-date-picker
+              v-if="listData.learningStatus === 3"
+              v-model="listData.learningTimeStart"
+              type="datetime"
+              value-format="timestamp"
+              placeholder="请选择开放学习时间"
+            >
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="状态" prop="status">
+            <el-radio-group v-model="listData.status">
+              <el-radio :label="1">有效</el-radio>
+              <el-radio :label="0">无效</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="班级有效期" prop="timeList">
+            <el-date-picker
+              v-model="listData.timeList"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              format="yyyy 年 MM 月 dd 日"
+              value-format="timestamp"
+            >
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="考期" prop="examineId">
+            <el-select
+              v-model="listData.examineId"
+              placeholder="请选择考期"
+              clearable
+            >
+              <el-option
+                v-for="(item, index) in courseExamine"
+                :key="index"
+                :label="item.examineName"
+                :value="item.id"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="报考地区(省)" prop="areasId">
+            <el-select
+              v-model="listData.areasId"
+              placeholder="请选择报考地区(省)"
+              @change="getNewCityList"
+              clearable
+            >
+              <el-option
+                v-for="(item, index) in areas"
+                :key="index"
+                :label="item.areaName"
+                :value="item.areaId"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item
+            label="报考地区(地市)"
+            :prop="listData.areasId ? 'cityId' : ''"
+            v-if="listData.areasId"
+          >
+            <el-select
+              v-model="listData.cityId"
+              placeholder="请选择报考地区(地市)"
+              clearable
+            >
+              <el-option
+                v-for="(item, index) in newCityList"
+                :key="index"
+                :label="item.areaName"
+                :value="item.areaId"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="指派班主任" prop="sysUserId">
+            <el-input v-model="listData.sysUserId"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <div v-if="statusShow === 1">
+            <el-form-item label="官方信息推送" prop="interfacePushId">
+              <el-select
+                v-model="listData.interfacePushId"
+                placeholder="请选择官方信息推送"
+                clearable
+              >
+                <el-option
+                  v-for="(item, index) in type1List"
+                  :key="index"
+                  :label="item.name"
+                  :value="item.id"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="官方学习账号开通" prop="interfaceAccountId">
+              <el-select
+                v-model="listData.interfaceAccountId"
+                placeholder="请选择官方学习账号开通"
+                clearable
+              >
+                <el-option
+                  v-for="(item, index) in type2List"
+                  :key="index"
+                  :label="item.name"
+                  :value="item.id"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="官方学时推送" prop="interfacePeriodId">
+              <el-select
+                v-model="listData.interfacePeriodId"
+                placeholder="请选择官方学时推送"
+                clearable
+              >
+                <el-option
+                  v-for="(item, index) in type3List"
+                  :key="index"
+                  :label="item.name"
+                  :value="item.id"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </div>
+          <el-form-item label="备注" prop="remark">
+            <el-input
+              type="textarea"
+              :rows="5"
+              v-model="listData.remark"
+            ></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24" style="text-align: center">
+          <el-button @click="backPage">返回</el-button>
+          <el-button type="primary" @click="submitForm('listData')"
+            >确定</el-button
+          >
+        </el-col>
+      </el-form>
+    </el-row>
+    <el-dialog
+      :visible.sync="dialogVisiblePZDown"
+      width="900px"
+      :show-close="false"
+      :close-on-click-modal="false"
+    >
+      <div slot="title" class="hearders">
+        <div class="leftTitle">添加商品</div>
+        <div class="rightBoxs">
+          <img src="@/assets/images/Close@2x.png" alt="" @click="closePZ" />
+        </div>
+      </div>
+      <div>
+        <el-table
+          ref="multipleTable"
+          :data="tableData"
+          border
+          :header-cell-style="{
+            'background-color': '#eee',
+            padding: '8px',
+            color: '#333',
+          }"
+        >
+          <el-table-column label="" width="45" align="center">
+            <template scope="scope">
+              <el-radio
+                class="radioTables"
+                :label="scope.row.goodsId"
+                v-model="templateRadio"
+                @change.native="getTemplateRow(scope.$index, scope.row)"
+                >{{ "" }}</el-radio
+              >
+            </template>
+          </el-table-column>
+          <template v-for="(item, index) in tableList">
+            <el-table-column
+              v-if="item.scope !== 'inputs'"
+              :width="item.width"
+              :key="index"
+              :label="item.label"
+              align="center"
+              :show-overflow-tooltip="true"
+              header-align="center"
+            >
+              <template slot-scope="scope">
+                <span v-if="item.scope === 'status'">
+                  {{
+                    scope.row[item.prop] === 1
+                      ? "有效"
+                      : scope.row[item.prop] === 0
+                      ? "无效"
+                      : "未知"
+                  }}
+                </span>
+                <span v-else-if="item.scope === 'moreList'">
+                  {{
+                    scope.row[item.prop1] +
+                    "-" +
+                    scope.row[item.prop2] +
+                    "-" +
+                    scope.row[item.prop3]
+                  }}
+                </span>
+                <span v-else-if="item.scope === 'goodsType'">{{
+                  getGoodsTypes(scope.row[item.prop])
+                }}</span>
+                <span v-else>{{ scope.row[item.prop] }}</span></template
+              >
+            </el-table-column></template
+          >
+        </el-table>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closePZ">取 消</el-button>
+        <el-button type="primary" @click="submitPZ">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from "vuex";
+export default {
+  data() {
+    return {
+      dialogVisiblePZDown: false,
+      listData: {
+        classStatus: "",
+        status: 1,
+        timeList: [],
+        learningStatus: 1,
+        learningTimeStart: "",
+        officialName: "",
+        cityId: "",
+        classGradeGoodsAddBos: [],
+      },
+      rules: {
+        className: [
+          { required: true, message: "请填写班级名称", trigger: "blur" },
+        ],
+        studentUpper: [
+          { required: true, message: "请填写学员上限", trigger: "blur" },
+          {
+            validator(rule, value, callback) {
+              var reg = /^[1-9]\d*$/;
+              if (reg.test(value)) {
+                callback();
+              } else {
+                callback(new Error("请规范输入学员上限数量"));
+              }
+            },
+            trigger: "blur",
+          },
+        ],
+        status: [{ required: true, message: "请选择状态", trigger: "change" }],
+        learningTimeStart: [
+          {
+            type: "date",
+            required: true,
+            message: "请选择开放学习时间",
+            trigger: "change",
+          },
+        ],
+        cityId: [
+          {
+            required: true,
+            message: "请选择报考地市",
+            trigger: ["blur", "change"],
+          },
+        ],
+      },
+      cityList: [],
+      newCityList: [],
+      tableData: [],
+      tableList: [
+        {
+          label: "商品编码",
+          prop: "code",
+        },
+        {
+          label: "年份",
+          prop: "year",
+        },
+        {
+          label: "商品名称",
+          prop: "goodsName",
+        },
+        {
+          label: "业务层级",
+          prop1: "educationName",
+          prop2: "projectName",
+          prop3: "businessName",
+          scope: "moreList",
+          width: "250px",
+        },
+        {
+          label: "商品类型",
+          prop: "goodsType",
+          scope: "goodsType",
+        },
+        {
+          label: "有效状态",
+          prop: "status",
+          scope: "status",
+        },
+        {
+          label: "商品标价",
+          prop: "standPrice",
+        },
+      ],
+      templateRadio: "",
+      goodsName: "",
+      //	1官方推送 2官方学习账号开通 3官方学时推送
+      type1List: [],
+      type2List: [],
+      type3List: [],
+      statusShow: 0, //0隐藏1显示
+    };
+  },
+  computed: { ...mapGetters(["courseExamine", "areas"]) },
+  mounted() {
+    this.getInfoCityDict();
+    this.getGoodsList();
+    this.getGFList();
+  },
+  methods: {
+    //官方接口是否出现
+    getVoselect() {
+      this.$api.inquirelistInterfaceVoselect().then((res) => {
+        if (res.data === 1) {
+          this.getVoselect();
+        }
+        this.statusShow = res.data;
+      });
+    },
+    //获取官方接口
+    getGFList() {
+      this.$api.inquirelistInterfaceVo().then((res) => {
+        res.rows.forEach((item) => {
+          if (item.type === 1) {
+            this.type1List.push(item);
+          }
+          if (item.type === 2) {
+            this.type2List.push(item);
+          }
+          if (item.type === 3) {
+            this.type3List.push(item);
+          }
+        });
+      });
+    },
+    //动态获取商品类型
+    getGoodsTypes(int) {
+      var ast = "";
+      switch (int) {
+        case 1:
+          ast = "视频";
+          break;
+        case 2:
+          ast = "题库";
+          break;
+        case 3:
+          ast = "面授";
+          break;
+        case 4:
+          ast = "服务";
+          break;
+        case 5:
+          ast = "组合";
+          break;
+        default:
+          break;
+      }
+      return ast;
+    },
+    //单选触发
+    getTemplateRow(index, row) {
+      this.templateRadio = row.goodsId;
+      this.goodsName = row.goodsName;
+    },
+    //确定选择商品列表
+    submitPZ() {
+      this.listData.classGradeGoodsAddBos[0] = this.templateRadio;
+      this.listData.goodsName = this.goodsName;
+      this.dialogVisiblePZDown = false;
+    },
+    //获取商品列表
+    getGoodsList() {
+      this.$api.inquireGoods({ status: 1 }).then((res) => {
+        this.tableData = res.rows;
+      });
+    },
+    //获取地市列表
+    getInfoCityDict() {
+      this.$api.inquireapplyCityList({ status: 1, areaType: 2 }).then((res) => {
+        this.cityList = res.rows;
+      });
+    },
+    //获取最新地市列表
+    getNewCityList(n) {
+      this.newCityList = this.cityList.filter((item) => {
+        return item.parentId == n;
+      });
+      this.listData.cityId = "";
+    },
+    //改变开放学习状态-清空选择框
+    changeLearning() {
+      this.listData.learningTimeStart = "";
+    },
+    //改变班级号状态-清空输入框
+    changeClassStatus() {
+      this.listData.officialName = "";
+    },
+    //返回
+    backPage() {
+      this.$router.go(-1);
+    },
+    //表单验证
+    submitForm(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          if (!this.listData.classGradeGoodsAddBos.length) {
+            this.$message.error("请选择商品课程");
+            return;
+          }
+          this.submit(); //提交
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+    //提交
+    submit() {
+      var data = JSON.parse(JSON.stringify(this.listData));
+      if (data.timeList.length) {
+        data.classStartTime = this.listData.timeList[0] / 1000;
+        data.classEndTime = this.listData.timeList[1] / 1000;
+      }
+      if (data.learningStatus === 3) {
+        data.learningTimeStart = this.listData.learningTimeStart / 1000;
+      }
+      this.$api.appGradegrade(data).then((res) => {
+        this.$message.success("添加成功");
+        setTimeout(() => {
+          this.$router.go(-1);
+        }, 500);
+      });
+    },
+    //商品列表
+    openGoodsBox() {
+      if (this.listData.classGradeGoodsAddBos.length) {
+        this.templateRadio = this.listData.classGradeGoodsAddBos[0];
+        this.goodsName = this.listData.goodsName;
+      } else {
+        this.templateRadio = "";
+        this.goodsName = "";
+      }
+      this.dialogVisiblePZDown = true;
+    },
+    closePZ() {
+      this.dialogVisiblePZDown = false;
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+#addClass {
+  background-color: #eee;
+  padding: 40px;
+  margin-top: 16px;
+}
+/deep/.el-button {
+  border-radius: 8px;
+}
+/deep/.el-dialog {
+  border-radius: 8px;
+  .el-dialog__header {
+    padding: 0;
+    .hearders {
+      height: 40px;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      padding: 0px 18px 0px 20px;
+      border-bottom: 1px solid #e2e2e2;
+      .leftTitle {
+        font-size: 14px;
+        font-weight: bold;
+        color: #2f4378;
+      }
+      .rightBoxs {
+        display: flex;
+        align-items: center;
+        img {
+          width: 14px;
+          height: 14px;
+          margin-left: 13px;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+  .el-dialog__footer {
+    padding: 0;
+    .dialog-footer {
+      padding: 0px 40px;
+      height: 70px;
+      border-top: 1px solid #e2e2e2;
+      display: flex;
+      align-items: center;
+      justify-content: flex-end;
+    }
+  }
+}
+/deep/.radioTables > .el-radio__label {
+  display: none;
+}
+</style>

+ 380 - 0
src/views/education/classManageMent/classList/index.vue

@@ -0,0 +1,380 @@
+<template>
+  <div id="classList">
+    <search-box-new
+      ref="searchBox"
+      :formData="formData"
+      :formList="formList"
+      @search="search"
+      @init="init"
+    />
+    <table-list
+      :tableSets="tableSet"
+      :tableData="tableData"
+      :navText="navText"
+      @addClick="addClick"
+      :loading="loading"
+      @editInfo="editInfo"
+    >
+      <template slot="btn" slot-scope="props">
+        <el-button type="text" @click="addClick(props.scope.row, 2)"
+          >详情</el-button
+        >
+        <el-button type="text" @click="addClick(props.scope.row, 3)"
+          >学员管理</el-button
+        >
+        <el-button type="text" @click="del(props.scope.row)">删除</el-button>
+      </template>
+    </table-list>
+    <pagination
+      :total="total"
+      :pageSize="formData.pageSize"
+      :currentPage="formData.pageNum"
+      @handleSizeChange="handleSizeChange"
+      @handleCurrentChange="handleCurrentChange"
+    />
+  </div>
+</template>
+
+<script>
+import searchBoxNew from "@/components/searchBoxNew";
+import tableList from "@/components/tableList";
+import pagination from "@/components/pagination";
+export default {
+  components: { searchBoxNew, tableList, pagination },
+  data() {
+    return {
+      loading: false, //当前表单加载是否加载动画
+      navText: {
+        title: "班级管理",
+        index: 0,
+        ch: "条",
+        num: false,
+        choice: true,
+        addHide: false,
+        backFatherBtn: {
+          status: false,
+          title: "未定义",
+        },
+      },
+      //搜索
+      formList: [
+        {
+          prop: "educationId",
+          placeholder: "教育类型",
+          scope: "educationType",
+        },
+        {
+          prop: "businessId",
+          placeholder: "业务层次",
+          scope: "businessLevel",
+        },
+        {
+          prop: "subjectId",
+          placeholder: "科目",
+          scope: "sujectType",
+        },
+        {
+          prop: "publishStatus",
+          placeholder: "发布状态",
+          scope: "paperType",
+        },
+        {
+          prop: "prefixName",
+          placeholder: "请输入名称前缀",
+        },
+        {
+          prop: "examName",
+          placeholder: "请输入试卷名称",
+        },
+      ],
+      formData: {
+        status: "0,1",
+        pageSize: 10,
+        pageNum: 1,
+      },
+      // 表单
+      tableSet: [
+        {
+          label: "商品编码",
+          prop: "code",
+          objProp:"goodsList",
+          hidden: true,
+          scope:"objType"
+        },
+        {
+          label: "年份",
+          prop: "year",
+          objProp:"goodsList",
+          hidden: true,
+          scope:"objType"
+        },
+        {
+          label: "商品业务层级",
+          prop1: "educationName",
+          prop2: "projectName",
+          prop3: "businessName",
+          objProp:"goodsList",
+          hidden: true,
+          scope:"objTypeYW",
+          width:"240px"
+        },
+        {
+          label: "商品名称",
+          prop: "goodsName",
+          objProp:"goodsList",
+          hidden: true,
+          scope:"objType"
+        },
+        {
+          label: "班级编码",
+          prop: "gradeCode",
+          hidden: true,
+        },
+        {
+          label: "班级号",
+          prop: "classStatus",
+          prop1:"officialName",
+          hidden: true,
+          scope:"classTypes"
+        },
+        {
+          label: "班级名称",
+          prop: "className",
+          hidden: true,
+          scope: "editInfo",
+        },
+        {
+          label: "学时",
+          prop: "classHours",
+          objProp:"goodsList",
+          hidden: true,
+          scope:"objType"
+        },
+        {
+          label: "班主任",
+          prop: "nickName",
+          hidden: true,
+        },
+        {
+          label: "班级人数",
+          prop1:"studentNum",
+          prop2: "studentUpper",
+          hidden: true,
+          scope:"peopleNums"
+        },
+        {
+          label: "开放学习时间",
+          prop: "learningStatus",
+          prop1:"learningTimeStart",
+          hidden: true,
+          scope:"classTimeTypes",
+          width:"120px"
+        },
+        {
+          label: "班级状态",
+          prop: "status",
+          hidden: true,
+          scope:"hasTime"
+        },
+        {
+          label: "班级有效期",
+          prop1: "classStartTime",
+          prop2: "classEndTime",
+          hidden: true,
+          Diszing:false,
+          scope:"TimeLists",
+          width:"120px"
+        },
+      ],
+      tableData: [], //表单数据
+      total: 0, //一共多少条
+    };
+  },
+  mounted() {
+    this.search();
+  },
+  methods: {
+    editInfo(v) {
+      this.addClick(v, 2);
+    },
+    search(int) {
+      this.loading = true;
+      if (int === 1) {
+        this.formData.pageNum = 1;
+      }
+      if (int === 2) {
+        this.formData = {
+          status: "0,1",
+          pageSize: 10,
+          pageNum: 1,
+        };
+      }
+      this.$api.inquireGradegradeList(this.formData).then((res) => {
+        this.tableData = res.rows;
+        this.total = res.total;
+        this.navText.index = res.total;
+      }).finally(()=>{
+        this.loading = false;
+      })
+    },
+    init() {
+      this.search(2);
+    },
+    del(v) {
+      this.$alert(
+        "确定删除此内容?<br />内容删除后将无法恢复,请慎重考虑",
+        "提示",
+        {
+          dangerouslyUseHTMLString: true,
+        }
+      )
+        .then(() => {
+          var data = {
+            classId: v.classId,
+            status: -1,
+          };
+          this.$api.editGradegrade(data).then((res) => {
+            this.$message.success("删除成功");
+            this.search();
+          });
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消删除",
+          });
+        });
+    },
+    addClick(v, int) {
+      // int = 2详情 3学员管理
+      if (v === undefined) {
+        // 添加班级
+        this.$router.push({
+          path: "addClass",
+        });
+      } else {
+        if (int === 2) {
+          //班级详情
+          this.$router.push({
+            path:'manageClass',
+            query:{
+              id:v.classId
+            }
+          })
+        }
+        if (int === 3) {
+          // 学员管理
+          this.$router.push({
+            path: "studentMenu",
+            query: {
+              id: v.classId,
+            },
+          });
+        }
+      }
+    },
+    handleSizeChange(v) {
+      this.formData.pageSize = v;
+      this.formData.pageNum = 1;
+      this.search();
+    },
+    handleCurrentChange(v) {
+      this.formData.pageNum = v;
+      this.search();
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+/deep/.el-button {
+  border-radius: 8px;
+}
+/deep/.el-dialog {
+  border-radius: 8px;
+  .el-dialog__header {
+    padding: 0;
+    .hearders {
+      height: 40px;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      padding: 0px 18px 0px 20px;
+      border-bottom: 1px solid #e2e2e2;
+      .leftTitle {
+        font-size: 14px;
+        font-weight: bold;
+        color: #2f4378;
+      }
+      .rightBoxs {
+        display: flex;
+        align-items: center;
+        img {
+          width: 14px;
+          height: 14px;
+          margin-left: 13px;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+  .el-dialog__footer {
+    padding: 0;
+    .dialog-footer {
+      padding: 0px 40px;
+      height: 70px;
+      border-top: 1px solid #e2e2e2;
+      display: flex;
+      align-items: center;
+      justify-content: flex-end;
+    }
+  }
+}
+.imgBox {
+  width: 100%;
+  // height: 210px;
+  border: 1px solid #e2e2e2;
+  border-radius: 8px;
+  padding: 8px 8px 3px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  .imgLabel {
+    flex: 1;
+    width: 100%;
+    border: 1px dotted #e2e2e2;
+    color: #999;
+    font-size: 14px;
+    cursor: pointer;
+    border-radius: 8px;
+    .msPhoto {
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      max-width: 100%;
+      max-height: 270px;
+      img {
+        max-width: 100%;
+        max-height: 270px;
+      }
+    }
+    .imgbbx {
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      justify-content: center;
+      width: 100%;
+      height: 100%;
+      i {
+        font-weight: bold;
+        margin: 14px 0;
+        font-size: 24px;
+      }
+    }
+  }
+  p {
+    margin: 5px 0px;
+  }
+}
+</style>
+

+ 467 - 0
src/views/education/classManageMent/classList/manageClass/baseInfo.vue

@@ -0,0 +1,467 @@
+<template>
+  <div id="baseInfo">
+    <div class="YZsty">
+      <el-row :gutter="20">
+        <el-form
+          label-position="right"
+          label-width="130px"
+          :model="listData"
+          :rules="rules"
+          ref="listData"
+        >
+          <el-col :span="24">
+            <el-form-item label="所属商品课程">
+              <div class="flex_s">
+                <div>商品编码:{{ listData.goodsList[0].code }}</div>
+                <div>商品业务层级:{{ listData.goodsList[0].code }}</div>
+                <div>学时:{{ listData.goodsList[0].classHours }}</div>
+                <div>年份:{{ listData.goodsList[0].year }}</div>
+                <div>商品名称:{{ listData.goodsList[0].goodsName }}</div>
+                <div>
+                  学习有效期:{{
+                    $methodsTools.onlyForma(
+                      listData.goodsList[0].studyStartTime,
+                      false
+                    )
+                  }}-{{
+                    $methodsTools.onlyForma(
+                      listData.goodsList[0].studyEndTime,
+                      false
+                    )
+                  }}
+                </div>
+              </div>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <div class="fgx"></div>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="班级编码" prop="gradeCode">
+              <el-input
+                disabled
+                v-model="listData.gradeCode"
+                placeholder="请填写班级编码"
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="班级号">
+              <el-radio-group
+                v-model="listData.classStatus"
+                @change="changeClassStatus"
+              >
+                <el-radio :label="0">未开班</el-radio>
+                <el-radio :label="1">已开班</el-radio>
+              </el-radio-group>
+              <el-input
+                placeholder="请填写继教二建官方班级"
+                v-if="listData.classStatus === 1"
+                v-model="listData.officialName"
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="班级名称" prop="className">
+              <el-input
+                v-model="listData.className"
+                placeholder="请填写班级名称"
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="学员上限" prop="studentUpper">
+              <el-input
+                disabled
+                v-model="listData.studentUpper"
+                placeholder="请填写学员上限"
+              ></el-input>
+            </el-form-item>
+            <el-form-item
+              label="开放学习时间"
+              :prop="
+                listData.learningStatus == 3
+                  ? 'learningTimeStart'
+                  : 'learningStatus'
+              "
+            >
+              <el-radio-group
+                v-model="listData.learningStatus"
+                @change="changeLearning"
+              >
+                <el-radio :label="1">即刻</el-radio>
+                <el-radio :label="2">待定</el-radio>
+                <el-radio :label="3">日期</el-radio>
+              </el-radio-group>
+              <el-date-picker
+                v-if="listData.learningStatus === 3"
+                v-model="listData.learningTimeStart"
+                type="datetime"
+                value-format="timestamp"
+                placeholder="请选择开放学习时间"
+              >
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item label="状态" prop="status">
+              <el-radio-group v-model="listData.status">
+                <el-radio :label="1">有效</el-radio>
+                <el-radio :label="0">无效</el-radio>
+              </el-radio-group>
+            </el-form-item>
+            <el-form-item label="班级有效期" prop="timeList">
+              <el-date-picker
+                v-model="listData.timeList"
+                type="daterange"
+                range-separator="至"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期"
+                format="yyyy 年 MM 月 dd 日"
+                value-format="timestamp"
+              >
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item label="考期" prop="examineId">
+              <el-select
+                v-model="listData.examineId"
+                placeholder="请选择考期"
+                clearable
+              >
+                <el-option
+                  v-for="(item, index) in courseExamine"
+                  :key="index"
+                  :label="item.examineName"
+                  :value="item.id"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="报考地区(省)" prop="areasId">
+              <el-select
+                v-model="listData.areasId"
+                placeholder="请选择报考地区(省)"
+                @change="getNewCityList"
+                clearable
+              >
+                <el-option
+                  v-for="(item, index) in areas"
+                  :key="index"
+                  :label="item.areaName"
+                  :value="item.areaId"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item
+              label="报考地区(地市)"
+              :prop="listData.areasId ? 'cityId' : ''"
+              v-if="listData.areasId"
+            >
+              <el-select
+                v-model="listData.cityId"
+                placeholder="请选择报考地区(地市)"
+                clearable
+              >
+                <el-option
+                  v-for="(item, index) in newCityList"
+                  :key="index"
+                  :label="item.areaName"
+                  :value="item.areaId"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="指派班主任" prop="sysUserId">
+              <el-input v-model="listData.sysUserId"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <div v-if="statusShow === 1">
+              <el-form-item label="官方信息推送" prop="interfacePushId">
+                <el-select
+                  v-model="listData.interfacePushId"
+                  placeholder="请选择官方信息推送"
+                  clearable
+                >
+                  <el-option
+                    v-for="(item, index) in type1List"
+                    :key="index"
+                    :label="item.name"
+                    :value="item.id"
+                  >
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="官方学习账号开通" prop="interfaceAccountId">
+                <el-select
+                  v-model="listData.interfaceAccountId"
+                  placeholder="请选择官方学习账号开通"
+                  clearable
+                >
+                  <el-option
+                    v-for="(item, index) in type2List"
+                    :key="index"
+                    :label="item.name"
+                    :value="item.id"
+                  >
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="官方学时推送" prop="interfacePeriodId">
+                <el-select
+                  v-model="listData.interfacePeriodId"
+                  placeholder="请选择官方学时推送"
+                  clearable
+                >
+                  <el-option
+                    v-for="(item, index) in type3List"
+                    :key="index"
+                    :label="item.name"
+                    :value="item.id"
+                  >
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+            <el-form-item label="备注" prop="remark">
+              <el-input
+                type="textarea"
+                :rows="5"
+                v-model="listData.remark"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24" style="text-align: center">
+            <el-button @click="backPage">返回</el-button>
+            <el-button type="primary" @click="submitForm('listData')"
+              >确定</el-button
+            >
+          </el-col>
+        </el-form>
+      </el-row>
+    </div>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from "vuex";
+export default {
+  data() {
+    return {
+      listData: {
+        goodsList: [{}],
+      },
+      rules: {
+        className: [
+          { required: true, message: "请填写班级名称", trigger: "blur" },
+        ],
+        studentUpper: [
+          { required: true, message: "请填写学员上限", trigger: "blur" },
+          {
+            validator(rule, value, callback) {
+              var reg = /^[1-9]\d*$/;
+              if (reg.test(value)) {
+                callback();
+              } else {
+                callback(new Error("请规范输入学员上限数量"));
+              }
+            },
+            trigger: "blur",
+          },
+        ],
+        status: [{ required: true, message: "请选择状态", trigger: "change" }],
+        learningTimeStart: [
+          {
+            type: "date",
+            required: true,
+            message: "请选择开放学习时间",
+            trigger: "change",
+          },
+        ],
+        cityId: [
+          {
+            required: true,
+            message: "请选择报考地市",
+            trigger: ["blur", "change"],
+          },
+        ],
+      },
+      cityList: [],
+      newCityList: [],
+      //	1官方推送 2官方学习账号开通 3官方学时推送
+      type1List: [],
+      type2List: [],
+      type3List: [],
+      statusShow: 0, //0隐藏1出现
+    };
+  },
+  computed: { ...mapGetters(["courseExamine", "areas"]) },
+  mounted() {
+    this.getInfoCityDict();
+    this.getVoselect();
+    this.search();
+  },
+  methods: {
+    //   初始获取数据
+    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.timeList = [
+            this.$methodsTools.time10to13(res.data.classStartTime, 2),
+            this.$methodsTools.time10to13(res.data.classEndTime, 2),
+          ];
+        }
+        this.listData = res.data;
+      });
+    },
+    //官方接口是否出现
+    getVoselect() {
+      this.$api.inquirelistInterfaceVoselect().then((res) => {
+        if (res.data === 1) {
+          this.getGFList();
+        }
+        this.statusShow = res.data;
+      });
+    },
+    //获取官方接口
+    getGFList() {
+      this.$api.inquirelistInterfaceVo().then((res) => {
+        res.rows.forEach((item) => {
+          if (item.type === 1) {
+            this.type1List.push(item);
+          }
+          if (item.type === 2) {
+            this.type2List.push(item);
+          }
+          if (item.type === 3) {
+            this.type3List.push(item);
+          }
+        });
+      });
+    },
+    //获取地市列表
+    getInfoCityDict() {
+      this.$api.inquireapplyCityList({ status: 1, areaType: 2 }).then((res) => {
+        this.cityList = res.rows;
+      });
+    },
+    //获取最新地市列表
+    getNewCityList(n) {
+      this.newCityList = this.cityList.filter((item) => {
+        return item.parentId == n;
+      });
+      this.listData.cityId = "";
+    },
+    //改变开放学习状态-清空选择框
+    changeLearning() {
+      this.listData.learningTimeStart = "";
+    },
+    //改变班级号状态-清空输入框
+    changeClassStatus() {
+      this.listData.officialName = "";
+    },
+    //返回
+    backPage() {
+      this.$router.go(-1);
+    },
+    //表单验证
+    submitForm(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          this.submit(); //提交
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+    //提交
+    submit() {
+      var data = JSON.parse(JSON.stringify(this.listData));
+      if (data.timeList.length) {
+        data.classStartTime = this.listData.timeList[0] / 1000;
+        data.classEndTime = this.listData.timeList[1] / 1000;
+      }
+      if (data.learningStatus === 3) {
+        data.learningTimeStart = this.listData.learningTimeStart / 1000;
+      }
+      delete data.goodsList;
+      this.$api.editGradegrade(data).then((res) => {
+        this.$message.success("修改成功");
+      });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.YZsty {
+  background-color: #eee;
+  padding: 30px;
+  margin-top: 16px;
+}
+/deep/.el-button {
+  border-radius: 8px;
+}
+/deep/.el-dialog {
+  border-radius: 8px;
+  .el-dialog__header {
+    padding: 0;
+    .hearders {
+      height: 40px;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      padding: 0px 18px 0px 20px;
+      border-bottom: 1px solid #e2e2e2;
+      .leftTitle {
+        font-size: 14px;
+        font-weight: bold;
+        color: #2f4378;
+      }
+      .rightBoxs {
+        display: flex;
+        align-items: center;
+        img {
+          width: 14px;
+          height: 14px;
+          margin-left: 13px;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+  .el-dialog__footer {
+    padding: 0;
+    .dialog-footer {
+      padding: 0px 40px;
+      height: 70px;
+      border-top: 1px solid #e2e2e2;
+      display: flex;
+      align-items: center;
+      justify-content: flex-end;
+    }
+  }
+}
+/deep/.radioTables > .el-radio__label {
+  display: none;
+}
+.fgx {
+  border-bottom: 1px dashed #999;
+  margin-bottom: 20px;
+}
+.flex_s {
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+  & > div {
+    flex-shrink: 0;
+    width: 33%;
+    font-weight: bold;
+  }
+}
+</style>

+ 34 - 0
src/views/education/classManageMent/classList/manageClass/index.vue

@@ -0,0 +1,34 @@
+<template>
+  <div id="manageClass">
+    <el-tabs type="border-card" v-model="activeName" style="margin-top: 20px">
+      <el-tab-pane label="基本信息" name="1">
+        <base-info />
+      </el-tab-pane>
+      <el-tab-pane label="学员记录" name="2">
+        <student-records />
+      </el-tab-pane>
+      <el-tab-pane label="班主任记录" name="3">
+        <teacher-records />
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+import baseInfo from "./baseInfo.vue";
+import studentRecords from "./studentRecords";
+import teacherRecords from "./teacherRecords";
+export default {
+  components: { baseInfo, studentRecords, teacherRecords },
+  data() {
+    return {
+      activeName: "1",
+    };
+  },
+  mounted() {},
+  methods: {},
+};
+</script>
+
+<style lang="less" scoped>
+</style>

+ 138 - 0
src/views/education/classManageMent/classList/manageClass/studentRecords.vue

@@ -0,0 +1,138 @@
+<template>
+  <div id="studentRecords">
+    <div class="studentSty">
+      <el-table
+        ref="multipleTable"
+        :data="tableData"
+        border
+        :header-cell-style="{
+          'background-color': '#eee',
+          padding: '8px',
+          color: '#333',
+        }"
+      >
+        <template v-for="(item, index) in tableList">
+          <el-table-column
+            v-if="item.scope !== 'inputs'"
+            :width="item.width"
+            :key="index"
+            :label="item.label"
+            align="center"
+            :show-overflow-tooltip="true"
+            header-align="center"
+          >
+            <template slot-scope="scope">
+              <span v-if="item.scope === 'status'" style="color:#F56C6C;">
+                {{
+                  scope.row[item.prop] === 1
+                    ? "进入"
+                    : scope.row[item.prop] === 0
+                    ? "移除"
+                    : "未知"
+                }}
+              </span>
+              <span v-else>{{ scope.row[item.prop] }}</span></template
+            >
+          </el-table-column></template
+        >
+      </el-table>
+      <pagination
+        :total="total"
+        :pageSize="formData.pageSize"
+        :currentPage="formData.pageNum"
+        @handleSizeChange="handleSizeChange"
+        @handleCurrentChange="handleCurrentChange"
+      />
+      <div class="align_center">
+        <el-button @click="backPage">返回</el-button>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import pagination from "@/components/pagination";
+export default {
+  components: { pagination },
+  data() {
+    return {
+      tableData: [],
+      tableList: [
+        {
+          label: "记录类型",
+          prop: "status",
+          scope:"status"
+        },
+        {
+          label: "学员编码",
+          prop: "code",
+        },
+        {
+          label: "学员姓名",
+          prop: "realName",
+        },
+        {
+          label: "学员身份证",
+          prop: "idCard",
+        },
+        {
+          label: "绑定手机号码",
+          prop: "telPhone",
+        },
+        // {
+        //   label: "操作时间",
+        //   prop: "year",
+        // },
+        {
+          label: "操作者",
+          prop: "createBy",
+        },
+      ],
+      total:0,
+      formData: {
+        pageSize: 10,
+        pageNum: 1,
+      },
+    };
+  },
+  mounted() {
+    this.search();
+  },
+  methods: {
+    search() {
+      this.loading = true;
+      this.$api.inquireGradegradelistUserList(this.formData).then((res) => {
+        this.tableData = res.rows;
+        this.total = res.total;
+      }).finally(()=>{
+        this.loading = false;
+      })
+    },
+    handleSizeChange(v) {
+      this.formData.pageSize = v;
+      this.formData.pageNum = 1;
+      this.search();
+    },
+    handleCurrentChange(v) {
+      this.formData.pageNum = v;
+      this.search();
+    },
+    //返回
+    backPage() {
+      this.$router.go(-1);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.studentSty {
+  background-color: #eee;
+  padding: 20px 10px;
+  margin-top: 16px;
+}
+.align_center {
+  margin-top: 20px;
+  text-align: center;
+}
+</style>

+ 155 - 0
src/views/education/classManageMent/classList/manageClass/teacherRecords.vue

@@ -0,0 +1,155 @@
+<template>
+  <div id="teacherRecords">
+    <div class="teacherSty">
+      <el-table
+        ref="multipleTable"
+        :data="tableData"
+        border
+        :header-cell-style="{
+          'background-color': '#eee',
+          padding: '8px',
+          color: '#333',
+        }"
+      >
+        <template v-for="(item, index) in tableList">
+          <el-table-column
+            v-if="item.scope !== 'inputs'"
+            :width="item.width"
+            :key="index"
+            :label="item.label"
+            align="center"
+            :show-overflow-tooltip="true"
+            header-align="center"
+          >
+            <template slot-scope="scope">
+              <span v-if="item.scope === 'status'">
+                {{
+                  scope.row[item.prop] === 1
+                    ? "有效"
+                    : scope.row[item.prop] === 0
+                    ? "无效"
+                    : "未知"
+                }}
+              </span>
+              <div v-else-if="item.scope === 'teshu'">
+                <span v-if="scope.row[item.prop] === 1">
+                  进行中:({{
+                    $methodsTools.onlyForma(scope.row[item.prop1]) + ",至今"
+                  }})
+                </span>
+                <span v-if="scope.row[item.prop] === 0">
+                  无效:({{
+                    $methodsTools.onlyForma(scope.row[item.prop1]) +
+                    "," +
+                    $methodsTools.onlyForma(scope.row[item.prop2])
+                  }})
+                </span>
+              </div>
+              <span v-else-if="item.scope === 'aTime'">
+                {{ $methodsTools.onlyForma(scope.row[item.prop]) }}
+              </span>
+              <span v-else>{{ scope.row[item.prop] }}</span></template
+            >
+          </el-table-column></template
+        >
+      </el-table>
+      <pagination
+        :total="total"
+        :pageSize="formData.pageSize"
+        :currentPage="formData.pageNum"
+        @handleSizeChange="handleSizeChange"
+        @handleCurrentChange="handleCurrentChange"
+      />
+      <div class="align_center">
+        <el-button @click="backPage">返回</el-button>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import pagination from "@/components/pagination";
+export default {
+  components: { pagination },
+  data() {
+    return {
+      tableData: [],
+      tableList: [
+        {
+          label: "账号编码",
+          prop: "code",
+        },
+        {
+          label: "真实姓名",
+          prop: "sysUserName",
+        },
+        {
+          label: "角色",
+          prop: "role",
+        },
+        {
+          label: "任职状态",
+          prop1: "startTime",
+          prop2: "endTime",
+          prop: "status",
+          scope: "teshu",
+          width:"330px"
+        },
+        {
+          label: "指派时间",
+          prop: "startTime",
+          scope: "aTime",
+        },
+        {
+          label: "指派操作者",
+          prop: "createBy",
+        },
+      ],
+      total: 0,
+      formData: {
+        pageSize: 10,
+        pageNum: 1,
+      },
+    };
+  },
+  mounted() {
+    this.search();
+  },
+  methods: {
+    search() {
+      this.loading = true;
+      this.$api.inquireGradegradelistSysList(this.formData).then((res) => {
+        this.tableData = res.rows;
+        this.total = res.total;
+      }).finally(()=>{
+        this.loading = false;
+      })
+    },
+    handleSizeChange(v) {
+      this.formData.pageSize = v;
+      this.formData.pageNum = 1;
+      this.search();
+    },
+    handleCurrentChange(v) {
+      this.formData.pageNum = v;
+      this.search();
+    },
+    //返回
+    backPage() {
+      this.$router.go(-1);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.teacherSty {
+  background-color: #eee;
+  padding: 20px 10px;
+  margin-top: 16px;
+}
+.align_center {
+  margin-top: 20px;
+  text-align: center;
+}
+</style>

+ 215 - 0
src/views/education/classManageMent/studentMenu/index.vue

@@ -0,0 +1,215 @@
+<template>
+  <div id="studentMenu">
+    <div>
+      <el-button
+        :size="size"
+        :type="active === 1 ? 'primary' : ''"
+        @click="changeActive(1)"
+        >班级学员</el-button
+      >
+      <el-button
+        :size="size"
+        :type="active === 2 ? 'primary' : ''"
+        @click="changeActive(2)"
+        >学时管理</el-button
+      >
+    </div>
+    <table-list
+      :tableSets="tableSet"
+      :tableData="tableData"
+      :navText="navText"
+      @addClick="addClick"
+      :loading="loading"
+      @editInfo="editInfo"
+    >
+      <template slot="btn" slot-scope="props">
+        <el-button type="text" @click="addClick(props.scope.row, 2)"
+          >详情</el-button
+        >
+        <el-button type="text" @click="addClick(props.scope.row, 3)"
+          >学员管理</el-button
+        >
+        <el-button type="text" @click="del(props.scope.row)">删除</el-button>
+      </template>
+    </table-list>
+    <pagination
+      :total="total"
+      :pageSize="formData.pageSize"
+      :currentPage="formData.pageNum"
+      @handleSizeChange="handleSizeChange"
+      @handleCurrentChange="handleCurrentChange"
+    />
+  </div>
+</template>
+
+<script>
+import tableList from "@/components/tableList";
+import pagination from "@/components/pagination";
+export default {
+  components: { tableList, pagination },
+  data() {
+    return {
+      size: "small",
+      active: 1,
+      loading: false, //当前表单加载是否加载动画
+      navText: {
+        title: "班级管理",
+        index: 0,
+        ch: "条",
+        num: false,
+        choice: true,
+        addHide: false,
+        backFatherBtn: {
+          status: false,
+          title: "未定义",
+        },
+      },
+      formData: {
+        status: "0,1",
+        pageSize: 10,
+        pageNum: 1,
+      },
+      // 表单
+      tableSet: [
+        {
+          label: "学员编码",
+          prop: "code",
+          hidden: true,
+        },
+        {
+          label: "学员姓名",
+          prop: "code",
+          hidden: true,
+        },
+        {
+          label: "学员身份证",
+          prop: "code",
+          hidden: true,
+        },
+        {
+          label: "绑定手机号码",
+          prop: "code",
+          hidden: true,
+        },
+        {
+          label: "资料变更状态",
+          prop: "code",
+          hidden: true,
+        },
+        {
+          label: "学时",
+          prop: "code",
+          hidden: true,
+        },
+        {
+          label: "视频学习进度(节)",
+          prop: "code",
+          hidden: true,
+        },
+        {
+          label: "做题进度(章卷)",
+          prop: "code",
+          hidden: true,
+        },
+        {
+          label: "学时审批状态",
+          prop: "code",
+          hidden: true,
+        },
+        {
+          label: "学习有效期",
+          prop: "learningStatus",
+          prop1: "learningTimeStart",
+          hidden: true,
+          scope: "classTimeTypes",
+          width: "120px",
+        },
+        {
+          label: "班级有效期",
+          prop1: "classStartTime",
+          prop2: "classEndTime",
+          hidden: true,
+          Diszing: false,
+          scope: "TimeLists",
+          width: "120px",
+        },
+        {
+          label: "结业状态",
+          prop: "code",
+          hidden: true,
+        },
+      ],
+      tableData: [], //表单数据
+      total: 0, //一共多少条
+    };
+  },
+  methods: {
+    editInfo(v) {
+      this.addClick(v, 2);
+    },
+    addClick(v, int) {
+      // int = 2详情 3学员管理
+      if (v === undefined) {
+        // 添加班级
+        this.$router.push({
+          path: "addClass",
+        });
+      } else {
+        if (int === 2) {
+          //班级详情
+          this.$router.push({
+            path:'manageClass',
+            query:{
+              id:v.classId
+            }
+          })
+        }
+        if (int === 3) {
+          // 学员管理
+          this.$router.push({
+            path: "studentMenu",
+            query: {
+              id: v.classId,
+            },
+          });
+        }
+      }
+    },
+    changeActive(int) {
+      this.active = int;
+    },
+    search(int) {
+      this.loading = true;
+      if (int === 1) {
+        this.formData.pageNum = 1;
+      }
+      if (int === 2) {
+        this.formData = {
+          status: "0,1",
+          pageSize: 10,
+          pageNum: 1,
+        };
+      }
+      this.$api.inquireGradegradeList(this.formData).then((res) => {
+        this.tableData = res.rows;
+        this.total = res.total;
+        // this.navText.index = res.total;
+      }).finally(()=>{
+        this.loading = false;
+      })
+    },
+    handleSizeChange(v) {
+      this.formData.pageSize = v;
+      this.formData.pageNum = 1;
+      this.search();
+    },
+    handleCurrentChange(v) {
+      this.formData.pageNum = v;
+      this.search();
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+</style>

+ 326 - 0
src/views/education/studentManageMent/studentList/index.vue

@@ -0,0 +1,326 @@
+<template>
+  <div id="studentList">
+    <search-box-new
+      ref="searchBox"
+      :formData="formData"
+      :formList="formList"
+      @search="search"
+      @init="init"
+    />
+    <table-list
+      :tableSets="tableSet"
+      :tableData="tableData"
+      :navText="navText"
+      @addClick="addClick"
+      :loading="loading"
+      @editInfo="editInfo"
+    >
+      <template slot="btn" slot-scope="props">
+        <el-button type="text" @click="addClick(props.scope.row, 2)"
+          >详情</el-button
+        >
+        <!-- <el-button type="text" @click="addClick(props.scope.row, 3)"
+          >选班</el-button
+        > -->
+      </template>
+    </table-list>
+    <pagination
+      :total="total"
+      :pageSize="formData.pageSize"
+      :currentPage="formData.pageNum"
+      @handleSizeChange="handleSizeChange"
+      @handleCurrentChange="handleCurrentChange"
+    />
+  </div>
+</template>
+
+<script>
+import searchBoxNew from "@/components/searchBoxNew";
+import tableList from "@/components/tableList";
+import pagination from "@/components/pagination";
+export default {
+  components: { searchBoxNew, tableList, pagination },
+  data() {
+    return {
+      loading: false, //当前表单加载是否加载动画
+      navText: {
+        title: "学员管理",
+        index: 0,
+        ch: "条",
+        num: false,
+        choice: true,
+        addHide: true,
+        backFatherBtn: {
+          status: false,
+          title: "未定义",
+        },
+      },
+      //搜索
+      formList: [
+        {
+          prop: "educationId",
+          placeholder: "教育类型",
+          scope: "educationType",
+        },
+        {
+          prop: "businessId",
+          placeholder: "业务层次",
+          scope: "businessLevel",
+        },
+        {
+          prop: "subjectId",
+          placeholder: "科目",
+          scope: "sujectType",
+        },
+        {
+          prop: "publishStatus",
+          placeholder: "发布状态",
+          scope: "paperType",
+        },
+        {
+          prop: "prefixName",
+          placeholder: "请输入名称前缀",
+        },
+        {
+          prop: "examName",
+          placeholder: "请输入试卷名称",
+        },
+      ],
+      formData: {
+        status: "0,1",
+        pageSize: 10,
+        pageNum: 1,
+      },
+      // 表单
+      tableSet: [
+        {
+          label: "学员编码",
+          prop: "studentCode",
+          hidden: true,
+        },
+        {
+          label: "学员姓名",
+          prop: "realname",
+          hidden: true,
+          scope: "editInfo",
+        },
+        {
+          label: "学员身份证",
+          prop: "idCard",
+          hidden: true,
+        },
+        {
+          label: "绑定手机号",
+          prop: "telphone",
+          hidden: true,
+        },
+        {
+          label: "绑定微信",
+          prop: "nickname",
+          hidden: true,
+        },
+        {
+          label: "创建时间",
+          prop: "createTime",
+          hidden: true,
+          scope:"aTimeList"
+        },
+        {
+          label: "所属班级",
+          prop: "classGradeUserGoodsVoList",
+          hidden: true,
+          scope:"classNums"
+        },
+      ],
+      tableData: [], //表单数据
+      total: 0, //一共多少条
+    };
+  },
+  mounted() {
+    this.search();
+  },
+  methods: {
+    editInfo(v) {
+      this.addClick(v, 2);
+    },
+    search(int) {
+      this.loading = true;
+      if (int === 1) {
+        this.formData.pageNum = 1;
+      }
+      if (int === 2) {
+        this.formData = {
+          status: "0,1",
+          pageSize: 10,
+          pageNum: 1,
+        };
+      }
+      this.$api.inquiregradestudentlistStudent(this.formData).then((res) => {
+        this.tableData = res.rows;
+        this.total = res.total;
+        this.navText.index = res.total;
+      }).finally(()=>{
+        this.loading = false;
+      })
+    },
+    init() {
+      this.search(2);
+    },
+    del(v) {
+      this.$alert(
+        "确定删除此内容?<br />内容删除后将无法恢复,请慎重考虑",
+        "提示",
+        {
+          dangerouslyUseHTMLString: true,
+        }
+      )
+        .then(() => {
+          var data = {
+            chapterExamId: v.chapterExamId,
+            status: -1,
+          };
+          this.$api.editbankchapter(data).then((res) => {
+            this.$message.success("删除成功");
+            this.search();
+          });
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消删除",
+          });
+        });
+    },
+    addClick(v, int) {
+      // int = 2详情 3选班
+      if (v === undefined) {
+        // 添加学员
+        // this.$router.push({
+        //   path: "addClass",
+        // });
+      } else {
+        if (int === 2) {
+          //学员详情
+          this.$router.push({
+            path:'studentXQ',
+            query:{
+              id:v.userId
+            }
+          })
+        }
+        if (int === 3) {
+          // 选班
+          this.$router.push({
+            path: "studentMenu",
+            query: {
+              id: v.userId,
+            },
+          });
+        }
+      }
+    },
+    handleSizeChange(v) {
+      this.formData.pageSize = v;
+      this.formData.pageNum = 1;
+      this.search();
+    },
+    handleCurrentChange(v) {
+      this.formData.pageNum = v;
+      this.search();
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+/deep/.el-button {
+  border-radius: 8px;
+}
+/deep/.el-dialog {
+  border-radius: 8px;
+  .el-dialog__header {
+    padding: 0;
+    .hearders {
+      height: 40px;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      padding: 0px 18px 0px 20px;
+      border-bottom: 1px solid #e2e2e2;
+      .leftTitle {
+        font-size: 14px;
+        font-weight: bold;
+        color: #2f4378;
+      }
+      .rightBoxs {
+        display: flex;
+        align-items: center;
+        img {
+          width: 14px;
+          height: 14px;
+          margin-left: 13px;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+  .el-dialog__footer {
+    padding: 0;
+    .dialog-footer {
+      padding: 0px 40px;
+      height: 70px;
+      border-top: 1px solid #e2e2e2;
+      display: flex;
+      align-items: center;
+      justify-content: flex-end;
+    }
+  }
+}
+.imgBox {
+  width: 100%;
+  // height: 210px;
+  border: 1px solid #e2e2e2;
+  border-radius: 8px;
+  padding: 8px 8px 3px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  .imgLabel {
+    flex: 1;
+    width: 100%;
+    border: 1px dotted #e2e2e2;
+    color: #999;
+    font-size: 14px;
+    cursor: pointer;
+    border-radius: 8px;
+    .msPhoto {
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      max-width: 100%;
+      max-height: 270px;
+      img {
+        max-width: 100%;
+        max-height: 270px;
+      }
+    }
+    .imgbbx {
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      justify-content: center;
+      width: 100%;
+      height: 100%;
+      i {
+        font-weight: bold;
+        margin: 14px 0;
+        font-size: 24px;
+      }
+    }
+  }
+  p {
+    margin: 5px 0px;
+  }
+}
+</style>
+

+ 422 - 0
src/views/education/studentManageMent/studentXQ/BankQuestionPassRecord.vue

@@ -0,0 +1,422 @@
+<template>
+  <div id="BankQuestionPassRecord">
+    <el-table
+      :data="tableData"
+      style="width: 100%"
+      default-expand-all
+      :header-cell-style="{
+        'background-color': 'skyblue',
+        padding: '8.1px',
+        color: '#333',
+      }"
+    >
+      <el-table-column type="expand" width="40px">
+        <template slot-scope="scope">
+          <el-table
+            border
+            :data="scope.row.examSonStudyRecordVos"
+            style="width: 100%"
+            default-expand-all
+            :header-cell-style="{
+              'background-color': 'rgb(255,255,204)',
+              padding: '8px',
+              color: '#333',
+            }"
+          >
+            <template v-for="(item, index) in tableSetChild">
+              <el-table-column
+                :width="item.width"
+                :key="index"
+                :label="item.label"
+                align="center"
+              >
+                <template slot-scope="scope">
+                  <span v-if="item.scope === 'types'">
+                    {{
+                      scope.row[item.prop] === 1
+                        ? "开课"
+                        : scope.row[item.prop] === 0
+                        ? "未开课"
+                        : "未知"
+                    }}
+                  </span>
+                  <span v-else-if="item.scope === 'sectionType'">
+                    {{ getTypes(scope.row[item.prop]) }}
+                  </span>
+                  <span v-else-if="item.scope === 'studentStatus'">
+                    已完成{{ scope.row[item.prop1] }}张试卷
+                    <span style="color: green">{{
+                      compons(scope.row[item.prop1], scope.row[item.prop2])
+                    }}</span>
+                  </span>
+                  <span v-else> {{ scope.row[item.prop] }} </span>
+                </template>
+              </el-table-column>
+            </template>
+            <el-table-column
+              label="操作"
+              align="center"
+              fixed="right"
+              width="100px"
+            >
+              <!-- <template slot-scope="scope">
+                <el-button
+                  type="text"
+                  @click="wantInfo(scope.row, scope.$index)"
+                  >查看</el-button
+                >
+              </template> -->
+            </el-table-column>
+          </el-table>
+        </template>
+      </el-table-column>
+      <template v-for="(item, index) in tableSet">
+        <el-table-column
+          :width="item.width"
+          :key="index"
+          :label="item.label"
+          align="center"
+        >
+          <template slot-scope="scope">
+            <span v-if="item.scope === 'yewu'">
+              {{ scope.row[item.prop1] }}-{{ scope.row[item.prop2] }}-{{
+                scope.row[item.prop3]
+              }}
+            </span>
+            <span v-else-if="item.scope === 'time'">
+              {{ $methodsTools.onlyForma(scope.row[item.prop]) }}
+            </span>
+            <span v-else-if="item.scope === 'moreTime'">
+              {{ $methodsTools.onlyForma(scope.row[item.prop1]) }}
+              {{ $methodsTools.onlyForma(scope.row[item.prop2]) }}-
+            </span>
+            <span v-else-if="item.scope === 'computes'">
+              {{ (scope.row[item.prop1] / scope.row[item.prop2]) * 100 }}%
+            </span>
+            <span v-else>
+              {{ scope.row[item.prop] }}{{ item.ch ? item.ch : "" }}
+            </span>
+          </template>
+        </el-table-column>
+      </template>
+    </el-table>
+    <el-dialog
+      :visible.sync="dialogVisible"
+      width="830px"
+      :show-close="false"
+      :close-on-click-modal="false"
+    >
+      <div slot="title" class="hearders">
+        <div class="leftTitle">学习记录</div>
+        <div class="rightBoxs">
+          <img src="@/assets/images/Close@2x.png" alt="" @click="close" />
+        </div>
+      </div>
+      <div>
+        <el-table
+          border
+          :data="RemardList"
+          style="width: 100%"
+          default-expand-all
+          :header-cell-style="{
+            'background-color': 'rgb(255,255,204)',
+            padding: '8px',
+            color: '#333',
+          }"
+        >
+          <el-table-column label="序号" align="center" type="index" width="70">
+          </el-table-column>
+          <template v-for="(item, index) in studyListRemard">
+            <el-table-column
+              :width="item.width"
+              :key="index"
+              :label="item.label"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <span v-if="item.scope === 'studyTime'">
+                  {{ $methodsTools.onlyForma(scope.row[item.prop1])
+                  }}{{
+                    scope.row[item.prop1] && scope.row[item.prop2] ? "至" : ""
+                  }}
+                  {{ $methodsTools.onlyForma(scope.row[item.prop2]) }}
+                </span>
+                <span v-else-if="item.scope === 'status'">
+                  {{
+                    scope.row[item.prop] === 1
+                      ? "完成"
+                      : scope.row[item.prop] === 0
+                      ? "未学习"
+                      : scope.row[item.prop] === 2
+                      ? "学习中"
+                      : "未知"
+                  }}
+                </span>
+                <span v-else-if="item.scope === 'computerTimes'">
+                  {{
+                    $methodsTools.humandate(
+                      scope.row[item.prop1],
+                      scope.row[item.prop2]
+                    )
+                  }}
+                </span>
+                <span v-else> {{ scope.row[item.prop] }} </span>
+              </template>
+            </el-table-column>
+          </template>
+        </el-table>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="close">取 消</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "studyRecord",
+  data() {
+    return {
+      dialogVisible: false,
+      tableDataChild: {},
+      tableSetChild: [
+        {
+          label: "题卷名称",
+          prop: "questionName",
+          width: "160px",
+        },
+        {
+          label: "科目",
+          prop: "subjectName",
+        },
+        {
+          label: "模块卷",
+          prop: "moduleNum",
+        },
+        {
+          label: "章卷",
+          prop: "chapterNum",
+        },
+        {
+          label: "试卷",
+          prop: "examNum",
+        },
+        {
+          label: "题目",
+          prop: "questionNum",
+        },
+        {
+          label: "试卷类型",
+          prop: "sectionType",
+          scope: "sectionType",
+        },
+        {
+          label: "学习状态",
+          prop1: "recordNum",
+          prop2: "examNum",
+          scope: "studentStatus",
+        },
+      ],
+      tableData: [],
+      tableSet: [
+        {
+          label: "商品编码",
+          prop: "code",
+          width: "160px",
+        },
+        {
+          label: "年份",
+          prop: "year",
+        },
+        {
+          label: "商品名称",
+          prop: "goodsName",
+          width: "140px",
+        },
+        {
+          label: "业务层级",
+          prop1: "educationName",
+          prop2: "projectName",
+          prop3: "businessName",
+          scope: "yewu",
+          width: "260px",
+        },
+        {
+          label: "学时",
+          prop: "classHours",
+        },
+        {
+          label: "做题进度(试卷)",
+          prop1: "stuAllNum",
+          prop2: "examNum",
+          scope: "computes",
+          width: "140px",
+          ch: "%",
+        },
+        {
+          label: "做题开始时间",
+          prop: "startTime",
+          scope: "time",
+          width: "140px",
+        },
+        {
+          label: "做题结束时间",
+          prop: "endTime",
+          scope: "time",
+          width: "140px",
+        },
+        {
+          label: "学习有效期",
+          prop1: "studyStartTime",
+          prop2: "studyEndTime",
+          scope: "moreTime",
+          width: "140px",
+        },
+      ],
+      studyListRemard: [
+        {
+          label: "模块标题",
+          prop: "moduleName",
+          width: "100px",
+        },
+        {
+          label: "章标题",
+          prop: "chapterName",
+          width: "100px",
+        },
+        {
+          label: "节标题",
+          prop: "sectionName",
+        },
+        {
+          label: "节时长",
+          prop: "durationTime",
+        },
+        {
+          label: "学习时间",
+          prop1: "startTime",
+          prop2: "endTime",
+          scope: "studyTime",
+          width: "310px",
+        },
+        {
+          label: "学习时长",
+          prop1: "startTime",
+          prop2: "endTime",
+          width: "100px",
+          scope: "computerTimes",
+        },
+        {
+          label: "学习状态",
+          prop: "status",
+          scope: "status",
+          width: "90px",
+        },
+      ], //学习记录表格对应column
+      RemardList: [], //学习记录列表
+    };
+  },
+  mounted() {
+    this.$api
+      .inquiregradestudentlistExam({ userId: this.$route.query.id })
+      .then((res) => {
+        this.tableData = res.rows;
+      });
+  },
+  methods: {
+    compons(int1, int2) {
+      if (int1 === 0 && int2 === 0) {
+        return 0 + "%";
+      }
+      let result = (int1 / int2) * 100;
+      return result + "%";
+    },
+    //改变返回值
+    getTypes(arr) {
+      if (!arr) {
+        return "暂无";
+      }
+      let arrays = arr.split(",").map(Number);
+      let str = [];
+      for (let i = 0; i < arrays.length; i++) {
+        if (arrays[i] == 1) {
+          str.push("直播");
+        }
+        if (arrays[i] == 2) {
+          str.push("回放");
+        }
+        if (arrays[i] == 3) {
+          str.push("录播");
+        }
+      }
+      return str.toString();
+    },
+    //关闭窗口
+    close() {
+      this.dialogVisible = false;
+    },
+    //获取弹出窗内容
+    wantInfo(item, index) {
+      this.$api
+        .inquiregradestudentlistSection({
+          userId: this.$route.query.id,
+          courseId: item.courseId,
+        })
+        .then((res) => {
+          this.RemardList = res.rows;
+          this.dialogVisible = true;
+        });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+/deep/.el-button {
+  border-radius: 8px;
+}
+/deep/.el-dialog {
+  border-radius: 8px;
+  .el-dialog__header {
+    padding: 0;
+    .hearders {
+      height: 40px;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      padding: 0px 18px 0px 20px;
+      border-bottom: 1px solid #e2e2e2;
+      .leftTitle {
+        font-size: 14px;
+        font-weight: bold;
+        color: #2f4378;
+      }
+      .rightBoxs {
+        display: flex;
+        align-items: center;
+        img {
+          width: 14px;
+          height: 14px;
+          margin-left: 13px;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+  .el-dialog__footer {
+    padding: 0;
+    .dialog-footer {
+      padding: 0px 40px;
+      height: 70px;
+      border-top: 1px solid #e2e2e2;
+      display: flex;
+      align-items: center;
+      justify-content: flex-end;
+    }
+  }
+}
+.demo-table-expand {
+  font-size: 0;
+}
+</style>

+ 181 - 0
src/views/education/studentManageMent/studentXQ/classRecord.vue

@@ -0,0 +1,181 @@
+<template>
+  <div id="classRecord">
+    <div class="studentSty">
+      <el-table
+        ref="multipleTable"
+        :data="tableData"
+        border
+        :header-cell-style="{
+          'background-color': '#eee',
+          padding: '8px',
+          color: '#333',
+        }"
+      >
+        <template v-for="(item, index) in tableList">
+          <el-table-column
+            v-if="item.scope !== 'inputs'"
+            :width="item.width"
+            :key="index"
+            :label="item.label"
+            align="center"
+            :show-overflow-tooltip="true"
+            header-align="center"
+          >
+            <template slot-scope="scope">
+              <span v-if="item.scope === 'status'">
+                {{
+                  scope.row[item.prop] === 1
+                    ? "进入"
+                    : scope.row[item.prop] === 0
+                    ? "移除"
+                    : "未知"
+                }}
+              </span>
+              <span v-else-if="item.scope === 'Stype'">
+                {{
+                  scope.row[item.prop] === 1
+                    ? "有效"
+                    : scope.row[item.prop] === 0
+                    ? "无效"
+                    : "未知"
+                }}
+              </span>
+              <span v-else-if="item.scope === 'yewu'">
+                {{ scope.row[item.prop1] }}-{{ scope.row[item.prop2] }}-{{
+                  scope.row[item.prop3]
+                }}
+              </span>
+              <span v-else-if="item.scope === 'time'">{{
+                $methodsTools.onlyForma(scope.row[item.prop])
+              }}</span>
+              <span v-else>{{ scope.row[item.prop] }}</span></template
+            >
+          </el-table-column></template
+        >
+      </el-table>
+      <pagination
+        :total="total"
+        :pageSize="formData.pageSize"
+        :currentPage="formData.pageNum"
+        @handleSizeChange="handleSizeChange"
+        @handleCurrentChange="handleCurrentChange"
+      />
+      <div class="align_center">
+        <el-button @click="backPage">返回</el-button>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import pagination from "@/components/pagination";
+export default {
+  components: { pagination },
+  data() {
+    return {
+      tableData: [],
+      tableList: [
+        {
+          label: "记录类型",
+          prop: "status",
+          scope: "status",
+          width:"120px",
+        },
+        {
+          label: "商品编码",
+          prop: "goodsCode",
+          width:"120px",
+        },
+        {
+          label: "年份",
+          prop: "year",
+        },
+        {
+          label: "商品名称",
+          prop: "goodsName",
+          width:"120px",
+        },
+        {
+          label: "商品业务层级",
+          prop1: "educationName",
+          prop2: "projectName",
+          prop3: "businessName",
+          scope: "yewu",
+          width:"280px",
+        },
+        {
+          label: "班级编码",
+          prop: "gradeCode",
+          width:"120px",
+        },
+        {
+          label: "班级名称",
+          prop: "gradeName",
+          width:"120px",
+        },
+        {
+          label: "班级状态",
+          prop: "gradeStatus",
+          scope: "Stype",
+          width:"100px",
+        },
+        {
+          label: "操作时间",
+          prop: "createTime",
+          scope: "time",
+          width:"180px",
+        },
+        {
+          label: "操作者",
+          prop: "createBy",
+        },
+      ],
+      total: 0,
+      formData: {
+        userId:this.$route.query.id,
+        pageSize: 10,
+        pageNum: 1,
+      },
+    };
+  },
+  mounted() {
+    this.search();
+  },
+  methods: {
+    search() {
+      this.loading = true;
+      this.$api.inquiregradestudentlistUser(this.formData).then((res) => {
+        this.tableData = res.rows;
+        this.total = res.total;
+      }).finally(()=>{
+        this.loading = false;
+      })
+    },
+    handleSizeChange(v) {
+      this.formData.pageSize = v;
+      this.formData.pageNum = 1;
+      this.search();
+    },
+    handleCurrentChange(v) {
+      this.formData.pageNum = v;
+      this.search();
+    },
+    //返回
+    backPage() {
+      this.$router.go(-1);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.studentSty {
+  background-color: #eee;
+  padding: 20px 10px;
+  margin-top: 16px;
+}
+.align_center {
+  margin-top: 20px;
+  text-align: center;
+}
+</style>

+ 46 - 0
src/views/education/studentManageMent/studentXQ/index.vue

@@ -0,0 +1,46 @@
+<template>
+  <div id="studentXQ">
+    <el-tabs type="border-card" v-model="activeName" style="margin-top: 20px">
+      <el-tab-pane label="基本信息" name="commodInfo"
+        ><student-base-manage
+      /></el-tab-pane>
+      <el-tab-pane label="网课-学习记录" name="studentInfo"
+        ><study-record
+      /></el-tab-pane>
+      <el-tab-pane label="题库通-做题记录" name="chargeInfo"
+        ><bank-question-pass-record
+      /></el-tab-pane>
+      <el-tab-pane label="班级记录" name="classRecode"
+        ><class-record
+      /></el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+import BankQuestionPassRecord from "./BankQuestionPassRecord.vue";
+import classRecord from "./classRecord.vue";
+import studentBaseManage from "./studentBaseManage.vue";
+import studyRecord from "./studyRecord.vue";
+export default {
+  components: {
+    BankQuestionPassRecord,
+    classRecord,
+    studentBaseManage,
+    studyRecord,
+  },
+  data() {
+    return {
+      activeName: "commodInfo",
+    };
+  },
+  methods: {},
+};
+</script>
+
+<style lang="less" scoped>
+.fgx {
+  border-bottom: 1px dotted #9a9a9a;
+  margin-bottom: 12px;
+}
+</style>

+ 205 - 0
src/views/education/studentManageMent/studentXQ/studentBaseManage.vue

@@ -0,0 +1,205 @@
+<template>
+  <div id="studentBaseManage">
+    <div class="YZsty">
+      <el-form
+        label-position="right"
+        label-width="120px"
+        :model="listData"
+        ref="listData"
+        :rules="rules"
+      >
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="学员编码" prop="studentCode">
+              <el-input disabled v-model="listData.studentCode"></el-input>
+            </el-form-item>
+            <el-form-item label="绑定手机号" prop="telphone">
+              <el-input disabled v-model="listData.telphone"></el-input>
+            </el-form-item>
+            <el-form-item label="姓名" prop="realname">
+              <el-input disabled v-model="listData.realname"></el-input>
+            </el-form-item>
+            <el-form-item label="身份证号码" prop="idCard">
+              <el-input disabled v-model="listData.idCard"></el-input>
+            </el-form-item>
+            <el-form-item label="性别" prop="sex">
+              <el-radio-group v-model="listData.sex">
+                <el-radio :label="1">男</el-radio>
+                <el-radio :label="2">女</el-radio>
+              </el-radio-group>
+            </el-form-item>
+            <el-form-item label="出生日期" prop="userBirth">
+              <el-date-picker
+                v-model="listData.userBirth"
+                type="date"
+                placeholder="选择出生日期"
+                format="yyyy 年 MM 月 dd 日"
+                value-format="yyyy-MM-dd"
+              >
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item label="微信" prop="nickname">
+              <el-input disabled v-model="listData.nickname"></el-input>
+            </el-form-item>
+            <el-form-item label="邮箱" prop="email">
+              <el-input v-model="listData.email"></el-input>
+            </el-form-item>
+            <el-form-item label="学历" prop="eduLevel">
+              <el-select v-model="listData.eduLevel" placeholder="请选择学历">
+                <el-option
+                  v-for="(item, index) in dictManages['edu_level']"
+                  :key="index"
+                  :label="item"
+                  :value="item"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="工作年限">
+              <el-select
+                v-model="listData.workYear"
+                placeholder="请选择工作年限"
+              >
+                <el-option
+                  v-for="(item, index) in dictManages['working_years']"
+                  :key="index"
+                  :label="item"
+                  :value="item"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="在职状况" prop="jobStatus">
+              <el-radio-group v-model="listData.jobStatus">
+                <el-radio :label="1">在职</el-radio>
+                <el-radio :label="2">离职</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="民族" prop="nation">
+              <el-input v-model="listData.nation"></el-input>
+            </el-form-item>
+            <el-form-item label="籍贯" prop="nativePlace">
+              <el-input v-model="listData.nativePlace"></el-input>
+            </el-form-item>
+            <el-form-item label="政治面貌" prop="politic">
+              <el-select
+                v-model="listData.politic"
+                placeholder="请选择政治面貌"
+              >
+                <el-option
+                  v-for="(item, index) in dictManages['politic_status']"
+                  :key="index"
+                  :label="item"
+                  :value="item"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="婚姻状况" prop="marry">
+              <el-select v-model="listData.marry" placeholder="请选择婚姻状况">
+                <el-option
+                  v-for="(item, index) in dictManages['marry_status']"
+                  :key="index"
+                  :label="item"
+                  :value="item"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="户口性质" prop="census">
+              <el-select v-model="listData.census" placeholder="请选择户口性质">
+                <el-option
+                  v-for="item in options"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="户口所在地" prop="houseAddress">
+              <el-input v-model="listData.houseAddress"></el-input>
+            </el-form-item>
+            <el-form-item label="联系地址" prop="contactAddress">
+              <el-input v-model="listData.contactAddress"></el-input>
+            </el-form-item>
+            <el-form-item label="收件地址" prop="consigneeAddress">
+              <el-input v-model="listData.consigneeAddress"></el-input>
+            </el-form-item>
+            <el-form-item label="备注" prop="remark">
+              <el-input
+                type="textarea"
+                :rows="4"
+                v-model="listData.remark"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div style="text-align: center">
+        <el-button @click="backPage">返回</el-button>
+        <el-button type="primary" @click="submit('listData')">保存</el-button>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from "vuex";
+export default {
+  data() {
+    return {
+      options: [
+        {
+          label: "农村户口",
+          value: 1,
+        },
+        {
+          label: "城镇户口",
+          value: 2,
+        },
+      ],
+      listData: {},
+      rules: {},
+    };
+  },
+  computed: {
+    ...mapGetters(["dictManages"]),
+  },
+  mounted() {
+    this.getUserInfos();
+  },
+  methods: {
+    getUserInfos() {
+      this.$api
+        .inquiregradestudentlistStudent({ userId: this.$route.query.id })
+        .then((res) => {
+          this.listData = res.rows[0];
+          console.log(res);
+        });
+    },
+    backPage() {
+      this.$router.go(-1);
+    },
+    submit() {
+      this.$api.editgradestudent(this.listData).then((res) => {
+        this.$message.success("保存成功");
+      });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.YZsty {
+  background-color: #eee;
+  padding: 30px;
+}
+.fgx {
+  border-bottom: 1px dotted #9a9a9a;
+  margin-bottom: 12px;
+}
+</style>
+

+ 419 - 0
src/views/education/studentManageMent/studentXQ/studyRecord.vue

@@ -0,0 +1,419 @@
+<template>
+  <div id="studyRecord">
+    <el-table
+      :data="tableData"
+      style="width: 100%"
+      default-expand-all
+      :header-cell-style="{
+        'background-color': 'skyblue',
+        padding: '8px',
+        color: '#333',
+      }"
+    >
+      <el-table-column type="expand" width="40px">
+        <template slot-scope="scope">
+          <el-table
+            border
+            :data="scope.row.subjectStudyRecordVos"
+            style="width: 100%"
+            default-expand-all
+            :header-cell-style="{
+              'background-color': 'rgb(255,255,204)',
+              padding: '8px',
+              color: '#333',
+            }"
+          >
+            <template v-for="(item, index) in tableSetChild">
+              <el-table-column
+                :width="item.width"
+                :key="index"
+                :label="item.label"
+                align="center"
+              >
+                <template slot-scope="scope">
+                  <span v-if="item.scope === 'types'">
+                    {{
+                      scope.row[item.prop] === 1
+                        ? "开课"
+                        : scope.row[item.prop] === 0
+                        ? "未开课"
+                        : "未知"
+                    }}
+                  </span>
+                  <span v-else-if="item.scope === 'sectionType'">
+                    {{ getTypes(scope.row[item.prop]) }}
+                  </span>
+                  <span v-else-if="item.scope === 'studentStatus'">
+                    已观看{{ scope.row[item.prop1] }}节
+                    <span style="color: green">{{
+                      compons(scope.row[item.prop1], scope.row[item.prop2])
+                    }}</span>
+                  </span>
+                  <span v-else> {{ scope.row[item.prop] }} </span>
+                </template>
+              </el-table-column>
+            </template>
+            <el-table-column
+              label="操作"
+              align="center"
+              fixed="right"
+              width="100px"
+            >
+              <template slot-scope="scope">
+                <el-button
+                  type="text"
+                  @click="wantInfo(scope.row, scope.$index)"
+                  >查看</el-button
+                >
+              </template>
+            </el-table-column>
+          </el-table>
+        </template>
+      </el-table-column>
+      <template v-for="(item, index) in tableSet">
+        <el-table-column
+          :width="item.width"
+          :key="index"
+          :label="item.label"
+          align="center"
+        >
+          <template slot-scope="scope">
+            <span v-if="item.scope === 'yewu'">
+              {{ scope.row[item.prop1] }}-{{ scope.row[item.prop2] }}-{{
+                scope.row[item.prop3]
+              }}
+            </span>
+            <span v-else-if="item.scope === 'time'">
+              {{ $methodsTools.onlyForma(scope.row[item.prop]) }}
+            </span>
+            <span v-else-if="item.scope === 'moreTime'">
+              {{ $methodsTools.onlyForma(scope.row[item.prop1]) }}
+              {{ $methodsTools.onlyForma(scope.row[item.prop2]) }}-
+            </span>
+            <span v-else>
+              {{ scope.row[item.prop] }}{{ item.ch ? item.ch : "" }}
+            </span>
+          </template>
+        </el-table-column>
+      </template>
+    </el-table>
+    <el-dialog
+      :visible.sync="dialogVisible"
+      width="830px"
+      :show-close="false"
+      :close-on-click-modal="false"
+    >
+      <div slot="title" class="hearders">
+        <div class="leftTitle">学习记录</div>
+        <div class="rightBoxs">
+          <img src="@/assets/images/Close@2x.png" alt="" @click="close" />
+        </div>
+      </div>
+      <div>
+        <el-table
+          border
+          :data="RemardList"
+          style="width: 100%"
+          default-expand-all
+          :header-cell-style="{
+            'background-color': 'rgb(255,255,204)',
+            padding: '8px',
+            color: '#333',
+          }"
+        >
+          <el-table-column label="序号" align="center" type="index" width="70">
+          </el-table-column>
+          <template v-for="(item, index) in studyListRemard">
+            <el-table-column
+              :width="item.width"
+              :key="index"
+              :label="item.label"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <span v-if="item.scope === 'studyTime'">
+                  {{ $methodsTools.onlyForma(scope.row[item.prop1])
+                  }}{{
+                    scope.row[item.prop1] && scope.row[item.prop2] ? "至" : ""
+                  }}
+                  {{ $methodsTools.onlyForma(scope.row[item.prop2]) }}
+                </span>
+                <span v-else-if="item.scope === 'status'">
+                  {{
+                    scope.row[item.prop] === 1
+                      ? "完成"
+                      : scope.row[item.prop] === 0
+                      ? "未学习"
+                      : scope.row[item.prop] === 2
+                      ? "学习中"
+                      : "未知"
+                  }}
+                </span>
+                <span v-else-if="item.scope === 'computerTimes'">
+                  {{
+                    $methodsTools.humandate(
+                      scope.row[item.prop1],
+                      scope.row[item.prop2]
+                    )
+                  }}
+                </span>
+                <span v-else> {{ scope.row[item.prop] }} </span>
+              </template>
+            </el-table-column>
+          </template>
+        </el-table>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="close">取 消</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "studyRecord",
+  data() {
+    return {
+      dialogVisible: false,
+      tableDataChild: {},
+      tableSetChild: [
+        {
+          label: "课程名称",
+          prop: "courseName",
+          width: "160px",
+        },
+        {
+          label: "科目",
+          prop: "subjectName",
+        },
+        {
+          label: "课程开课状态",
+          prop: "beginStatus",
+          width: "160px",
+          scope: "types",
+        },
+        {
+          label: "模块",
+          prop: "moduleNum",
+        },
+        {
+          label: "章",
+          prop: "chapterNum",
+        },
+        {
+          label: "节",
+          prop: "sectionNum",
+        },
+        {
+          label: "节类型",
+          prop: "sectionType",
+          scope: "sectionType",
+        },
+        {
+          label: "学习状态",
+          prop1: "recordNum",
+          prop2: "sectionNum",
+          scope: "studentStatus",
+        },
+      ],
+      tableData: [],
+      tableSet: [
+        {
+          label: "商品编码",
+          prop: "code",
+          width: "160px",
+        },
+        {
+          label: "年份",
+          prop: "year",
+        },
+        {
+          label: "商品名称",
+          prop: "goodsName",
+          width: "140px",
+        },
+        {
+          label: "业务层级",
+          prop1: "educationName",
+          prop2: "projectName",
+          prop3: "businessName",
+          scope: "yewu",
+          width: "260px",
+        },
+        {
+          label: "学时",
+          prop: "classHours",
+        },
+        {
+          label: "视频学习进度(节)",
+          prop: "studyNum",
+          width: "140px",
+          ch: "%",
+        },
+        {
+          label: "学习开始时间",
+          prop: "startTime",
+          scope: "time",
+          width: "140px",
+        },
+        {
+          label: "学习结束时间",
+          prop: "endTime",
+          scope: "time",
+          width: "140px",
+        },
+        {
+          label: "学习有效期",
+          prop1: "studyStartTime",
+          prop2: "studyEndTime",
+          scope: "moreTime",
+          width: "140px",
+        },
+      ],
+      studyListRemard: [
+        {
+          label: "模块标题",
+          prop: "moduleName",
+          width: "100px",
+        },
+        {
+          label: "章标题",
+          prop: "chapterName",
+          width: "100px",
+        },
+        {
+          label: "节标题",
+          prop: "sectionName",
+        },
+        {
+          label: "节时长",
+          prop: "durationTime",
+        },
+        {
+          label: "学习时间",
+          prop1: "startTime",
+          prop2: "endTime",
+          scope: "studyTime",
+          width: "310px",
+        },
+        {
+          label: "学习时长",
+          prop1: "startTime",
+          prop2: "endTime",
+          width: "100px",
+          scope: "computerTimes",
+        },
+        {
+          label: "学习状态",
+          prop: "status",
+          scope: "status",
+          width: "90px",
+        },
+      ], //学习记录表格对应column
+      RemardList: [], //学习记录列表
+    };
+  },
+  mounted() {
+    this.$api
+      .inquiregradestudentlist({ userId: this.$route.query.id })
+      .then((res) => {
+        this.tableData = res.rows;
+      });
+  },
+  methods: {
+    compons(int1, int2) {
+      if (!int1 || !int2) {
+        return;
+      }
+      let result = (int1 / int2) * 100;
+      return result + "%";
+    },
+    //改变返回值
+    getTypes(arr) {
+      if (!arr) {
+        return "暂无";
+      }
+      let arrays = arr.split(",").map(Number);
+      let str = [];
+      for (let i = 0; i < arrays.length; i++) {
+        if (arrays[i] == 1) {
+          str.push("直播");
+        }
+        if (arrays[i] == 2) {
+          str.push("回放");
+        }
+        if (arrays[i] == 3) {
+          str.push("录播");
+        }
+      }
+      return str.toString();
+    },
+    //关闭窗口
+    close() {
+      this.dialogVisible = false;
+    },
+    //获取弹出窗内容
+    wantInfo(item, index) {
+      this.$api
+        .inquiregradestudentlistSection({
+          userId: this.$route.query.id,
+          courseId: item.courseId,
+        })
+        .then((res) => {
+          this.RemardList = res.rows;
+          this.dialogVisible = true;
+        });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+/deep/.el-button {
+  border-radius: 8px;
+}
+/deep/.el-dialog {
+  border-radius: 8px;
+  .el-dialog__header {
+    padding: 0;
+    .hearders {
+      height: 40px;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      padding: 0px 18px 0px 20px;
+      border-bottom: 1px solid #e2e2e2;
+      .leftTitle {
+        font-size: 14px;
+        font-weight: bold;
+        color: #2f4378;
+      }
+      .rightBoxs {
+        display: flex;
+        align-items: center;
+        img {
+          width: 14px;
+          height: 14px;
+          margin-left: 13px;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+  .el-dialog__footer {
+    padding: 0;
+    .dialog-footer {
+      padding: 0px 40px;
+      height: 70px;
+      border-top: 1px solid #e2e2e2;
+      display: flex;
+      align-items: center;
+      justify-content: flex-end;
+    }
+  }
+}
+.demo-table-expand {
+  font-size: 0;
+}
+</style>

+ 0 - 0
src/views/education/studentManageMent/text.md


+ 7 - 4
src/views/login.vue

@@ -50,7 +50,6 @@
             v-model="loginForm.code"
             auto-complete="off"
             placeholder="验证码"
-            style="width: 63%"
             @keyup.enter.native="handleLogin"
           >
           </el-input>
@@ -269,7 +268,7 @@ export default {
     width: 574px;
     height: 100%;
     background-color: #4174ff;
-    z-index: 9999;
+    z-index: 1000;
     display: flex;
     align-items: center;
     justify-content: center;
@@ -302,10 +301,10 @@ export default {
   align-items: center;
 }
 .login-code {
-  height: 48px;
+  height: 40px;
   margin-left: 18px;
   .login-code-img {
-    height: 48px;
+    height: 40px;
   }
 }
 .rightStsyt {
@@ -330,4 +329,8 @@ export default {
   font-weight: bold;
   font-family: Microsoft YaHei;
 }
+/deep/ .fle_x > .el-form-item__content {
+  display: flex;
+  align-items: center;
+}
 </style>

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

@@ -64,24 +64,36 @@ export default {
           prop: "businessId",
           placeholder: "业务层次",
           scope: "businessLevel",
+          edu:"educationId"
         },
         {
           prop: "subjectId",
           placeholder: "科目",
           scope: "sujectType",
+          edu:"educationId"
         },
         {
           prop:"publishStatus",
           placeholder:"发布状态",
-          scope:"paperType"
+          scope: "select",
+          options: [
+            {
+              label: "发布",
+              value: 1,
+            },
+            {
+              label: "未发布",
+              value: 0,
+            },
+          ],
         },
         {
           prop: "prefixName",
-          placeholder: "请输入名称前缀",
+          placeholder: "请输入标题前缀",
         },
         {
-          prop: "examName",
-          placeholder: "请输入试卷名称",
+          prop: "name",
+          placeholder: "请输入章卷标题",
         }
       ],
       formData: {
@@ -148,8 +160,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search(2);

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

@@ -209,11 +209,13 @@ export default {
           prop: "businessId",
           placeholder: "业务层次",
           scope: "businessLevel",
+          edu:"educationId",
         },
         {
           prop: "subjectId",
           placeholder: "科目",
           scope: "sujectType",
+          edu:"educationId",
         },
         {
           prop: "knowledgeName",
@@ -382,8 +384,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search(2);

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

@@ -1207,8 +1207,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 3 - 2
src/views/resource/bankManagement/testPaperManagement/editPaper/topicEditPaper/index.vue

@@ -885,8 +885,9 @@ export default {
           this.tableData = res.data;
           // this.total = res.total;
           this.navText.index = res.total;
-        });
-      this.loading = false;
+        }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 19 - 5
src/views/resource/bankManagement/testPaperManagement/index.vue

@@ -48,8 +48,9 @@ export default {
         title: "试卷管理",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
+        changeWidth:"280px",
         addHide: false,
         backFatherBtn: {
           status: false,
@@ -59,7 +60,7 @@ export default {
       //搜索
       formList: [
         {
-          prop: "educationId",
+          prop: "educationTypeId",
           placeholder: "教育类型",
           scope: "educationType",
         },
@@ -67,16 +68,28 @@ export default {
           prop: "businessId",
           placeholder: "业务层次",
           scope: "businessLevel",
+          edu:"educationTypeId"
         },
         {
           prop: "subjectId",
           placeholder: "科目",
           scope: "sujectType",
+          edu:"educationTypeId"
         },
         {
           prop:"publishStatus",
           placeholder:"发布状态",
-          scope:"paperType"
+          scope: "select",
+          options: [
+            {
+              label: "发布",
+              value: 1,
+            },
+            {
+              label: "未发布",
+              value: 0,
+            },
+          ],
         },
         {
           prop: "prefixName",
@@ -165,8 +178,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search(2);

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

@@ -213,7 +213,7 @@ export default {
       //搜索
       formList: [
         {
-          prop: "educationId",
+          prop: "educationTypeId",
           placeholder: "教育类型",
           scope: "educationType",
         },
@@ -221,21 +221,23 @@ export default {
           prop: "businessId",
           placeholder: "业务层次",
           scope: "businessLevel",
+          edu:"educationTypeId",
         },
         {
           prop: "subjectId",
           placeholder: "科目",
           scope: "sujectType",
+          edu:"educationTypeId",
+        },
+        {
+          prop: "prefixName",
+          placeholder: "请输入标题前缀",
         },
         {
           prop: "type",
           placeholder: "题目类型",
           scope: "selectBank",
         },
-        {
-          prop: "prefixName",
-          placeholder: "请输入标题前缀",
-        },
       ],
       formData: {
         status: "0,1",
@@ -357,8 +359,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search(2);

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

@@ -64,15 +64,28 @@ export default {
           prop: "businessId",
           placeholder: "业务层次",
           scope: "businessLevel",
+          edu:"educationId"
         },
         {
           prop: "subjectId",
           placeholder: "科目",
           scope: "sujectType",
+          edu:"educationId"
         },
         {
-          prop: "paperType",
+          prop: "publishStatus",
           placeholder: "发布状态",
+          scope: "select",
+          options: [
+            {
+              label: "发布",
+              value: 1,
+            },
+            {
+              label: "未发布",
+              value: 0,
+            },
+          ],
         },
         {
           prop: "prefixName",
@@ -147,8 +160,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search(2);

+ 123 - 0
src/views/resource/baseManageInfos/index.vue

@@ -0,0 +1,123 @@
+<template>
+  <div id="baseManageInfos">
+    <el-button @click="jumpPages">营销</el-button>
+    <el-button type="primary">资源</el-button>
+    <div style="display: flex">
+      <div class="infoBox">
+        <div class="he">课程</div>
+        <div>
+          <el-button
+            style="margin: 10px; display: block"
+            v-for="(item, index) in list2"
+            :key="index"
+            @click="jumpPage(item)"
+            >{{ item.title }}</el-button
+          >
+        </div>
+      </div>
+      <div class="infoBox" style="margin-left: 12px; height: 100%">
+        <div class="he">题库</div>
+        <div>
+          <el-button
+            style="margin: 10px; display: block"
+            v-for="(item, index) in list3"
+            :key="index"
+            @click="jumpPage(item)"
+            >{{ item.title }}</el-button
+          >
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+    name:"baseManageInfos",
+  data() {
+    return {
+      status: 2,
+      list2: [
+        {
+          title: "教育类型",
+          url: "educationTypes",
+        },
+        {
+          title: "项目类型",
+          url: "projectType",
+        },
+        {
+          title: "业务层次",
+          url: "businessLevel",
+        },
+        {
+          title: "院校",
+          url: "colleges",
+        },
+        {
+          title: "专业",
+          url: "professional",
+        },
+        {
+          title: "科目/类目",
+          url: "suject",
+        },
+        {
+          title: "考期",
+          url: "testPeriod",
+        },
+        {
+          title: "报读地区",
+          url: "enrollmentArea",
+        },
+        {
+          title: "证书",
+          url: "certificate",
+        },
+        {
+          title: "标签",
+          url: "label",
+        },
+      ],
+      list3: [
+        {
+          title: "题目类型",
+          url: "questionType",
+        },
+        {
+          title: "试卷类型",
+          url: "papers",
+        },
+      ],
+    };
+  },
+  methods: {
+    jumpPages() {
+      this.$router.push({
+        name: 'BasicParameters',
+      });
+    },
+    jumpPage(item) {
+      this.$router.push({
+        path: item.url,
+      });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.infoBox {
+  border-radius: 8px;
+  border: 1px solid #a4a4a4;
+  width: 200px;
+  overflow: hidden;
+  margin: 20px 0px;
+  .he {
+    height: 40px;
+    line-height: 40px;
+    background-color: #eee;
+    text-align: center;
+  }
+}
+</style>

+ 19 - 19
src/views/Marketing/basicParameters/resource/businessLevel/index.vue → src/views/resource/baseManageInfos/resource/businessLevel/index.vue

@@ -103,14 +103,14 @@
               type="textarea"
               v-model="listData[items.prop]"
             ></el-input>
-            <el-input
-              class="numInputs"
-              :disabled="statusPop === 2"
+            <el-input-number
+              :controls="false"
               v-else-if="items.scope === 'numType'"
-              type="age"
-              v-model.number="listData[items.prop]"
-              ><template slot="append">{{ items.ch }}</template></el-input
-            >
+              v-model="listData[items.prop]"
+              controls-position="right"
+              :precision="1"
+              :min="0"
+            ></el-input-number>
             <el-input
               :disabled="statusPop === 2"
               v-else
@@ -189,9 +189,11 @@ export default {
         },
         {
           label: "业务层次名称",
-          prop: "businessName",
+          prop1: "projectName",
+          prop2: "businessName",
           hidden: true,
-          scope: "editInfo",
+          scope: "editInfoMore",
+          width:"220px"
         },
         {
           label: "教育类型",
@@ -286,10 +288,7 @@ export default {
         businessName: [
           { required: true, message: "请输入业务层次名称", trigger: "blur" },
         ],
-        schoolYear: [
-          { required: true, message: "学年不能为空" },
-          { type: "number", message: "学年必须为数字值" },
-        ],
+        schoolYear: [{ required: false, message: "学年不能为空" }],
         status: [{ required: true, message: "请选择状态", trigger: "change" }],
       },
     };
@@ -307,10 +306,10 @@ export default {
     openPZDowm(item, int) {
       if (int === 1) {
         this.activeLists = [item];
-        if(item.templateStatus){
-          this.radioActives = item.templateStatus
-        }else{
-          this.radioActives = ''
+        if (item.templateStatus) {
+          this.radioActives = item.templateStatus;
+        } else {
+          this.radioActives = "";
         }
         this.dialogVisiblePZDown = true;
       } else {
@@ -410,8 +409,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 4 - 3
src/views/Marketing/basicParameters/resource/certificate/index.vue → src/views/resource/baseManageInfos/resource/certificate/index.vue

@@ -102,7 +102,7 @@ export default {
         title: "证书",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -192,8 +192,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 19 - 10
src/views/Marketing/basicParameters/resource/colleges/index.vue → src/views/resource/baseManageInfos/resource/colleges/index.vue

@@ -24,7 +24,7 @@
     />
     <el-dialog
       :visible.sync="dialogVisible"
-      width="590px"
+      width="610px"
       :show-close="false"
       :close-on-click-modal="false"
     >
@@ -88,7 +88,6 @@
                 @click="changeType"
                 >{{ changeHeight ? "展开" : "关闭" }}</el-button
               >
-              <span v-if="zhType.length === 0">未选项目类型</span>
             </div>
             <div
               v-else-if="items.scope === 'certificate'"
@@ -121,7 +120,7 @@
                     >{{ item.label }}</el-checkbox
                   >
                 </el-checkbox-group>
-                <el-button slot="reference" style="margin-left: 12px"
+                <el-button slot="reference" style="margin-left: 12px" @click="getMessage"
                   >请选择项目类型</el-button
                 >
               </el-popover>
@@ -192,7 +191,8 @@ export default {
         title: "院校",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
+        border:true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -206,18 +206,21 @@ export default {
           label: "院校编码",
           prop: "encoder",
           hidden: true,
+          width:"120px"
         },
         {
           label: "院校名称",
           prop: "schoolName",
           hidden: true,
           scope: "editInfo",
+          width:"150px"
         },
         {
           label: "适用项目类型",
           prop: "courseProjectTypes",
           hidden: true,
           scope: "mapTypes",
+          width:"240px"
         },
         {
           label: "所在省份",
@@ -257,7 +260,7 @@ export default {
           scope: "certificate",
         },
         {
-          label: "已选项目类型",
+          label: "",
           scope: "activeType",
         },
         {
@@ -305,10 +308,10 @@ export default {
           { required: true, message: "请输入院校名称", trigger: "blur" },
         ],
         schoolProvinceId: [
-          { required: true, message: "请选择所在省份", trigger: ["blur","change"] },
+          { required: false, message: "请选择所在省份", trigger: ["blur","change"] },
         ],
         schoolCityId: [
-          { required: true, message: "请选择所在地市", trigger: ["blur","change"] },
+          { required: false, message: "请选择所在地市", trigger: ["blur","change"] },
         ],
         status: [{ required: true, message: "请选择状态", trigger: "change" }],
       },
@@ -324,6 +327,11 @@ export default {
     this.initOptions();
   },
   methods: {
+    getMessage(){
+      if(!this.eduType){
+        this.$message.warning("请先选择教育类型")
+      }
+    },
     changeJYList() {
       console.log(this.listData)
       if (this.listData.schoolCityId) {
@@ -395,7 +403,7 @@ export default {
       this.itemOption2 = array;
     },
     initOptions() {
-      this.$api.inquireCourseEducationType().then((res) => {
+      this.$api.inquireCourseEducationType({status:1}).then((res) => {
         var array = [];
         res.rows.map((item) => {
           array.push({ label: item.educationName, value: item.id });
@@ -429,8 +437,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 5 - 4
src/views/Marketing/basicParameters/resource/educationType/index.vue → src/views/resource/baseManageInfos/resource/educationTypes/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <div id="educationType">
+  <div id="educationTypes">
     <table-list
       :tableSets="tableSet"
       :tableData="tableData"
@@ -135,7 +135,7 @@ export default {
         title: "教育类型",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -252,8 +252,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 5 - 4
src/views/Marketing/basicParameters/resource/enrollmentArea/index.vue → src/views/resource/baseManageInfos/resource/enrollmentArea/index.vue

@@ -225,7 +225,7 @@ export default {
         title: "报考省",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -313,7 +313,7 @@ export default {
         title: "报考地/市",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -446,8 +446,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 4 - 3
src/views/Marketing/basicParameters/resource/label/index.vue → src/views/resource/baseManageInfos/resource/label/index.vue

@@ -102,7 +102,7 @@ export default {
         title: "标签",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -198,8 +198,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 4 - 3
src/views/Marketing/basicParameters/resource/labelInfos/index.vue → src/views/resource/baseManageInfos/resource/labelInfos/index.vue

@@ -99,7 +99,7 @@ export default {
         title: "标签详情",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: false,
         addHide: true,
         backFatherBtn: {
@@ -183,8 +183,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 4 - 3
src/views/Marketing/basicParameters/resource/papers/index.vue → src/views/resource/baseManageInfos/resource/papers/index.vue

@@ -102,7 +102,7 @@ export default {
         title: "试卷类型",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -192,8 +192,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 18 - 7
src/views/Marketing/basicParameters/resource/professional/index.vue → src/views/resource/baseManageInfos/resource/professional/index.vue

@@ -24,7 +24,7 @@
     />
     <el-dialog
       :visible.sync="dialogVisible"
-      width="590px"
+      width="620px"
       :show-close="false"
       :close-on-click-modal="false"
     >
@@ -88,7 +88,6 @@
                 @click="changeType"
                 >{{ changeHeight ? "展开" : "关闭" }}</el-button
               >
-              <span v-if="zhType.length === 0">未选项目类型</span>
             </div>
             <div
               v-else-if="items.scope === 'certificate'"
@@ -121,7 +120,7 @@
                     >{{ item.label }}</el-checkbox
                   >
                 </el-checkbox-group>
-                <el-button slot="reference" style="margin-left: 12px"
+                <el-button slot="reference" style="margin-left: 12px" @click="getMessage"
                   >请选择项目类型</el-button
                 >
               </el-popover>
@@ -176,7 +175,8 @@ export default {
         title: "专业",
         index: 0,
         ch: "条",
-        num: false,
+        border:true,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -191,17 +191,20 @@ export default {
           prop: "categoryName",
           hidden: true,
           scope: "editInfo",
+          width:'130px'
         },
         {
           label: "专业编码",
           prop: "encoder",
           hidden: true,
+          width:'130px'
         },
         {
           label: "适用项目类型",
           prop: "courseProjectTypeVo",
           hidden: true,
           scope: "mapTypes",
+          width:"240px"
         },
         {
           label: "状态",
@@ -213,6 +216,8 @@ export default {
           label: "标签",
           prop: "labelName",
           hidden: true,
+          width:"130px",
+          scope: 'jumpPageLabelProfess'
         },
       ],
       tableData: [], //表单数据
@@ -235,7 +240,7 @@ export default {
           scope: "certificate",
         },
         {
-          label: "已选项目类型",
+          label: "",
           scope: "activeType",
         },
         {
@@ -297,6 +302,11 @@ export default {
     this.initOptions();
   },
   methods: {
+    getMessage(){
+      if(!this.eduType){
+        this.$message.warning("请先选择教育类型")
+      }
+    },
     BQListApi(){
       this.$api.inquireCourseLabelList({status:1}).then(res => {
         var arrays = []
@@ -367,8 +377,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 4 - 3
src/views/Marketing/basicParameters/resource/projectType/index.vue → src/views/resource/baseManageInfos/resource/projectType/index.vue

@@ -116,7 +116,7 @@ export default {
         title: "项目类型",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -233,8 +233,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 4 - 3
src/views/Marketing/basicParameters/resource/questionType/index.vue → src/views/resource/baseManageInfos/resource/questionType/index.vue

@@ -102,7 +102,7 @@ export default {
         title: "教育类型",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -192,8 +192,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 29 - 16
src/views/Marketing/basicParameters/resource/suject/index.vue → src/views/resource/baseManageInfos/resource/suject/index.vue

@@ -24,7 +24,7 @@
     />
     <el-dialog
       :visible.sync="dialogVisible"
-      width="590px"
+      width="630px"
       :show-close="false"
       :close-on-click-modal="false"
     >
@@ -69,7 +69,7 @@
               v-model="listData[items.prop]"
             ></el-input>
             <div v-else-if="items.scope === 'activeType'">
-              <div :class="changeHeight?'ach':'clh'">
+              <div :class="changeHeight ? 'ach' : 'clh'">
                 <div
                   v-for="(item, index) in zhType"
                   :key="index"
@@ -82,8 +82,12 @@
                   ></i>
                 </div>
               </div>
-              <el-button size="mini" v-if="zhType.length > 2" @click="changeType">{{changeHeight?'展开':'关闭'}}</el-button>
-              <span v-if="zhType.length === 0">未选项目类型</span>
+              <el-button
+                size="mini"
+                v-if="zhType.length > 2"
+                @click="changeType"
+                >{{ changeHeight ? "展开" : "关闭" }}</el-button
+              >
             </div>
             <div
               v-else-if="items.scope === 'certificate'"
@@ -116,7 +120,10 @@
                     >{{ item.label }}</el-checkbox
                   >
                 </el-checkbox-group>
-                <el-button slot="reference" style="margin-left: 12px"
+                <el-button
+                  slot="reference"
+                  style="margin-left: 12px"
+                  @click="getMessage"
                   >请选择项目类型</el-button
                 >
               </el-popover>
@@ -151,13 +158,13 @@ export default {
   components: { searchBox, tableList, pagination },
   data() {
     return {
-      changeHeight:true,
+      changeHeight: true,
       loading: false, //当前表单加载是否加载动画
       navText: {
         title: "科目/类目",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -183,7 +190,7 @@ export default {
           prop: "courseProjectTypes",
           hidden: true,
           scope: "mapTypes",
-          width: "220"
+          width: "240px",
         },
         {
           label: "状态",
@@ -211,7 +218,7 @@ export default {
           scope: "certificate",
         },
         {
-          label: "已选项目类型",
+          label: "",
           scope: "activeType",
         },
         {
@@ -262,8 +269,13 @@ export default {
     this.initOptions();
   },
   methods: {
-    changeType(){
-      this.changeHeight = !this.changeHeight
+    getMessage() {
+      if (!this.eduType) {
+        this.$message.warning("请先选择教育类型");
+      }
+    },
+    changeType() {
+      this.changeHeight = !this.changeHeight;
     },
     changeTypes() {
       var arrays = [];
@@ -320,8 +332,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();
@@ -376,7 +389,7 @@ export default {
       this.itemOption1 = JSON.parse(JSON.stringify(this.options1));
       this.itemOption2 = JSON.parse(JSON.stringify(this.options2));
       this.$nextTick(() => {
-        this.changeHeight = true
+        this.changeHeight = true;
         this.$refs.listData.clearValidate();
       });
       this.dialogVisible = true;
@@ -532,12 +545,12 @@ export default {
   cursor: pointer;
   margin-left: 6px;
 }
-.ach{
+.ach {
   display: flex;
   align-items: center;
   overflow: hidden;
 }
-.clh{
+.clh {
   display: flex;
   align-items: center;
   flex-wrap: wrap;

+ 80 - 29
src/views/Marketing/basicParameters/resource/testPeriod/index.vue → src/views/resource/baseManageInfos/resource/testPeriod/index.vue

@@ -24,7 +24,7 @@
     />
     <el-dialog
       :visible.sync="dialogVisible"
-      width="560px"
+      width="680px"
       :show-close="false"
       :close-on-click-modal="false"
     >
@@ -48,7 +48,8 @@
             v-for="(items, indexs) in listitem"
             :key="indexs"
             :label="items.label"
-            :prop="items.prop"
+            :prop="items.scope === 'periodTime' ? '' : items.prop"
+            :required="items.scope === 'periodTime'"
           >
             <el-radio-group
               v-if="items.scope === 'status'"
@@ -99,17 +100,33 @@
               v-model="listData[items.prop]"
             ></el-input>
             <div v-else-if="items.scope === 'periodTime'">
-              <el-date-picker
-                style="width: 100%"
-                v-model="timesArrays"
-                type="daterange"
-                range-separator="至"
-                start-placeholder="开始日期"
-                end-placeholder="结束日期"
-                format="yyyy 年 MM 月 dd 日"
-                value-format="timestamp"
-              >
-              </el-date-picker>
+              <el-col :span="11">
+                <el-form-item :prop="items.prop1">
+                  <el-date-picker
+                    v-model="listData[items.prop1]"
+                    type="date"
+                    format="yyyy 年 MM 月 dd 日"
+                    value-format="timestamp"
+                    placeholder="选择开始日期"
+                    @change="startTimes"
+                  >
+                  </el-date-picker>
+                </el-form-item>
+              </el-col>
+              <el-col class="line" :span="2">至</el-col>
+              <el-col :span="11">
+                <el-form-item :prop="items.prop2">
+                  <el-date-picker
+                    v-model="listData[items.prop2]"
+                    type="date"
+                    format="yyyy 年 MM 月 dd 日"
+                    value-format="timestamp"
+                    placeholder="选择结束日期"
+                    @change="endTimes"
+                  >
+                  </el-date-picker>
+                </el-form-item>
+              </el-col>
             </div>
             <el-input
               class="numInputs"
@@ -153,7 +170,7 @@ export default {
         title: "考期",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -259,7 +276,6 @@ export default {
       dialogVisible: false,
       optionsSF: [], //教育类型
       optionsXM: [], //项目类型
-      timesArrays: [], //时间戳数据
       //表单验证
       rules: {
         educationId: [
@@ -276,6 +292,22 @@ export default {
             trigger: ["blur", "change"],
           },
         ],
+        startTime: [
+          {
+            type: "date",
+            required: true,
+            message: "请选择开始日期",
+            trigger: "change",
+          },
+        ],
+        endTime: [
+          {
+            type: "date",
+            required: true,
+            message: "请选择结束日期",
+            trigger: "change",
+          },
+        ],
         examineName: [
           { required: true, message: "请输入考期名称", trigger: "blur" },
         ],
@@ -291,6 +323,22 @@ export default {
     this.search();
   },
   methods: {
+    startTimes(time) {
+      if (this.listData.endTime) {
+        if (time > this.listData.endTime) {
+          this.$message.warning("开始时间不得大于结束时间");
+          this.listData.startTime = "";
+        }
+      }
+    },
+    endTimes(time) {
+      if (this.listData.startTime) {
+        if (time < this.listData.startTime) {
+          this.$message.warning("结束时间不得小于开始时间");
+          this.listData.endTime = "";
+        }
+      }
+    },
     changeXMList(option) {
       if (!option.educationId) {
         this.optionsXM.map((item, index) => {
@@ -351,8 +399,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();
@@ -387,17 +436,20 @@ export default {
       this.getXMType();
       if (v === undefined) {
         this.statusPop = 1;
-        this.timesArrays = [];
         this.listData = {
           status: 1,
         };
       } else {
         this.statusPop = int;
         this.listData = JSON.parse(JSON.stringify(v));
-        this.timesArrays = [
-          this.$methodsTools.time10to13(this.listData.startTime, 2),
-          this.$methodsTools.time10to13(this.listData.endTime, 2),
-        ];
+        this.listData.startTime = this.$methodsTools.time10to13(
+          this.listData.startTime,
+          2
+        );
+        this.listData.endTime = this.$methodsTools.time10to13(
+          this.listData.endTime,
+          2
+        );
       }
       this.$nextTick(() => {
         this.$refs.listData.clearValidate();
@@ -407,10 +459,6 @@ export default {
     submit(formName) {
       this.$refs[formName].validate((valid) => {
         if (valid) {
-          if(this.timesArrays.length === 0){
-            this.$message.error("请选择有效期")
-            return false
-          }
           this.rulesTableSumbit();
         } else {
           return false;
@@ -418,9 +466,12 @@ export default {
       });
     },
     rulesTableSumbit() {
-      var arrs = JSON.parse(JSON.stringify(this.listData))
-      arrs.startTime = this.$methodsTools.time10to13(this.timesArrays[0], 1)
-      arrs.endTime = this.$methodsTools.time10to13(this.timesArrays[1], 1)
+      var arrs = JSON.parse(JSON.stringify(this.listData));
+      arrs.startTime = this.$methodsTools.time10to13(
+        this.listData.startTime,
+        1
+      );
+      arrs.endTime = this.$methodsTools.time10to13(this.listData.endTime, 1);
       if (this.statusPop === 1) {
         this.$api.appCourseExamine(arrs).then((res) => {
           this.$message.success("新增成功");

+ 64 - 8
src/views/resource/handoutManagement/handoutList/index.vue

@@ -1,5 +1,12 @@
 <template>
   <div id="handoutList">
+    <search-box-new
+      ref="searchBox"
+      :formData="formData"
+      :formList="formList"
+      @search="search"
+      @init="init"
+    />
     <table-list
       :tableSets="tableSet"
       :tableData="tableData"
@@ -17,8 +24,8 @@
     </table-list>
     <pagination
       :total="total"
-      :pageSize="pageSize"
-      :currentPage="currentPage"
+      :pageSize="formData.pageSize"
+      :currentPage="formData.pageNum"
       @handleSizeChange="handleSizeChange"
       @handleCurrentChange="handleCurrentChange"
     />
@@ -26,11 +33,11 @@
 </template>
 
 <script>
-import searchBox from "@/components/searchBox";
+import searchBoxNew from "@/components/searchBoxNew";
 import tableList from "@/components/tableList";
 import pagination from "@/components/pagination";
 export default {
-  components: { searchBox, tableList, pagination },
+  components: { searchBoxNew, tableList, pagination },
   data() {
     return {
       loading: false, //当前表单加载是否加载动画
@@ -46,6 +53,54 @@ export default {
           title: "未定义",
         },
       },
+      //搜索
+      formList: [
+        {
+          prop: "educationId",
+          placeholder: "教育类型",
+          scope: "educationType",
+        },
+        {
+          prop: "businessId",
+          placeholder: "业务层次",
+          scope: "businessLevel",
+          edu: "educationId",
+        },
+        {
+          prop: "subjectId",
+          placeholder: "科目",
+          scope: "sujectType",
+          edu: "educationId",
+        },
+        {
+          prop: "status",
+          placeholder: "发布状态",
+          scope: "select",
+          options: [
+            {
+              label: "发布状态",
+              value: '0,1',
+            },
+            {
+              label: "发布",
+              value: 1,
+            },
+            {
+              label: "未发布",
+              value: 0,
+            },
+          ],
+        },
+        {
+          prop: "handoutsName",
+          placeholder: "请输入讲义名称",
+        },
+      ],
+      formData: {
+        status: "0,1",
+        pageSize: 10,
+        pageNum: 1,
+      },
       // 表单
       tableSet: [
         {
@@ -63,8 +118,8 @@ export default {
           label: "适用业务层级",
           prop: "courseHandoutsBusinessVo",
           hidden: true,
-          scope:"mapTypesMores",
-          width:"400"
+          scope: "mapTypesMores",
+          width: "400",
         },
         {
           label: "发布状态",
@@ -97,8 +152,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

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

@@ -56,12 +56,12 @@
                 >确定</el-button
               >
             </div>
-            <el-button slot="reference" style="margin-left: 12px"
+            <el-button slot="reference" style="margin-left: 12px" @click="getMessage"
               >请选择科目</el-button
             >
           </el-popover>
         </el-form-item>
-        <el-form-item label="已选业务层级">
+        <el-form-item label="">
           <div :class="changeHeight ? 'ach' : 'clh'">
             <div
               v-for="(item, index) in newSujectApis"
@@ -86,7 +86,7 @@
             @click="changeType"
             >{{ changeHeight ? "展开" : "关闭" }}</el-button
           >
-          <span v-if="newSujectApis.length === 0">未选项目类型</span>
+          <!-- <span v-if="newSujectApis.length === 0">未选项目类型</span> -->
         </el-form-item>
         <el-form-item label="标题前缀" prop="prefixName">
           <el-input v-model="listData.prefixName"></el-input>
@@ -368,6 +368,11 @@ export default {
     // this.search();
   },
   methods: {
+    getMessage() {
+      if (!this.courType) {
+        this.$message.warning("请先选择业务层级");
+      }
+    },
     openBoxs() {
       var self = this;
       this.$api
@@ -594,8 +599,8 @@ export default {
         self.$set(self.listData, "coverUrl", "");
         return;
       }
-      if (file.size > 2 * 1024 * 1024) {
-        self.$message.error("图片不得大于2MB");
+      if (file.size > 0.3 * 1024 * 1024) {
+        self.$message.error("图片不得大于300kb");
         return;
       }
       var type = self.$refs.file.value.toLowerCase().split(".").splice(-1);

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

@@ -56,12 +56,12 @@
                 >确定</el-button
               >
             </div>
-            <el-button slot="reference" style="margin-left: 12px"
+            <el-button slot="reference" style="margin-left: 12px" @click="getMessage"
               >请选择科目</el-button
             >
           </el-popover>
         </el-form-item>
-        <el-form-item label="已选业务层级">
+        <el-form-item label="">
           <div :class="changeHeight ? 'ach' : 'clh'">
             <div
               v-for="(item, index) in newSujectApis"
@@ -86,7 +86,6 @@
             @click="changeType"
             >{{ changeHeight ? "展开" : "关闭" }}</el-button
           >
-          <span v-if="newSujectApis.length === 0">未选项目类型</span>
         </el-form-item>
         <el-form-item label="标题前缀" prop="prefixName">
           <el-input v-model="listData.prefixName"></el-input>
@@ -367,6 +366,11 @@ export default {
     this.search();
   },
   methods: {
+    getMessage() {
+      if (!this.courType) {
+        this.$message.warning("请先选择业务层级");
+      }
+    },
     openBoxs() {
       var self = this;
       this.$api
@@ -594,8 +598,8 @@ export default {
         self.$set(self.listData, "coverUrl", "");
         return;
       }
-      if (file.size > 2 * 1024 * 1024) {
-        self.$message.error("图片不得大于2MB");
+      if (file.size > 0.3 * 1024 * 1024) {
+        self.$message.error("图片不得大于300kb");
         return;
       }
       var type = self.$refs.file.value.toLowerCase().split(".").splice(-1);

+ 86 - 20
src/views/resource/videoManagement/chapter/index.vue

@@ -1,5 +1,12 @@
 <template>
   <div id="festival">
+    <search-box-new
+      ref="searchBox"
+      :formData="formData"
+      :formList="formList"
+      @search="search"
+      @init="init"
+    />
     <table-list
       :tableSets="tableSet"
       :tableData="tableData"
@@ -17,8 +24,8 @@
     </table-list>
     <pagination
       :total="total"
-      :pageSize="pageSize"
-      :currentPage="currentPage"
+      :pageSize="formData.pageSize"
+      :currentPage="formData.pageNum"
       @handleSizeChange="handleSizeChange"
       @handleCurrentChange="handleCurrentChange"
     />
@@ -26,11 +33,11 @@
 </template>
 
 <script>
-import searchBox from "@/components/searchBox";
+import searchBoxNew from "@/components/searchBoxNew";
 import tableList from "@/components/tableList";
 import pagination from "@/components/pagination";
 export default {
-  components: { searchBox, tableList, pagination },
+  components: { searchBoxNew, tableList, pagination },
   data() {
     return {
       loading: false, //当前表单加载是否加载动画
@@ -38,7 +45,7 @@ export default {
         title: "章类型",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -46,30 +53,82 @@ export default {
           title: "未定义",
         },
       },
+      //搜索
+      formList: [
+        {
+          prop: "educationTypeId",
+          placeholder: "教育类型",
+          scope: "educationType",
+        },
+        {
+          prop: "businessId",
+          placeholder: "业务层次",
+          scope: "businessLevel",
+          edu: "educationTypeId",
+        },
+        {
+          prop: "subjectId",
+          placeholder: "科目",
+          scope: "sujectType",
+          edu: "educationTypeId",
+        },
+        {
+          prop: "prefixName",
+          placeholder: "请输入标题前缀",
+        },
+        {
+          prop: "publishStatus",
+          placeholder: "发布状态",
+          scope: "select",
+          options: [
+            {
+              label: "发布",
+              value: 1,
+            },
+            {
+              label: "未发布",
+              value: 0,
+            },
+          ],
+        },
+        {
+          prop: "name",
+          placeholder: "请输入章标题",
+        },
+      ],
+      formData: {
+        status: "0,1",
+        pageSize: 10,
+        pageNum: 1,
+      },
+
       // 表单
       tableSet: [
         {
           label: "章编码",
           prop: "code",
           hidden: true,
+          width: "120",
         },
         {
           label: "标题前缀",
           prop: "prefixName",
           hidden: true,
+          width: "120",
         },
         {
           label: "章标题",
           prop: "name",
           hidden: true,
           scope: "editInfo",
+          width: "120",
         },
         {
           label: "适用业务层级",
           prop: "businessList",
           hidden: true,
-          scope:"mapTypesMores",
-          width:"400"
+          scope: "mapTypesMores",
+          width: "240",
         },
         // {
         //   label: "关联模块",
@@ -90,6 +149,7 @@ export default {
           label: "学习时长",
           prop: "durationTime",
           hidden: true,
+          ch: "分钟",
         },
         {
           label: "发布状态",
@@ -111,22 +171,28 @@ export default {
     editInfo(v) {
       this.addClick(v, 0);
     },
-    search(v) {
+    search(int) {
       this.loading = true;
-      var data = {
-        status: 1,
-        pageSize: this.pageSize,
-        pageNum: this.currentPage,
-      };
-      this.$api.inquireCourseListchapter(data).then((res) => {
+      if (int === 1) {
+        this.formData.pageNum = 1;
+      }
+      if (int === 2) {
+        this.formData = {
+          status: "0,1",
+          pageSize: 10,
+          pageNum: 1,
+        };
+      }
+      this.$api.inquireCourseListchapter(this.formData).then((res) => {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
-      this.search();
+      this.search(2);
     },
     del(v) {
       this.$alert(
@@ -168,12 +234,12 @@ export default {
       }
     },
     handleSizeChange(v) {
-      this.pageSize = v;
-      this.currentPage = 1;
+      this.formData.pageSize = v;
+      this.formData.pageNum = 1;
       this.search();
     },
     handleCurrentChange(v) {
-      this.currentPage = v;
+      this.formData.pageNum = v;
       this.search();
     },
   },

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

@@ -417,8 +417,8 @@ export default {
         self.$set(self.listData, "coverUrl", "");
         return;
       }
-      if (file.size > 2 * 1024 * 1024) {
-        self.$message.error("图片不得大于2MB");
+      if (file.size > 0.3 * 1024 * 1024) {
+        self.$message.error("图片不得大于300kb");
         return;
       }
       var type = self.$refs.file.value.toLowerCase().split(".").splice(-1);

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

@@ -417,8 +417,8 @@ export default {
         self.$set(self.listData, "coverUrl", "");
         return;
       }
-      if (file.size > 2 * 1024 * 1024) {
-        self.$message.error("图片不得大于2MB");
+      if (file.size > 0.3 * 1024 * 1024) {
+        self.$message.error("图片不得大于300kb");
         return;
       }
       var type = self.$refs.file.value.toLowerCase().split(".").splice(-1);

+ 370 - 50
src/views/resource/videoManagement/courseManagement/chapterContent/index.vue

@@ -15,26 +15,6 @@
         >添加 模块/章节</el-button
       >
     </div>
-    <!-- <el-table
-      :data="tableDataInfos"
-      style="width: 100%; margin-bottom: 20px"
-      row-key="id"
-      border
-      lazy
-      :load="load"
-      :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
-    >
-      <el-table-column prop="name" label="标题"></el-table-column>
-      <el-table-column label="操作" width="180">
-        <template slot-scope="scope">
-          <el-button
-            @click="del(scope.$index, scope.row)"
-            v-if="scope.row.isDels"
-            >删除</el-button
-          >
-        </template>
-      </el-table-column>
-    </el-table> -->
     <el-tree
       ref="tree"
       :data="tableDataInfos"
@@ -45,10 +25,23 @@
     >
       <span class="custom-tree-node" slot-scope="{ node, data }">
         <span>{{ node.label }}</span>
-        <span v-if="data.isDels">
-          <el-button type="text" size="mini" @click.stop="del(node, data)">
+        <span>
+          <el-button
+            v-if="data.isDels"
+            type="text"
+            size="mini"
+            @click.stop="del(node, data)"
+          >
             删除
           </el-button>
+          <el-button
+            type="text"
+            size="mini"
+            style="color: green"
+            @click.stop="openExamBox(node, data)"
+          >
+            关联试卷
+          </el-button>
         </span>
       </span>
     </el-tree>
@@ -57,11 +50,21 @@
       <el-button type="primary" @click="submit">确定</el-button>
     </div>
     <el-dialog
-      title="添加模块/章/节"
       :visible.sync="centerDialogVisible"
-      width="28%"
-      center
+      width="300px"
+      :show-close="false"
+      :close-on-click-modal="false"
     >
+      <div slot="title" class="hearders">
+        <div class="leftTitle">添加模块/章/节</div>
+        <div class="rightBoxs">
+          <img
+            src="@/assets/images/Close@2x.png"
+            alt=""
+            @click="centerDialogVisible = false"
+          />
+        </div>
+      </div>
       <el-radio-group v-model="radio" class="dis-f">
         <el-radio :label="1">模板</el-radio>
         <el-radio :label="2">章</el-radio>
@@ -77,10 +80,23 @@
       </span>
     </el-dialog>
     <el-dialog
-      :title="radio === 1 ? '添加模块' : radio === 2 ? '添加章' : '添加节'"
       :visible.sync="dialogVisible"
       width="800px"
+      :show-close="false"
+      :close-on-click-modal="false"
     >
+      <div slot="title" class="hearders">
+        <div class="leftTitle">
+          {{ radio === 1 ? "添加模块" : radio === 2 ? "添加章" : "添加节" }}
+        </div>
+        <div class="rightBoxs">
+          <img
+            src="@/assets/images/Close@2x.png"
+            alt=""
+            @click="dialogVisible = false"
+          />
+        </div>
+      </div>
       <el-table
         ref="multipleTable"
         :data="boxtableData"
@@ -142,6 +158,108 @@
         <el-button type="primary" @click="submitForm">确 定</el-button>
       </span>
     </el-dialog>
+    <el-dialog
+      :visible.sync="aboutExamStatus"
+      width="560px"
+      :show-close="false"
+      :close-on-click-modal="false"
+    >
+      <div slot="title" class="hearders">
+        <div class="leftTitle">关联题卷</div>
+        <div class="rightBoxs">
+          <img src="@/assets/images/Close@2x.png" alt="" @click="closeExam" />
+        </div>
+      </div>
+      <div>
+        <div><el-button @click="openExamBoxs">选择题卷</el-button></div>
+        <div>
+          <span>{{ goodsName }}</span>
+          <el-button
+            v-if="goodsName && templateRadio"
+            type="text"
+            style="margin-left: 10px"
+            @click="delExam"
+            >删除</el-button
+          >
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeExam">取 消</el-button>
+        <el-button type="primary" @click="submitExam">确 定</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog
+      :visible.sync="dialogVisiblePZDown"
+      width="900px"
+      :show-close="false"
+      :close-on-click-modal="false"
+    >
+      <div slot="title" class="hearders">
+        <div class="leftTitle">选择题卷</div>
+        <div class="rightBoxs">
+          <img src="@/assets/images/Close@2x.png" alt="" @click="closePZ" />
+        </div>
+      </div>
+      <div>
+        <el-table
+          ref="multipleTable"
+          :data="tableDataExam"
+          border
+          :header-cell-style="{
+            'background-color': '#eee',
+            padding: '8px',
+            color: '#333',
+          }"
+        >
+          <el-table-column label="" width="45" align="center">
+            <template scope="scope">
+              <el-radio
+                class="radioTables"
+                :label="scope.row.examId"
+                v-model="templateRadioLS"
+                @change.native="getTemplateRow(scope.$index, scope.row)"
+                >{{ "" }}</el-radio
+              >
+            </template>
+          </el-table-column>
+          <template v-for="(item, index) in tableListExam">
+            <el-table-column
+              v-if="item.scope !== 'inputs'"
+              :width="item.width"
+              :key="index"
+              :label="item.label"
+              align="center"
+              :show-overflow-tooltip="true"
+              header-align="center"
+            >
+              <template slot-scope="scope">
+                <span v-if="item.scope === 'moreList'">
+                  {{
+                    scope.row[item.prop1] +
+                    "-" +
+                    scope.row[item.prop2] +
+                    "-" +
+                    scope.row[item.prop3]
+                  }}
+                </span>
+                <span v-else-if="item.prop === 'status'">{{
+                  scope.row[item.prop] === 1
+                    ? "发布"
+                    : scope.row[item.prop] === 0
+                    ? "未发布"
+                    : "未知"
+                }}</span>
+                <span v-else>{{ scope.row[item.prop] }}</span></template
+              >
+            </el-table-column></template
+          >
+        </el-table>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closePZ">取 消</el-button>
+        <el-button type="primary" @click="submitPZ">确 定</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 
@@ -151,6 +269,43 @@ export default {
   components: { pagination },
   data() {
     return {
+      tableDataExam: [],
+      tableListExam: [
+        {
+          label: "试卷编码",
+          prop: "code",
+        },
+        {
+          label: "标题前缀",
+          prop: "prefixName",
+        },
+        {
+          label: "试卷标题",
+          prop: "examName",
+        },
+        {
+          label: "业务层级",
+          prop1: "educationName",
+          prop2: "projectName",
+          prop3: "businessName",
+          scope: "moreList",
+          width: "250px",
+        },
+        {
+          label: "发布状态",
+          prop: "publishStatus",
+          scope: "status",
+        },
+      ],
+      templateRadioLS: "",
+      goodsNameLS: "",
+      templateRadio: "",
+      goodsName: "",
+      menuExamList: [],//关联试卷列表
+      onlyId: "",
+      newShowObj: {}, //当前关联题卷OBJ
+      dialogVisiblePZDown: false,
+      aboutExamStatus: false, //关联试卷弹出
       centerDialogVisible: false,
       radio: "",
       headerData: [
@@ -178,29 +333,7 @@ export default {
         },
       ],
       pageInfo: {},
-      tableData: [
-        // {
-        //   courseId: 19,
-        //   menuId: 1,
-        //   parentId: 0,
-        //   status: 1,
-        //   type: 1,
-        // },
-        // {
-        //   courseId: 19,
-        //   menuId: 16,
-        //   parentId: 0,
-        //   status: 1,
-        //   type: 2,
-        // },
-        // {
-        //   courseId: 19,
-        //   menuId: 16,
-        //   parentId: 0,
-        //   status: 1,
-        //   type: 3,
-        // },
-      ],
+      tableData: [],
       tableDataInfos: [],
       tableSet: [
         { label: "编码", prop: "code" },
@@ -235,8 +368,118 @@ export default {
   mounted() {
     this.getDs();
     this.search();
+    this.getSJ();
   },
   methods: {
+    openExamBoxs() {
+      this.templateRadioLS = this.templateRadio;
+      this.dialogVisiblePZDown = true;
+    },
+    //单选触发
+    getTemplateRow(index, row) {
+      this.templateRadioLS = row.examId;
+      this.goodsNameLS = row.examName;
+    },
+    //2确定变化选项
+    submitPZ() {
+      this.templateRadio = this.templateRadioLS;
+      this.goodsName = this.goodsNameLS;
+      this.dialogVisiblePZDown = false;
+    },
+    closePZ() {
+      this.dialogVisiblePZDown = false;
+    },
+    //删除题卷
+    delExam() {
+      this.templateRadio = "";
+      this.goodsName = "";
+    },
+    //1确定关联试卷弹窗
+    submitExam() {
+      if (!this.templateRadio && !this.goodsName) {
+        this.menuExamList = this.menuExamList.filter((item) => {
+          return item.onlyId != this.onlyId;
+        });
+      } else {
+        var arrays = {};
+        let ast = this.onlyId.split("-").map(Number);
+          arrays = {
+            onlyId: this.onlyId,
+            courseId: Number(this.$route.query.id),
+            moduleId: ast[0],
+            chapterId: ast[1],
+            sectionId: ast[2],
+            examId: this.templateRadio,
+            examName:this.goodsName,
+          };
+        var stu = this.menuExamList.some((item) => {
+          return item.onlyId == this.onlyId;
+        });
+        if (stu) {
+          for (let i = 0; i < this.menuExamList.length; i++) {
+            if (this.menuExamList[i].onlyId == this.onlyId) {
+              this.menuExamList[i] = arrays;
+            }
+          }
+        } else {
+          this.menuExamList.push(arrays);
+        }
+      }
+      this.aboutExamStatus = false;
+    },
+    //开启关联试卷盒子
+    openExamBox(node, item) {
+      var ints = item.id.split("-").map(Number)
+      var arr = []
+      if(ints[0] === 1){
+        arr.push(ints[1])
+        if(ints[2]){
+          arr.push(ints[2])
+        }else{
+          arr.push(0)
+        }
+        if(ints[3]){
+          arr.push(ints[3])
+        }else{
+          arr.push(0)
+        }
+      }
+      if(ints[0] === 2){
+        arr.push(0)
+        arr.push(ints[1])
+        if(ints[2]){
+          arr.push(ints[2])
+        }else{
+          arr.push(0)
+        }
+      }
+      if(ints[0] === 3){
+        arr.push(0)
+        arr.push(0)
+        arr.push(ints[1])
+      }
+      var atys = arr.join("-")
+      var setTs = this.menuExamList.some((items) => {
+        return items.onlyId == atys;
+      });
+      if (setTs) {
+        this.menuExamList.map((items) => {
+          if (items.onlyId == atys) {
+            this.templateRadio = items.examId;
+            this.goodsName = items.examName;
+          }
+        });
+      } else {
+        this.templateRadio = "";
+        this.goodsName = "";
+      }
+        this.onlyId = atys;
+      this.aboutExamStatus = true;
+    },
+    //关闭关联试卷盒子
+    closeExam() {
+      this.aboutExamStatus = false;
+    },
     search() {
       this.$api.obtainCourseS(this.$route.query.id).then((res) => {
         this.pageInfo = res.data;
@@ -246,6 +489,34 @@ export default {
         .then((res) => {
           this.tableData = res.rows;
           this.changeApis();
+          this.getList();
+        });
+    },
+    getList() {
+      this.$api
+        .inquireCourseListSmenuexam({ courseId: this.$route.query.id })
+        .then((res) => {
+          res.rows.forEach(item => {
+            var lets = []
+            if(!item.moduleId){
+              lets.push(0)
+            }else{
+              lets.push(item.moduleId)
+            }
+            if(!item.chapterId){
+              lets.push(0)
+            }else{
+              lets.push(item.chapterId)
+            }
+            if(!item.sectionId){
+              lets.push(0)
+            }else{
+              lets.push(item.sectionId)
+            }
+            item.onlyId = lets.join("-")
+          })
+          this.menuExamList =res.rows
+          console.log(this.menuExamList)
         });
     },
     getDs() {
@@ -259,6 +530,11 @@ export default {
         this.theSectionList = res.rows;
       });
     },
+    getSJ() {
+      this.$api.inquirebankexamList({ status: 1 }).then((res) => {
+        this.tableDataExam = res.rows;
+      });
+    },
     openBoxs() {
       this.radio = "";
       this.centerDialogVisible = true;
@@ -411,7 +687,7 @@ export default {
           this.tableDataInfos.splice(indexs, 1);
         }
       });
-      this.tableDataInfos = JSON.parse(JSON.stringify(this.tableDataInfos))
+      this.tableDataInfos = JSON.parse(JSON.stringify(this.tableDataInfos));
     },
     getRowKeys(row) {
       if (this.radio === 1) {
@@ -591,6 +867,7 @@ export default {
       });
       var data = {
         courseId: Number(this.$route.query.id),
+        menuExamList:this.menuExamList,
         menuList: array,
       };
       this.$api.editCoursemenu(data).then((res) => {
@@ -634,4 +911,47 @@ export default {
   justify-content: space-between;
   padding-right: 8px;
 }
+/deep/.el-button {
+  border-radius: 8px;
+}
+/deep/.el-dialog {
+  border-radius: 8px;
+  .el-dialog__header {
+    padding: 0;
+    .hearders {
+      height: 40px;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      padding: 0px 18px 0px 20px;
+      border-bottom: 1px solid #e2e2e2;
+      .leftTitle {
+        font-size: 14px;
+        font-weight: bold;
+        color: #2f4378;
+      }
+      .rightBoxs {
+        display: flex;
+        align-items: center;
+        img {
+          width: 14px;
+          height: 14px;
+          margin-left: 13px;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+  .el-dialog__footer {
+    padding: 0;
+    .dialog-footer {
+      padding: 0px 40px;
+      height: 70px;
+      border-top: 1px solid #e2e2e2;
+      display: flex;
+      align-items: center;
+      justify-content: flex-end;
+    }
+  }
+}
 </style>

+ 107 - 33
src/views/resource/videoManagement/courseManagement/index.vue

@@ -1,5 +1,12 @@
 <template>
   <div id="moduleManagement">
+    <search-box-new
+      ref="searchBox"
+      :formData="formData"
+      :formList="formList"
+      @search="search"
+      @init="init"
+    />
     <table-list
       :tableSets="tableSet"
       :tableData="tableData"
@@ -20,8 +27,8 @@
     </table-list>
     <pagination
       :total="total"
-      :pageSize="pageSize"
-      :currentPage="currentPage"
+      :pageSize="formData.pageSize"
+      :currentPage="formData.pageNum"
       @handleSizeChange="handleSizeChange"
       @handleCurrentChange="handleCurrentChange"
     />
@@ -29,11 +36,11 @@
 </template>
 
 <script>
-import searchBox from "@/components/searchBox";
+import searchBoxNew from "@/components/searchBoxNew";
 import tableList from "@/components/tableList";
 import pagination from "@/components/pagination";
 export default {
-  components: { searchBox, tableList, pagination },
+  components: { searchBoxNew, tableList, pagination },
   data() {
     return {
       loading: false, //当前表单加载是否加载动画
@@ -44,11 +51,72 @@ export default {
         num: true,
         choice: true,
         addHide: false,
+        changeWidth:'220px',
         backFatherBtn: {
           status: false,
           title: "未定义",
         },
       },
+      //搜索
+      formList: [
+        {
+          prop: "educationTypeId",
+          placeholder: "教育类型",
+          scope: "educationType",
+        },
+        {
+          prop: "businessId",
+          placeholder: "业务层次",
+          scope: "businessLevel",
+          edu: "educationTypeId",
+        },
+        {
+          prop: "schoolId",
+          placeholder: "院校",
+          scope: "schoolList",
+          edu: "educationTypeId",
+        },
+        {
+          prop: "majorId",
+          placeholder: "专业",
+          scope: "Professional",
+          edu: "educationTypeId",
+        },
+        {
+          prop: "subjectId",
+          placeholder: "科目",
+          scope: "sujectType",
+          edu: "educationTypeId",
+        },
+        {
+          prop: "prefixName",
+          placeholder: "请输入标题前缀",
+        },
+        {
+          prop: "publishStatus",
+          placeholder: "发布状态",
+          scope: "select",
+          options: [
+            {
+              label: "发布",
+              value: 1,
+            },
+            {
+              label: "未发布",
+              value: 0,
+            },
+          ],
+        },
+        {
+          prop: "courseName",
+          placeholder: "请输入课程名称",
+        },
+      ],
+      formData: {
+        status: "0,1",
+        pageSize: 10,
+        pageNum: 1,
+      },
       // 表单
       tableSet: [
         {
@@ -83,19 +151,19 @@ export default {
           hidden: true,
         },
         {
-          label:"项目类型",
-          prop:"projectName",
-          hidden:true
+          label: "项目类型",
+          prop: "projectName",
+          hidden: true,
         },
         {
-          label:"业务层次",
-          prop:"businessName",
-          hidden:true
+          label: "业务层次",
+          prop: "businessName",
+          hidden: true,
         },
         {
-          label:"科目",
-          prop:"subjectName",
-          hidden:true
+          label: "科目",
+          prop: "subjectName",
+          hidden: true,
         },
         {
           label: "发布状态",
@@ -119,16 +187,16 @@ export default {
           label: "课程章节",
           prop: "courseId",
           hidden: true,
-          width:"120px",
-          scope:"aboutTrees"
+          width: "120px",
+          scope: "aboutTrees",
         },
         {
-          label:"关联商品",
+          label: "关联商品",
           hidden: true,
-          prop:"goodsList",
-          width:"230px",
-          scope:"goodsList"
-        }
+          prop: "goodsList",
+          width: "230px",
+          scope: "goodsList",
+        },
       ],
       tableData: [], //表单数据
       total: 0, //一共多少条
@@ -143,22 +211,28 @@ export default {
     editInfo(v) {
       this.addClick(v, 0);
     },
-    search(v) {
+    search(int) {
       this.loading = true;
-      var data = {
-        status: 1,
-        pageSize: this.pageSize,
-        pageNum: this.currentPage,
-      };
-      this.$api.inquireCourseListS(data).then((res) => {
+        if (int === 1) {
+        this.formData.pageNum = 1;
+      }
+      if (int === 2) {
+        this.formData = {
+          status: "0,1",
+          pageSize: 10,
+          pageNum: 1,
+        };
+      }
+      this.$api.inquireCourseListS(this.formData).then((res) => {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
-      this.search();
+      this.search(2);
     },
     del(v) {
       this.$alert(
@@ -209,12 +283,12 @@ export default {
       }
     },
     handleSizeChange(v) {
-      this.pageSize = v;
-      this.currentPage = 1;
+      this.formData.pageSize = v;
+      this.formData.pageNum = 1;
       this.search();
     },
     handleCurrentChange(v) {
-      this.currentPage = v;
+      this.formData.pageNum = v;
       this.search();
     },
   },

+ 11 - 6
src/views/resource/videoManagement/festival/add/index.vue

@@ -56,12 +56,12 @@
             <el-button size="mini" type="primary" @click="submitSujectArray"
               >确定</el-button
             ></div>
-            <el-button slot="reference" style="margin-left: 12px"
+            <el-button slot="reference" style="margin-left: 12px" @click="getMessage"
               >请选择科目</el-button
             >
           </el-popover>
         </el-form-item>
-        <el-form-item label="已选业务层级">
+        <el-form-item label="">
           <div :class="changeHeight ? 'ach' : 'clh'">
             <div
               v-for="(item, index) in newSujectApis"
@@ -86,7 +86,7 @@
             @click="changeType"
             >{{ changeHeight ? "展开" : "关闭" }}</el-button
           >
-          <span v-if="newSujectApis.length === 0">未选项目类型</span>
+          <!-- <span v-if="newSujectApis.length === 0">未选项目类型</span> -->
         </el-form-item>
         <el-form-item label="标题前缀" prop="prefixName">
           <el-input v-model="listData.prefixName"></el-input>
@@ -95,7 +95,7 @@
           <el-input v-model="listData.name"></el-input>
         </el-form-item>
         <el-form-item label="节类型">
-          <el-select v-model="listData.sectionType" placeholder="请选择节类型">
+          <el-select clearable v-model="listData.sectionType" placeholder="请选择节类型">
             <el-option
               v-for="(item, index) in sectionTypeOptions"
               :key="index"
@@ -326,6 +326,11 @@ export default {
     this.getDict();
   },
   methods: {
+    getMessage() {
+      if (!this.courType) {
+        this.$message.warning("请先选择业务层级");
+      }
+    },
     clearImgs() {
       this.listData.coverUrl = "";
     },
@@ -549,8 +554,8 @@ export default {
         self.$set(self.listData, "coverUrl", "");
         return;
       }
-      if (file.size > 2 * 1024 * 1024) {
-        self.$message.error("图片不得大于2MB");
+      if (file.size > 0.3 * 1024 * 1024) {
+        self.$message.error("图片不得大于300kb");
         return;
       }
       var type = self.$refs.file.value.toLowerCase().split(".").splice(-1);

+ 11 - 6
src/views/resource/videoManagement/festival/edit/index.vue

@@ -55,12 +55,12 @@
             <el-button size="mini" type="primary" @click="submitSujectArray"
               >确定</el-button
             ></div>
-            <el-button slot="reference" style="margin-left: 12px"
+            <el-button slot="reference" style="margin-left: 12px" @click="getMessage"
               >请选择科目</el-button
             >
           </el-popover>
         </el-form-item>
-        <el-form-item label="已选业务层级">
+        <el-form-item label="">
           <div :class="changeHeight ? 'ach' : 'clh'">
             <div
               v-for="(item, index) in newSujectApis"
@@ -85,7 +85,7 @@
             @click="changeType"
             >{{ changeHeight ? "展开" : "关闭" }}</el-button
           >
-          <span v-if="newSujectApis.length === 0">未选项目类型</span>
+          <!-- <span v-if="newSujectApis.length === 0">未选项目类型</span> -->
         </el-form-item>
         <el-form-item label="标题前缀" prop="prefixName">
           <el-input v-model="listData.prefixName"></el-input>
@@ -94,7 +94,7 @@
           <el-input v-model="listData.name"></el-input>
         </el-form-item>
         <el-form-item label="节类型">
-          <el-select v-model="listData.sectionType" placeholder="请选择节类型">
+          <el-select clearable v-model="listData.sectionType" placeholder="请选择节类型">
             <el-option
               v-for="(item, index) in sectionTypeOptions"
               :key="index"
@@ -325,6 +325,11 @@ export default {
     this.search();
   },
   methods: {
+    getMessage() {
+      if (!this.courType) {
+        this.$message.warning("请先选择业务层级");
+      }
+    },
     search() {
       this.$api.obtainCourseSection(this.$route.query.id).then((res) => {
         this.bfImg = res.data.coverUrl;
@@ -568,8 +573,8 @@ export default {
         self.$set(self.listData, "coverUrl", "");
         return;
       }
-      if (file.size > 2 * 1024 * 1024) {
-        self.$message.error("图片不得大于2MB");
+      if (file.size > 0.3 * 1024 * 1024) {
+        self.$message.error("图片不得大于300kb");
         return;
       }
       var type = self.$refs.file.value.toLowerCase().split(".").splice(-1);

+ 117 - 30
src/views/resource/videoManagement/festival/index.vue

@@ -1,5 +1,12 @@
 <template>
   <div id="festival">
+    <search-box-new
+      ref="searchBox"
+      :formData="formData"
+      :formList="formList"
+      @search="search"
+      @init="init"
+    />
     <table-list
       :tableSets="tableSet"
       :tableData="tableData"
@@ -17,8 +24,8 @@
     </table-list>
     <pagination
       :total="total"
-      :pageSize="pageSize"
-      :currentPage="currentPage"
+      :pageSize="formData.pageSize"
+      :currentPage="formData.pageNum"
       @handleSizeChange="handleSizeChange"
       @handleCurrentChange="handleCurrentChange"
     />
@@ -26,11 +33,11 @@
 </template>
 
 <script>
-import searchBox from "@/components/searchBox";
+import searchBoxNew from "@/components/searchBoxNew";
 import tableList from "@/components/tableList";
 import pagination from "@/components/pagination";
 export default {
-  components: { searchBox, tableList, pagination },
+  components: { searchBoxNew, tableList, pagination },
   data() {
     return {
       loading: false, //当前表单加载是否加载动画
@@ -38,7 +45,7 @@ export default {
         title: "节类型",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -46,36 +53,109 @@ export default {
           title: "未定义",
         },
       },
+      //搜索
+      formList: [
+        {
+          prop: "educationTypeId",
+          placeholder: "教育类型",
+          scope: "educationType",
+        },
+        {
+          prop: "businessId",
+          placeholder: "业务层次",
+          scope: "businessLevel",
+          edu:"educationTypeId"
+        },
+        {
+          prop: "subjectId",
+          placeholder: "科目",
+          scope: "sujectType",
+          edu:"educationTypeId"
+        },
+        {
+          prop: "sectionType",
+          placeholder: "节类型",
+          scope: "select",
+          options: [
+            {
+              label: "录播",
+              value: 1,
+            },
+            {
+              label: "直播",
+              value: 2,
+            },
+            {
+              label: "回放",
+              value: 3,
+            },
+          ],
+        },
+        {
+          prop: "prefixName",
+          placeholder: "请输入标题前缀",
+        },
+        {
+          prop: "publishStatus",
+          placeholder: "发布状态",
+          scope: "select",
+          options: [
+            {
+              label: "发布",
+              value: 1,
+            },
+            {
+              label: "未发布",
+              value: 0,
+            },
+          ],
+        },
+        {
+          prop: "name",
+          placeholder: "请输入节标题",
+        },
+      ],
+      formData: {
+        status: "0,1",
+        pageSize: 10,
+        pageNum: 1,
+      },
       // 表单
       tableSet: [
         {
           label: "节编码",
           prop: "code",
           hidden: true,
+          width: "140",
         },
         {
           label: "标题前缀",
           prop: "prefixName",
           hidden: true,
+          width: "120",
         },
         {
           label: "节标题",
           prop: "name",
           hidden: true,
           scope: "editInfo",
+          width: "120",
         },
         {
           label: "适用业务层级",
           prop: "businessList",
           hidden: true,
-          scope:"mapTypesMores",
-          width:"400"
+          scope: "mapTypesMores",
+          width: "280",
+        },
+        {
+          label: "关联章",
+          prop: "chapterList",
+          prop1: "chapterName",
+          hidden: true,
+          scope: "aboutChapter",
+          width: "150",
         },
-        // {
-        //   label: "关联章",
-        //   prop: "educationName",
-        //   hidden: true,
-        // },
         // {
         //   label: "关联模块",
         //   prop: "educationName",
@@ -90,27 +170,28 @@ export default {
           label: "节类型",
           prop: "sectionType",
           hidden: true,
-          scope:"sectionTypes"
+          scope: "sectionTypesTTT",
         },
         {
           label: "节时长",
-          prop:"durationTime",
+          prop: "durationTime",
           hidden: true,
-          width:"100"
+          width: "100",
+          ch: "分钟",
         },
         {
           label: "直播开始时间",
           prop: "liveStartTime",
           hidden: true,
           scope: "aTimeList",
-          width:"160"
+          width: "160",
         },
         {
           label: "直播结束时间",
           prop: "liveEndTime",
           hidden: true,
           scope: "aTimeList",
-          width:"160"
+          width: "160",
         },
         {
           label: "发布状态",
@@ -132,22 +213,28 @@ export default {
     editInfo(v) {
       this.addClick(v, 0);
     },
-    search(v) {
+    search(int) {
       this.loading = true;
-      var data = {
-        status: 1,
-        pageSize: this.pageSize,
-        pageNum: this.currentPage,
-      };
-      this.$api.inquireCourseSection(data).then((res) => {
+      if (int === 1) {
+        this.formData.pageNum = 1;
+      }
+      if (int === 2) {
+        this.formData = {
+          status: "0,1",
+          pageSize: 10,
+          pageNum: 1,
+        };
+      }
+      this.$api.inquireCourseSection(this.formData).then((res) => {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
-      this.search();
+      this.search(2);
     },
     del(v) {
       this.$alert(
@@ -189,12 +276,12 @@ export default {
       }
     },
     handleSizeChange(v) {
-      this.pageSize = v;
-      this.currentPage = 1;
+      this.formData.pageSize = v;
+      this.formData.pageNum = 1;
       this.search();
     },
     handleCurrentChange(v) {
-      this.currentPage = v;
+      this.formData.pageNum = v;
       this.search();
     },
   },

+ 158 - 53
src/views/resource/videoManagement/flow/index.vue

@@ -1,5 +1,12 @@
 <template>
   <div id="flow">
+    <search-box-new
+      ref="searchBox"
+      :formData="formData"
+      :formList="formList"
+      @search="search"
+      @init="init"
+    />
     <table-list
       :tableSets="tableSet"
       :tableData="tableData"
@@ -17,14 +24,14 @@
     </table-list>
     <pagination
       :total="total"
-      :pageSize="pageSize"
-      :currentPage="currentPage"
+      :pageSize="formData.pageSize"
+      :currentPage="formData.pageNum"
       @handleSizeChange="handleSizeChange"
       @handleCurrentChange="handleCurrentChange"
     />
     <el-dialog
       :visible.sync="dialogVisible"
-      width="590px"
+      width="630px"
       :show-close="false"
       :close-on-click-modal="false"
     >
@@ -95,7 +102,6 @@
                   @click="changeType"
                   >{{ changeHeight ? "展开" : "关闭" }}</el-button
                 >
-                <span v-if="zhType.length === 0">未选业务类型</span>
               </div>
               <div
                 v-else-if="items.scope === 'certificate'"
@@ -128,7 +134,10 @@
                       >{{ item.businessName }}</el-checkbox
                     >
                   </el-checkbox-group>
-                  <el-button slot="reference" style="margin-left: 12px"
+                  <el-button
+                    slot="reference"
+                    style="margin-left: 12px"
+                    @click="getMessage"
                     >请选择项目类型</el-button
                   >
                 </el-popover>
@@ -146,11 +155,29 @@
                 >
                 </el-option>
               </el-select>
-              <el-input
-                :disabled="statusPop === 2"
-                v-else
-                v-model="listData[items.prop]"
-              ></el-input>
+              <div v-else-if="items.scope === 'showText'">
+                <el-input
+                  :disabled="statusPop === 2"
+                  v-model="listData[items.prop]"
+                ></el-input>
+                <div>
+                  {{
+                    listData["streamingType"] === 1
+                      ? items.ch
+                      : listData["streamingType"] === 2 ||
+                        listData["streamingType"] === 3
+                      ? items.ch1
+                      : ""
+                  }}
+                </div>
+              </div>
+              <div v-else>
+                <el-input
+                  :disabled="statusPop === 2"
+                  v-model="listData[items.prop]"
+                ></el-input>
+                <div v-if="items.ch">{{ items.ch }}</div>
+              </div>
             </el-form-item>
           </template>
         </el-form>
@@ -169,11 +196,11 @@
 </template>
 
 <script>
-import searchBox from "@/components/searchBox";
+import searchBoxNew from "@/components/searchBoxNew";
 import tableList from "@/components/tableList";
 import pagination from "@/components/pagination";
 export default {
-  components: { searchBox, tableList, pagination },
+  components: { searchBoxNew, tableList, pagination },
   data() {
     return {
       changeHeight: true,
@@ -182,7 +209,7 @@ export default {
         title: "流媒体管理",
         index: 0,
         ch: "条",
-        num: false,
+        num: true,
         choice: true,
         addHide: false,
         backFatherBtn: {
@@ -196,24 +223,32 @@ export default {
           label: "流地址编码",
           prop: "code",
           hidden: true,
+          width: "160px",
         },
         {
           label: "流地址名称",
           prop: "streamingName",
           hidden: true,
           scope: "editInfo",
+          width: "120px",
         },
         {
-          label: "流地址",
-          prop: "livePushUrl",
+          label: "直播/录播/回放地址",
+          prop: "streamingType",
+          prop1: "liveUrl",
+          prop2: "recordingVideoId",
+          prop3: "playbackUrl",
+          hidden: true,
+          width: "160px",
+          scope: "urlStatus",
+        },
+        {
+          label: "适用业务层级",
+          prop: "businessList",
           hidden: true,
+          scope: "mapTypes",
+          width: "240px",
         },
-        // {
-        //   label: "适用业务层级",
-        //   prop: "courseProjectTypes",
-        //   hidden: true,
-        //   scope: "mapTypes",
-        // },
         {
           label: "视频类型",
           prop: "streamingType",
@@ -228,9 +263,64 @@ export default {
         },
       ],
       tableData: [], //表单数据
+      //搜索
+      formList: [
+        {
+          prop: "educationTypeId",
+          placeholder: "教育类型",
+          scope: "educationType",
+        },
+        {
+          prop: "businessId",
+          placeholder: "业务层次",
+          scope: "businessLevel",
+          edu:"educationTypeId"
+        },
+        {
+          prop: "streamingType",
+          placeholder: "视频类型",
+          scope: "select",
+          options: [
+            {
+              label: "直播",
+              value: 1,
+            },
+            {
+              label: "录播",
+              value: 2,
+            },
+            {
+              label: "回放",
+              value: 3,
+            },
+          ],
+        },
+        {
+          prop: "streamingAddressType",
+          placeholder: "流地址类型",
+          scope: "select",
+          options: [
+            {
+              label: "正式",
+              value: 1,
+            },
+            {
+              label: "测试",
+              value: 2,
+            },
+          ],
+        },
+        {
+          prop: "streamingName",
+          placeholder: "请输入流地址名称",
+        },
+      ],
+      formData: {
+        status: "0,1",
+        pageSize: 10,
+        pageNum: 1,
+      },
       total: 0, //一共多少条
-      pageSize: 10, //每页多少条数据
-      currentPage: 1, //当前页码
       options1: [],
       options2: [],
       courseProjectType: [],
@@ -246,7 +336,7 @@ export default {
           scope: "certificate",
         },
         {
-          label: "已选业务层级",
+          label: "",
           scope: "activeType",
         },
         {
@@ -255,11 +345,11 @@ export default {
           scope: "select",
           options: [
             {
-              label: "播",
+              label: "播",
               value: 1,
             },
             {
-              label: "播",
+              label: "播",
               value: 2,
             },
             {
@@ -271,6 +361,9 @@ export default {
         {
           label: "流地址名称",
           prop: "streamingName",
+          scope: "showText",
+          ch: "注:请填写第三方直播间的直播名称",
+          ch1: "注:请填写与节相关的名称",
         },
         {
           label: "录播地址",
@@ -286,6 +379,7 @@ export default {
           label: "直播间频道号",
           prop: "liveChannelNumber",
           hide: "two",
+          ch: "注:请填写第三方直播间的频道号",
         },
         {
           label: " 推流地址",
@@ -342,19 +436,19 @@ export default {
         liveChannelNumber: [
           { required: true, message: "请输入直播间频道号", trigger: "blur" },
         ],
-        livePushUrl: [
-          { required: true, message: "请输入推流地址", trigger: "blur" },
-        ],
-        livePullUrl: [
-          { required: true, message: "请输入直播拉流(播放)地址", trigger: "blur" },
-        ],
+        // livePushUrl: [
+        //   { required: true, message: "请输入推流地址", trigger: "blur" },
+        // ],
+        // livePullUrl: [
+        //   { required: true, message: "请输入直播拉流(播放)地址", trigger: "blur" },
+        // ],
         liveUrl: [
           { required: true, message: "请输入直播地址", trigger: "blur" },
         ],
-        recordingVideoId:[
+        recordingVideoId: [
           { required: true, message: "请输入录播地址", trigger: "blur" },
         ],
-        playbackUrl:[
+        playbackUrl: [
           { required: true, message: "请输入回放地址", trigger: "blur" },
         ],
         streamingAddressType: [
@@ -377,6 +471,11 @@ export default {
     this.initOptions();
   },
   methods: {
+    getMessage() {
+      if (!this.eduType) {
+        this.$message.warning("请先选择教育类型");
+      }
+    },
     changeType() {
       this.changeHeight = !this.changeHeight;
     },
@@ -418,7 +517,7 @@ export default {
     },
     pdTypes(items) {
       if (items.hide === "two") {
-        if (this.listData.streamingType === 2) {
+        if (this.listData.streamingType === 1) {
           return true;
         } else {
           return false;
@@ -432,7 +531,7 @@ export default {
         }
       }
       if (items.hide === "one") {
-        if (this.listData.streamingType === 1) {
+        if (this.listData.streamingType === 2) {
           return true;
         } else {
           return false;
@@ -440,22 +539,28 @@ export default {
       }
       return true;
     },
-    search(v) {
+    search(int) {
       this.loading = true;
-      var data = {
-        status: 1,
-        pageSize: this.pageSize,
-        pageNum: this.currentPage,
-      };
-      this.$api.inquireCourseStreaming(data).then((res) => {
+      if (int === 1) {
+        this.formData.pageNum = 1;
+      }
+      if (int === 2) {
+        this.formData = {
+          status: "0,1",
+          pageSize: 10,
+          pageNum: 1,
+        };
+      }
+      this.$api.inquireCourseStreaming(this.formData).then((res) => {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
-      this.search();
+      this.search(2);
     },
     closeType(id) {
       this.cauType.splice(this.cauType.indexOf(id), 1);
@@ -539,15 +644,15 @@ export default {
         introduce: this.listData.introduce,
         streamingAddressType: this.listData.streamingAddressType,
       };
-      if (this.listData.streamingType === 2) {
-        dataInfos.streamingType = 2;
+      if (this.listData.streamingType === 1) {
+        dataInfos.streamingType = 1;
         dataInfos.liveUrl = this.listData.liveUrl;
         dataInfos.liveChannelNumber = this.listData.liveChannelNumber;
         dataInfos.livePullUrl = this.listData.livePullUrl;
         dataInfos.livePushUrl = this.listData.livePushUrl;
       }
-      if (this.listData.streamingType === 1) {
-        dataInfos.streamingType = 1;
+      if (this.listData.streamingType === 2) {
+        dataInfos.streamingType = 2;
         dataInfos.recordingVideoId = this.listData.recordingVideoId;
       }
       if (this.listData.streamingType === 3) {
@@ -574,12 +679,12 @@ export default {
       this.dialogVisible = false;
     },
     handleSizeChange(v) {
-      this.pageSize = v;
-      this.currentPage = 1;
+      this.formData.pageSize = v;
+      this.formData.pageNum = 1;
       this.search();
     },
     handleCurrentChange(v) {
-      this.currentPage = v;
+      this.formData.pageNum = v;
       this.search();
     },
   },

+ 9 - 5
src/views/resource/videoManagement/moduleManagement/add/index.vue

@@ -56,12 +56,12 @@
                 >确定</el-button
               >
             </div>
-            <el-button slot="reference" style="margin-left: 12px"
+            <el-button slot="reference" style="margin-left: 12px" @click="getMessage"
               >请选择科目</el-button
             >
           </el-popover>
         </el-form-item>
-        <el-form-item label="已选业务层级">
+        <el-form-item label="">
           <div :class="changeHeight ? 'ach' : 'clh'">
             <div
               v-for="(item, index) in newSujectApis"
@@ -86,7 +86,6 @@
             @click="changeType"
             >{{ changeHeight ? "展开" : "关闭" }}</el-button
           >
-          <span v-if="newSujectApis.length === 0">未选项目类型</span>
         </el-form-item>
         <el-form-item label="标题前缀" prop="prefixName">
           <el-input v-model="listData.prefixName"></el-input>
@@ -367,6 +366,11 @@ export default {
     // this.search();
   },
   methods: {
+    getMessage() {
+      if (!this.courType) {
+        this.$message.warning("请先选择业务层级");
+      }
+    },
     openBoxs() {
       var self = this;
       this.$api
@@ -593,8 +597,8 @@ export default {
         self.$set(self.listData, "coverUrl", "");
         return;
       }
-      if (file.size > 2 * 1024 * 1024) {
-        self.$message.error("图片不得大于2MB");
+      if (file.size > 0.3 * 1024 * 1024) {
+        self.$message.error("图片不得大于300kb");
         return;
       }
       var type = self.$refs.file.value.toLowerCase().split(".").splice(-1);

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

@@ -61,7 +61,7 @@
             >
           </el-popover>
         </el-form-item>
-        <el-form-item label="已选业务层级">
+        <el-form-item label="">
           <div :class="changeHeight ? 'ach' : 'clh'">
             <div
               v-for="(item, index) in newSujectApis"
@@ -86,7 +86,7 @@
             @click="changeType"
             >{{ changeHeight ? "展开" : "关闭" }}</el-button
           >
-          <span v-if="newSujectApis.length === 0">未选项目类型</span>
+          <!-- <span v-if="newSujectApis.length === 0">未选项目类型</span> -->
         </el-form-item>
         <el-form-item label="标题前缀" prop="prefixName">
           <el-input v-model="listData.prefixName"></el-input>
@@ -366,6 +366,11 @@ export default {
     this.search();
   },
   methods: {
+    getMessage() {
+      if (!this.courType) {
+        this.$message.warning("请先选择业务层级");
+      }
+    },
     openBoxs() {
       var self = this;
       this.$api
@@ -593,8 +598,8 @@ export default {
         self.$set(self.listData, "coverUrl", "");
         return;
       }
-      if (file.size > 2 * 1024 * 1024) {
-        self.$message.error("图片不得大于2MB");
+      if (file.size > 0.3 * 1024 * 1024) {
+        self.$message.error("图片不得大于300kb");
         return;
       }
       var type = self.$refs.file.value.toLowerCase().split(".").splice(-1);

+ 84 - 21
src/views/resource/videoManagement/moduleManagement/index.vue

@@ -1,5 +1,12 @@
 <template>
   <div id="moduleManagement">
+    <search-box-new
+      ref="searchBox"
+      :formData="formData"
+      :formList="formList"
+      @search="search"
+      @init="init"
+    />
     <table-list
       :tableSets="tableSet"
       :tableData="tableData"
@@ -17,8 +24,8 @@
     </table-list>
     <pagination
       :total="total"
-      :pageSize="pageSize"
-      :currentPage="currentPage"
+      :pageSize="formData.pageSize"
+      :currentPage="formData.pageNum"
       @handleSizeChange="handleSizeChange"
       @handleCurrentChange="handleCurrentChange"
     />
@@ -26,11 +33,11 @@
 </template>
 
 <script>
-import searchBox from "@/components/searchBox";
+import searchBoxNew from "@/components/searchBoxNew";
 import tableList from "@/components/tableList";
 import pagination from "@/components/pagination";
 export default {
-  components: { searchBox, tableList, pagination },
+  components: { searchBoxNew, tableList, pagination },
   data() {
     return {
       loading: false, //当前表单加载是否加载动画
@@ -46,30 +53,81 @@ export default {
           title: "未定义",
         },
       },
+      //搜索
+      formList: [
+        {
+          prop: "educationTypeId",
+          placeholder: "教育类型",
+          scope: "educationType",
+        },
+        {
+          prop: "businessId",
+          placeholder: "业务层次",
+          scope: "businessLevel",
+          edu: "educationTypeId",
+        },
+        {
+          prop: "subjectId",
+          placeholder: "科目",
+          scope: "sujectType",
+          edu: "educationTypeId",
+        },
+        {
+          prop: "prefixName",
+          placeholder: "请输入标题前缀",
+        },
+        {
+          prop: "publishStatus",
+          placeholder: "发布状态",
+          scope: "select",
+          options: [
+            {
+              label: "发布",
+              value: 1,
+            },
+            {
+              label: "未发布",
+              value: 0,
+            },
+          ],
+        },
+        {
+          prop: "moduleName",
+          placeholder: "请输入模块标题",
+        },
+      ],
+      formData: {
+        status: "0,1",
+        pageSize: 10,
+        pageNum: 1,
+      },
       // 表单
       tableSet: [
         {
           label: "模块编码",
           prop: "code",
           hidden: true,
+          width: "120",
         },
         {
           label: "标题前缀",
           prop: "prefixName",
           hidden: true,
+          width: "120",
         },
         {
           label: "模块标题",
           prop: "moduleName",
           hidden: true,
           scope: "editInfo",
+          width: "120",
         },
         {
           label: "适用业务层级",
           prop: "businessList",
           hidden: true,
-          scope:"mapTypesMores",
-          width:"400"
+          scope: "mapTypesMores",
+          width: "240",
         },
         // {
         //   label: "关联课程",
@@ -90,6 +148,7 @@ export default {
           label: "学习时长",
           prop: "durationTime",
           hidden: true,
+          ch: "分钟",
         },
         {
           label: "发布状态",
@@ -100,8 +159,6 @@ export default {
       ],
       tableData: [], //表单数据
       total: 0, //一共多少条
-      pageSize: 10, //每页多少条数据
-      currentPage: 1, //当前页码
     };
   },
   mounted() {
@@ -111,22 +168,28 @@ export default {
     editInfo(v) {
       this.addClick(v, 0);
     },
-    search(v) {
+    search(int) {
       this.loading = true;
-      var data = {
-        status: 1,
-        pageSize: this.pageSize,
-        pageNum: this.currentPage,
-      };
-      this.$api.inquireCourseListmodule(data).then((res) => {
+      if (int === 1) {
+        this.formData.pageNum = 1;
+      }
+      if (int === 2) {
+        this.formData = {
+          status: "0,1",
+          pageSize: 10,
+          pageNum: 1,
+        };
+      }
+      this.$api.inquireCourseListmodule(this.formData).then((res) => {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
-      this.search();
+      this.search(2);
     },
     del(v) {
       this.$alert(
@@ -168,12 +231,12 @@ export default {
       }
     },
     handleSizeChange(v) {
-      this.pageSize = v;
-      this.currentPage = 1;
+      this.formData.pageSize = v;
+      this.formData.pageNum = 1;
       this.search();
     },
     handleCurrentChange(v) {
-      this.currentPage = v;
+      this.formData.pageNum = v;
       this.search();
     },
   },

+ 3 - 2
src/views/systemManagement/accountManagement/index.vue

@@ -279,8 +279,9 @@ export default {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 2 - 2
src/views/systemManagement/myManagement/myProfile/index.vue

@@ -214,8 +214,8 @@ export default {
     uploadImgs(e) {
       var self = this;
       var file = self.$refs.file[0].files[0];
-      if (file.size > 2 * 1024 * 1024) {
-        self.$message.error("图片不得大于2MB");
+      if (file.size > 0.3 * 1024 * 1024) {
+        self.$message.error("图片不得大于300kb");
         return;
       }
       var type = self.$refs.file[0].value.toLowerCase().split(".").splice(-1);

+ 56 - 32
src/views/systemManagement/registeredUser/index.vue

@@ -1,5 +1,12 @@
 <template>
   <div id="registeredUser">
+    <search-box-new
+      ref="searchBox"
+      :formData="formData"
+      :formList="formList"
+      @search="search"
+      @init="init"
+    />
     <table-list
       :tableSets="tableSet"
       :tableData="tableData"
@@ -9,8 +16,8 @@
     </table-list>
     <pagination
       :total="total"
-      :pageSize="pageSize"
-      :currentPage="currentPage"
+      :pageSize="formData.pageSize"
+      :currentPage="formData.pageNum"
       @handleSizeChange="handleSizeChange"
       @handleCurrentChange="handleCurrentChange"
     />
@@ -18,11 +25,11 @@
 </template>
 
 <script>
-import searchBox from "@/components/searchBox";
+import searchBoxNew from "@/components/searchBoxNew";
 import tableList from "@/components/tableList";
 import pagination from "@/components/pagination";
 export default {
-  components: { searchBox, tableList, pagination },
+  components: { searchBoxNew, tableList, pagination },
   data() {
     return {
       loading: false, //当前表单加载是否加载动画
@@ -32,25 +39,37 @@ export default {
         ch: "条",
         num: false,
         choice: true,
-        tableHide:true,
+        tableHide: true,
         addHide: true,
         backFatherBtn: {
           status: false,
           title: "未定义",
         },
       },
+      //搜索
+      formList: [
+        {
+          prop: "nickname",
+          placeholder: "请输入用户昵称",
+        },
+      ],
+      formData: {
+        status: "0,1",
+        pageSize: 10,
+        pageNum: 1,
+      },
       // 表单
       tableSet: [
-        // {
-        //   label: "用户编码",
-        //   prop: "payWay",
-        //   hidden: true,
-        // },
+        {
+          label: "用户编码",
+          prop: "studentCode",
+          hidden: true,
+        },
         {
           label: "头像",
           prop: "oneInchPhotos",
           hidden: true,
-          scope:"img"
+          scope: "img",
         },
         {
           label: "昵称",
@@ -61,7 +80,7 @@ export default {
           label: "性别",
           prop: "sex",
           hidden: true,
-          scope:"sex"
+          scope: "sex",
         },
         // {
         //   label: "年龄",
@@ -85,23 +104,23 @@ export default {
         },
         {
           label: "所在城市",
-          prop1:"province",
+          prop1: "province",
           prop2: "city",
-          prop3:"district",
+          prop3: "district",
           hidden: true,
-          scope:"address"
+          scope: "address",
         },
         {
           label: "注册时间",
           prop: "createTime",
           hidden: true,
-          scope:"aTimeList"
+          scope: "aTimeList",
         },
         {
           label: "归属来源",
           prop: "registerPlat",
           hidden: true,
-          scope:"ptai"
+          scope: "ptai",
         },
         // {
         //   label: "微信绑定",
@@ -112,7 +131,7 @@ export default {
           label: "最后一次登录时间",
           prop: "lastLoginTime",
           hidden: true,
-          scope:"aTimeList"
+          scope: "aTimeList",
         },
       ],
       tableData: [], //表单数据
@@ -125,31 +144,36 @@ export default {
     this.search();
   },
   methods: {
-    search(v) {
+    search(int) {
       this.loading = true;
-      var data = {
-        status: "0,1",
-        pageSize: this.pageSize,
-        pageNum: this.currentPage,
-      };
-      console.log(this.$api)
-      this.$api.inquireappuserlists(data).then((res) => {
+      if (int === 1) {
+        this.formData.pageNum = 1;
+      }
+      if (int === 2) {
+        this.formData = {
+          status: "0,1",
+          pageSize: 10,
+          pageNum: 1,
+        };
+      }
+      this.$api.inquireappuserlists(this.formData).then((res) => {
         this.tableData = res.rows;
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
-      this.search();
+      this.search(2);
     },
     handleSizeChange(v) {
-      this.pageSize = v;
-      this.currentPage = 1;
+      this.formData.pageSize = v;
+      this.formData.pageNum = 1;
       this.search();
     },
     handleCurrentChange(v) {
-      this.currentPage = v;
+      this.formData.pageNum = v;
       this.search();
     },
   },

+ 4 - 3
src/views/systemManagement/roleManagement/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div id="roleManagement">
-    <search-box :formList="formList" @search="search" @init="init" />
+    <!-- <search-box :formList="formList" @search="search" @init="init" /> -->
     <table-list
       :tableSets="tableSet"
       :tableData="tableData"
@@ -308,8 +308,9 @@ export default {
         this.tableData = res.rows.sort(this.sortBy("postSort", true));
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 3 - 2
src/views/systemSettings/jobManagement/index.vue

@@ -269,8 +269,9 @@ export default {
         this.tableData = res.rows.sort(this.sortBy("postSort", true));
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 3 - 2
src/views/systemSettings/modelPage/index.vue

@@ -266,8 +266,9 @@ export default {
           updateBy: "admin",
           updateTime: "2021-06-09 15:55:04",
         },
-      ];
-      this.loading = false;
+      ].finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 3 - 2
src/views/systemSettings/roleInfoManagement/index.vue

@@ -308,8 +308,9 @@ export default {
         this.tableData = res.rows.sort(this.sortBy("postSort", true));
         this.total = res.total;
         this.navText.index = res.total;
-      });
-      this.loading = false;
+      }).finally(()=>{
+        this.loading = false;
+      })
     },
     init() {
       this.search();

+ 29 - 29
src/views/systemSettings/usermanagement/index.vue

@@ -125,10 +125,10 @@
                   placeholder="请选择"
                 >
                   <el-option
-                    v-for="item in items.options"
-                    :key="item[items.option.value]"
-                    :label="item[items.option.label]"
-                    :value="item[items.option.value]"
+                    v-for="(item, index) in dictManages.sys_user_sex"
+                    :key="index"
+                    :label="item"
+                    :value="item"
                   >
                   </el-option>
                 </el-select>
@@ -288,11 +288,6 @@ export default {
           label: "用户性别",
           prop: "sex",
           scope: "select",
-          option: {
-            label: "dictLabel",
-            value: "dictCode",
-          },
-          options: [],
         },
         {
           label: "状态",
@@ -363,7 +358,7 @@ export default {
       },
     };
   },
-    computed: { ...mapGetters(["UserDict"]) },
+  computed: { ...mapGetters(["dictManages"]) },
   watch: {
     filterText(val) {
       this.$refs.tree.filter(val);
@@ -442,17 +437,21 @@ export default {
         pageSize: this.pageSize,
         pageNum: this.currentPage,
       };
-      this.$api.obtainUserList(data).then((res) => {
-        this.tableData = res.rows;
-        this.total = res.total;
-        this.navText.index = res.total;
-        res.rows.forEach((item, index) => {
-          if (item.dept) {
-            this.tableData[index].deptName = item.dept.deptName;
-          }
+      this.$api
+        .obtainUserList(data)
+        .then((res) => {
+          this.tableData = res.rows;
+          this.total = res.total;
+          this.navText.index = res.total;
+          res.rows.forEach((item, index) => {
+            if (item.dept) {
+              this.tableData[index].deptName = item.dept.deptName;
+            }
+          });
+        })
+        .finally(() => {
+          this.loading = false;
         });
-      });
-      this.loading = false;
     },
     //重置
     init() {
@@ -489,6 +488,7 @@ export default {
     },
     //初始数据
     getOptionsRole() {
+      console.log(this.dictManages);
       var data = {
         statusArray: "0,1",
       };
@@ -506,11 +506,11 @@ export default {
           }
         });
       });
-      this.listitem.forEach((item, index) => {
-        if (item.label === "用户性别") {
-          item.options = this.UserDict['sys_user_sex'];
-        }
-      });
+      // this.listitem.forEach((item, index) => {
+      //   if (item.label === "用户性别") {
+      //     // item.options = this.UserDict['sys_user_sex'];
+      //   }
+      // });
     },
     //开启窗口
     addClick(v, int) {
@@ -525,12 +525,12 @@ export default {
           this.listData = res.data;
           this.listData.roleIds = res.roleIds;
           this.listData.postIds = res.postIds;
-          this.listData.sex = Number(res.data.sex);
+          this.listData.sex = res.data.sex;
         });
       }
-      this.$nextTick(()=>{
-this.$refs.listData.clearValidate();
-})
+      this.$nextTick(() => {
+        this.$refs.listData.clearValidate();
+      });
       this.dialogVisible = true;
     },
     //表单验证