zhouwx
2024-10-12 359cb0048589f23a08ad980c77f103a9de2f8d6c
修改
已修改2个文件
已添加1个文件
236 ■■■■■ 文件已修改
src/api/onlineEducation/question.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/onlineEducation/classCertManage/index.vue 178 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/onlineEducation/questionManage/index.vue 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/onlineEducation/question.js
对比新文件
@@ -0,0 +1,17 @@
import request from '@/utils/request'
export function getQuestion(query) {
  return request({
    url: '/th/question/bank/page',
    method: 'get',
    params: query
  })
}
export function getCert(query) {
  return request({
    url: '/th/cert/page',
    method: 'get',
    params: query
  })
}
src/views/onlineEducation/classCertManage/index.vue
@@ -11,6 +11,7 @@
          size="small"
          type="primary"
          style="margin-bottom: 10px;margin-left: 20px"
          @click="exportData"
        >批量导出</el-button>
      </json-excel>
      <el-date-picker
@@ -24,22 +25,23 @@
        style="margin-left: 30px;"
      >
      </el-date-picker>
      <el-select v-model="queryParams.institutionId"  size="small" style="margin-left: 40px;" placeholder="请选择平台">
      <el-select v-model="queryParams.institutionName"  size="small" style="margin-left: 40px;" placeholder="请选择平台">
        <el-option
          v-for="item in platformList"
          :key="item.id"
          :label="item.institutionalName"
          :value="item.id">
          :value="item.institutionalName">
        </el-option>
      </el-select>
      <el-select v-model="queryParams.trainOrgId"  size="small" style="margin-left: 40px;" placeholder="请选择培训机构">
        <el-option
          v-for="item in trainOrgList"
          :key="item.id"
          :label="item.trainOrgName"
          :value="item.id">
        </el-option>
      </el-select>
      <el-input size="small" style="margin-left: 30px;width: 200px" v-model="queryParams.trainOrgName" placeholder="请输入机构"></el-input>
<!--      <el-select v-model="queryParams.trainOrgId"  size="small" style="margin-left: 40px;" placeholder="请选择培训机构">-->
<!--        <el-option-->
<!--          v-for="item in trainOrgList"-->
<!--          :key="item.id"-->
<!--          :label="item.trainOrgName"-->
<!--          :value="item.id">-->
<!--        </el-option>-->
<!--      </el-select>-->
      <el-button
        size="small"
        type="primary"
@@ -62,11 +64,11 @@
      <el-table-column label="推送平台" align="center" prop="institutionName" />
      <el-table-column label="所属机构" align="center" prop="trainOrgName" />
      <el-table-column label="批次" align="center" prop="batchName" />
      <el-table-column label="证书生成时间" align="center" prop="createTime" />
      <el-table-column label="证书生成时间" align="center" prop="certTime" />
      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
        <template #default="scope">
          <el-button size="mini" type="text" style="color: #1890ff">查看</el-button>
          <el-button size="mini" type="text" style="color: #1890ff">下载</el-button>
          <el-button size="mini" type="text" style="color: #1890ff" @click="viewPic(scope.row)">查看</el-button>
          <el-button size="mini" type="text" style="color: #1890ff" @click="downloadByBlob(scope.row)">下载</el-button>
          <el-button size="mini" type="text" style="color: #1890ff">打印</el-button>
        </template>
      </el-table-column>
@@ -78,6 +80,18 @@
      :limit.sync="queryParams.pageSize"
      @pagination="getList"
    />
    <el-dialog
      :visible.sync="picDialog"
      width="500px"
      :before-close="handleClose">
      <div style="display: flex;justify-content: center">
        <el-image
          style="width: 450px; height: auto"
          :src="viewUrl"
          :preview-src-list="srcList">
        </el-image>
      </div>
    </el-dialog>
  </div>
