licailing 4 лет назад
Родитель
Сommit
d03bdccfd2
20 измененных файлов с 794 добавлено и 65 удалено
  1. 4 3
      src/main/java/com/izouma/wenlvju/domain/performance/Arrange.java
  2. 30 0
      src/main/java/com/izouma/wenlvju/domain/performance/ArrangeJudge.java
  3. 23 1
      src/main/java/com/izouma/wenlvju/domain/performance/Programme.java
  4. 60 0
      src/main/java/com/izouma/wenlvju/dto/ArrangeProgrammeDTO.java
  5. 1 1
      src/main/java/com/izouma/wenlvju/dto/ProgrammeDTO.java
  6. 16 0
      src/main/java/com/izouma/wenlvju/enums/SignedIn.java
  7. 30 0
      src/main/java/com/izouma/wenlvju/repo/performance/ArrangeJudgeRepo.java
  8. 10 0
      src/main/java/com/izouma/wenlvju/repo/performance/ArrangeRepo.java
  9. 2 1
      src/main/java/com/izouma/wenlvju/repo/performance/ParticipantRepo.java
  10. 8 2
      src/main/java/com/izouma/wenlvju/repo/performance/ProgrammeRepo.java
  11. 71 0
      src/main/java/com/izouma/wenlvju/service/performance/ArrangeJudgeService.java
  12. 46 8
      src/main/java/com/izouma/wenlvju/service/performance/ArrangeService.java
  13. 72 47
      src/main/java/com/izouma/wenlvju/service/performance/ProgrammeService.java
  14. 7 0
      src/main/java/com/izouma/wenlvju/web/performance/ArrangeController.java
  15. 76 0
      src/main/java/com/izouma/wenlvju/web/performance/ArrangeJudgeController.java
  16. 22 0
      src/main/java/com/izouma/wenlvju/web/performance/ProgrammeController.java
  17. 1 0
      src/main/resources/genjson/ArrangeJudge.json
  18. 10 1
      src/main/vue/src/router.js
  19. 2 1
      src/main/vue/src/views/performance/ProgrammeGroupList.vue
  20. 303 0
      src/main/vue/src/views/performance/ProgrammeSignList.vue

+ 4 - 3
src/main/java/com/izouma/wenlvju/domain/performance/Arrange.java

@@ -10,9 +10,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.hibernate.annotations.Where;
 
-import javax.persistence.Convert;
-import javax.persistence.Entity;
-import javax.persistence.Transient;
+import javax.persistence.*;
 import java.time.LocalDate;
 import java.time.LocalTime;
 import java.util.List;
@@ -59,6 +57,9 @@ public class Arrange extends BaseEntity {
     @ApiModelProperty(value = "联系电话")
     private String phone;
 
+    @ApiModelProperty(value = "发布")
+    private boolean publish;
+
     @Transient
     private List<String> specialtyName;
 }

+ 30 - 0
src/main/java/com/izouma/wenlvju/domain/performance/ArrangeJudge.java

@@ -0,0 +1,30 @@
+package com.izouma.wenlvju.domain.performance;
+
+import com.izouma.wenlvju.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.annotations.Where;
+
+import javax.persistence.Entity;
+import java.time.LocalDate;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@Entity
+@Where(clause = "del = 0")
+@ApiModel(value = "分配评委")
+public class ArrangeJudge extends BaseEntity {
+
+    private Long arrangeId;
+
+    private LocalDate date;
+
+    private boolean morning;
+
+    private Long expertId;
+}

+ 23 - 1
src/main/java/com/izouma/wenlvju/domain/performance/Programme.java

@@ -6,6 +6,7 @@ import com.izouma.wenlvju.converter.VideoObjectConverter;
 import com.izouma.wenlvju.domain.BaseEntity;
 import com.izouma.wenlvju.domain.VideoObject;
 import com.izouma.wenlvju.dto.ProgrammeDTO;
