Tang пре 3 година
родитељ
комит
521c5206b2

+ 2 - 1
src/api/api.js

@@ -97,7 +97,7 @@ import newOrder from '../newApi/newOrder'//录单管理
 import refund from '../newApi/refund'//退费管理
 import activityRecommend from '../newApi/activityRecommend'//商品推荐管理
 import homeApi from '../newApi/homeApi'//控制台学员数据
-
+import studyAccountStatus from '../newApi/studyAccountStatus'//学习账号标记
 
 
 
@@ -175,6 +175,7 @@ export default {
     ...refund,
     ...activityRecommend,
     ...homeApi,
+    ...studyAccountStatus,
 
     // ...login,
     // ...profession,

+ 8 - 0
src/newApi/homeApi.js

@@ -24,4 +24,12 @@ export default {
             params: data
         })
     },
+    //控制台学时数据
+    baseconsoleperiodData(data) {
+        return request({
+            url: '/base/console/periodData',
+            method: 'get',
+            params: data
+        })
+    },
 }

+ 34 - 0
src/newApi/studyAccountStatus.js

@@ -0,0 +1,34 @@
+import request from '@/utils/request' //引入axios请求及拦截器
+export default {
+    // //新增广告发布储存
+    // appbaseadvertising(data) {
+    //     return request({
+    //         url: '/base/advertising',
+    //         method: 'post',
+    //         data
+    //     })
+    // },
+    // //修改广告发布储存
+    // editbaseadvertising(data) {
+    //     return request({
+    //         url: '/base/advertising/edit',
+    //         method: 'post',
+    //         data
+    //     })
+    // },
+    //查询学习账号标记列表
+    gradelistStudyAccountStatus(data) {
+        return request({
+            url: '/grade/grade/listStudyAccountStatus',
+            method: 'get',
+            params: data
+        })
+    },
+    // //获取广告发布储存详细信息
+    // obtainbaseadvertising(data) {
+    //     return request({
+    //         url: `/base/advertising/` + data,
+    //         method: 'get',
+    //     })
+    // },
+}

+ 2 - 2
src/utils/request.js

@@ -7,8 +7,8 @@ import methods from '@/utils/methodsTool';
 
 axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
 // 创建axios实例