</template>
@@ -87,6 +101,7 @@
import moment from 'moment/moment'
import JsonExcel from 'vue-json-excel'
import { getSubject } from '@/api/onlineEducation/count'
import { getCert } from '@/api/onlineEducation/question'
export default {
  name: "nPeopleManage",
  dicts: [],
@@ -101,39 +116,17 @@
      addForm: false,
      total: 0,
      platformList: [],
      expertList: [
        // {
        //   id: 1,
        //   name: 'xxx',
        //   idcard: 'xxx',
        //   institutionName: 'xxx',
        //   trainOrgName: 'xxx',
        //   batchName: 'xxx',
        //   createTime: 'xxx'
        // },
        // {
        //   id: 2,
        //   name: 'xxx',
        //   idcard: 'xxx',
        //   institutionName: 'xxx',
        //   trainOrgName: 'xxx',
        //   batchName: 'xxx',
        //   createTime: 'xxx'
        // },
      ],
      expertList: [],
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        institutionId: '',
        institutionName: '',
        startTime: '',
        endTime: '',
        trainOrgId: ''
        trainOrgName: ''
      },
      trainOrgList: [],
      jsonData: [
      ],
      jsonData: [],
      json_fields: {
        ID: "id",
        姓名: "name",
@@ -141,8 +134,11 @@
        推送平台: "institutionName",
        所属机构: "trainOrgName",
        批次: "batchName",
        证书生成时间: "createTime",
      }
        证书生成时间: "certTime",
      },
      picDialog: false,
      viewUrl: '',
      srcList: []
    };
  },
  created() {
@@ -151,36 +147,36 @@
    this.getPlat();
  },
  methods: {
    setDate(){
      const end = new Date();
      const start = new Date();
      start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
      const s = moment(start).format('YYYY-MM-DD')
      const e = moment(end).format('YYYY-MM-DD')
      this.time = [s,e]
    },
    // setDate(){
    //   const end = new Date();
    //   const start = new Date();
    //   start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
    //   const s = moment(start).format('YYYY-MM-DD')
    //   const e = moment(end).format('YYYY-MM-DD')
    //   this.time = [s,e]
    // },
    getList(){
      if(this.time && this.time.length >0){
        this.queryParams.startTime = moment(this.time[0]).format('YYYY-MM-DD')
        this.queryParams.endTime = moment(this.time[1]).format('YYYY-MM-DD')
        this.queryParams.startTime = moment(this.time[0]).format('YYYY-MM-DD') + ' 00:00:00'
        this.queryParams.endTime = moment(this.time[1]).format('YYYY-MM-DD') + ' 00:00:00'
      }
      // this.loading = true;
      // listBatch( this.queryParams).then((res) => {
      //   if (res.code == 200) {
      //     this.expertList = res.rows.map(item => {
      //       return {
      //         ...item,
      //         trainOrgName: item.trainOrgName ? item.trainOrgName : '--',
      //         startTime: item.startTime ? item.startTime : '--',
      //         endTime: item.endTime ? item.endTime : '--',
      //         category: item.category ? item.category : '--'
      //       }
      //     })
      //     this.total = res.total
      //     this.loading = false;
      //   }
      // })
      this.loading = true;
      getCert( this.queryParams).then((res) => {
        if (res.code == 200) {
          this.expertList = res.rows.map(item => {
            return {
              ...item,
              trainOrgName: item.trainOrgName ? item.trainOrgName : '--',
              startTime: item.startTime ? item.startTime : '--',
              endTime: item.endTime ? item.endTime : '--',
            }
          })
          this.total = res.total
          this.loading = false;
        }
        console.log('this.expertList',this.expertList)
      })
    },
    getPlat() {
      listPlatSelect().then((res) => {
@@ -189,10 +185,17 @@
        }
      })
    },
    exportData(){
      if(this.jsonData && this.jsonData.length <= 0){
        this.$message({
          message: '请选择要导出的数据',
          type: 'warning'
        })
      }
    },
    changeCheckBoxValue(val) {
      console.log('val',val)
      this.jsonData = val;
    },
    handleChange(){
@@ -205,13 +208,48 @@
      this.queryParams = {
        pageNum: 1,
        pageSize: 10,
        institutionId: '',
        institutionName: '',
        startTime: '',
        endTime: '',
        trainOrgId: ''
        trainOrgName: ''
      }
      this.time = [];
      this.getList();
    },
    viewPic(val){
      this.viewUrl = val.certUrl
      this.srcList[0] = val.certUrl
      this.picDialog = true
    },
    handleClose() {
      this.viewUrl = ''
      // this.srcList = []
      this.picDialog = false
    },
    downloadByBlob(val) {
      let image = new Image()
      image.setAttribute('crossOrigin', 'anonymous')
      image.src = val.certUrl
      image.onload = () => {
        let canvas = document.createElement('canvas')
        canvas.width = image.width
        canvas.height = image.height
        let ctx = canvas.getContext('2d')
        ctx.drawImage(image, 0, 0, image.width, image.height)
        canvas.toBlob((blob) => {
          let url = URL.createObjectURL(blob)
          this.download(url,val.name + '_学时证书')
          // 用完释放URL对象
          URL.revokeObjectURL(url)
        })
      }
    },
    download(href, name) {
      let eleLink = document.createElement('a')
      eleLink.download = name
      eleLink.href = href
      eleLink.click()
      eleLink.remove()
    }
  }
};
src/views/onlineEducation/questionManage/index.vue
@@ -4,11 +4,17 @@
      <el-table-column label="序号" align="center" type="index" width="80" />
      <el-table-column label="更新时间" align="center" prop="updateTime" />
      <el-table-column label="平台名称" align="center" prop="institutionName" />
      <el-table-column label="题库名称" align="center" prop="subjectName" />
      <el-table-column label="题目数量" align="center" prop="subjectCount" />
      <el-table-column label="类型" align="center" prop="type" >
      <el-table-column label="题库名称" align="center" prop="name" />
      <el-table-column label="题库题目总数" align="center" prop="totalCount" />
      <el-table-column label="单选题数量" align="center" prop="singleCount" />
      <el-table-column label="多选题数量" align="center" prop="multiCount" />
      <el-table-column label="判断题数量" align="center" prop="judgeCount" />
      <el-table-column label="简答题数量" align="center" prop="easyCount" />
      <el-table-column label="混合题数量" align="center" prop="mixCount" />
      <el-table-column label="其他题目数量" align="center" prop="otherCount" />
      <el-table-column label="删除标识" align="center">
        <template #default="scope">
          {{scope.row.type == 1 ? '单选' : scope.row.type == 2 ?'多选' :scope.row.type == 3 ? '判断':scope.row.type == 4 ? '简答':scope.row.type == 5 ? '混合' : '其他'}}
          {{scope.row.delFlag == 0 ? '未删除' : scope.row.delFlag == 2 ?'已删除' : ''}}
        </template>
      </el-table-column>
      <el-table-column label="模拟考核组卷" align="center" class-name="small-padding fixed-width">
