Răsfoiți Sursa

Merge branch 'Regulation' of http://git.izouma.com/licailing/wenlvju into Regulation

xuqiang 4 ani în urmă
părinte
comite
e45cead1eb
25 a modificat fișierele cu 675 adăugiri și 165 ștergeri
  1. 3 0
      src/main/java/com/izouma/wenlvju/domain/performance/Programme.java
  2. 2 0
      src/main/java/com/izouma/wenlvju/domain/regulation/Complain.java
  3. 5 0
      src/main/java/com/izouma/wenlvju/repo/performance/ProgrammeRepo.java
  4. 10 0
      src/main/java/com/izouma/wenlvju/service/performance/ProgrammeScoreService.java
  5. 34 0
      src/main/java/com/izouma/wenlvju/service/performance/ProgrammeService.java
  6. 1 0
      src/main/java/com/izouma/wenlvju/web/performance/PerformanceController.java
  7. 15 0
      src/main/java/com/izouma/wenlvju/web/performance/ProgrammeController.java
  8. 195 0
      src/main/vue/src/components/RecordDrawer.vue
  9. 1 1
      src/main/vue/src/components/RecordLog.vue
  10. 43 3
      src/main/vue/src/components/ReviewLog.vue
  11. 19 0
      src/main/vue/src/router.js
  12. 2 2
      src/main/vue/src/views/performance/ArrangeJudgeList.vue
  13. 46 37
      src/main/vue/src/views/performance/ArrangeList.vue
  14. 2 0
      src/main/vue/src/views/performance/PerformanceList.vue
  15. 7 2
      src/main/vue/src/views/performance/PerformanceListShow.vue
  16. 36 19
      src/main/vue/src/views/performance/ProgScoreAdminList.vue
  17. 8 4
      src/main/vue/src/views/performance/ProgrammeList.vue
  18. 15 5
      src/main/vue/src/views/performance/ProgrammeScoreList.vue
  19. 12 0
      src/main/vue/src/views/performance/review/ArrangeList.vue
  20. 12 0
      src/main/vue/src/views/performance/review/ProgrammeList.vue
  21. 4 3
      src/main/vue/src/views/rate/AssignExpert.vue
  22. 109 15
      src/main/vue/src/views/record/RecordRegulationHistory.vue
  23. 92 72
      src/main/vue/src/views/record/RecordRegulationList.vue
  24. 1 1
      src/test/java/com/izouma/wenlvju/repo/RepoTest.java
  25. 1 1
      src/test/java/com/izouma/wenlvju/repo/UserRepoTest.java

+ 3 - 0
src/main/java/com/izouma/wenlvju/domain/performance/Programme.java