-// export const baseURL = process.env.VUE_APP_BASE_API
-export const baseURL = 'http://192.168.1.24:5030/'
+export const baseURL = process.env.VUE_APP_BASE_API
+// export const baseURL = 'http://192.168.1.24:5030/'
 export const BASE_IMG_URL = process.env.VUE_APP_IMG_API
 const service = axios.create({
   // axios中请求配置有baseURL选项,表示请求URL公共部分

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

@@ -518,21 +518,39 @@
       <div v-if="listData.goodsType === 1 || listData.goodsType === 2">
         <el-form
           label-position="right"
-          label-width="110px"
+          label-width="120px"
           :model="listData"
           :rules="rulesMors3"
           ref="listData3"
         >
+          <template v-if="listData.goodsType === 1">
+            <el-form-item label="学习次数" prop="studyCount" style="margin-top:10px;">
+            <el-input
+              class="numInputs cenSty"
+              v-model="listData.studyCount"
+            ></el-input>
+          </el-form-item>
           <el-form-item
-            label="学习机会"
+            label="考试次数"
             style="margin-top: 12px"
-            prop="studyCount"
+            prop="examNumber"
           >
             <el-input
               class="numInputs cenSty"
-              v-model="listData.studyCount"
+              v-model="listData.examNumber"
+            ></el-input>
+          </el-form-item>
+          <el-form-item
+            label="前培(刷题)机会"
+            style="margin-top: 12px"
+            prop="doNumber"
+          >
+            <el-input
+              class="numInputs cenSty"
+              v-model="listData.doNumber"
             ></el-input>
           </el-form-item>
+          </template>
           <el-form-item
             class="positions"
             label="学习服务期"
@@ -693,7 +711,7 @@
         </el-row>
       </div>
       <!-- 颁发证书 -->
-      <div v-if="listData.goodsType === 1 || listData.goodsType === 2">
+      <div v-if="listData.goodsType === 1">
         <h5
           class="fengs"
           v-if="listData.goodsType === 1 || listData.goodsType === 2"
@@ -1477,7 +1495,17 @@ export default {
       var reg = /^[1-9]\d*$/;
       if (value) {
         if (!reg.test(value)) {
-          return callback(new Error("密码必须由数字和字母组合成"));
+          return callback(new Error("请输入正整数"));
+        } else {
+          callback();
+        }
+      }
+    };
+    var checkExamPwd = (rule, value, callback) => {
+      var reg = /^[0-9]\d*$/;
+      if (value) {
+        if (!reg.test(value)) {
+          return callback(new Error("请输入自然数"));
         } else {
           callback();
         }
@@ -1535,6 +1563,8 @@ export default {
         makeGoodsId: "",
         studyTimeArrays: [],
         timeArrays: [],
+        examNumber: 0,
+        doNumber: 0,
         studyCount: 1,
         serviceTimeType: "",
         serviceTimeNum: "",
@@ -1711,13 +1741,29 @@ export default {
         ],
       },
       rulesMors3: {
+        examNumber: [
+          {
+            required: true,
+            message: "请输入次数",
+            trigger: "blur",
+          },
+          { validator: checkExamPwd, message: "请输入自然数", trigger: "blur" },
+        ],
+        doNumber: [
+          {
+            required: true,
+            message: "请输入次数",
+            trigger: "blur",
+          },
+          { validator: checkExamPwd, message: "请输入自然数", trigger: "blur" },
+        ],
         studyCount: [
           {
             required: true,
             message: "请输入次数",
             trigger: "blur",
           },
-          { validator: checkPwd, message: "请输入非零正整数", trigger: "blur" },
+          { validator: checkPwd, message: "请输入正整数", trigger: "blur" },
         ],
         openStudentTime: [
           {
@@ -2122,6 +2168,8 @@ export default {
       }
     },
     changeTypes() {
+      this.listData.examNumber = 0;
+      this.listData.doNumber = 0;
       this.listData.studyCount = 1;
       this.listData.timeArrays = [
         new Date().getTime(),

+ 72 - 14
src/views/Marketing/goods/commodityManageMent/edit/index.vue

@@ -524,21 +524,43 @@
       <div v-if="listData.goodsType === 1 || listData.goodsType === 2">
         <el-form
           label-position="right"
-          label-width="110px"
+          label-width="120px"
           :model="listData"
           :rules="rulesMors3"
           ref="listData3"
         >
-          <el-form-item
-            label="学习机会"
-            style="margin-top: 12px"
-            prop="studyCount"
-          >
-            <el-input
-              class="numInputs cenSty"
-              v-model="listData.studyCount"
-            ></el-input>
-          </el-form-item>
+          <template v-if="listData.goodsType === 1">
+            <el-form-item
+              label="学习次数"
+              prop="studyCount"
+              style="margin-top: 10px"
+            >
+              <el-input
+                class="numInputs cenSty"
+                v-model="listData.studyCount"
+              ></el-input>
+            </el-form-item>
+            <el-form-item
+              label="考试次数"
+              style="margin-top: 12px"
+              prop="examNumber"
+            >
+              <el-input
+                class="numInputs cenSty"
+                v-model="listData.examNumber"
+              ></el-input>
+            </el-form-item>
+            <el-form-item
+              label="前培(刷题)机会"
+              style="margin-top: 12px"
+              prop="doNumber"
+            >
+              <el-input
+                class="numInputs cenSty"
+                v-model="listData.doNumber"
+              ></el-input>
+            </el-form-item>
+          </template>
 
           <el-form-item
             class="positions"
@@ -698,7 +720,7 @@
           </el-col>
         </el-row>
       </div>
-      <div v-if="listData.goodsType === 1 || listData.goodsType === 2">
+      <div v-if="listData.goodsType === 1">
         <h5
           class="fengs"
           v-if="listData.goodsType === 1 || listData.goodsType === 2"
@@ -1483,7 +1505,23 @@ export default {
       var reg = /^[1-9]\d*$/;
       if (value) {
         if (!reg.test(value)) {
-          return callback(new Error("密码必须由数字和字母组合成"));
+          return callback(new Error("请输入正整数"));
+        } else if (value < this.copyNums) {
+          return callback(new Error(`不能小于${this.copyNums}次`));
+        } else {
+          callback();
+        }
+      }
+    };
+    var checkExamPwd = (rule, value, callback) => {
+      var reg = /^[0-9]\d*$/;
+      if (value) {
+        if (!reg.test(value)) {
+          return callback(new Error("请输入自然数"));
+        } else if (rule.field === "examNumber" && value < this.copyExamNumber) {
+          return callback(new Error(`不能小于${this.copyExamNumber}次`));
+        } else if (rule.field === "doNumber" && value < this.copyDoNumber) {
+          return callback(new Error(`不能小于${this.copyDoNumber}次`));
         } else {
           callback();
         }
@@ -1509,6 +1547,8 @@ export default {
         },
       ],
       copyNums: "", //备份学习机会 - 用途在于 如果出现修改学习机会 不能小于当前值
+      copyExamNumber: "", //备份考试机会 - 用途在于 如果出现修改考试机会 不能小于当前值
+      copyDoNumber: "", //备份前培机会 - 用途在于 如果出现修改前培机会 不能小于当前值
       disabledBtn: false,
       photoVideoList: {
         playConfig: {
@@ -1729,13 +1769,29 @@ export default {
         ],
       },
       rulesMors3: {
+        examNumber: [
+          {
+            required: true,
+            message: "请输入次数",
+            trigger: "blur",
+          },
+          { validator: checkExamPwd, trigger: "blur" },
+        ],
+        doNumber: [
+          {
+            required: true,
+            message: "请输入次数",
+            trigger: "blur",
+          },
+          { validator: checkExamPwd, trigger: "blur" },
+        ],
         studyCount: [
           {
             required: true,
             message: "请输入次数",
             trigger: "blur",
           },
-          { validator: checkPwd, message: "请输入非零正整数", trigger: "blur" },
+          { validator: checkPwd, trigger: "blur" },
         ],
         openStudentTime: [
           {
@@ -2608,6 +2664,8 @@ export default {
           }
         }
         this.copyNums = res.data.studyCount;
+        this.copyExamNumber = res.data.examNumber || 0;
+        this.copyDoNumber = res.data.doNumber || 0;
         res.data.year = res.data.year + "";
         this.listData = res.data;
         // //富文本编辑器神坑处理

+ 308 - 0
src/views/education/classManageMent/learningAccoutTags/index.vue

@@ -0,0 +1,308 @@
+<template>
+  <div id="learningAccoutTags">
+    <table-list
+      :tableSets="tableSet"
+      :tableData="tableData"
+      :navText="navText"
+      :loading="loading"
+    >
+      <template slot="customize">
+        <el-select
+          v-model="formData['educationTypeId']"
+          placeholder="请选择教育类型"
+          size="medium"
+          @change="search(1)"
+        >
+          <el-option
+            v-for="(items, indexs) in educationType"
+            :key="indexs"
+            :label="items.educationName"
+            :value="items.id"
+          ></el-option>
+        </el-select>
+      </template>
+      <template slot="btn" slot-scope="props">
+        <el-button
+          type="text"
+          v-if="props.scope.row.interfaceNum > 0"
+          @click="getInter(1, props.scope.row)"
+          >有接口数据标记</el-button
+        >
+        <el-button
+          type="text"
+          v-if="props.scope.row.noInterfaceNum > 0"
+          @click="getInter(2, 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";
+import { mapGetters } from "vuex";
+export default {
+  name: "LearningAccoutTags",
+  components: { tableList, pagination },
+  data() {
+    return {
+      disabledBtn: false,
+      loading: false, //当前表单加载是否加载动画
+      navText: {
+        title: "学习账号标记",
+        index: 0,
+        ch: "条",
+        num: true,
+        choice: true,
+        addHide: true,
+        backFatherBtn: {
+          status: false,
+          title: "未定义",
+        },
+      },
+      // 表单
+      tableSet: [
+        {
+          label: "业务层次",
+          prop1: "projectName",
+          prop2: "businessName",
+          scope: "InfoMore",
+          hidden: true,
+        },
+        {
+          label: "未配置班级",
+          prop: "notConfiguredNum",
+          hidden: true,
+        },
+        {
+          label: "有接口班级",
+          prop: "interfaceNum",
+          hidden: true,
+        },
+        {
+          label: "无接口班级",
+          prop: "noInterfaceNum",
+          hidden: true,
+        },
+        {
+          label: "所有班级人数",
+          prop: "userNum",
+          hidden: true,
+        },
+        {
+          label: "账号已开通",
+          prop: "openNum",
+          hidden: true,
+        },
+        {
+          label: "账号未开通",
+          prop: "noOpenNum",
+          hidden: true,
+        },
+        {
+          label: "账号标记失败",
+          prop: "failNum",
+          hidden: true,
+        },
+        {
+          label: "已学完",
+          prop: "finishNum",
+          hidden: true,
+        },
+        {
+          label: "未学完",
+          prop: "noFinishNum",
+          hidden: true,
+        },
+      ],
+      tableData: [], //表单数据
+      total: 0, //一共多少条
+      formData: {
+        educationTypeId: "",
+        pageSize: 10, //每页多少条数据
+        pageNum: 1, //当前页码
+      },
+      // 弹窗字段
+    };
+  },
+  watch: {
+    educationType(val) {
+      if (val.length > 0) {
+        this.formData.educationTypeId = val[0].id;
+        this.search();
+      }
+    },
+  },
+  computed: { ...mapGetters(["educationType"]) },
+  mounted() {
+    if (
+      !this.formData.educationTypeId &&
+      this.educationType &&
+      this.educationType.length
+    ) {
+      this.formData.educationTypeId = this.educationType[0].id;
+      this.search();
+    }
+  },
+  methods: {
+    search(int) {
+      this.loading = true;
+      if (int === 1) {
+        this.formData.pageNum = 1;
+      }
+      if (int === 2) {
+        this.formData = {
+          educationTypeId: this.formData.educationTypeId,
+          pageSize: 10,
+          pageNum: 1,
+        };
+      }
+      this.$api
+        .gradelistStudyAccountStatus(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);
+    },
+    handleSizeChange(v) {
+      this.formData.pageSize = v;
+      this.formData.pageNum = 1;
+      this.search();
+    },
+    handleCurrentChange(v) {
+      this.formData.pageNum = v;
+      this.search();
+    },
+    getInter(int, v) {
+      if (int === 1) {
+        this.$router.push({
+          path: "withInterface",
+          query: {
+            businessId: v.businessId,
+          },
+        });
+      }
+      if (int === 2) {
+        this.$router.push({
+          path: "commodityManageMentEdit",
+          query: {
+            id: v.goodsId,
+          },
+        });
+      }
+    },
+  },
+};
+</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;
+  }
+}
+.numInputs {
+  width: 150px;
+}
+</style>
+

+ 552 - 0
src/views/education/classManageMent/learningAccoutTags/withInterface.vue

@@ -0,0 +1,552 @@
+<template>
+  <div id="withInterface">
+    <div class="inputListBox">
+      <div class="fon_s">专业类型:</div>
+      <div>
+        <el-button
+          style="margin-bottom: 6px"
+          size="small"
+          v-for="(item, index) in Professional"
+          :type="formData.majorId === item.id ? 'primary' : ''"
+          :key="index"
+          @click="topSearch(item.id, 'majorId')"
+          >{{ item.categoryName }}</el-button
+        >
+      </div>
+    </div>
+    <div class="inputListBox">
+      <div class="fon_s">账号状态:</div>
+      <div>
+        <el-button
+          style="margin-bottom: 6px"
+          size="small"
+          v-for="(item, index) in accountList"
+          :type="formData.learnStatus === item.value ? 'primary' : ''"
+          :key="index"
+          @click="topSearch(item.value, 'learnStatus')"
+          >{{ item.label }}</el-button
+        >
+      </div>
+    </div>
+    <div class="inputListBox">
+      <div class="fon_s">学完状态:</div>
+      <div>
+        <el-button
+          style="margin-bottom: 6px"
+          size="small"
+          v-for="(item, index) in studyStatus"
+          :type="formData.finishStatus === item.value ? 'primary' : ''"
+          :key="index"
+          @click="topSearch(item.value, 'finishStatus')"
+          >{{ item.label }}</el-button
+        >
+      </div>
+    </div>
+    <search-box-new
+      ref="searchBox"
+      :formData="formData"
+      :formList="formList"
+      @search="search"
+      @init="init"
+      :advanced="true"
+      @Advanced="advanced"
+      advancedName="高级输入"
+    />
+    <table-list
+      :tableSets="tableSet"
+      :tableData="tableData"
+      :navText="navText"
+      @addClick="addClick"
+      :loading="loading"
+    >
+      <template slot="customize">
+        <el-button>【数据同步到官方系统】开通账号</el-button>
+        <el-button>账号状态标记</el-button>
+        <el-button>学完</el-button>
+      </template>
+      <template slot="btn" slot-scope="props">
+        <el-button type="text" @click="addClick(props.scope.row, 0)"
+          >账号标记</el-button
+        >
+        <el-button type="text" @click="addClick(props.scope.row)"
+          >学完标记</el-button
+        >
+      </template>
+    </table-list>
+    <pagination
+      :total="total"
+      :pageSize="formData.pageSize"
+      :currentPage="formData.pageNum"
+      @handleSizeChange="handleSizeChange"
+      @handleCurrentChange="handleCurrentChange"
+    />
+    <el-dialog
+      :visible.sync="dialogPLS"
+      width="660px"
+      :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="dialogPLS = false"
+          />
+        </div>
+      </div>
+      <el-row :gutter="20">
+        <el-col :span="12"
+          ><h4>请输入学员的身份证号码,换行隔开,每行一个</h4>
+          <el-input
+            type="textarea"
+            :rows="10"
+            placeholder="请输入身份证"
+            v-model="idcordList"
+          >
+          </el-input>
+        </el-col>
+        <el-col :span="12">
+          <h4>快捷导入</h4>
+          <el-link type="primary" @click="getDowm">下载模板</el-link>
+          <label
+            for="mobles"
+            class="el-button el-button--primary"
+            style="margin-left: 14px; padding: 10px 20px"
+            >上传学员名单</label
+          ><input
+            style="display: none"
+            type="file"
+            id="mobles"
+            ref="input1"
+            @change="importMobleadd"
+          />
+        </el-col>
+      </el-row>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogPLS = false">取消</el-button>
+        <el-button type="primary" @click="submitChecksPals">确定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import searchBoxNew from "@/components/searchBoxNew";
+import tableList from "@/components/tableList";
+import pagination from "@/components/pagination";
+export default {
+  name: "WithInterface",
+  components: { searchBoxNew, tableList, pagination },
+  data() {
+    return {
+      loading: false, //当前表单加载是否加载动画
+      navText: {
+        title: "有接口数据标记",
+        index: 0,
+        ch: "条",
+        num: false,
+        border: true,
+        choice: true,
+        addHide: false,
+        backFatherBtn: {
+          status: false,
+          title: "未定义",
+        },
+      },
+      accountList: [
+        {
+          label: "全部",
+          value: "",
+        },
+        {
+          label: "未开通",
+          value: 0,
+        },
+        {
+          label: "已开通",
+          value: 1,
+        },
+        {
+          label: "标记失败",
+          value: 2,
+        },
+      ],
+      studyStatus: [
+        {
+          label: "全部",
+          value: "",
+        },
+        {
+          label: "未学完",
+          value: 0,
+        },
+        {
+          label: "已学完",
+          value: 1,
+        },
+      ],
+      dialogPLS: false,
+      //搜索
+      formList: [
+        {
+          prop: "realname",
+          placeholder: "请输入学员姓名",
+        },
+        {
+          prop: "idCard",
+          placeholder: "请输入学员身份证",
+        },
+        {
+          prop: "orderSn",
+          placeholder: "请输入订单编码",
+        },
+        {
+          prop: "goodsName",
+          placeholder: "请输入商品名称",
+        },
+        {
+          prop1: "validityStartTime",
+          prop2: "validityEndTime",
+          placeholder1: "查询开始时间",
+          placeholder2: "查询结束时间",
+          scope: "moreDataPicker",
+          Diszing: true,
+        },
+        {
+          prop: "idCards",
+          placeholder: "请输入学员身份证",
+          scope: "textarea",
+        },
+      ],
+      formData: {
+        majorId: "",
+        learnStatus: "",
+        finishStatus: "",
+        idCards: "",
+        status: "0,1",
+        pageSize: 10,
+        pageNum: 1,
+      },
+      // 表单
+      tableSet: [
+        {
+          label: "订单编码",
+          prop: "orderSn",
+          hidden: true,
+        },
+        {
+          label: "学员姓名",
+          prop: "realname",
+          hidden: true,
+        },
+        {
+          label: "学员身份证",
+          prop: "idCard",
+          hidden: true,
+        },
+        {
+          label: "绑定手机号码",
+          prop: "telPhone",
+          hidden: true,
+        },
+        {
+          label: "专业名称",
+          prop: "categoryName",
+          hidden: true,
+        },
+        {
+          label: "商品名称",
+          prop: "goodsName",
+          hidden: true,
+        },
+        {
+          label: "官方账号开通状态",
+          prop: "learnStatus",
+          hidden: true,
+        },
+        {
+          label: "学完状态",
+          prop: "finishStatus",
+          hidden: true,
+          scope: "isOptions",
+          options: [
+            {
+              label: "未学完",
+              value: 0,
+              style: "color:red",
+            },
+            {
+              label: "已学完",
+              value: 1,
+            },
+          ],
+        },
+      ],
+      idcordList: "",
+      tableData: [], //表单数据
+      total: 0, //一共多少条
+      Professional: [],
+    };
+  },
+  mounted() {
+    this.$api
+      .inquireCourseMajor({
+        status: 1,
+        businessId: this.$route.query.businessId,
+      })
+      .then((res) => {
+        this.Professional = res.rows;
+        this.shiftPushData();
+      });
+
+    this.search();
+  },
+  activated() {
+    this.search();
+  },
+  methods: {
+    topSearch(id, label) {
+      this.formData[label] = id;
+      this.search();
+    },
+    advanced(datas) {
+      this.dialogPLS = true;
+      this.idcordList = this.formData.idCards;
+    },
+    submitChecksPals() {
+      this.formData.idCards = this.idcordList;
+      this.dialogPLS = false;
+    },
+    search(int) {
+      this.loading = true;
+      if (int === 1) {
+        this.formData.pageNum = 1;
+      }
+      if (int === 2) {
+        this.formData = {
+          status: "0,1",
+          pageSize: 10,
+          pageNum: 1,
+          idCards: "",
+          canCancel: 1,
+          majorId: "",
+          learnStatus: "",
+          finishStatus: "",
+        };
+      }
+      if (int === 3) {
+        this.formData.pageNum = 1;
+      }
+      var data = JSON.parse(JSON.stringify(this.formData));
+      data.businessId = this.$route.query.businessId;
+      data.interfaceAccountId = 1;
+      if (this.formData.idCards) {
+        data.idCards = this.formData.idCards.split("\n");
+      }
+      if (this.formData.validityStartTime) {
+        data.searchStartTime = data.validityStartTime / 1000;
+      }
+      if (this.formData.validityEndTime) {
+        data.searchEndTime = data.validityEndTime / 1000;
+      }
+      this.$api
+        .inquireGradegradelistGrade(data)
+        .then((res) => {
+          this.tableData = res.rows;
+          this.total = res.total;
+          this.navText.index = res.total;
+        })
+        .finally(() => {
+          this.loading = false;
+        });
+    },
+    init() {
+      this.search(2);
+    },
+    addClick(v, int) {},
+    handleSizeChange(v) {
+      this.formData.pageSize = v;
+      this.formData.pageNum = 1;
+      this.search();
+    },
+    handleCurrentChange(v) {
+      this.formData.pageNum = v;
+      this.search();
+    },
+    /**
+     * 下载模板
+     */
+    getDowm() {
+      let url =
+        baseUrls.BASE_IMG_URL +
+        "/oss/images/file/20220214.xls" +
+        `?time=${this.$methodsTools.getNewTime()}`;
+      let link = document.createElement("a");
+      let fileName = "导入模板" + ".xlsx";
+      document.body.appendChild(link);
+      link.href = url;
+      link.dowmload = fileName;
+      link.click();
+      link.remove();
+    },
+    /**
+     * 导入
+     */
+    importMobleadd(e) {
+      var self = this;
+      var file = e.target.files[0];
+      let formData = new FormData();
+      formData.append("file", file);
+      this.$api
+        .editsystemimportIdsData(formData)
+        .then((res) => {
+          if (!res.data.length) {
+            this.$message.warning("未检测到上传学员数据,请检查上传文件");
+            return;
+          }
+          let idList = res.data.map((item) => {
+            return item.idCard.toString();
+          });
+          if (this.idcordList) {
+            var arr = this.idcordList.split("\n");
+            var arrs = arr.concat(idList);
+            var newArr = arrs.filter(function (value, index, self) {
+              return self.indexOf(value) === index;
+            });
+            this.idcordList = newArr.join("\n");
+          } else {
+            var newArr = idList.filter(function (value, index, self) {
+              return self.indexOf(value) === index;
+            });
+            this.idcordList = newArr.join("\n");
+          }
+          this.$message.success("上传成功");
+        })
+        .finally(() => {
+          e.target.value = "";
+        });
+    },
+    /**
+     * 加入"全部选项"
+     */
+    shiftPushData() {
+      const FINDID = this.Professional.findIndex((item) => {
+        return item.categoryName === "全部" && item.id === "";
+      });
+      if (FINDID === -1) {
+        this.Professional.unshift({
+          categoryName: "全部",
+          id: "",
+        });
+      }
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.fon_s {
+  margin-top: 4px;
+  align-self: start;
+  flex-shrink: 0;
+  font-size: 14px;
+  color: #6b6b6b;
+}
+.inputListBox {
+  display: flex;
+  align-items: center;
+  margin-bottom: 12px;
+}
+/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>
+

+ 1 - 1
src/views/education/dataReview/dataConfig/index.vue

@@ -831,7 +831,7 @@ export default {
   border-top: 1px solid #999;
   border-left: 1px solid #999;
   border-right: 1px solid #999;
-  line-height: 40px;
+  line-height: 39px;
   cursor: pointer;
   text-align: center;
   &:last-child {

+ 1 - 1
src/views/education/dataReview/stamp/index.vue

@@ -770,7 +770,7 @@ export default {
   border-top: 1px solid #999;
   border-left: 1px solid #999;
   border-right: 1px solid #999;
-  line-height: 40px;
+  line-height: 39px;
   cursor: pointer;
   text-align: center;
   &:last-child {

+ 151 - 0
src/views/education/examManagement/examArrangement/applicableProducts/checkGoodsList.vue

@@ -0,0 +1,151 @@
+<template>
+  <div id="checkGoodsList">
+    <el-dialog
+      destroy-on-close
+      :visible.sync="dialogGoods"
+      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="dialogGoods = false"
+          />
+        </div>
+      </div>
+      <div>
+        <div class="dis_sty">
+          <el-select
+            v-model="formData['subjectId']"
+            placeholder="请选择科目"
+            :size="size"
+          >
+            <el-option
+              v-for="(items, indexs) in subjectList"
+              :key="indexs"
+              :label="items.subjectName"
+              :value="items.id"
+            ></el-option>
+          </el-select>
+          <el-input
+            style="margin-left: 10px; width: 240px"
+            :size="size"
+            v-model="formData['goodsName']"
+            placeholder="请输入商品名称"
+          ></el-input>
+          <el-input
+            style="margin-left: 10px; width: 240px"
+            :size="size"
+            v-model="formData['price']"
+            placeholder="请输入加个"
+          ></el-input>
+          <el-button
+            style="margin-left: 10px"
+            :size="size"
+            type="primary"
+            @click="getGoods"
+            >查询</el-button
+          >
+          <el-button :size="size" @click="init">重置</el-button>
+        </div>
+        <div>
+          <el-checkbox-group v-model="goodsActiveList">
+            <ul class="ul_style">
+              <li
+                style="margin-bottom: 6px"
+                v-for="(item, index) in goodsList"
+                :key="index"
+              >
+                <el-checkbox
+                  :label="item.goodsId"
+                  :disabled="getData.goodsId.indexOf(item.goodsId) !== -1"
+                  >{{ item.code }} - {{ item.goodsName }} -
+                  {{ item.standPrice }}</el-checkbox
+                >
+              </li>
+            </ul>
+          </el-checkbox-group>
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogGoods = false">取 消</el-button>
+        <el-button type="primary" @click="submitnewGoods">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      size: "small",
+      dialogGoods: false,
+      getData: {},
+      subjectList: [],
+      formData: {},
+      goodsList: [],
+      goodsActiveList: [],
+    };
+  },
+  methods: {
+    openBoxGoods(getData) {
+      this.goodsActiveList = [];
+      this.getData = JSON.parse(JSON.stringify(getData));
+      this.getSujects();
+      this.init();
+      this.dialogGoods = true;
+      console.log(getData);
+    },
+    getSujects() {
+      this.$api
+        .inquireCourseSubject({
+          status: 1,
+          businessId: this.getData.businessId,
+        })
+        .then((res) => {
+          this.subjectList = res.rows;
+        });
+    },
+    getGoods(int) {
+      this.$api
+        .inquirepayservelistGoods({
+          businessId: this.getData.businessId,
+          goodsType: 1,
+          subjectId: this.formData.subjectId,
+          searchKey: this.formData.goodsName,
+          price: this.formData.price,
+        })
+        .then((res) => {
+          this.goodsList = res.rows;
+        });
+    },
+    init() {
+      this.formData.subjectId = "";
+      this.formData.goodsName = "";
+      this.formData.price = "";
+      this.getGoods();
+    },
+    submitnewGoods() {
+      this.dialogGoods = false;
+      this.$emit("backData", this.goodsActiveList);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.dis_sty {
+  display: flex;
+  align-items: center;
+}
+.ul_style {
+  margin-top: 20px;
+  max-height: 500px;
+  overflow: auto;
+}
+</style>

+ 430 - 0
src/views/education/examManagement/examArrangement/applicableProducts/checkStudent.vue

@@ -0,0 +1,430 @@
+<template>
+  <div id="checkStudent">
+    <el-dialog
+      @closed="loadingClose"
+      :visible.sync="dialogVisible"
+      width="960px"
+      :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>
+        <search-box-new
+          ref="searchBox"
+          :formData="formData"
+          :formList="formList"
+          @search="getInitData"
+          @init="init"
+          :advanced="true"
+          @Advanced="advanced"
+          advancedName="高级输入"
+        />
+        <el-table
+          v-loading="loading"
+          border
+          :data="tableData"
+          row-key="userId"
+          @selection-change="selectionChange"
+          style="width: 100%; margin-top: 16px"
+          ref="elTable"
+          max-height="529px"
+          ><el-table-column
+            type="selection"
+            width="55"
+            align="center"
+            reserve-selection
+            :selectable="selectableFunc"
+          >
+          </el-table-column
+          ><el-table-column type="index" width="55" label="序号" align="center">
+          </el-table-column>
+          <el-table-column
+            align="center"
+            v-for="(item, index) in tableSet"
+            :key="index"
+            :prop="item.prop"
+            :label="item.label"
+            :width="item.width"
+          >
+            <template slot-scope="scope">
+              <span>{{ scope.row[item.prop] }}</span>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          :total="total"
+          :pageSize="formData.pageSize"
+          :currentPage="formData.pageNum"
+          @handleSizeChange="handleSizeChange"
+          @handleCurrentChange="handleCurrentChange"
+        />
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="close">取 消</el-button>
+        <el-button
+          type="primary"
+          :loading="disabledBtn"
+          @click="submit"
+          :disabled="!selectArr.length"
+          >确 定</el-button
+        >
+      </span>
+    </el-dialog>
+    <el-dialog
+      append-to-body
+      :visible.sync="dialogPLS"
+      width="660px"
+      :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="dialogPLS = false"
+          />
+        </div>
+      </div>
+      <el-row :gutter="20">
+        <el-col :span="12"
+          ><h4>请输入学员的身份证号码,换行隔开,每行一个</h4>
+          <el-input
+            type="textarea"
+            :rows="10"
+            placeholder="请输入身份证"
+            v-model="idcordList"
+          >
+          </el-input>
+        </el-col>
+        <el-col :span="12">
+          <h4>快捷导入</h4>
+          <el-link type="primary" @click="getDowm">下载模板</el-link>
+          <label
+            for="mobles"
+            class="el-button el-button--primary"
+            style="margin-left: 14px; padding: 10px 20px"
+            >上传学员名单</label
+          ><input
+            style="display: none"
+            type="file"
+            id="mobles"
+            ref="input1"
+            @change="importMobleadd"
+          />
+        </el-col>
+      </el-row>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogPLS = false">取消</el-button>
+        <el-button type="primary" @click="submitChecksPals">确定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import * as baseUrls from "@/utils/request.js";
+import searchBoxNew from "@/components/searchBoxNew";
+import pagination from "@/components/pagination";
+export default {
+  components: { searchBoxNew, pagination },
+  data() {
+    return {
+      dialogPLS: false,
+      idcordList: "",
+      loading: false, //当前表单加载是否加载动画
+      dialogVisible: false,
+      disabledBtn: false,
+      tableData: [],
+      disCheckList: [],
+      selectArr: [], //当前多选框选中数据
+      tableSet: [
+        {
+          label: "学员编码",
+          prop: "studentCode",
+        },
+        {
+          label: "学员姓名",
+          prop: "realname",
+        },
+        {
+          label: "学员身份证",
+          prop: "idCard",
+        },
+        {
+          label: "绑定手机号码",
+          prop: "telphone",
+        },
+      ],
+      total: 0,
+      //搜索
+      formList: [
+        {
+          prop: "searchKey",
+          placeholder: "请输入学员姓名/学员身份证",
+        },
+        {
+          prop: "idCards",
+          placeholder: "请输入学员身份证",
+          scope: "textarea",
+        },
+      ],
+      formData: {
+        pageSize: 10,
+        pageNum: 1,
+        idCards: "",
+        getOrderNum: 0,
+      },
+    };
+  },
+  methods: {
+    /**
+     * 高级输入确定触发
+     */
+    submitChecksPals() {
+      this.formData.idCards = this.idcordList;
+      this.dialogPLS = false;
+    },
+    /**
+     * 高级输入打开触发
+     */
+    advanced(datas) {
+      this.dialogPLS = true;
+      this.idcordList = this.formData.idCards;
+    },
+    /**
+     * 下载模板
+     */
+    getDowm() {
+      let url =
+        baseUrls.BASE_IMG_URL +
+        "/oss/images/file/20220214.xls" +
+        `?time=${this.$methodsTools.getNewTime()}`;
+      let link = document.createElement("a");
+      let fileName = "导入模板" + ".xlsx";
+      document.body.appendChild(link);
+      link.href = url;
+      link.dowmload = fileName;
+      link.click();
+      link.remove();
+    },
+    /**
+     * 导入
+     */
+    importMobleadd(e) {
+      var self = this;
+      var file = e.target.files[0];
+      let formData = new FormData();
+      formData.append("file", file);
+      this.$api
+        .editsystemimportIdsData(formData)
+        .then((res) => {
+          if (!res.data.length) {
+            this.$message.warning("未检测到上传学员数据,请检查上传文件");
+            return;
+          }
+          let idList = res.data.map((item) => {
+            return item.idCard.toString();
+          });
+          if (this.idcordList) {
+            var arr = this.idcordList.split("\n");
+            var arrs = arr.concat(idList);
+            var newArr = arrs.filter(function (value, index, self) {
+              return self.indexOf(value) === index;
+            });
+            this.idcordList = newArr.join("\n");
+          } else {
+            var newArr = idList.filter(function (value, index, self) {
+              return self.indexOf(value) === index;
+            });
+            this.idcordList = newArr.join("\n");
+          }
+          this.$message.success("上传成功");
+        })
+        .finally(() => {
+          e.target.value = "";
+        });
+    },
+    openBox() {
+      this.dialogVisible = true;
+      this.getInitData(2);
+      this.$nextTick(() => {
+        console.log(this.$parent.listDataGoods);
+        this.disCheckList = JSON.parse(
+          JSON.stringify(this.$parent.listDataGoods.userId)
+        );
+        this.$refs.elTable.clearSelection();
+      });
+    },
+    getInitData(int) {
+      this.loading = true;
+      if (int === 2) {
+        this.formData = {
+          pageSize: 10,
+          pageNum: 1,
+          idCards: "",
+          getOrderNum: 0,
+        };
+      }
+      var data = JSON.parse(JSON.stringify(this.formData));
+      if (this.formData.idCards) {
+        data.idCards = this.formData.idCards.split("\n");
+      }
+      if (this.formData.searchKey && this.formData.idCards) {
+        data.searchType = 1;
+      } else {
+        data.searchType = 0;
+      }
+      this.$api
+        .inquiregradestudentlistStudent(data)
+        .then((res) => {
+          this.tableData = res.rows;
+          this.total = res.total;
+        })
+        .finally(() => {
+          this.loading = false;
+        });
+    },
+    loadingClose() {
+      this.disabledBtn = false;
+    },
+    close() {
+      this.dialogVisible = false;
+    },
+    init(int) {
+      this.getInitData(2);
+    },
+    submit() {
+      let data = this.selectArr.map((item) => {
+        return item.userId;
+      });
+      this.$emit("backStudentList",data)
+      this.selectArr = [];
+      this.close();
+    },
+    /**
+     * 判断当前行是否允许勾选
+     */
+    selectableFunc(row, index) {
+      if (this.disCheckList.indexOf(row.userId) !== -1) {
+        return false;
+      } else {
+        return true;
+      }
+    },
+    /**
+     * 多选框变化触发
+     */
+    selectionChange(arr) {
+      this.selectArr = arr;
+    },
+    handleSizeChange(v) {
+      this.formData.pageSize = v;
+      this.formData.pageNum = 1;
+      this.getInitData();
+    },
+    handleCurrentChange(v) {
+      this.formData.pageNum = v;
+      this.getInitData();
+    },
+  },
+};
+</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>

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

@@ -0,0 +1,373 @@
+<template>
+  <div id="applicableProducts">
+    <el-dialog
+      destroy-on-close
+      :visible.sync="dialogVisiblenew"
+      width="960px"
+      :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="dialogVisiblenew = false"
+          />
+        </div>
+      </div>
+      <div>
+        <el-form
+          label-position="right"
+          label-width="150px"
+          :model="listDataGoods"
+          :rules="rulesnew"
+          ref="listDataGoods"
+        >
+          <el-form-item label="商品类型" prop="goodsType">
+            <el-select
+              v-model="listDataGoods.goodsType"
+              placeholder="请选择"
+              disabled
+            >
+              <el-option
+                v-for="item in options"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="业务层级" prop="educationTypeId">
+                <el-select
+                  v-model="listDataGoods.educationTypeId"
+                  placeholder="选择教育类型"
+                  @change="listDataGoods.businessId = ''"
+                  :disabled="statusPop === 0"
+                >
+                  <el-option
+                    v-for="item in educationType"
+                    :key="item.id"
+                    :label="item.educationName"
+                    :value="item.id"
+                  >
+                  </el-option>
+                </el-select> </el-form-item
+            ></el-col>
+            <el-col :span="12"
+              ><el-form-item
+                label=""
+                label-width="0px"
+                prop="businessId"
+                v-if="listDataGoods.educationTypeId"
+              >
+                <el-select
+                  v-model="listDataGoods.businessId"
+                  :disabled="statusPop === 0"
+                  placeholder="选择业务层次"
+                >
+                  <el-option
+                    v-for="item in businessList"
+                    :key="item.id"
+                    :label="item.projectName + '-' + item.businessName"
+                    :value="item.id"
+                  >
+                  </el-option>
+                </el-select> </el-form-item
+            ></el-col>
+            <el-col :span="12" v-if="listDataGoods.businessId"
+              ><el-form-item label="适用商品">
+                <el-button size="small" type="info" @click="checkgoods"
+                  >选择商品</el-button
+                >
+              </el-form-item></el-col
+            >
+            <el-col :span="12" v-if="listDataGoods.businessId"
+              ><el-form-item label="指定学员">
+                <el-button size="small" type="info" @click="checkStudent"
+                  >选择学员</el-button
+                ></el-form-item
+              ></el-col
+            >
+            <el-col :span="12" v-if="listDataGoods.businessId"
+              ><el-form-item label="" label-width="78px">
+                <ul class="ul_style_gy" v-if="listDataGoods.goodsId.length">
+                  <li
+                    v-for="(item, index) in converGoods(listDataGoods.goodsId)"
+                    :key="index"
+                  >
+                    {{ item.code }} - {{ item.goodsName }} -
+                    <span style="color: red">¥{{ item.standPrice }}</span
+                    ><el-button
+                      type="text"
+                      style="float: right"
+                      @click="delLi(item)"
+                      >删除</el-button
+                    >
+                  </li>
+                </ul>
+                <div v-else style="text-align: center">暂无选择适用商品</div>
+              </el-form-item></el-col
+            >
+            <el-col :span="12" v-if="listDataGoods.businessId"
+              ><el-form-item label="" label-width="78px"
+                ><ul class="ul_style_gy" v-if="listDataGoods.userId.length">
+                  <li
+                    v-for="(item, index) in converStudent(listDataGoods.userId)"
+                    :key="index"
+                  >
+                    {{ item.realname }} - {{ item.idCard
+                    }}<el-button
+                      type="text"
+                      style="float: right"
+                      @click="delStudent(item)"
+                      >删除</el-button
+                    >
+                  </li>
+                </ul>
+                <div v-else style="text-align: center">
+                  暂无选择指定学员
+                </div></el-form-item
+              ></el-col
+            ></el-row
+          >
+        </el-form>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogVisiblenew = false">取 消</el-button>
+        <el-button
+          type="primary"
+          v-if="statusPop !== 2"
+          @click="submitnew('listDataGoods')"
+          >确 定</el-button
+        >
+      </span>
+    </el-dialog>
+    <check-goods-list ref="checkGoodsList" @backData="backData" />
+    <check-student ref="checkStudent" @backStudentList="backStudentList" />
+  </div>
+</template>
+
+<script>
+import { mapGetters } from "vuex";
+import checkGoodsList from "./checkGoodsList.vue";
+import checkStudent from "./checkStudent.vue";
+export default {
+  components: {
+    checkGoodsList,
+    checkStudent,
+  },
+  data() {
+    return {
+      options: [
+        {
+          label: "视频",
+          value: 1,
+        },
+        {
+          label: "题库",
+          value: 2,
+        },
+        {
+          label: "补考",
+          value: 3,
+        },
+        {
+          label: "前培",
+          value: 4,
+        },
+      ],
+      //表单验证
+      rulesnew: {
+        goodsType: [
+          { required: true, message: "请选择商品类型", trigger: "change" },
+        ],
+        educationTypeId: [
+          { required: true, message: "请选择教育类型", trigger: "change" },
+        ],
+        businessId: [
+          { required: true, message: "请选择业务层次", trigger: "change" },
+        ],
+        goodsId: [
+          {
+            type: "array",
+            required: true,
+            message: "请至少选择一个商品",
+            trigger: "change",
+          },
+        ],
+      },
+      dialogVisiblenew: false,
+      statusPop: "",
+      listDataGoods: {
+        goodsId: [],
+        userId: [],
+      },
+      goodsList: [],
+      studentList: [],
+      bfListData: {},
+      businessList: [],
+    };
+  },
+  watch: {
+    "listDataGoods.educationTypeId"(value) {
+      this.$api
+        .inquirebusinessList({ status: 1, educationId: value })
+        .then((res) => {
+          this.businessList = res.rows;
+        });
+    },
+    "listDataGoods.businessId"(value) {
+      if (value) {
+        if (this.statusPop === 1) {
+          this.listDataGoods.goodsId = [];
+          this.listDataGoods.userId = [];
+        }
+        this.$api
+          .inquirepayservelistGoods({ businessId: value, goodsType: 1 })
+          .then((res) => {
+            this.goodsList = res.rows;
+          });
+      }
+    },
+  },
+  computed: {
+    ...mapGetters(["educationType"]),
+    converGoods: function () {
+      return function (arrays) {
+        var obj = [];
+        obj = this.goodsList.filter((item) => {
+          return arrays.indexOf(item.goodsId) !== -1;
+        });
+        return obj;
+      };
+    },
+    converStudent: function () {
+      return function (arrays) {
+        var obj = [];
+        obj = this.studentList.filter((item) => {
+          return arrays.indexOf(item.userId) !== -1;
+        });
+        return obj;
+      };
+    },
+  },
+  methods: {
+    backData(activeData) {
+      this.listDataGoods.goodsId =
+        this.listDataGoods.goodsId.concat(activeData);
+    },
+    backStudentList(arrays) {
+      this.listDataGoods.userId = this.listDataGoods.userId.concat(arrays);
+    },
+    /**
+     * 选择商品
+     */
+    checkgoods() {
+      this.$refs.checkGoodsList.openBoxGoods(this.listDataGoods);
+    },
+    openBox(row) {
+      this.$api
+        .inquirepayservegoodsInfo({ applyId: row.applyId })
+        .then((res) => {
+          this.$api
+            .inquirepayservelistGoods({
+              businessId: res.data.businessId,
+              goodsType: 1,
+            })
+            .then((result) => {
+              this.goodsList = result.rows;
+            });
+          /**
+           * 获取学员列表
+           */
+          this.$api
+            .inquiregradestudentlistStudent({ status: "0,1" })
+            .then((res) => {
+              this.studentList = res.rows;
+            });
+          if (res.data.goodsType && res.data.goodsId.length) {
+            if (!res.data.userId) {
+              res.data.userId = [];
+            }
+            this.statusPop = 0;
+            this.bfListData = JSON.parse(JSON.stringify(res.data));
+            this.listDataGoods = JSON.parse(JSON.stringify(res.data));
+          } else {
+            this.statusPop = 1;
+            this.bfListData = {
+              goodsId: [],
+            };
+            this.listDataGoods = {
+              applyId: row.applyId,
+              goodsType: 1,
+              businessId: "",
+              goodsId: [],
+              userId: [],
+            };
+          }
+          this.$nextTick(() => {
+            this.$refs.listDataGoods.clearValidate();
+          });
+          this.dialogVisiblenew = true;
+        });
+    },
+    //提交验证适用商品表单
+    submitnew(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          this.rulesTableSumbitnew();
+        } else {
+          return false;
+        }
+      });
+    },
+    //验证通过
+    rulesTableSumbitnew() {
+      var data = JSON.parse(JSON.stringify(this.listDataGoods));
+      for (let i = 0; i < this.businessList.length; i++) {
+        if (this.businessList[i].id === data.businessId) {
+          data.projectId = this.businessList[i].projectId;
+          break;
+        }
+      }
+      this.$api.systemapplyaddGoods(data).then((res) => {
+        this.$message.success("适用商品设置成功");
+        this.dialogVisiblenew = false;
+      });
+    },
+    delLi(row) {
+      const IDS = this.listDataGoods.goodsId.filter((item) => {
+        return item !== row.goodsId;
+      });
+      this.$set(this.listDataGoods, "goodsId", IDS);
+    },
+    delStudent(row) {
+      const IDS = this.listDataGoods.userId.filter((item) => {
+        return item !== row.userId;
+      });
+      this.$set(this.listDataGoods, "userId", IDS);
+    },
+    checkStudent() {
+      this.$refs.checkStudent.openBox();
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.ul_style_gy {
+  margin: 0px;
+  padding: 8px;
+  background-color: #eee;
+  max-height: 500px;
+  overflow: auto;
+  & > li {
+    margin-bottom: 6px;
+  }
+}
+</style>

+ 14 - 227
src/views/education/examManagement/examArrangement/index.vue

@@ -8,6 +8,11 @@
       :loading="loading"
       @editInfo="editInfo"
     >
+      <template slot="customize">
+        <el-button size="medium" type="warning" @click="setExamAdress"
+          >配置考试地点</el-button
+        >
+      </template>
       <template slot="btn" slot-scope="props">
         <el-button
           type="text"
@@ -424,123 +429,7 @@
         >
       </span>
     </el-dialog>
-    <el-dialog
-      :visible.sync="dialogVisiblenew"
-      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="dialogVisiblenew = false"
-          />
-        </div>
-      </div>
-      <div>
-        <el-form
-          label-position="right"
-          label-width="150px"
-          :model="listDataGoods"
-          :rules="rulesnew"
-          ref="listDataGoods"
-        >
-          <el-form-item label="商品类型" prop="goodsType">
-            <el-select
-              v-model="listDataGoods.goodsType"
-              placeholder="请选择"
-              disabled
-            >
-              <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="educationTypeId">
-            <el-select
-              v-model="listDataGoods.educationTypeId"
-              placeholder="选择教育类型"
-              @change="listDataGoods.businessId = ''"
-              :disabled="statusPop === 0"
-            >
-              <el-option
-                v-for="item in educationType"
-                :key="item.id"
-                :label="item.educationName"
-                :value="item.id"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item
-            label=""
-            prop="businessId"
-            v-if="listDataGoods.educationTypeId"
-          >
-            <el-select
-              v-model="listDataGoods.businessId"
-              :disabled="statusPop === 0"
-              placeholder="选择业务层次"
-            >
-              <el-option
-                v-for="item in businessList"
-                :key="item.id"
-                :label="item.projectName + '-' + item.businessName"
-                :value="item.id"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="适用商品" prop="goodsId">
-            <span v-if="!listDataGoods.businessId" style="color: #f56c6c"
-              >请先选择业务层级</span
-            >
-            <el-checkbox-group
-              style="overflow: auto; max-height: 500px"
-              v-model="listDataGoods.goodsId"
-              v-else-if="listDataGoods.businessId && goodsList.length"
-            >
-              <el-checkbox
-                v-for="(item, index) in goodsList"
-                :key="index"
-                :label="item.goodsId"
-                :disabled="
-                  item.goodsStatus === 0 &&
-                  bfListData.goodsId.indexOf(item.goodsId) === -1
-                "
-                >{{ item.code + "-" + item.goodsName + "-" }}
-                <span
-                  :style="
-                    item.goodsStatus === 0 &&
-                    bfListData.goodsId.indexOf(item.goodsId) === -1
-                      ? ''
-                      : 'color:#F56C6C'
-                  "
-                  >¥{{ item.standPrice }}</span
-                ></el-checkbox
-              >
-            </el-checkbox-group>
-            <span style="color: #f56c6c" v-else>该业务层级下,无适用商品</span>
-          </el-form-item>
-        </el-form>
-      </div>
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="dialogVisiblenew = false">取 消</el-button>
-        <el-button
-          type="primary"
-          v-if="statusPop !== 2"
-          @click="submitnew('listDataGoods')"
-          >确 定</el-button
-        >
-      </span>
-    </el-dialog>
+
     <el-dialog
       :visible.sync="dialoginfoWatch"
       width="900px"
@@ -687,17 +576,18 @@
         <el-button @click="dialoginfoWatch = false">取 消</el-button>
       </span>
     </el-dialog>
+    <applicable-products ref="applicableProducts" />
   </div>
 </template>
 
 <script>
-import { mapGetters } from "vuex";
 import searchBox from "@/components/searchBox";
 import tableList from "@/components/tableList";
 import pagination from "@/components/pagination";
+import applicableProducts from "./applicableProducts/index.vue";
 export default {
   name: "ExamArrangement",
-  components: { searchBox, tableList, pagination },
+  components: { searchBox, tableList, pagination, applicableProducts },
   data() {
     return {
       disabledBtn: false,
@@ -876,31 +766,6 @@ export default {
           value: 4,
         },
       ],
-      //表单验证
-      rulesnew: {
-        goodsType: [
-          { required: true, message: "请选择商品类型", trigger: "change" },
-        ],
-        educationTypeId: [
-          { required: true, message: "请选择教育类型", trigger: "change" },
-        ],
-        businessId: [
-          { required: true, message: "请选择业务层次", trigger: "change" },
-        ],
-        goodsId: [
-          {
-            type: "array",
-            required: true,
-            message: "请至少选择一个商品",
-            trigger: "change",
-          },
-        ],
-      },
-      busList: [],
-      businessList: [],
-      goodsList: [],
-      bfListData: {},
-      listDataGoods: {},
       dialoginfoWatch: false,
       infoData: {
         applyStatus: [],
@@ -908,103 +773,25 @@ export default {
     };
   },
   mounted() {
-    this.getDict();
     this.search();
     this.getExamPlace();
   },
   activated() {
-    this.getDict();
     this.search();
     this.getExamPlace();
   },
-  watch: {
-    "listDataGoods.educationTypeId"(value) {
-      this.businessList = this.busList.filter((item) => {
-        return item.educationId == value;
+  methods: {
+    setExamAdress() {
+      this.$router.push({
+        path: "examPlace",
       });
     },
-    "listDataGoods.businessId"(value) {
-      if (value) {
-        if (this.statusPop === 1) {
-          this.listDataGoods.goodsId = [];
-        }
-        this.$api
-          .inquirepayservelistGoods({ businessId: value, goodsType: 1 })
-          .then((res) => {
-            this.goodsList = res.rows;
-          });
-      }
-    },
-  },
-  computed: { ...mapGetters(["educationType"]) },
-  methods: {
     loadingClose() {
       this.disabledBtn = false;
     },
     //修改适用商品
     editGoods(row) {
-      this.$api
-        .inquirepayservegoodsInfo({ applyId: row.applyId })
-        .then((res) => {
-          this.$api
-            .inquirepayservelistGoods({
-              businessId: res.data.businessId,
-              goodsType: 1,
-            })
-            .then((result) => {
-              this.goodsList = result.rows;
-            });
-          if (res.data.goodsType && res.data.goodsId.length) {
-            this.statusPop = 0;
-            this.bfListData = JSON.parse(JSON.stringify(res.data));
-            this.listDataGoods = JSON.parse(JSON.stringify(res.data));
-          } else {
-            this.statusPop = 1;
-            this.bfListData = {
-              goodsId: [],
-            };
-            this.listDataGoods = {
-              applyId: row.applyId,
-              goodsType: 1,
-              businessId: "",
-              goodsId: [],
-            };
-          }
-          this.$nextTick(() => {
-            this.$refs.listDataGoods.clearValidate();
-          });
-          this.dialogVisiblenew = true;
-        });
-    },
-    //提交验证适用商品表单
-    submitnew(formName) {
-      this.$refs[formName].validate((valid) => {
-        if (valid) {
-          this.rulesTableSumbitnew();
-        } else {
-          return false;
-        }
-      });
-    },
-    //验证通过
-    rulesTableSumbitnew() {
-      var data = JSON.parse(JSON.stringify(this.listDataGoods));
-      this.busList.map((item) => {
-        if (item.id === data.businessId) {
-          data.projectId = item.projectId;
-        }
-      });
-      this.$api.systemapplyaddGoods(data).then((res) => {
-        this.$message.success("适用商品设置成功");
-        this.dialogVisiblenew = false;
-        this.search();
-      });
-    },
-    //获取初始基础参数
-    getDict() {
-      this.$api.inquirebusinessList({ status: 1 }).then((res) => {
-        this.busList = res.rows;
-      });
+      this.$refs.applicableProducts.openBox(row);
     },
     submitPla() {
       var data = JSON.parse(JSON.stringify(this.examPlaces));

+ 1 - 2
src/views/education/notificationManageMent/notificationList/checkUser.vue

@@ -313,11 +313,10 @@ export default {
         this.$api
           .inquireGradegradelistGrade({ gradeId: node.data.gradeId })
           .then((res) => {
-            console.log(res.rows);
             arrays = res.rows.map((item) => {
               return {
                 userId: item.userId,
-                costomize: item.realName,
+                costomize: item.realname,
                 costId: `${node.data.gradeId}-${item.userId}`,
                 leaf: true,
                 getStatus: true,

+ 1 - 1
src/views/education/notificationManageMent/notificationModel/index.vue

@@ -41,7 +41,7 @@
     />
     <el-dialog
       :visible.sync="dialogCG"
-      width="360px"
+      width="760px"
       :show-close="false"
       :close-on-click-modal="false"
     >

+ 116 - 97
src/views/index.vue

@@ -43,9 +43,7 @@
           <div class="foot_numbox">
             <span class="span1">昨日新增人数</span>
             <span class="span2">{{
-              studentInfomModification.ytdStudent
-                ? studentInfomModification.ytdStudent
-                : 0
+              studentInfomModification.ytdStudent || 0
             }}</span>
           </div>
         </div>
@@ -59,31 +57,19 @@
             <div class="flex2_label">
               <div class="top">今日修改</div>
               <div class="nums">
-                {{
-                  studentInfomModification.todUpdateNum
-                    ? studentInfomModification.todUpdateNum
-                    : 0
-                }}
+                {{ studentInfomModification.todUpdateNum || 0 }}
               </div>
             </div>
             <div class="flex2_label">
               <div class="top">昨日修改</div>
               <div class="nums">
-                {{
-                  studentInfomModification.ytdUpdateNum
-                    ? studentInfomModification.ytdUpdateNum
-                    : 0
-                }}
+                {{ studentInfomModification.ytdUpdateNum || 0 }}
               </div>
             </div>
             <div class="flex2_label">
               <div class="top">近7日修改</div>
               <div class="nums">
-                {{
-                  studentInfomModification.sevenUpdateNum
-                    ? studentInfomModification.sevenUpdateNum
-                    : 0
-                }}
+                {{ studentInfomModification.sevenUpdateNum || 0 }}
               </div>
             </div>
           </div>
@@ -123,17 +109,13 @@
               <div class="aNumbox">
                 <span class="span1">视频商品</span>
                 <span class="span2">{{
-                  orderconsoledData.allOnVideoNum
-                    ? orderconsoledData.allOnVideoNum
-                    : 0
+                  orderconsoledData.allOnVideoNum || 0
                 }}</span>
               </div>
               <div class="aNumbox">
                 <span class="span1">题库商品</span>
                 <span class="span2">{{
-                  orderconsoledData.allOnBankNum
-                    ? orderconsoledData.allOnBankNum
-                    : 0
+                  orderconsoledData.allOnBankNum || 0
                 }}</span>
               </div>
             </div>
@@ -144,17 +126,13 @@
               <div class="aNumbox">
                 <span class="span1">视频商品</span>
                 <span class="span2">{{
-                  orderconsoledData.allOffVideoNum
-                    ? orderconsoledData.allOffVideoNum
-                    : 0
+                  orderconsoledData.allOffVideoNum || 0
                 }}</span>
               </div>
               <div class="aNumbox">
                 <span class="span1">题库商品</span>
                 <span class="span2">{{
-                  orderconsoledData.allOffBankNum
-                    ? orderconsoledData.allOffBankNum
-                    : 0
+                  orderconsoledData.allOffBankNum || 0
                 }}</span>
               </div>
             </div>
@@ -174,17 +152,13 @@
               <div class="aNumbox">
                 <span class="span1">视频商品</span>
                 <span class="span2">{{
-                  orderconsoledData.todOnVideoNum
-                    ? orderconsoledData.todOnVideoNum
-                    : 0
+                  orderconsoledData.todOnVideoNum || 0
                 }}</span>
               </div>
               <div class="aNumbox">
                 <span class="span1">题库商品</span>
                 <span class="span2">{{
-                  orderconsoledData.todOnBankNum
-                    ? orderconsoledData.todOnBankNum
-                    : 0
+                  orderconsoledData.todOnBankNum || 0
                 }}</span>
               </div>
             </div>
@@ -195,17 +169,13 @@
               <div class="aNumbox">
                 <span class="span1">视频商品</span>
                 <span class="span2">{{
-                  orderconsoledData.todOffVideoNum
-                    ? orderconsoledData.todOffVideoNum
-                    : 0
+                  orderconsoledData.todOffVideoNum || 0
                 }}</span>
               </div>
               <div class="aNumbox">
                 <span class="span1">题库商品</span>
                 <span class="span2">{{
-                  orderconsoledData.todOffBankNum
-                    ? orderconsoledData.todOffBankNum
-                    : 0
+                  orderconsoledData.todOffBankNum || 0
                 }}</span>
               </div>
             </div>
@@ -225,17 +195,13 @@
               <div class="aNumbox">
                 <span class="span1">视频商品</span>
                 <span class="span2">{{
-                  orderconsoledData.ytdOnVideoNum
-                    ? orderconsoledData.ytdOnVideoNum
-                    : 0
+                  orderconsoledData.ytdOnVideoNum || 0
                 }}</span>
               </div>
               <div class="aNumbox">
                 <span class="span1">题库商品</span>
                 <span class="span2">{{
-                  orderconsoledData.ytdOnBankNum
-                    ? orderconsoledData.ytdOnBankNum
-                    : 0
+                  orderconsoledData.ytdOnBankNum || 0
                 }}</span>
               </div>
             </div>
@@ -246,17 +212,13 @@
               <div class="aNumbox">
                 <span class="span1">视频商品</span>
                 <span class="span2">{{
-                  orderconsoledData.ytdOffVideoNum
-                    ? orderconsoledData.ytdOffVideoNum
-                    : 0
+                  orderconsoledData.ytdOffVideoNum || 0
                 }}</span>
               </div>
               <div class="aNumbox">
                 <span class="span1">题库商品</span>
                 <span class="span2">{{
-                  orderconsoledData.ytdOffBankNum
-                    ? orderconsoledData.ytdOffBankNum
-                    : 0
+                  orderconsoledData.ytdOffBankNum || 0
                 }}</span>
               </div>
             </div>
@@ -309,19 +271,19 @@
             <div class="li_s_child">
               <span class="li_s_child_left">今日新增</span
               ><span class="li_s_child_right">{{
-                classconsoleData.todOpenNum
+                classconsoleData.todOpenNum || 0
               }}</span>
             </div>
             <div class="li_s_child">
               <span class="li_s_child_left">昨日新增</span
               ><span class="li_s_child_right">{{
-                classconsoleData.todPreNum
+                classconsoleData.todPreNum || 0
               }}</span>
             </div>
             <div class="li_s_child">
               <span class="li_s_child_left">近7日新增</span
               ><span class="li_s_child_right">{{
-                classconsoleData.sevNum
+                classconsoleData.sevNum || 0
               }}</span>
             </div>
           </div>
@@ -338,19 +300,19 @@
             <div class="li_s_child">
               <span class="li_s_child_left">今日新增</span
               ><span class="li_s_child_right">{{
-                classconsoleData.todOpenNum
+                classconsoleData.todOpenNum || 0
               }}</span>
             </div>
             <div class="li_s_child">
               <span class="li_s_child_left">昨日新增</span
               ><span class="li_s_child_right">{{
-                classconsoleData.ytdOpenNum
+                classconsoleData.ytdOpenNum || 0
               }}</span>
             </div>
             <div class="li_s_child">
               <span class="li_s_child_left">近7日新增</span
               ><span class="li_s_child_right">{{
-                classconsoleData.sevOpenNum
+                classconsoleData.sevOpenNum || 0
               }}</span>
             </div>
           </div>
@@ -367,19 +329,19 @@
             <div class="li_s_child">
               <span class="li_s_child_left">今日新增</span
               ><span class="li_s_child_right">{{
-                classconsoleData.todPreNum
+                classconsoleData.todPreNum || 0
               }}</span>
             </div>
             <div class="li_s_child">
               <span class="li_s_child_left">昨日新增</span
               ><span class="li_s_child_right">{{
-                classconsoleData.ytdPreNum
+                classconsoleData.ytdPreNum || 0
               }}</span>
             </div>
             <div class="li_s_child">
               <span class="li_s_child_left">近7日新增</span
               ><span class="li_s_child_right">{{
-                classconsoleData.sevPreNum
+                classconsoleData.sevPreNum || 0
               }}</span>
             </div>
           </div>
@@ -390,16 +352,20 @@
         <div class="style_box flex1">
           <div class="foot_box" style="margin-bottom: 16px">
             <div class="foot_box_list" style="margin-right: 16px; height: 64px">
-              <div class="top_label">不通过数量</div>
-              <div class="nums_mini">839</div>
+              <div class="top_label">未配置班级</div>
+              <div class="nums_mini">
+                {{ classconsoleData.noConfigNum || 0 }}
+              </div>
             </div>
             <div class="foot_box_list" style="margin-right: 16px; height: 64px">
-              <div class="top_label">不通过数量</div>
-              <div class="nums_mini">839</div>
+              <div class="top_label">有接口班级</div>
+              <div class="nums_mini">{{ classconsoleData.interfNum || 0 }}</div>
             </div>
             <div class="foot_box_list" style="height: 64px">
-              <div class="top_label">通过数量</div>
-              <div class="nums_mini">839</div>
+              <div class="top_label">无接口班级</div>
+              <div class="nums_mini">
+                {{ classconsoleData.noInterfNum || 0 }}
+              </div>
             </div>
           </div>
           <div class="foot_list_box" style="align-items: flex-start">
@@ -409,15 +375,15 @@
               </div>
               <div class="aNumbox" style="margin-bottom: 13px">
                 <span class="span1">未开通</span>
-                <span class="span3">12</span>
+                <span class="span3">{{ classconsoleData.noOpenNum || 0 }}</span>
               </div>
               <div class="aNumbox" style="margin-bottom: 13px">
                 <span class="span1">已开通</span>
-                <span class="span3">23</span>
+                <span class="span3">{{ classconsoleData.openNum || 0 }}</span>
               </div>
               <div class="aNumbox">
                 <span class="span1">标记失败</span>
-                <span class="span3">34</span>
+                <span class="span3">{{ classconsoleData.failNum || 0 }}</span>
               </div>
             </div>
             <div class="foot_list_style" style="align-items: flex-start">
@@ -425,12 +391,14 @@
                 <img src="@/assets/index_images/sl9.png" alt="" />学完标记
               </div>
               <div class="aNumbox" style="margin-bottom: 13px">
-                <span class="span1">未开通</span>
-                <span class="span3">54</span>
+                <span class="span1">未完成</span>
+                <span class="span3">{{
+                  classconsoleData.noFinishNum || 0
+                }}</span>
               </div>
               <div class="aNumbox" style="margin-bottom: 13px">
-                <span class="span1">已开通</span>
-                <span class="span3">84</span>
+                <span class="span1">已完成</span>
+                <span class="span3">{{ classconsoleData.finishNum || 0 }}</span>
               </div>
             </div>
           </div>
@@ -460,20 +428,26 @@
         <div class="style_box_tran_yellow">
           <div class="imgIBx imgUrl4 imgSize">
             <p class="p1">待初审</p>
-            <p class="p2">1564</p>
+            <p class="p2">{{ uploadAnimalData.waitAllNum.toFixed(0) }}</p>
           </div>
           <div class="li_s">
             <div class="li_s_child">
               <span class="li_s_child_left">今日新增</span
-              ><span class="li_s_child_right">50</span>
+              ><span class="li_s_child_right">{{
+                periodconsoleData.waitTodNum || 0
+              }}</span>
             </div>
             <div class="li_s_child">
               <span class="li_s_child_left">昨日新增</span
-              ><span class="li_s_child_right">59</span>
+              ><span class="li_s_child_right">{{
+                periodconsoleData.waitYtdNum || 0
+              }}</span>
             </div>
             <div class="li_s_child">
               <span class="li_s_child_left">近7日新增</span
-              ><span class="li_s_child_right">49</span>
+              ><span class="li_s_child_right">{{
+                periodconsoleData.waitSevNum || 0
+              }}</span>
             </div>
           </div>
         </div>
@@ -484,20 +458,26 @@
         <div class="style_box_tran_yellow">
           <div class="imgIBx imgUrl5 imgSize">
             <p class="p1">待复审</p>
-            <p class="p2">1564</p>
+            <p class="p2">{{ uploadAnimalData.ingAllNum.toFixed(0) }}</p>
           </div>
           <div class="li_s">
             <div class="li_s_child">
               <span class="li_s_child_left">今日新增</span
-              ><span class="li_s_child_right">50</span>
+              ><span class="li_s_child_right">{{
+                periodconsoleData.ingTodNum || 0
+              }}</span>
             </div>
             <div class="li_s_child">
               <span class="li_s_child_left">昨日新增</span
-              ><span class="li_s_child_right">59</span>
+              ><span class="li_s_child_right">{{
+                periodconsoleData.ingYtdNum || 0
+              }}</span>
             </div>
             <div class="li_s_child">
               <span class="li_s_child_left">近7日新增</span
-              ><span class="li_s_child_right">49</span>
+              ><span class="li_s_child_right">{{
+                periodconsoleData.ingSevNum || 0
+              }}</span>
             </div>
           </div>
         </div>
@@ -508,21 +488,29 @@
           <div class="foot_box" style="margin-bottom: 16px">
             <div class="foot_box_list" style="margin-right: 16px; height: 64px">
               <div class="top_label">未配置报名接口班级</div>
-              <div class="nums_mini">839</div>
+              <div class="nums_mini">
+                {{ periodconsoleData.noInfoNum || 0 }}
+              </div>
             </div>
             <div class="foot_box_list" style="height: 64px">
               <div class="top_label">有配置报名接口班级</div>
-              <div class="nums_mini">839</div>
+              <div class="nums_mini">
+                {{ periodconsoleData.infoNum || 0 }}
+              </div>
             </div>
           </div>
           <div class="foot_box" style="margin-bottom: 16px">
             <div class="foot_box_list" style="margin-right: 16px; height: 64px">
               <div class="top_label">未配置学时接口班级</div>
-              <div class="nums_mini">839</div>
+              <div class="nums_mini">
+                {{ periodconsoleData.noPeriodNum || 0 }}
+              </div>
             </div>
             <div class="foot_box_list" style="height: 64px">
               <div class="top_label">有配置学时接口班级</div>
-              <div class="nums_mini">839</div>
+              <div class="nums_mini">
+                {{ periodconsoleData.periodNum || 0 }}
+              </div>
             </div>
           </div>
           <div class="foot_list_box" style="align-items: flex-start">
@@ -532,11 +520,15 @@
               </div>
               <div class="aNumbox" style="margin-bottom: 13px">
                 <span class="span1">报名人数</span>
-                <span class="span3">12</span>
+                <span class="span3">{{
+                  periodconsoleData.applyUserNum || 0
+                }}</span>
               </div>
               <div class="aNumbox">
                 <span class="span1">已推送人数</span>
-                <span class="span3">23</span>
+                <span class="span3">{{
+                  periodconsoleData.applyPushUserNum || 0
+                }}</span>
               </div>
             </div>
             <div class="foot_list_style" style="align-items: flex-start">
@@ -545,11 +537,15 @@
               </div>
               <div class="aNumbox" style="margin-bottom: 13px">
                 <span class="span1">学时审核通过人数</span>
-                <span class="span3">54</span>
+                <span class="span3">{{
+                  periodconsoleData.periodUserNum || 0
+                }}</span>
               </div>
               <div class="aNumbox">
                 <span class="span1">已推送人数</span>
-                <span class="span3">84</span>
+                <span class="span3">{{
+                  periodconsoleData.periodPushUserNum || 0
+                }}</span>
               </div>
             </div>
           </div>
@@ -559,10 +555,10 @@
     <div class="style_div" style="align-items: flex-start">
       <div class="flex_boxs dy_sty2" style="margin-right: 13px; height: auto">
         <p><span>考试数据</span><span class="watch_all">查看全部</span></p>
-        <div class="style_box">
+        <div class="style_box changeTABLE">
           <el-table
             :data="tableData"
-            style="width: 100%"
+            style="width: 99%"
             :header-cell-style="{
               'background-color': '#E6FFFB',
               color: '#13C2C2',
@@ -586,10 +582,10 @@
       </div>
       <div class="flex_boxs dy_sty2" style="height: auto">
         <p><span>模考数据</span><span class="watch_all">查看全部</span></p>
-        <div class="style_box">
+        <div class="style_box changeTABLE">
           <el-table
             :data="tableData_MN"
-            style="width: 100%"
+            style="width: 99%"
             :header-cell-style="{
               'background-color': '#E6FFFB',
               color: '#13C2C2',
@@ -674,6 +670,7 @@ export default {
       studentInfomModification: {}, //学员资料修改动态
       orderconsoledData: {},
       classconsoleData: {},
+      periodconsoleData: {},
       uploadAnimalData: {
         allStudent: 0, //当前累计人数
         allNum: 0,
@@ -686,6 +683,8 @@ export default {
         allNumClass: 0,
         allOpenNumClass: 0,
         allPreNumClass: 0,
+        waitAllNum: 0,
+        ingAllNum: 0,
       }, //需要动画滚动的数值
       user: {},
     };
@@ -708,7 +707,6 @@ export default {
     },
     activeBusId(val) {
       this.getBusUploadData(val);
-      console.log("busId:", val);
     },
     "studentInfomModification.allStudent"(val) {
       gsap.to(this.$data.uploadAnimalData, {
@@ -760,6 +758,16 @@ export default {
         allOpenNumClass: val.allPreNum,
       });
     },
+    periodconsoleData(val) {
+      gsap.to(this.$data.uploadAnimalData, {
+        duration: 0.5,
+        waitAllNum: val.waitAllNum,
+      });
+      gsap.to(this.$data.uploadAnimalData, {
+        duration: 0.5,
+        ingAllNum: val.ingAllNum,
+      });
+    },
   },
   computed: {
     ...mapGetters(["educationType", ""]),
@@ -804,6 +812,9 @@ export default {
       this.$api.baseconsolegradeData({ businessId: id }).then((res) => {
         this.classconsoleData = res.data;
       });
+      this.$api.baseconsoleperiodData({ businessId: id }).then((res) => {
+        this.periodconsoleData = res.data;
+      });
     },
   },
 };
@@ -1248,6 +1259,14 @@ export default {
     }
   }
 }
+.changeTABLE {
+  box-shadow: none !important;
+  .el-table {
+    border-radius: 8px;
+    box-shadow: 0px 0px 8px 0px rgba(217, 217, 217, 0.8);
+    margin-left: 0.5%;
+  }
+}
 /deep/ .el-table .success-row {
   background: rgb(246, 255, 254);
 }