+import com.izouma.wenlvju.enums.SignedIn;
 import com.izouma.wenlvju.enums.CompetitionGroup;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -77,10 +78,31 @@ public class Programme extends BaseEntity {
     */
     private int status;
 
+    @ApiModelProperty(value = "签到管理")
+    @Enumerated(EnumType.STRING)
+    private SignedIn signedIn;
+
+    @Column(columnDefinition = "TEXT")
+    @ApiModelProperty(value = "情况说明")
+    private String description;
+
+    @ApiModelProperty(value = "签到时间")
+    private LocalDateTime signedAt;
+
+    @ApiModelProperty(value = "参演人数")
+    private int quantity;
+
+    private String address;
+
     /*
     表演时间
      */
-//    private LocalDateTime showTime;
+    private LocalDateTime showBegin;
+
+    private LocalDateTime showEnd;
+
+    @ApiModelProperty(value = "全部签到")
+    private boolean allSigned;
 
     public Programme(ProgrammeDTO dto) {
         BeanUtil.copyProperties(dto, this);

+ 60 - 0
src/main/java/com/izouma/wenlvju/dto/ArrangeProgrammeDTO.java

@@ -0,0 +1,60 @@
+package com.izouma.wenlvju.dto;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.izouma.wenlvju.domain.performance.Programme;
+import com.izouma.wenlvju.enums.SignedIn;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDate;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class ArrangeProgrammeDTO {
+    private Long id;
+
+    @ApiModelProperty(value = "活动名称")
+    private String performance;
+
+    @ApiModelProperty(value = "节目名称")
+    private String name;
+
+    @ApiModelProperty(value = "联系人")
+    private String contact;
+
+    @ApiModelProperty(value = "联系电话")
+    private String phone;
+
+    @ApiModelProperty(value = "考级机构")
+    private String gradingOrganization;
+
+    @ApiModelProperty(value = "承办单位")
+    private String organization;
+
+    @ApiModelProperty(value = "参赛人数")
+    private long quantity;
+
+    @ApiModelProperty(value = "分组")
+    private String arrangeName;
+
+    @ApiModelProperty(value = "活动日期")
+    private LocalDate date;
+
+    @ApiModelProperty(value = "编导姓名")
+    private String writerDirector;
+
+    @ApiModelProperty(value = "联系电话")
+    private String writerPhone;
+
+    private SignedIn signedIn;
+
+    public ArrangeProgrammeDTO(Programme programme) {
+        BeanUtil.copyProperties(programme, this);
+    }
+}

+ 1 - 1
src/main/java/com/izouma/wenlvju/dto/ProgrammeDTO.java

@@ -73,7 +73,7 @@ public class ProgrammeDTO extends BaseRowModel {
     private VideoObject video;
 
     @ExcelProperty(value = "参赛人数")
-    private long quantity;
+    private int quantity;
 
 //    @ExcelProperty(value = "参赛人员姓名")
 //    private String participantName;

+ 16 - 0
src/main/java/com/izouma/wenlvju/enums/SignedIn.java

@@ -0,0 +1,16 @@
+package com.izouma.wenlvju.enums;
+
+public enum SignedIn {
+    /*
+    已签到
+     */
+    SIGNED_IN,
+    /*
+    未签到
+     */
+    UNSIGNED,
+    /*
+    已调整
+     */
+    ADJUSTED
+}

+ 30 - 0
src/main/java/com/izouma/wenlvju/repo/performance/ArrangeJudgeRepo.java

@@ -0,0 +1,30 @@
+package com.izouma.wenlvju.repo.performance;
+
+import com.izouma.wenlvju.domain.performance.ArrangeJudge;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+
+import javax.transaction.Transactional;
+import java.time.LocalDate;
+import java.util.Collection;
+import java.util.List;
+
+public interface ArrangeJudgeRepo extends JpaRepository<ArrangeJudge, Long>, JpaSpecificationExecutor<ArrangeJudge> {
+    @Query("update ArrangeJudge t set t.del = true where t.id = ?1")
+    @Modifying
+    @Transactional
+    void softDelete(Long id);
+
+    List<ArrangeJudge> findAllByDateAndMorning(LocalDate date, boolean morning);
+
+    @Query("select distinct expertId from ArrangeJudge where date = ?1 and morning = ?2")
+    List<Long> findExpertByDateAndMorning(LocalDate date, boolean morning);
+
+    @Query("update ArrangeJudge t set t.del = true where t.arrangeId in ?1")
+    @Modifying
+    @Transactional
+    void cancelJudge(Collection<Long> arrangeIds);
+
+}

+ 10 - 0
src/main/java/com/izouma/wenlvju/repo/performance/ArrangeRepo.java

@@ -7,6 +7,7 @@ import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 public interface ArrangeRepo extends JpaRepository<Arrange, Long>, JpaSpecificationExecutor<Arrange> {
     @Query("update Arrange t set t.del = true where t.id = ?1")
@@ -23,4 +24,13 @@ public interface ArrangeRepo extends JpaRepository<Arrange, Long>, JpaSpecificat
     @Modifying
     @Transactional
     void minusQuantity(Long id);
+
+    List<Arrange> findAllByPerformanceId(Long performanceId);
+
+    Arrange findFirstByPerformanceId(Long performanceId);
+
+    @Query("update Arrange t set t.publish = true where t.performanceId = ?1")
+    @Modifying
+    @Transactional
+    void publish(Long performanceId);
 }

+ 2 - 1
src/main/java/com/izouma/wenlvju/repo/performance/ParticipantRepo.java

@@ -7,6 +7,7 @@ import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
+import java.util.Collection;
 import java.util.List;
 
 public interface ParticipantRepo extends JpaRepository<Participant, Long>, JpaSpecificationExecutor<Participant> {
@@ -15,5 +16,5 @@ public interface ParticipantRepo extends JpaRepository<Participant, Long>, JpaSp
     @Transactional
     void softDelete(Long id);
 
-    List<Participant> findAllByProgrammeIdIn(Iterable<Long> ids);
+    List<Participant> findAllByProgrammeIdIn(Collection<Long> ids);
 }

+ 8 - 2
src/main/java/com/izouma/wenlvju/repo/performance/ProgrammeRepo.java

@@ -7,7 +7,6 @@ import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
-import java.time.LocalDateTime;
 import java.util.List;
 
 public interface ProgrammeRepo extends JpaRepository<Programme, Long>, JpaSpecificationExecutor<Programme> {
@@ -20,7 +19,14 @@ public interface ProgrammeRepo extends JpaRepository<Programme, Long>, JpaSpecif
 
     List<Programme> findAllByPerformanceIdAndStatus(Long performanceId, int status);
 
-//    List<Programme> findAllByArrangeIdAndShowTimeAfter(Long arrangeId, LocalDateTime showTime);
+    long countAllByArrangeIdAndStatusIsNotNull(Long arrangeId);
+
+    @Query("update Programme t set t.allSigned = true where t.arrangeId = ?1")
+    @Modifying
+    @Transactional
+    void allSigned(Long arrangeId);
+
+//    List<Programme> findAllByArrangeId(Long arrangeId);
 
 //    Programme findFirstByArrangeIdOrderByShowTimeDesc(Long arrangeId);
 }

+ 71 - 0
src/main/java/com/izouma/wenlvju/service/performance/ArrangeJudgeService.java

@@ -0,0 +1,71 @@
+package com.izouma.wenlvju.service.performance;
+
+import cn.hutool.core.collection.CollUtil;
+import com.izouma.wenlvju.converter.LongArrayConverter;
+import com.izouma.wenlvju.domain.User;
+import com.izouma.wenlvju.domain.performance.Arrange;
+import com.izouma.wenlvju.domain.performance.ArrangeJudge;
+import com.izouma.wenlvju.dto.PageQuery;
+import com.izouma.wenlvju.exception.BusinessException;
+import com.izouma.wenlvju.repo.UserRepo;
+import com.izouma.wenlvju.repo.performance.ArrangeJudgeRepo;
+import com.izouma.wenlvju.repo.performance.ArrangeRepo;
+import com.izouma.wenlvju.utils.JpaUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+@AllArgsConstructor
+public class ArrangeJudgeService {
+
+    private ArrangeJudgeRepo arrangeJudgeRepo;
+    private ArrangeRepo      arrangeRepo;
+    private UserRepo         userRepo;
+
+    public Page<ArrangeJudge> all(PageQuery pageQuery) {
+        return arrangeJudgeRepo.findAll(JpaUtils.toSpecification(pageQuery, ArrangeJudge.class), JpaUtils.toPageRequest(pageQuery));
+    }
+
+    public void assignJudge(String experts, String arranges) {
+        LongArrayConverter converter = new LongArrayConverter();
+        List<Long> expertIds = converter.convertToEntityAttribute(experts);
+        List<Long> arrangeIds = converter.convertToEntityAttribute(arranges);
+        Arrange arrange = arrangeRepo.findById(arrangeIds.get(0)).orElseThrow(new BusinessException("无分组"));
+        LocalDate date = arrange.getDate();
+        boolean morning = arrange.isMorning();
+        List<Long> arrangeJudges = arrangeJudgeRepo.findExpertByDateAndMorning(date, morning);
+        if (CollUtil.isNotEmpty(arrangeJudges)) {
+            expertIds.forEach(id -> {
+                if (arrangeJudges.contains(id)) {
+                    User user = userRepo.findById(id).orElseThrow(new BusinessException("无此评委"));
+                    throw new BusinessException("该时间段," + user.getNickname() + "已分配");
+                }
+            });
+        }
+
+        List<ArrangeJudge> save = new ArrayList<>();
+        arrangeIds.forEach(arrangeId ->
+                expertIds.forEach(expertId ->
+                        save.add(ArrangeJudge.builder()
+                                .arrangeId(arrangeId)
+                                .date(date)
+                                .morning(morning)
+                                .expertId(expertId)
+                                .build())));
+
+        arrangeJudgeRepo.saveAll(save);
+
+    }
+
+    public void cancelAssign(String arranges) {
+        LongArrayConverter converter = new LongArrayConverter();
+        List<Long> arrangeIds = converter.convertToEntityAttribute(arranges);
+        if (CollUtil.isEmpty(arrangeIds))
+        arrangeJudgeRepo.cancelJudge(arrangeIds);
+    }
+}

+ 46 - 8
src/main/java/com/izouma/wenlvju/service/performance/ArrangeService.java

@@ -1,5 +1,6 @@
 package com.izouma.wenlvju.service.performance;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.izouma.wenlvju.domain.ArtType;
 import com.izouma.wenlvju.domain.performance.Arrange;
@@ -9,15 +10,13 @@ import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.ArtTypeRepo;
 import com.izouma.wenlvju.repo.performance.ArrangeRepo;
+import com.izouma.wenlvju.repo.performance.ProgrammeRepo;
 import com.izouma.wenlvju.utils.JpaUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
-import java.time.Duration;
-import java.time.LocalDate;
-import java.time.LocalTime;
-import java.time.Period;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.util.List;
 import java.util.Map;
@@ -30,6 +29,7 @@ public class ArrangeService {
     private ArrangeRepo      arrangeRepo;
     private ProgrammeService programmeService;
     private ArtTypeRepo      artTypeRepo;
+    private ProgrammeRepo    programmeRepo;
 
     public Page<Arrange> all(PageQuery pageQuery) {
         Map<Long, String> artMap = artTypeRepo.findAll()
@@ -49,6 +49,11 @@ public class ArrangeService {
     分组
      */
     public void group(ArrangeDTO dto) {
+        Arrange first = arrangeRepo.findFirstByPerformanceId(dto.getPerformanceId());
+        if (ObjectUtil.isNotNull(first) && first.isPublish()) {
+            throw new BusinessException("活动分组已发布");
+        }
+
         long total = 0;
         int days = Period.between(dto.getStartDate(), dto.getEndDate()).getDays();
         for (int i = 0; i <= days; i++) {
@@ -91,11 +96,11 @@ public class ArrangeService {
             } else {
                 throw new BusinessException("时间安排不能为空");
             }
-
+            int j = 0;
             for (int i = 0; i < group; i++) {
                 LocalTime endTime = startTime.plusMinutes(time);
 
-                String name = format1 + amPm + "第" + arr[i] + "场";
+                String name = format1 + amPm + "第" + arr[j] + "场";
                 Arrange arrange = Arrange.builder()
                         .address(dto.getAddress())
                         .duration(dto.getDuration())
@@ -127,9 +132,12 @@ public class ArrangeService {
                     //不需要这么多分组
                     break;
                 }
+
+                j++;
                 startTime = endTime.plusMinutes(10);
                 if (startTime.isAfter(endAt)) {
                     date = date.plusDays(1);
+                    j = 0;
                     startTime = startAt;
                 }
             }
@@ -183,7 +191,7 @@ public class ArrangeService {
                 //不需要这么多分组
                 break;
             }
-
+            j++;
             startTime = endTime.plusMinutes(10);
             if (startTime.isAfter(dto.getMorningEndTime()) && startTime.isBefore(dto.getAfternoonStartTime())) {
                 startTime = dto.getAfternoonStartTime();
@@ -195,7 +203,37 @@ public class ArrangeService {
                 j = 0;
                 morning = true;
             }
-            j++;
         }
     }
+
+    public void publish(Long performanceId) {
+        // 分布发布
+        arrangeRepo.publish(performanceId);
+        Map<Long, Arrange> arranges = arrangeRepo.findAllByPerformanceId(performanceId)
+                .stream()
+                .collect(Collectors.toMap(Arrange::getId, arrange -> arrange));
+        List<Programme> programmeList = programmeRepo.findAllByPerformanceIdAndStatus(performanceId, 1);
+        Map<Long, List<Programme>> programmes = programmeList
+                .stream()
+                .collect(Collectors.groupingBy(Programme::getArrangeId));
+        // 节目改状态,加上表演时间
+        programmes.forEach((k, v) -> {
+            Arrange arrange = arranges.get(k);
+            LocalDate date = arrange.getDate();
+            LocalTime start = arrange.getStartTime();
+            int duration = arrange.getDuration();
+            programmeService.sort(v);
+            final LocalDateTime[] beginAt = {LocalDateTime.of(date, start)};
+            v.forEach(p -> {
+                LocalDateTime endAt = beginAt[0].plusMinutes(duration);
+                p.setShowBegin(beginAt[0]);
+                p.setShowEnd(endAt);
+                p.setAddress(arrange.getAddress());
+                p.setStatus(2);
+                beginAt[0] = endAt;
+            });
+        });
+        programmeRepo.saveAll(programmeList);
+    }
+
 }

+ 72 - 47
src/main/java/com/izouma/wenlvju/service/performance/ProgrammeService.java

@@ -10,19 +10,19 @@ import com.izouma.wenlvju.domain.GradingOrganization;
 import com.izouma.wenlvju.domain.Organization;
 import com.izouma.wenlvju.domain.Setting;
 import com.izouma.wenlvju.domain.performance.Arrange;
-import com.izouma.wenlvju.domain.performance.Participant;
 import com.izouma.wenlvju.domain.performance.Performance;
 import com.izouma.wenlvju.domain.performance.Programme;
+import com.izouma.wenlvju.dto.ArrangeProgrammeDTO;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.dto.ProgrammeDTO;
 import com.izouma.wenlvju.enums.CompetitionGroup;
+import com.izouma.wenlvju.enums.SignedIn;
 import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.ArtTypeRepo;
 import com.izouma.wenlvju.repo.GradingOrganizationRepo;
 import com.izouma.wenlvju.repo.OrganizationRepo;
 import com.izouma.wenlvju.repo.SettingRepo;
 import com.izouma.wenlvju.repo.performance.ArrangeRepo;
-import com.izouma.wenlvju.repo.performance.ParticipantRepo;
 import com.izouma.wenlvju.repo.performance.PerformanceRepo;
 import com.izouma.wenlvju.repo.performance.ProgrammeRepo;
 import com.izouma.wenlvju.service.ArtTypeService;
@@ -47,7 +47,7 @@ import java.util.stream.Collectors;
 public class ProgrammeService {
 
     private ProgrammeRepo           programmeRepo;
-    private ParticipantRepo         participantRepo;
+    //    private ParticipantRepo         participantRepo;
     private GradingOrganizationRepo gradingOrganizationRepo;
     private OrganizationRepo        organizationRepo;
     private ArtTypeRepo             artTypeRepo;
@@ -86,10 +86,10 @@ public class ProgrammeService {
             return all.map(ProgrammeDTO::new);
         }
 
-        List<Long> ids = new ArrayList<>();
+//        List<Long> ids = new ArrayList<>();
         List<Long> settingIds = new ArrayList<>();
         content.forEach(programme -> {
-            ids.add(programme.getId());
+//            ids.add(programme.getId());
             settingIds.add(programme.getLevelSettingId());
         });
 
@@ -109,41 +109,41 @@ public class ProgrammeService {
                 .stream()
                 .collect(Collectors.toMap(Setting::getId, Setting::getName));
 
-        Map<Long, Long> participantMap = participantRepo.findAllByProgrammeIdIn(ids)
-                .stream()
-                .collect(Collectors.groupingBy(Participant::getProgrammeId, Collectors.counting()));
+//        Map<Long, Long> participantMap = participantRepo.findAllByProgrammeIdIn(ids)
+//                .stream()
+//                .collect(Collectors.groupingBy(Participant::getProgrammeId, Collectors.counting()));
         return all.map(programme -> {
-            if (participantMap.containsKey(programme.getId())) {
-                return toDTO(programme, performanceMap.get(programme.getPerformanceId()),
-                        organizationMap.get(programme.getOrganizationId()),
-                        gradingOrganizationMap.get(programme.getGradingOrganizationId()),
-                        artTypeMap.get(programme.getSpecialtyId()),
-                        settingMap.get(programme.getLevelSettingId()),
-                        participantMap.get(programme.getId()));
-            }
+//            if (participantMap.containsKey(programme.getId())) {
+//                return toDTO(programme, performanceMap.get(programme.getPerformanceId()),
+//                        organizationMap.get(programme.getOrganizationId()),
+//                        gradingOrganizationMap.get(programme.getGradingOrganizationId()),
+//                        artTypeMap.get(programme.getSpecialtyId()),
+//                        settingMap.get(programme.getLevelSettingId()),
+//                        participantMap.get(programme.getId()));
+//            }
             return toDTO(programme, performanceMap.get(programme.getPerformanceId()),
                     organizationMap.get(programme.getOrganizationId()),
                     gradingOrganizationMap.get(programme.getGradingOrganizationId()),
                     artTypeMap.get(programme.getSpecialtyId()),
-                    settingMap.get(programme.getLevelSettingId()), 0);
+                    settingMap.get(programme.getLevelSettingId()));
         });
     }
 
     public ProgrammeDTO toDTO(Programme programme, String performance, String organization, String gradingOrganization, String artType,
-                              String setting, long participant) {
+                              String setting) {
         ProgrammeDTO dto = new ProgrammeDTO(programme);
         dto.setPerformance(performance);
         dto.setOrganization(organization);
         dto.setGradingOrganization(gradingOrganization);
         dto.setSpecialty(artType);
         dto.setLevel(setting);
-        dto.setQuantity(participant);
+//        dto.setQuantity(participant);
         return dto;
     }
 
     public List<ProgrammeDTO> toDTOList(List<Programme> programmes) {
 
-        List<Long> ids = programmes.stream().map(Programme::getId).collect(Collectors.toList());
+//        List<Long> ids = programmes.stream().map(Programme::getId).collect(Collectors.toList());
 
         Map<Long, String> performanceMap = performanceRepo.findAll()
                 .stream()
@@ -162,24 +162,24 @@ public class ProgrammeService {
                 .stream()
                 .collect(Collectors.toMap(Setting::getId, Setting::getName));
 
-        Map<Long, Long> participantMap = participantRepo.findAllByProgrammeIdIn(ids)
-                .stream()
-                .collect(Collectors.groupingBy(Participant::getProgrammeId, Collectors.counting()));
+//        Map<Long, Long> participantMap = participantRepo.findAllByProgrammeIdIn(ids)
+//                .stream()
+//                .collect(Collectors.groupingBy(Participant::getProgrammeId, Collectors.counting()));
 
         return programmes.stream().map(programme -> {
-            if (participantMap.containsKey(programme.getId())) {
-                return toDTO(programme, performanceMap.get(programme.getPerformanceId()),
-                        organizationMap.get(programme.getOrganizationId()),
-                        gradingOrganizationMap.get(programme.getGradingOrganizationId()),
-                        artTypeMap.get(programme.getSpecialtyId()),
-                        settingMap.get(programme.getLevelSettingId()),
-                        participantMap.get(programme.getId()));
-            }
+//            if (participantMap.containsKey(programme.getId())) {
+//                return toDTO(programme, performanceMap.get(programme.getPerformanceId()),
+//                        organizationMap.get(programme.getOrganizationId()),
+//                        gradingOrganizationMap.get(programme.getGradingOrganizationId()),
+//                        artTypeMap.get(programme.getSpecialtyId()),
+//                        settingMap.get(programme.getLevelSettingId()),
+//                        participantMap.get(programme.getId()));
+//            }
             return toDTO(programme, performanceMap.get(programme.getPerformanceId()),
                     organizationMap.get(programme.getOrganizationId()),
                     gradingOrganizationMap.get(programme.getGradingOrganizationId()),
                     artTypeMap.get(programme.getSpecialtyId()),
-                    settingMap.get(programme.getLevelSettingId()), 0);
+                    settingMap.get(programme.getLevelSettingId()));
         }).collect(Collectors.toList());
     }
 
@@ -308,24 +308,9 @@ public class ProgrammeService {
     public void removeArrange(Long id) {
         Programme programme = programmeRepo.findById(id).orElseThrow(new BusinessException("无记录"));
         Long arrangeId = programme.getArrangeId();
-
-//        final LocalDateTime[] showTime = {programme.getShowTime()};
-        // 分组下的所有节目
-//        List<Programme> programmes = programmeRepo.findAllByArrangeIdAndShowTimeAfter(arrangeId, showTime[0]);
-//        programmes.sort(Comparator.comparing(Programme::getShowTime));
-//        programmes.forEach(pro -> {
-//            LocalDateTime tmp = pro.getShowTime();
-//            pro.setShowTime(showTime[0]);
-//            showTime[0] = tmp;
-//        });
-
         programme.setStatus(0);
         programme.setArrangeId(null);
         programmeRepo.save(programme);
-
-//        programmes.add(programme);
-//        programmeRepo.saveAll(programmes);
-
         arrangeRepo.minusQuantity(arrangeId);
     }
 
@@ -353,4 +338,44 @@ public class ProgrammeService {
         this.sort(programmes);
         return programmes;
     }
+
+    /*
+    查看按分组查看节目
+     */
+    public Page<ArrangeProgrammeDTO> byArrange(PageQuery pageQuery) {
+        Page<Programme> all = this.all(pageQuery);
+        Set<Long> arrangeIds = all.getContent().stream().map(Programme::getArrangeId).collect(Collectors.toSet());
+        Map<Long, Arrange> arrangeMap = arrangeRepo.findAllById(arrangeIds)
+                .stream()
+                .collect(Collectors.toMap(Arrange::getId, arrange -> arrange));
+        Map<Long, String> organizationMap = organizationRepo.findAll()
+                .stream()
+                .collect(Collectors.toMap(Organization::getId, Organization::getName));
+        Map<Long, String> gradingOrganizationMap = gradingOrganizationRepo.findAll()
+                .stream()
+                .collect(Collectors.toMap(GradingOrganization::getId, GradingOrganization::getName));
+        return all.map(programme -> {
+            ArrangeProgrammeDTO dto = new ArrangeProgrammeDTO(programme);
+            Arrange arrange = arrangeMap.get(programme.getArrangeId());
+            dto.setArrangeName(arrange.getName());
+            dto.setWriterDirector(arrange.getWriterDirector());
+            dto.setWriterPhone(arrange.getPhone());
+            dto.setOrganization(organizationMap.get(programme.getOrganizationId()));
+            dto.setGradingOrganization(gradingOrganizationMap.get(programme.getGradingOrganizationId()));
+            return dto;
+        });
+    }
+
+    public void signIn(Long id, SignedIn signedIn, String description) {
+        Programme programme = programmeRepo.findById(id).orElseThrow(new BusinessException("无节目"));
+        programme.setSignedIn(signedIn);
+        programme.setDescription(description);
+        programme.setSignedAt(LocalDateTime.now());
+        programmeRepo.save(programme);
+
+        long unSigned = programmeRepo.countAllByArrangeIdAndStatusIsNotNull(programme.getArrangeId());
+        if (unSigned == 0) {
+            programmeRepo.allSigned(programme.getArrangeId());
+        }
+    }
 }

+ 7 - 0
src/main/java/com/izouma/wenlvju/web/performance/ArrangeController.java

@@ -10,6 +10,7 @@ import com.izouma.wenlvju.repo.performance.ArrangeRepo;
 import com.izouma.wenlvju.utils.ObjUtils;
 import com.izouma.wenlvju.utils.excel.ExcelUtils;
 
+import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -65,5 +66,11 @@ public class ArrangeController extends BaseController {
     public void group(@RequestBody ArrangeDTO record) {
         arrangeService.group(record);
     }
+
+    @ApiOperation("发布")
+    @PostMapping("/performanceId")
+    public void publish(@RequestParam Long performanceId) {
+        arrangeService.publish(performanceId);
+    }
 }
 

+ 76 - 0
src/main/java/com/izouma/wenlvju/web/performance/ArrangeJudgeController.java

@@ -0,0 +1,76 @@
+package com.izouma.wenlvju.web.performance;
+
+import com.izouma.wenlvju.web.BaseController;
+import com.izouma.wenlvju.domain.performance.ArrangeJudge;
+import com.izouma.wenlvju.service.performance.ArrangeJudgeService;
+import com.izouma.wenlvju.dto.PageQuery;
+import com.izouma.wenlvju.exception.BusinessException;
+import com.izouma.wenlvju.repo.performance.ArrangeJudgeRepo;
+import com.izouma.wenlvju.utils.ObjUtils;
+import com.izouma.wenlvju.utils.excel.ExcelUtils;
+
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+@RestController
+@RequestMapping("/arrangeJudge")
+@AllArgsConstructor
+public class ArrangeJudgeController extends BaseController {
+    private ArrangeJudgeService arrangeJudgeService;
+    private ArrangeJudgeRepo    arrangeJudgeRepo;
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @PostMapping("/save")
+    public ArrangeJudge save(@RequestBody ArrangeJudge record) {
+        if (record.getId() != null) {
+            ArrangeJudge orig = arrangeJudgeRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            ObjUtils.merge(orig, record);
+            return arrangeJudgeRepo.save(orig);
+        }
+        return arrangeJudgeRepo.save(record);
+    }
+
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @PostMapping("/all")
+    public Page<ArrangeJudge> all(@RequestBody PageQuery pageQuery) {
+        return arrangeJudgeService.all(pageQuery);
+    }
+
+    @GetMapping("/get/{id}")
+    public ArrangeJudge get(@PathVariable Long id) {
+        return arrangeJudgeRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+    }
+
+    @PostMapping("/del/{id}")
+    public void del(@PathVariable Long id) {
+        arrangeJudgeRepo.softDelete(id);
+    }
+
+    @GetMapping("/excel")
+    @ResponseBody
+    public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
+        List<ArrangeJudge> data = all(pageQuery).getContent();
+        ExcelUtils.export(response, data);
+    }
+
+    @ApiOperation("分配评委")
+    @PostMapping("/assignJudge")
+    public void assignJudge(String experts, String arranges) {
+        arrangeJudgeService.assignJudge(experts, arranges);
+    }
+
+    @ApiOperation("取消分配")
+    @PostMapping("/cancelAssign")
+    public void cancelAssign(String arranges) {
+        arrangeJudgeService.cancelAssign(arranges);
+    }
+}
+

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

@@ -1,8 +1,10 @@
 package com.izouma.wenlvju.web.performance;
 
 import com.izouma.wenlvju.domain.performance.Programme;
+import com.izouma.wenlvju.dto.ArrangeProgrammeDTO;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.dto.ProgrammeDTO;
+import com.izouma.wenlvju.enums.SignedIn;
 import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.performance.ProgrammeRepo;
 import com.izouma.wenlvju.service.performance.ProgrammeService;
@@ -10,6 +12,7 @@ import com.izouma.wenlvju.utils.ObjUtils;
 import com.izouma.wenlvju.utils.SecurityUtils;
 import com.izouma.wenlvju.utils.excel.ExcelUtils;
 import com.izouma.wenlvju.web.BaseController;
+import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.data.domain.Page;
@@ -20,6 +23,7 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
+import java.util.Map;
 
 @Slf4j
 @RestController
@@ -81,19 +85,37 @@ public class ProgrammeController extends BaseController {
         }
     }
 
+    @ApiOperation("移出分组")
     @PostMapping("/removeGroup/{id}")
     public void removeGroup(@PathVariable Long id) {
         programmeService.removeArrange(id);
     }
 
+    @ApiOperation("加入分组")
     @PostMapping("/intoGroup")
     public void intoGroup(@RequestParam Long id, @RequestParam Long arrangeId) {
         programmeService.add(id, arrangeId);
     }
 
+    @ApiOperation("未分组")
     @PostMapping("/unGrouped")
     public List<Programme> unGrouped(@RequestParam Long performanceId) {
         return programmeService.ungrouped(performanceId);
     }
+
+    @ApiOperation("签到列表")
+    @PostMapping("/byArrange")
+    public Page<ArrangeProgrammeDTO> byArrange(@RequestBody PageQuery pageQuery) {
+        pageQuery.setSort("allSigned,asc;arrangeId,desc;gradingOrganizationId,asc;organizationId,asc;");
+//        Map<String, Object> query = pageQuery.getQuery();
+//        query.put("status", 2);
+        return programmeService.byArrange(pageQuery);
+    }
+
+    @ApiOperation("签到")
+    @PostMapping("/signIn")
+    public void signIn(@RequestParam Long id, @RequestParam SignedIn signedIn, String description) {
+        programmeService.signIn(id, signedIn, description);
+    }
 }
 

+ 1 - 0
src/main/resources/genjson/ArrangeJudge.json

@@ -0,0 +1 @@
+{"tableName":"ArrangeJudge","className":"ArrangeJudge","remark":"分组评委","genTable":true,"genClass":true,"genList":false,"genForm":false,"genRouter":false,"javaPath":"/Users/qiufangchao/Desktop/project/wenlvju/src/main/java/com/izouma/wenlvju","viewPath":"/Users/qiufangchao/Desktop/project/wenlvju/src/main/vue/src/views","routerPath":"/Users/qiufangchao/Desktop/project/wenlvju/src/main/vue/src","resourcesPath":"/Users/qiufangchao/Desktop/project/wenlvju/src/main/resources","dataBaseType":"Mysql","fields":[{"name":"arrangeId","modelName":"arrangeId","remark":"arrangeId","showInList":true,"showInForm":true,"formType":"number"},{"name":"date","modelName":"date","remark":"date","showInList":true,"showInForm":true,"formType":"date"},{"name":"morning","modelName":"morning","remark":"morning","showInList":true,"showInForm":true,"formType":"singleLineText"},{"name":"expertId","modelName":"expertId","remark":"expertId","showInList":true,"showInForm":true,"formType":"number"}],"readTable":false,"dataSourceCode":"dataSource","genJson":"","subtables":[],"update":false,"basePackage":"com.izouma.wenlvju","tablePackage":"com.izouma.wenlvju.domain.performance.ArrangeJudge","genPackage":"performance"}

+ 10 - 1
src/main/vue/src/router.js

@@ -662,7 +662,16 @@ const router = new Router({
                             /* webpackChunkName: "programmeGroupList" */ '@/views/performance/ProgrammeGroupList.vue'
                         ),
                     meta: {
-                        title: '节目管理'
+                        title: '节目分组'
+                    }
+                },
+                {
+                    path: '/programmeSignList',
+                    name: 'ProgrammeSignList',
+                    component: () =>
+                        import(/* webpackChunkName: "programmeSignList" */ '@/views/performance/ProgrammeSignList.vue'),
+                    meta: {
+                        title: '节目签到'
                     }
                 },
                 {

+ 2 - 1
src/main/vue/src/views/performance/ProgrammeGroupList.vue

@@ -13,7 +13,7 @@
                 <el-table-column prop="address" label="活动地点"> </el-table-column>
                 <el-table-column prop="name" label="分组名称" min-width="100"> </el-table-column>
                 <el-table-column label="时间安排" min-width="100">
-                    <template slot-scope="{ row }"> {{ row.startTime }}-{{ row.endTime }} </template>
+                    <template slot-scope="{ row }"> {{ getTime(row.startTime) }}-{{ getTime(row.endTime) }} </template>
                 </el-table-column>
                 <el-table-column prop="quantity" label="节目数量"> </el-table-column>
                 <!-- <el-table-column prop="duration" label="节目时长"> </el-table-column> -->
@@ -159,6 +159,7 @@ import delChild from '@/mixins/delChild';
 import { mapState } from 'vuex';
 import pageableTable from '@/mixins/pageableTable';
 import QrcodeVue from 'qrcode.vue';
+import { time } from 'echarts';
 
 export default {
     name: 'ProgrammeList',

+ 303 - 0
src/main/vue/src/views/performance/ProgrammeSignList.vue

@@ -0,0 +1,303 @@
+<template>
+    <div class="list-view">
+        <div class="filters-container">
+            <el-form :model="form" inline label-width="100px">
+                <el-row>
+                    <el-form-item label="展演活动名称">
+                        <el-select
+                            v-model="performanceId"
+                            clearable
+                            filterable
+                            placeholder="展演活动名称"
+                            style="width: 100%"
+                        >
+                            <el-option
+                                v-for="item in performances"
+                                :key="item.value"
+                                :label="item.label"
+                                :value="item.value"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="活动日期">
+                        <el-date-picker
+                            v-model="form.date"
+                            value-format="yyyy-MM-dd"
+                            type="date"
+                            placeholder="选择日期"
+                        >
+                        </el-date-picker>
+                    </el-form-item>
+                    <el-form-item label="活动地点">
+                        <el-select v-model="form.address">
+                            <el-option
+                                v-for="(item, index) in addresses"
+                                :key="index"
+                                :value="item"
+                                :label="item"
+                            ></el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="签到状态">
+                        <el-select v-model="form.signedIn">
+                            <el-option
+                                v-for="item in signedInOptions"
+                                :label="item.label"
+                                :value="item.value"
+                                :key="item.value"
+                            ></el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-row>
+                <el-form-item>
+                    <el-button @click="getData" type="primary" icon="el-icon-search">搜索 </el-button>
+                </el-form-item>
+            </el-form>
+        </div>
+        <el-table
+            :data="tableData"
+            row-key="id"
+            ref="table"
+            header-row-class-name="table-header-row"
+            header-cell-class-name="table-header-cell"
+            row-class-name="table-row"
+            cell-class-name="table-cell"
+            :height="tableHeight"
+        >
+            <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="arrangeName" label="分组" min-width="160"> </el-table-column>
+            <el-table-column prop="gradingOrganization" label="考级机构" show-overflow-tooltip min-width="160">
+            </el-table-column>
+            <el-table-column prop="organization" label="承办单位" min-width="160"> </el-table-column>
+            <el-table-column prop="name" label="节目名称" min-width="70"> </el-table-column>
+            <el-table-column label="表演时间" min-width="70"> </el-table-column>
+            <el-table-column prop="quantity" label="表演人数" min-width="70"> </el-table-column>
+            <el-table-column prop="contact" label="联系人" min-width="68"> </el-table-column>
+            <el-table-column prop="phone" label="联系电话" min-width="95"> </el-table-column>
+            <el-table-column prop="writerDirector" label="编导姓名"> </el-table-column>
+            <el-table-column prop="phone" label="联系电话"> </el-table-column>
+            <el-table-column prop="signedIn" label="状态" :formatter="signedInFormatter"> </el-table-column>
+            <el-table-column label="操作" align="left" fixed="right" min-width="100">
+                <template slot-scope="{ row }">
+                    <el-button @click="showSign(row)" size="mini" plain type="primary">签到处理</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="pagination-wrapper">
+            <!-- <div class="multiple-mode-wrapper">
+                <el-button v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
+                <el-button-group v-else>
+                    <el-button @click="operation1">批量操作1</el-button>
+                    <el-button @click="operation2">批量操作2</el-button>
+                    <el-button @click="toggleMultipleMode(false)">取消</el-button>
+                </el-button-group>
+            </div> -->
+            <el-pagination
+                background
+                @size-change="onSizeChange"
+                @current-change="onCurrentChange"
+                :current-page="page"
+                :page-sizes="[10, 20, 30, 40, 50]"
+                :page-size="pageSize"
+                layout="total, sizes, prev, pager, next, jumper"
+                :total="totalElements"
+            >
+            </el-pagination>
+        </div>
+
+        <el-dialog title="签到处理" :visible.sync="dialogSign" width="600px" center>
+            <el-form :form="signForm" label-width="100px">
+                <el-form-item label="签到处理">
+                    <el-select v-model="signForm.signedIn">
+                        <el-option
+                            v-for="item in signedInOptions"
+                            :label="item.label"
+                            :value="item.value"
+                            :key="item.value"
+                        ></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="情况说明">
+                    <el-input v-model="signForm.description" type="textarea" :rows="5" style="width: 400px"></el-input>
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" @click="signIn">确定</el-button>
+                    <el-button @click="dialogSign = false">取消</el-button>
+                </el-form-item>
+            </el-form>
+        </el-dialog>
+    </div>
+</template>
+<script>
+import delChild from '@/mixins/delChild';
+import { mapState } from 'vuex';
+import pageableTable from '@/mixins/pageableTable';
+import QrcodeVue from 'qrcode.vue';
+
+export default {
+    name: 'ProgrammeSignList',
+    mixins: [pageableTable, delChild],
+    data() {
+        return {
+            multipleMode: false,
+            search: '',
+            url: '/programme/byArrange',
+            downloading: false,
+            form: {},
+            dialogSign: false,
+            performanceId: '',
+            performances: [],
+            signedInOptions: [
+                { label: '已签到', value: 'SIGNED_IN' },
+                { label: '未签到', value: 'UNSIGNED' },
+                { label: '已调整', value: 'ADJUSTED' }
+            ],
+            signForm: {},
+            addresses: []
+        };
+    },
+    created() {
+        this.$http
+            .post(
+                '/performance/all',
+                {
+                    size: 1000,
+                    sort: 'year,desc',
+                    query: {
+                        publish: true
+                    }
+                },
+                { body: 'json' }
+            )
+            .then(res => {
+                if (res.content.length > 0) {
+                    res.content.forEach(item => {
+                        this.performances.push({
+                            label: item.name,
+                            value: item.id
+                        });
+                    });
+                }
+            })
+            .catch(e => {
+                console.log(e);
+                this.$message.error(e.error);
+            });
+    },
+    computed: {
+        selection() {
+            return this.$refs.table.selection.map(i => i.id);
+        }
+    },
+    methods: {
+        signedInFormatter(row, column, cellValue, index) {
+            let selectedOption = this.signedInOptions.find(i => i.value === cellValue);
+            if (selectedOption) {
+                return selectedOption.label;
+            }
+            return '';
+        },
+        beforeGetData() {
+            let data = {
+                query: {}
+            };
+            if (this.performanceId) {
+                data.query.performanceId = this.performanceId;
+            }
+            return data;
+        },
+        toggleMultipleMode(multipleMode) {
+            this.multipleMode = multipleMode;
+            if (!multipleMode) {
+                this.$refs.table.clearSelection();
+            }
+        },
+        showSign(row) {
+            this.dialogSign = true;
+            this.signForm.id = row.id;
+        },
+        operation1() {
+            this.$notify({
+                title: '提示',
+                message: this.selection
+            });
+        },
+        operation2() {
+            this.$message('操作2');
+        },
+        signIn() {
+            this.$alert('确认签到?', '提示', { type: 'primary' })
+                .then(() => {
+                    return this.$http.post('/programme/signIn', {
+                        id: this.signForm.id,
+                        signedIn: this.signForm.signedIn,
+                        description: this.signForm.description
+                    });
+                })
+                .then(() => {
+                    this.$message.success('签到成功');
+                    this.dialogSign = false;
+                    this.getData();
+                })
+                .catch(e => {
+                    if (e !== 'cancel') {
+                        this.$message.error(e.error);
+                    }
+                });
+        }
+    }
+};
+</script>
+<style lang="less" scoped>
+.right {
+    float: right;
+}
+/deep/.el-form-item--mini.el-form-item,
+.el-form-item--small.el-form-item {
+    margin-bottom: 10px;
+}
+.videoDialog {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    .el-dialog {
+        max-width: 900px;
+        margin-top: 0px;
+
+        .close {
+            position: absolute;
+            right: 0px;
+            top: -42px;
+            width: 71px;
+            height: 32px;
+            background: #00000015;
+
+            font-size: 12px;
+            color: #fdffff;
+            line-height: 32px;
+            text-align: center;
+            cursor: pointer;
+
+            &:hover {
+                background: #00000055;
+            }
+        }
+    }
+    .el-dialog__header {
+        display: none;
+    }
+
+    .el-dialog__body {
+        padding: 0;
+
+        video {
+            display: block;
+            height: auto;
+            width: 100%;
+            outline: none;
+        }
+    }
+}
+</style>