@@ -33,7 +39,7 @@
      width="500px"
      :before-close="handleClose">
      <div style="font-size: 16px">
        <div>已向 <span class="titleText">{{chooseItem.institutionName}}</span> 发送基于题库 <span class="titleText">{{chooseItem.subjectName}}</span> 的组卷要求,学员可登录平台进行模拟考试。</div>
        <div>已向 <span class="titleText">{{chooseItem.institutionName}}</span> 发送基于题库 <span class="titleText">{{chooseItem.name}}</span> 的组卷要求,学员可登录平台进行模拟考试。</div>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button type="primary" @click="handleClose">确 定</el-button>
@@ -45,6 +51,7 @@
<script>
import { delPlat } from '@/api/onlineEducation/plat'
import { getQuestion } from '@/api/onlineEducation/question'
export default {
  name: "nPeopleManage",
@@ -75,17 +82,18 @@
  methods: {
    getList(){
      this.loading = true;
      this.dataList = [
        {
          id: 1,
          updateTime: '2024-08-10 10:30:30',
          institutionName: '链工宝学习平台',
          subjectName: '高压电工作业',
          subjectCount: 50,
          type: 1
        }
      ]
      getQuestion(this.queryParams).then(res => {
        if(res.code === 200){
          this.dataList = res.rows
          this.total = res.total
      this.loading = false;
        }else {
          this.$message({
            message: res.msg,
            type: 'warning'
          })
        }
      })
    },
    handleChange(){
@@ -108,10 +116,11 @@
          console.log('row',row)
         this.showDialog = true
          this.btnLoading = false
        }, 2000);
        }, 1500);
      })
    },
    handleClose() {
      this.chooseItem = {}
      this.showDialog = false
    }
  }