@@ -126,6 +126,9 @@ public class Programme extends BaseEntity {
     @ApiModelProperty(value = "评分")
     private Double score;
 
+    @ApiModelProperty(value = "复审评分")
+    private Double reviewScore;
+
     @ApiModelProperty(value = "全部评分")
     private boolean allScore;
 

+ 2 - 0
src/main/java/com/izouma/wenlvju/domain/regulation/Complain.java

@@ -10,6 +10,7 @@ import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.hibernate.annotations.Where;
 
 import javax.persistence.*;
 import java.time.LocalDateTime;
@@ -21,6 +22,7 @@ import java.util.List;
 @NoArgsConstructor
 @Builder
 @Entity
+@Where(clause = "del = 0")
 @ApiModel(value = "咨询投诉")
 public class Complain extends BaseEntity {
     @ApiModelProperty(value = "记录人")

+ 5 - 0
src/main/java/com/izouma/wenlvju/repo/performance/ProgrammeRepo.java

@@ -44,6 +44,11 @@ public interface ProgrammeRepo extends JpaRepository<Programme, Long>, JpaSpecif
     @Transactional
     void score(double score, Long id);
 
+    @Query("update Programme t set t.reviewScore = ?1 where t.id = ?2")
+    @Modifying
+    @Transactional
+    void reviewScore(double score, Long id);
+
     List<Programme> findAllByPerformanceIdAndArrangeIdIsNull(Long performanceId);
 
     List<Programme> findAllByPerformanceIdAndReviewArrangeIdIsNull(Long performanceId);

+ 10 - 0
src/main/java/com/izouma/wenlvju/service/performance/ProgrammeScoreService.java

@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
 import com.izouma.wenlvju.domain.performance.Performance;
 import com.izouma.wenlvju.domain.performance.ProgrammeScore;
 import com.izouma.wenlvju.dto.PageQuery;
+import com.izouma.wenlvju.enums.PerformanceStatus;
 import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.performance.PerformanceRepo;
 import com.izouma.wenlvju.repo.performance.ProgrammeRepo;
@@ -36,6 +37,11 @@ public class ProgrammeScoreService {
         LocalDateTime now = LocalDateTime.now();
         if (ObjectUtil.isNull(programmeScore)) {
             Performance performance = performanceRepo.findById(performanceId).orElseThrow(new BusinessException("无活动"));
+            // 改状态
+            if (!PerformanceStatus.RATE.equals(performance.getStatus())) {
+                performance.setStatus(PerformanceStatus.RATE);
+                performanceRepo.save(performance);
+            }
             programmeScore = ProgrammeScore.builder()
                     .expertId(userId)
                     .programmeId(programmeId)
@@ -67,6 +73,10 @@ public class ProgrammeScoreService {
         Object avgObj = programmeScoreRepo.avgScore(programmeId);
         if (ObjectUtil.isNotNull(avgObj)) {
             Double avg = Convert.convert(Double.class, avgObj);
+            if (programmeScore.getAuditTimes() > 1) {
+                programmeRepo.reviewScore(avg, programmeId);
+                return;
+            }
             programmeRepo.score(avg, programmeId);
         }
 

+ 34 - 0
src/main/java/com/izouma/wenlvju/service/performance/ProgrammeService.java

@@ -40,6 +40,7 @@ import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 import javax.transaction.Transactional;
 import java.io.*;
+import java.math.BigDecimal;
 import java.nio.charset.StandardCharsets;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
@@ -668,6 +669,9 @@ public class ProgrammeService {
         return dto;
     }
 
+    /*
+    专家查看并打分
+     */
     public Page<ProgrammeScoreDTO> byScore(PageQuery pageQuery, Long userId) {
         List<Long> arrangeId = arrangeJudgeRepo.findArrangeIdByExpertId(userId);
         if (CollUtil.isEmpty(arrangeId)) {
@@ -781,9 +785,39 @@ public class ProgrammeService {
         return dto;
     }
 
+    /*
+    查分数信息
+     */
     public ProgrammeShowDTO get(Long id, String phone) {
         Programme apply = programmeRepo.findById(id).orElseThrow(new BusinessException("无记录"));
         userService.getAuth(id, phone, apply.getPhone());
         return this.toShowDTO(apply);
     }
+
+    /*
+    进入复审
+     */
+    public void review(Long performanceId, int pass, Long userId) {
+        List<Programme> programmes = programmeRepo.findAllByPerformanceIdAndProgrammeStatus(performanceId, ProgrammeStatus.SUBMIT);
+        long count = programmes.stream().filter(programme -> ObjectUtil.isNull(programme.getScore())).count();
+        if (count > 0) {
+            throw new BusinessException("有节目未评分");
+        }
+        programmes.sort(Comparator.comparingDouble(Programme::getScore));
+        List<Programme> eliminate = programmes.subList(pass, programmes.size());
+        List<RateAudit> rateAudits = new ArrayList<>();
+        eliminate.forEach(programme -> {
+            programme.setProgrammeStatus(ProgrammeStatus.REVIEW_FAILED);
+            rateAudits.add(RateAudit.builder()
+                    .rateId(programme.getId())
+                    .programmeAudit(true)
+                    .userId(userId)
+                    .remark("未进入复审")
+                    .status(ProgrammeStatus.REVIEW_FAILED.toString())
+                    .build());
+        });
+
+        programmeRepo.saveAll(eliminate);
+        rateAuditRepo.saveAll(rateAudits);
+    }
 }

+ 1 - 0
src/main/java/com/izouma/wenlvju/web/performance/PerformanceController.java

@@ -111,5 +111,6 @@ public class PerformanceController extends BaseController {
 //        return performanceRepo.findLastYear();
         return performanceRepo.findByYear(String.valueOf(LocalDate.now().getYear() - 1));
     }
+
 }
 

+ 15 - 0
src/main/java/com/izouma/wenlvju/web/performance/ProgrammeController.java

@@ -1,11 +1,13 @@
 package com.izouma.wenlvju.web.performance;
 
 import cn.hutool.core.convert.Convert;
+import com.izouma.wenlvju.domain.performance.Performance;
 import com.izouma.wenlvju.domain.performance.Programme;
 import com.izouma.wenlvju.dto.*;
 import com.izouma.wenlvju.enums.ProgrammeStatus;
 import com.izouma.wenlvju.enums.SignedIn;
 import com.izouma.wenlvju.exception.BusinessException;
+import com.izouma.wenlvju.repo.performance.PerformanceRepo;
 import com.izouma.wenlvju.repo.performance.ProgrammeRepo;
 import com.izouma.wenlvju.service.UserService;
 import com.izouma.wenlvju.service.performance.ProgrammeService;
@@ -34,6 +36,7 @@ public class ProgrammeController extends BaseController {
     private ProgrammeService programmeService;
     private ProgrammeRepo    programmeRepo;
     private UserService      userService;
+    private PerformanceRepo  performanceRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
@@ -45,6 +48,12 @@ public class ProgrammeController extends BaseController {
     @PostMapping("/saveScore")
     public Programme saveScore(@RequestParam Long id, @RequestParam Double score) {
         Programme programme = programmeRepo.findById(id).orElseThrow(new BusinessException("无节目"));
+        Performance performance = performanceRepo.findById(programme.getPerformanceId())
+                .orElseThrow(new BusinessException("无活动"));
+        if (performance.getAuditTimes() > 1) {
+            programme.setReviewScore(score);
+            return programmeRepo.save(programme);
+        }
         programme.setScore(score);
         return programmeRepo.save(programme);
     }
@@ -183,5 +192,11 @@ public class ProgrammeController extends BaseController {
     public ProgrammeShowDTO getScore(@PathVariable Long id, String phone) {
         return programmeService.get(id, phone);
     }
+
+    @ApiOperation("设置进入复审名单")
+    @PostMapping("/review")
+    public void review(@RequestParam Long performanceId, int pass) {
+        programmeService.review(performanceId, pass, SecurityUtils.getAuthenticatedUser().getId());
+    }
 }
 

+ 195 - 0
src/main/vue/src/components/RecordDrawer.vue

@@ -0,0 +1,195 @@
+<template>
+    <el-drawer title="检查记录" :visible.sync="drawer" size="40%" :with-header="false" @close="lists = []">
+        <div v-if="lists.length <= 0" style="padding:100px 0; font-size: 14px; color: #4a4646">
+            <div style="text-align:center">暂无数据</div>
+        </div>
+        <div style="margin: 30px" v-else>
+            <el-timeline-item :timestamp="item.createdAt" placement="top" v-for="item in lists" :key="item.id">
+                <div style="font-size: 14px; color: #4a4646">
+                    {{ tipsType[item.type] }}
+                </div>
+                <div style="margin-top:5px">
+                    <!-- {{ item.value ? '是' : '否' }} -->
+                    <el-radio-group v-model="item.value" disabled>
+                        <el-radio :label="true">是</el-radio>
+                        <el-radio :label="false">否</el-radio>
+                    </el-radio-group>
+                </div>
+
+                <div style="margin-top:5px">
+                    <el-image
+                        v-for="(img, index) in item.img"
+                        :key="index"
+                        :src="img"
+                        style="width:60px;height:60px;margin-right:3px"
+                        :preview-src-list="item.img"
+                    >
+                    </el-image>
+                </div>
+            </el-timeline-item>
+            <el-timeline reverse>
+                <el-timeline-item
+                    :timestamp="item.createdAt"
+                    placement="top"
+                    v-for="item in checkMap.get(recordId)"
+                    :key="item.id"
+                >
+                    <div style="font-size: 14px; color: #4a4646">
+                        {{ item.content }}
+                    </div>
+                    <div style="margin-top:5px">
+                        <el-image
+                            v-for="(img, index) in item.file"
+                            :key="index"
+                            :src="img"
+                            fit="fill"
+                            :lazy="true"
+                            style="width:60px;height:60px;margin-right:3px"
+                            :preview-src-list="item.file"
+                        >
+                        </el-image>
+                    </div>
+                </el-timeline-item>
+            </el-timeline>
+            <div>
+                <el-button @click="saveRow(recordId)" size="mini" plain>编辑</el-button>
+            </div>
+        </div>
+    </el-drawer>
+</template>
+<script>
+export default {
+    props: ['drawer'],
+    created() {},
+    data() {
+        return {
+            lists: [],
+            checkMap: new Map(),
+            tipsType: {
+                examOrganization: '是否履行考前备案手续(此项为否,不再检查下面内容)',
+                examSite: '是否在考场明显位置张贴《考级简章》',
+                examRoom: '考场服务设施是否完善(候考室、指示标记、安全设施等)',
+                environment: '考级时间与网上平台考前备案的考级时间是否一致',
+                safetyq: '考场内有无相关专业考官且佩戴考官证',
+                safetyw: '是否现场对考生艺术水平作出评定(美术专业除外)',
+                safetye: '考级内容是否是所属考级机构教材确定的考级内容',
+                safetyr: '是否在考场明显位置张贴《恢复开展社会艺术水平考级现场考级活动疫情防控措施指南》海报',
+                safetyt: '考点是否配备测量体温设施设备,并有专人值守',
+                safetys: '考级现场是否实施预约限流措施'
+            },
+            recordId: ''
+        };
+    },
+    methods: {
+        closeDialog() {
+            this.$emit('close');
+        },
+        init(id) {
+            if (id) {
+                this.recordId = id;
+                let checks = new Map([...this.checkMap]);
+                if (checks.has(id)) {
+                    return;
+                }
+                this.$http
+                    .post(
+                        'recordCheck/all',
+                        {
+                            size: 20,
+                            sort: 'createdAt,asc',
+                            query: { recordId: id }
+                        },
+                        { body: 'json' }
+                    )
+                    .then(res => {
+                        if (!res.empty) {
+                            checks.set(id, res.content);
+                        } else {
+                            return Promise.reject();
+                        }
+                    })
+                    .catch(e => {
+                        checks.set(id, []);
+                    })
+                    .then(() => {
+                        this.checkMap = new Map(checks);
+                    });
+                this.$http
+                    .post(
+                        'recordExpertAudit/all',
+                        {
+                            size: 20,
+                            query: {
+                                recordId: id
+                            }
+                        },
+                        { body: 'json' }
+                    )
+                    .then(res => {
+                        console.log(res);
+                        this.lists = res.content;
+                        // this.empty = res.empty;
+                    });
+            }
+        }
+    }
+};
+</script>
+<style lang="less" scoped>
+.edit-view {
+    background-color: transparent;
+}
+.date-width {
+    width: 100%;
+}
+.info-content {
+    // padding: 39px 25px 25px;
+    // margin: 5px auto;
+    width: 50%;
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: space-between;
+}
+.btn {
+    position: fixed;
+    bottom: 0;
+    width: 100%;
+    background: #ffffff;
+    height: 50px;
+    line-height: 50px;
+    z-index: 999;
+    margin-left: -40px;
+    padding-left: 20px;
+}
+/deep/ .address {
+    display: flex;
+    width: 100%;
+    .el-form-item__content {
+        flex-grow: 1;
+    }
+}
+/deep/ .el-divider__text,
+.el-link {
+    font-size: 12px;
+}
+.el-card + .el-card {
+    margin-top: 30px;
+}
+/deep/ .el-card__body {
+    position: relative;
+}
+.el-card {
+    overflow: visible;
+}
+.more {
+    position: absolute;
+    bottom: 0;
+    left: 50%;
+    transform: translate(-50%, 50%);
+    padding: 9px 9px;
+}
+/deep/.el-input.is-disabled .el-input__inner {
+    background-color: #ffffff;
+    color: #606266;
+}
+</style>

+ 1 - 1
src/main/vue/src/components/RecordLog.vue

@@ -31,7 +31,7 @@
                         <el-card shadow="hover" :body-style="{ padding: '20px' }">
                             <div v-if="!item.del">
                                 <el-form-item prop="content" label="其他">
-                                    <el-input :rows="5" type="textarea" v-model="item.content"></el-input>
+                                    <el-input :rows="2" type="textarea" v-model="item.content"></el-input>
                                 </el-form-item>
                                 <el-form-item prop="file" label="作证材料">
                                     <!-- <file-upload v-model="item.file"></file-upload> -->

+ 43 - 3
src/main/vue/src/components/ReviewLog.vue

@@ -24,10 +24,18 @@
                     </el-radio-group>
                 </el-form-item>
                 <el-form-item prop="reviewRatio" label="复审比例">
-                    <el-input-number type="number" v-model="formData.reviewRatio" class="input1"></el-input-number>
+                    <el-input-number
+                        type="number"
+                        v-model="formData.reviewRatio"
+                        class="input1"
+                        @change="count"
+                    ></el-input-number>
+                    <br />
+                    <span>将有{{ pass }}个节目进入复审,{{ total - pass }}个节目被淘汰!</span>
                 </el-form-item>
                 <el-form-item>
                     <el-button @click="onSave" :loading="saving" type="primary">保存</el-button>
+                    <el-button @click="publish" :loading="saving" type="success">发布</el-button>
                     <el-button @click="closeDialog">取消</el-button>
                 </el-form-item>
             </el-form>
@@ -36,7 +44,7 @@
 </template>
 <script>
 export default {
-    props: ['dialogVisible'],
+    props: ['dialogVisible', 'total'],
     data() {
         return {
             saving: false,
@@ -58,7 +66,8 @@ export default {
                     }
                 ]
             },
-            id: ''
+            id: '',
+            pass: 0
         };
     },
     methods: {
@@ -81,6 +90,7 @@ export default {
                     .get('performance/get/' + id)
                     .then(res => {
                         this.formData = res;
+                        this.count(res.reviewRatio);
                     })
                     .catch(e => {
                         console.log(e);
@@ -107,6 +117,36 @@ export default {
                     this.saving = false;
                     this.$message.error(e.error);
                 });
+        },
+        publish() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.$confirm('发布后将不能在修改, 确认发布吗?', '提示', {
+                        confirmButtonText: '确定',
+                        cancelButtonText: '取消',
+                        type: 'warning'
+                    }).then(() => {
+                        this.formData.auditTimes += 1;
+                        this.formData.status = 'UNDER_REVIEW';
+
+                        this.$http
+                            .post('/programme/review', { performanceId: this.id, pass: this.pass })
+                            .then(res => {
+                                this.submit();
+                            })
+                            .catch(e => {
+                                console.log(e);
+                                this.$message.error(e.error);
+                            });
+                    });
+                } else {
+                    return false;
+                }
+            });
+        },
+        count(val) {
+            let pass = (this.total * val) / 100;
+            this.pass = Math.round(pass);
         }
     }
 };

+ 19 - 0
src/main/vue/src/router.js

@@ -785,6 +785,25 @@ const router = new Router({
                     meta: {
                         title: '奖项设置'
                     }
+                },
+                /**复审 */
+                {
+                    path: '/programmeReviewList',
+                    name: 'ProgrammeList',
+                    component: () =>
+                        import(/* webpackChunkName: "programmeList" */ '@/views/performance/review/ProgrammeList.vue'),
+                    meta: {
+                        title: '节目列表'
+                    }
+                },
+                {
+                    path: '/arrangeReviewList',
+                    name: 'ArrangeList',
+                    component: () =>
+                        import(/* webpackChunkName: "arrangeList" */ '@/views/performance/review/ArrangeList.vue'),
+                    meta: {
+                        title: '节目编排'
+                    }
                 }
                 /**INSERT_LOCATION**/
             ]

+ 2 - 2
src/main/vue/src/views/performance/ArrangeJudgeList.vue

@@ -80,7 +80,7 @@
         <el-table
             v-if="!onlines"
             :data="tableData"
-            empty-text="加载中..."
+            empty-text="暂无数据"
             row-key="id"
             ref="table"
             header-row-class-name="table-header-row"
@@ -118,7 +118,7 @@
             v-if="onlines"
             :data="tableData"
             style="margin-top:20px"
-            empty-text="加载中..."
+            empty-text="暂无数据"
             row-key="id"
             ref="table"
             header-row-class-name="table-header-row"

+ 46 - 37
src/main/vue/src/views/performance/ArrangeList.vue

@@ -23,13 +23,13 @@
                     <el-button type="primary" @click="getData">查看活动分组情况</el-button>
                     <el-button type="primary" @click="intoGroup">查看未分组情况情况</el-button>
                 </el-form-item>
-                <div v-if="performance.status == 'UNDER_REVIEW' || performance.status == 'ARRANGE'">
+                <div v-if="canEdit()">
                     <el-collapse-transition>
                         <div v-show="showMore">
                             <el-card shadow="hover" :body-style="{ padding: '15px' }" style="margin-bottom: 15px">
                                 <el-row :gutter="15">
                                     <el-col :span="12" :offset="0">
-                                        <el-form-item label="活动日期" prop="dateRange" v-if="!performance.online">
+                                        <el-form-item label="活动日期" prop="dateRange" v-if="!online">
                                             <el-date-picker
                                                 v-model="dateRange"
                                                 value-format="yyyy-MM-dd"
@@ -45,23 +45,14 @@
                                     <el-col :span="6" :offset="0">
                                         <el-form-item class="flex" label="分组节目数量" prop="quantity">
                                             <el-input-number type="number" v-model="form.quantity"></el-input-number>
-                                            <!-- <el-select v-model="form.quantity" clearable>
-                                            <el-option
-                                                v-for="item in nums"
-                                                :key="item"
-                                                :label="item"
-                                                :value="item"
-                                            ></el-option>
-                                        </el-select> -->
                                         </el-form-item>
                                     </el-col>
                                     <el-col :span="12">
-                                        <el-form-item label="时间安排" prop="morning" v-if="!performance.online">
+                                        <el-form-item label="时间安排" prop="morning" v-if="!online">
                                             <el-checkbox v-model="form.morning" disabled>上午</el-checkbox>
                                             <el-time-select
                                                 placeholder="起始时间"
                                                 format="HH:mm"
-                                                value-format="HH:mm:ss"
                                                 v-model="timeRange[0]"
                                                 :picker-options="{
                                                     start: '08:30',
@@ -73,6 +64,7 @@
                                             </el-time-select>
                                             <el-time-select
                                                 placeholder="结束时间"
+                                                format="HH:mm"
                                                 v-model="timeRange[1]"
                                                 :picker-options="{
                                                     start: '08:30',
@@ -86,25 +78,20 @@
                                         </el-form-item>
                                     </el-col>
                                     <el-col :span="6" :offset="0">
-                                        <el-form-item
-                                            class="flex"
-                                            label="单个节目时长"
-                                            prop="duration"
-                                            v-if="!performance.online"
-                                        >
-                                            <!-- <el-input-number type="number" v-model="form.duration"></el-input-number> -->
-                                            <el-select v-model="form.duration" clearable>
+                                        <el-form-item class="flex" label="单个节目时长" prop="duration" v-if="!online">
+                                            <el-input-number type="number" v-model="form.duration"></el-input-number>
+                                            <!-- <el-select v-model="form.duration" clearable>
                                                 <el-option
                                                     v-for="item in times"
                                                     :key="item"
                                                     :label="item"
                                                     :value="item"
                                                 ></el-option>
-                                            </el-select>
+                                            </el-select> -->
                                         </el-form-item>
                                     </el-col>
                                     <el-col :span="12" :offset="0">
-                                        <el-form-item label=" " prop="afternoon" v-if="!performance.online">
+                                        <el-form-item label=" " prop="afternoon" v-if="!online">
                                             <el-checkbox v-model="form.afternoon" disabled>下午</el-checkbox>
 
                                             <el-time-select
@@ -152,16 +139,17 @@
                                             class="flex"
                                             label="活动地点"
                                             style="width: 467px"
-                                            v-if="!performance.online"
+                                            v-if="!online"
                                         >
-                                            <el-select v-model="form.address">
+                                            <!-- <el-select v-model="form.address">
                                                 <el-option
                                                     v-for="(item, index) in addresses"
                                                     :key="index"
                                                     :value="item.value"
                                                     :label="item.value"
                                                 ></el-option>
-                                            </el-select>
+                                            </el-select> -->
+                                            <el-input v-model="form.address"></el-input>
                                         </el-form-item>
                                     </el-col>
                                 </el-row>
@@ -193,7 +181,7 @@
             :data="tableData"
             row-key="id"
             ref="table"
-            empty-text="加载中..."
+            :empty-text="tableData.length > 0 ? '加载中...' : '暂无数据'"
             header-row-class-name="table-header-row"
             header-cell-class-name="table-header-cell"
             row-class-name="table-row"
@@ -202,9 +190,9 @@
         >
             <el-table-column v-if="multipleMode" align="center" type="selection" width="50"> </el-table-column>
             <!-- <el-table-column prop="id" label="ID" width="100"> </el-table-column> -->
-            <el-table-column prop="address" label="活动地点" v-if="!performance.online"> </el-table-column>
+            <el-table-column prop="address" label="活动地点" v-if="!online"> </el-table-column>
             <el-table-column prop="name" label="分组名称" min-width="130"> </el-table-column>
-            <el-table-column label="时间安排" min-width="100" v-if="!performance.online">
+            <el-table-column label="时间安排" min-width="100" v-if="!online">
                 <template slot-scope="{ row }"> {{ getTime(row.startTime) }}-{{ getTime(row.endTime) }} </template>
             </el-table-column>
             <el-table-column prop="quantity" label="节目数量"> </el-table-column>
@@ -216,7 +204,7 @@
             </el-table-column>
             <el-table-column prop="writerDirector" label="编导姓名"> </el-table-column>
             <el-table-column prop="phone" label="联系电话"> </el-table-column>
-            <el-table-column label="操作" align="center" fixed="right" :min-width="performance.online ? 100 : 320">
+            <el-table-column label="操作" align="center" fixed="right" :min-width="online ? 100 : 320">
                 <template slot-scope="{ row, $index }">
                     <el-button
                         @click="editRow(row)"
@@ -233,7 +221,7 @@
                         type="success"
                         size="mini"
                         plain
-                        v-if="!performance.online"
+                        v-if="!online"
                         >上移</el-button
                     >
                     <el-button
@@ -242,7 +230,7 @@
                         type="warning"
                         size="mini"
                         plain
-                        v-if="!performance.online"
+                        v-if="!online"
                         >下移</el-button
                     >
                 </template>
@@ -307,10 +295,12 @@ import pageableTable from '@/mixins/pageableTable';
 import ArrangeLog from '../../components/ArrangeLog';
 import { time } from 'echarts';
 import delChild from '@/mixins/delChild';
+import { format, parse } from 'date-fns';
 
 export default {
     name: 'ArrangeList',
     mixins: [pageableTable, delChild],
+    props: ['review'],
     components: { ArrangeLog },
     data() {
         return {
@@ -335,15 +325,15 @@ export default {
                 { label: '个人', value: 'SINGLE' },
                 { label: '集体', value: 'COLLECTIVE' }
             ],
-            nums: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
             times: [3, 5, 10, 15, 20],
-            activeNames: []
+            activeNames: [],
+            online: false
         };
     },
     watch: {
         timeRange(value) {
             let checked = value.includes(null);
-            console.log(checked);
+            console.log(value[0]);
             this.form.morning = !checked;
             this.$refs.form.validateField('afternoon');
         },
@@ -376,6 +366,10 @@ export default {
                     });
                     this.form.performanceId = res.content[0].id;
                     this.performance = res.content[0];
+                    this.online = this.performance.online;
+                    if (this.review) {
+                        this.online = this.performance.reviewOnline;
+                    }
                     this.getData();
                     this.$http
                         .post(
@@ -428,7 +422,7 @@ export default {
         rules() {
             return {
                 performanceId: [{ required: true, message: '请选择活动名称', trigger: 'blur' }],
-                address: [{ required: true, message: '请选择活动地点', trigger: 'blur' }],
+                address: [{ required: true, message: '请输入活动地点', trigger: 'blur' }],
                 quantity: [{ required: true, message: '请输入分组节目数量', trigger: 'blur' }],
                 duration: [{ required: true, message: '请输入单个节目时长', trigger: 'blur' }],
                 morning: [
@@ -463,13 +457,19 @@ export default {
             return '';
         },
         beforeGetData() {
-            return {
+            let data = {
                 search: this.search,
                 sort: 'date,asc;startTime,asc',
                 query: {
                     performanceId: this.form.performanceId
                 }
             };
+            if (this.review) {
+                data.query.auditTimes = this.performance.auditTimes;
+            } else {
+                data.query.auditTimes = 1;
+            }
+            return data;
         },
         toggleMultipleMode(multipleMode) {
             this.multipleMode = multipleMode;
@@ -490,7 +490,7 @@ export default {
             this.$refs.public.init(row.id);
         },
         programme(row) {
-            if (this.performance.online) {
+            if (this.online) {
                 this.$router.push({
                     path: '/progGroupOnlineList',
                     query: {
@@ -685,6 +685,15 @@ export default {
                         this.$message.error(e.error);
                     }
                 });
+        },
+        canEdit() {
+            let can = this.performance.status == 'UNDER_REVIEW' || this.performance.status == 'ARRANGE';
+            if (this.review) {
+                can &= this.performance.auditTimes > 1;
+            } else {
+                can &= this.performance.auditTimes == 1;
+            }
+            return can;
         }
     }
 };

+ 2 - 0
src/main/vue/src/views/performance/PerformanceList.vue

@@ -49,6 +49,8 @@
                         <span v-if="row.status == 'UNDER_REVIEW'">审核中</span>
                         <span v-else-if="row.status == 'ARRANGE'">分组中</span>
                         <span v-else-if="row.status == 'ARRANGE_JUDGE'">分配评委中</span>
+                        <span v-else-if="row.status == 'SIGN_IN'">签到中</span>
+                        <span v-else-if="row.status == 'RATE'">评分中</span>
                     </el-link>
                 </template>
             </el-table-column>

+ 7 - 2
src/main/vue/src/views/performance/PerformanceListShow.vue

@@ -27,10 +27,15 @@
                     <el-link
                         style="font-size: 13px"
                         :underline="false"
-                        type="info"
+                        type="warning"
                         v-else-if="currentTime > row.endDate"
-                        >已结束</el-link
                     >
+                        <span v-if="row.status == 'UNDER_REVIEW'">审核中</span>
+                        <span v-else-if="row.status == 'ARRANGE'">分组中</span>
+                        <span v-else-if="row.status == 'ARRANGE_JUDGE'">分配评委中</span>
+                        <span v-else-if="row.status == 'SIGN_IN'">签到中</span>
+                        <span v-else-if="row.status == 'RATE'">评分中</span>
+                    </el-link>
                     <el-link
                         style="font-size: 13px"
                         :underline="false"

+ 36 - 19
src/main/vue/src/views/performance/ProgScoreAdminList.vue

@@ -99,10 +99,12 @@
             <el-table-column label="操作" align="left" fixed="right" min-width="150">
                 <template slot-scope="{ row, $index }">
                     <el-button @click="playVideo(row, $index)" size="mini" plain type="primary">查看作品</el-button>
-                    <el-button @click="row.second = true" size="mini" plain type="warning" v-if="!row.second"
-                        >修改</el-button
-                    >
-                    <el-button @click="row.second = false" size="mini" plain type="danger" v-else>取消</el-button>
+                    <div v-if="performance.status == 'RATE'">
+                        <el-button @click="row.second = true" size="mini" plain type="warning" v-if="!row.second"
+                            >修改</el-button
+                        >
+                        <el-button @click="row.second = false" size="mini" plain type="danger" v-else>取消</el-button>
+                    </div>
                 </template>
             </el-table-column>
         </el-table>
@@ -128,10 +130,18 @@
             </el-pagination>
         </div>
 
-        <el-dialog class="videoDialog" destroy-on-close center append-to-body :visible.sync="showViedo" width="70%">
-            <video :src="programme.video" controls style="height: 85%; max-width: 85%; margin: 0 auto">
+        <el-dialog class="videoDialog" destroy-on-close center append-to-body :visible.sync="showViedo" width="60%">
+            <video
+                :src="programme.video"
+                controls
+                style="height: 600px; width: 85%; margin: 0 auto"
+                v-if="programme.video"
+            >
                 您的浏览器不支持 video 标签。
             </video>
+            <div style="height: 85%; width: 85%;margin: 0 auto">
+                <img style="height: 100%; width: 100%; " :src="programme.annex" alt="" v-if="programme.annex" />
+            </div>
             <el-card shadow="never" style="width: 85%; margin: 10px auto">
                 <el-form :form="programme">
                     <el-form-item label="分数">
@@ -150,18 +160,24 @@
                         </el-input-number>
                     </el-form-item>
                     <el-form-item>
-                        <el-button size="mini" v-if="!programme.second" @click="programme.second = true" type="warning"
-                            >修改</el-button
-                        >
-                        <el-button size="mini" v-else @click="saveRow(programme)" type="primary">保存</el-button>
-                        <el-button
-                            @click="programme.second = false"
-                            size="mini"
-                            plain
-                            type="danger"
-                            v-if="programme.second"
-                            >取消</el-button
-                        >
+                        <div v-if="performance.status == 'RATE'">
+                            <el-button
+                                size="mini"
+                                v-if="!programme.second"
+                                @click="programme.second = true"
+                                type="warning"
+                                >修改</el-button
+                            >
+                            <el-button size="mini" v-else @click="saveRow(programme)" type="primary">保存</el-button>
+                            <el-button
+                                @click="programme.second = false"
+                                size="mini"
+                                plain
+                                type="danger"
+                                v-if="programme.second"
+                                >取消</el-button
+                            >
+                        </div>
                         <el-button size="mini" @click="move(-1)" :disabled="index == 0">上一个</el-button>
                         <el-button
                             size="mini"
@@ -169,11 +185,12 @@
                             :disabled="(page - 1) * pageSize + index == totalElements - 1"
                             >下一个</el-button
                         >
+                        <el-button @click="showViedo = false" size="mini">关闭</el-button>
                     </el-form-item>
                 </el-form>
             </el-card>
         </el-dialog>
-        <review-log :dialogVisible="isShow" @close="isShow = false" ref="public"></review-log>
+        <review-log :dialogVisible="isShow" :total="totalElements" @close="isShow = false" ref="public"></review-log>
     </div>
 </template>
 <script>

+ 8 - 4
src/main/vue/src/views/performance/ProgrammeList.vue

@@ -279,9 +279,8 @@
                 :src="videoUrl"
                 controlsList="nodownload noremote footbar"
                 controls
-                style="height: 700px; width: 100%"
+                style="height: 600px; width: 100%"
                 oncontextmenu="return false;"
-                onmouseleave="leaveVideo(this)"
                 ref="video"
                 v-if="showViedo"
             >
@@ -299,10 +298,11 @@ import delChild from '@/mixins/delChild';
 import { mapState } from 'vuex';
 import pageableTable from '@/mixins/pageableTable';
 import QrcodeVue from 'qrcode.vue';
-import ProgrammeLog from '../../components/ProgrammeLog.vue';
+import ProgrammeLog from '@/components/ProgrammeLog.vue';
 export default {
     name: 'ProgrammeList',
     mixins: [pageableTable, delChild],
+    props: ['review'],
     data() {
         return {
             multipleMode: false,
@@ -341,7 +341,8 @@ export default {
             programmeStatusOptions: [
                 { label: '未提交', value: 'INITIAL' },
                 { label: '已提交', value: 'SUBMIT' },
-                { label: '初选未通过', value: 'AUDIT_FAILED' }
+                { label: '初选未通过', value: 'AUDIT_FAILED' },
+                { label: '审核未通过', value: 'REVIEW_FAILED' }
             ]
         };
     },
@@ -500,6 +501,9 @@ export default {
             if (this.performanceId) {
                 data.query.performanceId = this.performanceId;
             }
+            if (this.review) {
+                data.query.programmeStatus = 'SUBMIT';
+            }
             return data;
         },
         toggleMultipleMode(multipleMode) {

+ 15 - 5
src/main/vue/src/views/performance/ProgrammeScoreList.vue

@@ -135,10 +135,17 @@
         </div>
 
         <el-dialog class="videoDialog" destroy-on-close center append-to-body :visible.sync="showViedo" width="60%">
-            <video :src="programme.video" controls style="height: 85%; max-width: 85%; margin: 0 auto">
+            <video
+                :src="programme.video"
+                controls
+                style="height: 600px; width: 85%; margin: 0 auto"
+                v-if="programme.video"
+            >
                 您的浏览器不支持 video 标签。
             </video>
-            <img style="height: 100%; max-width: 100%" :src="programme.annex" alt="" />
+            <div style="height: 85%; width: 85%;margin: 0 auto">
+                <img style="height: 100%; width: 100%; " :src="programme.annex" alt="" v-if="programme.annex" />
+            </div>
             <el-card shadow="never" style="width: 85%; margin: 10px auto">
                 <el-form :form="programme">
                     <el-form-item label="分数">
@@ -153,7 +160,6 @@
                             :step="1"
                             :controls="true"
                             controls-position="both"
-                            @change="saveScore(row)"
                         >
                         </el-input-number>
                     </el-form-item>
@@ -162,15 +168,17 @@
                         <el-input
                             v-else
                             size="mini"
-                            @change="saveScore(row)"
                             v-model="programme.remark"
                             placeholder="请输入备注"
                             style="width: 200px"
                             clearable
                         ></el-input>
                     </el-form-item>
+
                     <el-form-item>
-                        <el-button size="mini" v-if="!programme.second">保存</el-button>
+                        <el-button size="mini" v-if="!programme.second" @click="saveScore(programme)" type="primary"
+                            >保存</el-button
+                        >
                         <el-button size="mini" @click="move(-1)" :disabled="index == 0">上一个</el-button>
                         <el-button
                             size="mini"
@@ -178,6 +186,7 @@
                             :disabled="(page - 1) * pageSize + index == totalElements - 1"
                             >下一个</el-button
                         >
+                        <el-button @click="showViedo = false" size="mini">关闭</el-button>
                     </el-form-item>
                 </el-form>
             </el-card>
@@ -374,6 +383,7 @@ export default {
                 .then(res => {
                     this.$message.success('评分成功');
                     this.getData();
+                    this.programme = res;
                 })
                 .catch(e => {
                     this.$message.error(e.error);

+ 12 - 0
src/main/vue/src/views/performance/review/ArrangeList.vue

@@ -0,0 +1,12 @@
+<template>
+    <arrange-list :review="true"></arrange-list>
+</template>
+<script>
+import ArrangeList from '@/views/performance/ArrangeList';
+export default {
+    components: {
+        ArrangeList
+    }
+};
+</script>
+<style lang="less" scoped></style>

+ 12 - 0
src/main/vue/src/views/performance/review/ProgrammeList.vue

@@ -0,0 +1,12 @@
+<template>
+    <programme-list :review="true"></programme-list>
+</template>
+<script>
+import ProgrammeList from '@/views/performance/ProgrammeList';
+export default {
+    components: {
+        ProgrammeList
+    }
+};
+</script>
+<style lang="less" scoped></style>

+ 4 - 3
src/main/vue/src/views/rate/AssignExpert.vue

@@ -132,7 +132,7 @@
                 ></el-input>
             </el-form-item>
 
-            <el-form-item class="btn">
+            <el-form-item class="fixed-btn">
                 <el-button @click="onSave" :loading="saving" type="primary" v-if="formData.status == 'ASSIGN_EXPERT'"
                     >保存</el-button
                 >
@@ -144,11 +144,12 @@
                 >
                     退回
                 </el-button>
+                <el-button @click="$router.go(-1)">返回</el-button>
             </el-form-item>
         </el-form>
-        <div class="btn">
+        <!-- <div class="btn">
             <el-button @click="$router.go(-1)">返回</el-button>
-        </div>
+        </div> -->
     </div>
 </template>
 <script>

+ 109 - 15
src/main/vue/src/views/record/RecordRegulationHistory.vue

@@ -55,9 +55,8 @@
             row-class-name="table-row"
             cell-class-name="table-cell"
             :height="tableHeight"
-            @expand-change="expand"
         >
-            <el-table-column type="expand">
+            <!-- <el-table-column type="expand">
                 <template slot-scope="props">
                     <el-card v-if="checkMap.has(props.row.id)">
                         <div v-if="checkMap.get(props.row.id).length === 0">
@@ -86,7 +85,6 @@
                                     >
                                     </el-image>
                                 </div>
-                                <!-- content -->
                             </el-timeline-item>
                         </el-timeline>
                         <div style="margin-left: 26px">
@@ -97,7 +95,7 @@
                         </div>
                     </el-card>
                 </template>
-            </el-table-column>
+            </el-table-column> -->
             <el-table-column v-if="multipleMode" align="center" type="selection" width="50"> </el-table-column>
             <el-table-column prop="examinationName" label="考级活动名称" min-width="150"> </el-table-column>
             <el-table-column prop="examinationStartTime" label="考级活动时间" show-overflow-tooltip min-width="160">
@@ -112,7 +110,7 @@
             <el-table-column label="操作" align="right" fixed="right" min-width="260">
                 <template slot-scope="{ row }">
                     <el-button @click="editRow(row)" size="mini" plain>查看</el-button>
-                    <el-button @click="checkRow(row)" type="warning" size="mini" plain>检查记录</el-button>
+                    <el-button @click="openDrawer(row)" type="warning" size="mini" plain>检查记录</el-button>
                     <el-button size="mini" type="primary" plain>考场监控</el-button>
                 </template>
             </el-table-column>
@@ -138,11 +136,70 @@
             >
             </el-pagination>
         </div>
-        <record-logs ref="dataRef" :dialogVisibles="isShow" @close="isShow = false"></record-logs>
+        <record-log ref="dataRefs" :dialogVisible="isShow" @close="isShow = false"></record-log>
+        <record-logs ref="dataRef" :dialogVisibles="isShows" @close="isShows = false"></record-logs>
+        <el-drawer title="检查记录" :visible.sync="drawer" size="40%" :with-header="false">
+            <div v-if="lists.length <= 0" style="padding:100px 0; font-size: 14px; color: #4a4646">
+                <div style="text-align:center">暂无数据</div>
+            </div>
+            <div style="margin: 30px" v-else>
+                <el-timeline-item :timestamp="item.createdAt" placement="top" v-for="item in lists" :key="item.id">
+                    <div style="font-size: 14px; color: #4a4646">
+                        {{ tipsType[item.type] }}
+                    </div>
+                    <div style="margin-top:5px">
+                        <!-- {{ item.value ? '是' : '否' }} -->
+                        <el-radio-group v-model="item.value" disabled>
+                            <el-radio :label="true">是</el-radio>
+                            <el-radio :label="false">否</el-radio>
+                        </el-radio-group>
+                    </div>
+
+                    <div style="margin-top:5px">
+                        <el-image
+                            v-for="(img, index) in item.img"
+                            :key="index"
+                            :src="img"
+                            style="width:60px;height:60px;margin-right:3px"
+                            :preview-src-list="item.img"
+                        >
+                        </el-image>
+                    </div>
+                </el-timeline-item>
+                <el-timeline reverse>
+                    <el-timeline-item
+                        :timestamp="item.createdAt"
+                        placement="top"
+                        v-for="item in checkMap.get(row.id)"
+                        :key="item.id"
+                    >
+                        <div style="font-size: 14px; color: #4a4646">
+                            {{ item.content }}
+                        </div>
+                        <div style="margin-top:5px">
+                            <el-image
+                                v-for="(img, index) in item.file"
+                                :key="index"
+                                :src="img"
+                                fit="fill"
+                                :lazy="true"
+                                style="width:60px;height:60px;margin-right:3px"
+                                :preview-src-list="item.file"
+                            >
+                            </el-image>
+                        </div>
+                    </el-timeline-item>
+                </el-timeline>
+                <div>
+                    <el-button @click="saveRow(row)" size="mini" plain>编辑</el-button>
+                </div>
+            </div>
+        </el-drawer>
     </div>
 </template>
 <script>
 import pageableTable from '@/mixins/pageableTable';
+import RecordLog from '../../components/RecordLog';
 import RecordLogs from '../../components/RecordLogs';
 import format from 'date-fns/format';
 import startOfDay from 'date-fns/startOfDay';
@@ -152,7 +209,7 @@ import { th } from 'date-fns/locale';
 export default {
     name: 'RecordRegulationHistory',
     mixins: [pageableTable],
-    components: { RecordLogs },
+    components: { RecordLogs, RecordLog },
     created() {
         this.$http
             .get('/district/NJ')
@@ -182,7 +239,11 @@ export default {
             organizer: '',
             dateRange: '',
             currentTime: '',
-            checkMap: new Map()
+            checkMap: new Map(),
+            drawer: false,
+            row: {},
+            lists: [],
+            isShows: false
         };
     },
     computed: {
@@ -235,19 +296,15 @@ export default {
             });
         },
         editRow(row) {
-            this.isShow = true;
+            this.isShows = true;
             this.$refs.dataRef.init(row.id);
         },
         checkRow(row) {
             this.$refs.table.toggleRowExpansion(row, true);
         },
         saveRow(row) {
-            this.$router.push({
-                path: '/recordCheck',
-                query: {
-                    rid: row.id
-                }
-            });
+            this.isShow = true;
+            this.$refs.dataRefs.init(row.id);
         },
         download() {
             this.downloading = true;
@@ -354,6 +411,26 @@ export default {
                 .then(() => {
                     this.checkMap = new Map(checks);
                 });
+            this.$http
+                .post(
+                    'recordExpertAudit/all',
+                    {
+                        size: 20,
+                        query: {
+                            recordId: row.id
+                        }
+                    },
+                    { body: 'json' }
+                )
+                .then(res => {
+                    this.lists = res.content;
+                    // this.empty = res.empty;
+                });
+        },
+        openDrawer(row) {
+            this.drawer = true;
+            this.row = row;
+            this.expand(row);
         }
     }
 };
@@ -376,4 +453,21 @@ export default {
     text-align: right;
     display: inline-block;
 }
+/deep/.el-timeline-item__timestamp {
+    // color: #0561d9;
+    color: #201e1e;
+    line-height: 1;
+    font-size: 14px;
+}
+/deep/.el-timeline-item__node {
+    // background-color: #5b9bed;
+    background-color: #9d9a9a;
+}
+/deep/.el-timeline-item__tail {
+    // border-left: 2px solid #7cace9;
+    border-left: 2px solid #9d9a9a;
+}
+/deep/.el-radio__input.is-disabled + span.el-radio__label {
+    color: #606266; // #409EFF;
+}
 </style>

+ 92 - 72
src/main/vue/src/views/record/RecordRegulationList.vue

@@ -58,69 +58,7 @@
             row-class-name="table-row"
             cell-class-name="table-cell"
             :height="tableHeight"
-            @expand-change="expand"
         >
-            <el-table-column type="expand">
-                <template slot-scope="props">
-                    <el-card v-if="checkMap.has(props.row.id)">
-                        <div v-if="checkMap.get(props.row.id).length === 0">
-                            <div style="text-align:center">暂无数据</div>
-                        </div>
-                        <el-timeline reverse v-else>
-                            <el-timeline-item
-                                :timestamp="item.createdAt"
-                                placement="top"
-                                v-for="item in checkMap.get(props.row.id)"
-                                :key="item.id"
-                            >
-                                <div>
-                                    {{ item.content }}
-                                </div>
-                                <div style="margin-top:5px">
-                                    <el-image
-                                        v-for="(img, index) in item.file"
-                                        :key="index"
-                                        :src="img"
-                                        fit="fill"
-                                        :lazy="true"
-                                        style="width:60px;height:60px;margin-right:3px"
-                                        :preview-src-list="item.file"
-                                    >
-                                    </el-image>
-                                </div>
-                                <!-- content -->
-                            </el-timeline-item>
-                        </el-timeline>
-                        <el-timeline-item
-                            :timestamp="item.createdAt"
-                            placement="top"
-                            v-for="item in lists"
-                            :key="item.id"
-                        >
-                            <div>
-                                {{ tipsType[item.type] }}
-                            </div>
-                            <div style="margin-top:5px">
-                                {{ item.value ? '是' : '否' }}
-                            </div>
-
-                            <div style="margin-top:5px">
-                                <el-image
-                                    v-for="(img, index) in item.img"
-                                    :key="index"
-                                    :src="img"
-                                    style="width:60px;height:60px;margin-right:3px"
-                                    :preview-src-list="item.img"
-                                >
-                                </el-image>
-                            </div>
-                        </el-timeline-item>
-                        <div style="margin-left: 26px">
-                            <el-button @click="saveRow(props.row)" size="mini" plain>编辑</el-button>
-                        </div>
-                    </el-card>
-                </template>
-            </el-table-column>
             <el-table-column v-if="multipleMode" align="center" type="selection" width="50"> </el-table-column>
             <el-table-column prop="examinationName" label="考级活动名称" min-width="150" sortable> </el-table-column>
             <el-table-column prop="examinationStartTime" label="考级活动时间" show-overflow-tooltip min-width="170">
@@ -135,7 +73,7 @@
             <el-table-column label="操作" align="right" fixed="right" min-width="260">
                 <template slot-scope="{ row }">
                     <el-button @click="editRow(row)" size="mini" plain>查看</el-button>
-                    <el-button @click="checkRow(row)" type="warning" size="mini" plain>检查记录</el-button>
+                    <el-button @click="openDrawer(row.id)" type="warning" size="mini" plain>检查记录</el-button>
                     <el-button @click="openRoom(row)" type="primary" size="mini" plain>考场监控</el-button>
                     <!-- <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button> -->
                 </template>
@@ -164,6 +102,63 @@
         </div>
         <record-log ref="dataRefs" :dialogVisible="isShow" @close="isShow = false"></record-log>
         <record-logs ref="dataRef" :dialogVisibles="isShows" @close="isShows = false"></record-logs>
+        <el-drawer title="检查记录" :visible.sync="drawer" size="40%" :with-header="false" @close="lists = []">
+            <div v-if="lists.length <= 0" style="padding:100px 0; font-size: 14px; color: #4a4646">
+                <div style="text-align:center">暂无数据</div>
+            </div>
+            <div style="margin: 30px" v-else>
+                <el-timeline-item :timestamp="item.createdAt" placement="top" v-for="item in lists" :key="item.id">
+                    <div style="font-size: 14px; color: #4a4646">
+                        {{ tipsType[item.type] }}
+                    </div>
+                    <div style="margin-top:5px">
+                        <!-- {{ item.value ? '是' : '否' }} -->
+                        <el-radio-group v-model="item.value" disabled>
+                            <el-radio :label="true">是</el-radio>
+                            <el-radio :label="false">否</el-radio>
+                        </el-radio-group>
+                    </div>
+
+                    <div style="margin-top:5px">
+                        <el-image
+                            v-for="(img, index) in item.img"
+                            :key="index"
+                            :src="img"
+                            style="width:60px;height:60px;margin-right:3px"
+                            :preview-src-list="item.img"
+                        >
+                        </el-image>
+                    </div>
+                </el-timeline-item>
+                <el-timeline reverse>
+                    <el-timeline-item
+                        :timestamp="item.createdAt"
+                        placement="top"
+                        v-for="item in checkMap.get(recordId)"
+                        :key="item.id"
+                    >
+                        <div style="font-size: 14px; color: #4a4646">
+                            {{ item.content }}
+                        </div>
+                        <div style="margin-top:5px">
+                            <el-image
+                                v-for="(img, index) in item.file"
+                                :key="index"
+                                :src="img"
+                                fit="fill"
+                                :lazy="true"
+                                style="width:60px;height:60px;margin-right:3px"
+                                :preview-src-list="item.file"
+                            >
+                            </el-image>
+                        </div>
+                    </el-timeline-item>
+                </el-timeline>
+                <div>
+                    <el-button @click="saveRow(recordId)" size="mini" plain>编辑</el-button>
+                </div>
+            </div>
+        </el-drawer>
     </div>
 </template>
 <script>
@@ -222,7 +217,9 @@ export default {
                 safetyt: '考点是否配备测量体温设施设备,并有专人值守',
                 safetys: '考级现场是否实施预约限流措施'
             },
-            checkMap: new Map()
+            checkMap: new Map(),
+            drawer: false,
+            recordId: {}
         };
     },
     computed: {
@@ -283,7 +280,7 @@ export default {
         },
         saveRow(row) {
             this.isShow = true;
-            this.$refs.dataRefs.init(row.id);
+            this.$refs.dataRefs.init(row);
         },
         download() {
             this.downloading = true;
@@ -364,28 +361,28 @@ export default {
         },
         expand(row) {
             let checks = new Map([...this.checkMap]);
-            if (checks.has(row.id)) {
-                return;
-            }
+            // if (checks.has(row)) {
+            //     return;
+            // }
             this.$http
                 .post(
                     'recordCheck/all',
                     {
                         size: 20,
                         sort: 'createdAt,asc',
-                        query: { recordId: row.id }
+                        query: { recordId: row }
                     },
                     { body: 'json' }
                 )
                 .then(res => {
                     if (!res.empty) {
-                        checks.set(row.id, res.content);
+                        checks.set(row, res.content);
                     } else {
                         return Promise.reject();
                     }
                 })
                 .catch(e => {
-                    checks.set(row.id, []);
+                    checks.set(row, []);
                 })
                 .then(() => {
                     this.checkMap = new Map(checks);
@@ -394,8 +391,9 @@ export default {
                 .post(
                     'recordExpertAudit/all',
                     {
+                        size: 20,
                         query: {
-                            recordId: row.id
+                            recordId: row
                         }
                     },
                     { body: 'json' }
@@ -405,6 +403,11 @@ export default {
                     this.lists = res.content;
                     // this.empty = res.empty;
                 });
+        },
+        openDrawer(row) {
+            this.drawer = true;
+            this.recordId = row;
+            this.expand(row);
         }
     }
 };
@@ -427,4 +430,21 @@ export default {
     text-align: right;
     display: inline-block;
 }
+/deep/.el-timeline-item__timestamp {
+    // color: #0561d9;
+    color: #201e1e;
+    line-height: 1;
+    font-size: 14px;
+}
+/deep/.el-timeline-item__node {
+    // background-color: #5b9bed;
+    background-color: #9d9a9a;
+}
+/deep/.el-timeline-item__tail {
+    // border-left: 2px solid #7cace9;
+    border-left: 2px solid #9d9a9a;
+}
+/deep/.el-radio__input.is-disabled + span.el-radio__label {
+    color: #606266; // #409EFF;
+}
 </style>

+ 1 - 1
src/test/java/com/izouma/wenlvju/repo/RepoTest.java

@@ -205,7 +205,7 @@ public class RepoTest extends ApplicationTests {
     }
 
     @Test
-    public void test6(){
+    public void test6() {
         String phone = "18205083565";
         System.out.println(phone.replace(phone.substring(3, phone.length() - 4), "****"));
     }

+ 1 - 1
src/test/java/com/izouma/wenlvju/repo/UserRepoTest.java

@@ -74,7 +74,7 @@ public class UserRepoTest {
 
     @Test
     public void test3() {
-        System.out.println(jwtTokenUtil.generateToken(JwtUserFactory.create(userRepo.findById(300L)
+        System.out.println(jwtTokenUtil.generateToken(JwtUserFactory.create(userRepo.findById(10847L)
                 .orElseThrow(new BusinessException("用户不存在")))));
     }