licailing 5 лет назад
Родитель
Сommit
72709cf957

+ 19 - 8
src/main/java/com/izouma/wenlvju/domain/Performance.java

@@ -12,6 +12,7 @@ import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
 import java.time.LocalDate;
+import java.time.LocalTime;
 
 @Data
 @AllArgsConstructor
@@ -24,21 +25,31 @@ public class Performance extends BaseEntity {
     private String name;
 
     @ApiModelProperty(value = "报名时间")
-    private LocalDate startTime;
+    private LocalDate startDate;
 
     @ApiModelProperty(value = "报名时间")
-    private LocalDate endTime;
+    private LocalDate endDate;
 
     @ApiModelProperty(value = "活动时间")
-    private LocalDate eventStartTime;
+    private LocalDate eventStartDate;
 
-    @ApiModelProperty(value = "活动时间")
-    private LocalDate eventEndTime;
+    @ApiModelProperty(value = "上午开始时间")
+    private LocalTime morningStartTime;
+
+    private LocalTime morningEndTime;
+
+    @ApiModelProperty(value = "节目时长(分钟)")
+    private Long programmeLength;
+
+    private LocalTime afternoonStartTime;
+
+//    @ApiModelProperty(value = "活动时间")
+//    private LocalDate eventEndDate;
 
     @ApiModelProperty(value = "地点")
     private String address;
 
-    @ApiModelProperty(value = "状态")
-    @Enumerated(EnumType.STRING)
-    private PerformanceStatus status;
+//    @ApiModelProperty(value = "状态")
+//    @Enumerated(EnumType.STRING)
+//    private PerformanceStatus status;
 }

+ 31 - 15
src/main/java/com/izouma/wenlvju/domain/PerformanceApply.java

@@ -21,31 +21,47 @@ import java.time.LocalDateTime;
 @Entity
 @ApiModel(value = "展演报名")
 public class PerformanceApply extends BaseEntity {
-    private Long          performanceId;
+    private Long performanceId;
+
+    private Long organizationId;
+
     @ApiModelProperty(value = "作品名称")
-    private String        composition;
+    private String composition;
+
     @ApiModelProperty(value = "专业")
-    private Long          artTypeId;
+    private Long artTypeId;
+
     @ApiModelProperty(value = "指导老师")
-    private String        teacher;
-    @ApiModelProperty(value = "选送机构")
-    private String        agency;
+    private String teacher;
+
     @ApiModelProperty(value = "联系人")
-    private String        contact;
+    private String contact;
+
     @ApiModelProperty(value = "联系电话")
-    private String        phone;
+    private String phone;
+
     @Enumerated(EnumType.STRING)
     @ApiModelProperty(value = "状态")
-    private ApplyStatus   status;
-    @ApiModelProperty(value = "表演时间")
-    private LocalDateTime showTime;
+    private ApplyStatus status;
+
+    @ApiModelProperty(value = "表演开始时间")
+    private LocalDateTime showStartTime;
+
+    @ApiModelProperty(value = "表演结束时间")
+    private LocalDateTime showEndTime;
+
     @ApiModelProperty(value = "奖项")
-    private String        awards;
-    private Integer       score;
-    @ApiModelProperty(value = "排序")
-    private int           sort;
+    private String awards;
+
+    private Integer score;
+
+//    @ApiModelProperty(value = "排序")
+//    private int sort;
 
     @Transient
     private String artType;
 
+    @Transient
+    private String organizer;
+
 }

+ 1 - 1
src/main/java/com/izouma/wenlvju/repo/PerformanceApplyRepo.java

@@ -18,5 +18,5 @@ public interface PerformanceApplyRepo extends JpaRepository<PerformanceApply, Lo
 
     List<PerformanceApply> findAllByStatusAndPerformanceId(ApplyStatus status, Long performanceId);
 
-    List<PerformanceApply> findAllByShowTimeIsNotNullAndPerformanceId(Long performanceId);
+//    List<PerformanceApply> findAllByShowTimeIsNotNullAndPerformanceId(Long performanceId);
 }

+ 118 - 39
src/main/java/com/izouma/wenlvju/service/PerformanceApplyService.java

@@ -1,11 +1,14 @@
 package com.izouma.wenlvju.service;
 
-import cn.hutool.core.collection.CollUtil;
+import com.izouma.wenlvju.domain.ArtType;
+import com.izouma.wenlvju.domain.Organization;
 import com.izouma.wenlvju.domain.Performance;
 import com.izouma.wenlvju.domain.PerformanceApply;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.enums.ApplyStatus;
 import com.izouma.wenlvju.exception.BusinessException;
+import com.izouma.wenlvju.repo.ArtTypeRepo;
+import com.izouma.wenlvju.repo.OrganizationRepo;
 import com.izouma.wenlvju.repo.PerformanceApplyRepo;
 import com.izouma.wenlvju.repo.PerformanceRepo;
 import com.izouma.wenlvju.utils.JpaUtils;
@@ -13,20 +16,47 @@ import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
 public class PerformanceApplyService {
 
-    private PerformanceApplyRepo performanceApplyRepo;
-    private PerformanceRepo      performanceRepo;
+    private final PerformanceApplyRepo performanceApplyRepo;
+    private final PerformanceRepo      performanceRepo;
+    private final ArtTypeRepo          artTypeRepo;
+    private final OrganizationRepo     organizationRepo;
 
     public Page<PerformanceApply> all(PageQuery pageQuery) {
-        return performanceApplyRepo.findAll(JpaUtils.toSpecification(pageQuery, PerformanceApply.class), JpaUtils.toPageRequest(pageQuery));
+        Page<PerformanceApply> all = performanceApplyRepo.findAll(JpaUtils.toSpecification(pageQuery, PerformanceApply.class), JpaUtils
+                .toPageRequest(pageQuery));
+        Set<Long> artTypeId = new HashSet<>();
+        Set<Long> organizationId = new HashSet<>();
+        all.forEach(apply -> {
+            artTypeId.add(apply.getArtTypeId());
+            organizationId.add(apply.getOrganizationId());
+        });
+
+        Map<Long, String> artMap = artTypeRepo.findAllById(artTypeId)
+                .stream()
+                .collect(Collectors.toMap(ArtType::getId, ArtType::getName));
+        Map<Long, String> organzationMap = organizationRepo.findAllById(organizationId)
+                .stream()
+                .collect(Collectors.toMap(Organization::getId, Organization::getName));
+
+        return all.map(apply -> {
+            apply.setArtType(artMap.get(apply.getArtTypeId()));
+            apply.setOrganizer(organzationMap.get(apply.getOrganizationId()));
+            return apply;
+        });
+
     }
 
     public void audit(Long id, Boolean pass) {
@@ -42,53 +72,102 @@ public class PerformanceApplyService {
     /*
     自动编排
      */
-    public void autoArrangement(Long performanceId) {
-        List<PerformanceApply> applyList =
-                performanceApplyRepo.findAllByStatusAndPerformanceId(ApplyStatus.PASS, performanceId);
+//    public void autoArrangement(Long performanceId) {
+//        List<PerformanceApply> applyList =
+//                performanceApplyRepo.findAllByStatusAndPerformanceId(ApplyStatus.PASS, performanceId);
+//
+//        List<PerformanceApply> showTime = applyList.stream()
+//                .filter(apply -> apply.getShowTime() != null)
+//                .sorted((a, b) -> b.getShowTime().compareTo(a.getShowTime()))
+//                .collect(Collectors.toList());
+//        List<PerformanceApply> showTimeNull = applyList.stream()
+//                .filter(apply -> apply.getShowTime() == null)
+//                .collect(Collectors.toList());
+//
+//        if (CollUtil.isEmpty(showTimeNull)) {
+//            return;
+//        }
+//
+//        if (CollUtil.isEmpty(showTime)) {
+//            Performance performance = performanceRepo.findById(performanceId).orElseThrow(new BusinessException("无记录"));
+//            final LocalDateTime[] time = {LocalDateTime.of(performance.getStartTime().plusDays(3), LocalTime.now())};
+//            showTimeNull.forEach(apply -> {
+//                apply.setShowTime(time[0]);
+//                performanceApplyRepo.save(apply);
+//                time[0] = time[0].plusMinutes(10);
+//            });
+//            return;
+//        }
+//        final LocalDateTime[] time = {showTime.get(0).getShowTime().plusMinutes(10)};
+//        showTimeNull.forEach(apply -> {
+//            apply.setShowTime(time[0]);
+//            performanceApplyRepo.save(apply);
+//            time[0] = time[0].plusMinutes(10);
+//        });
+//    }
 
-        List<PerformanceApply> showTime = applyList.stream()
-                .filter(apply -> apply.getShowTime() != null)
-                .sorted((a, b) -> b.getShowTime().compareTo(a.getShowTime()))
-                .collect(Collectors.toList());
-        List<PerformanceApply> showTimeNull = applyList.stream()
-                .filter(apply -> apply.getShowTime() == null)
-                .collect(Collectors.toList());
 
-        if (CollUtil.isEmpty(showTimeNull)) {
-            return;
+    public List<PerformanceApply> autoArrangement1(Long performanceId) {
+        Performance performance = performanceRepo.findById(performanceId).orElseThrow(new BusinessException("无记录"));
+        if (LocalDate.now().isBefore(performance.getEndDate())) {
+            throw new BusinessException("报名结束后才可以自动编排");
         }
 
-        if (CollUtil.isEmpty(showTime)) {
-            Performance performance = performanceRepo.findById(performanceId).orElseThrow(new BusinessException("无记录"));
-            final LocalDateTime[] time = {LocalDateTime.of(performance.getStartTime().plusDays(3), LocalTime.now())};
-            showTimeNull.forEach(apply -> {
-                apply.setShowTime(time[0]);
-                performanceApplyRepo.save(apply);
-                time[0] = time[0].plusMinutes(10);
-            });
-            return;
+        List<PerformanceApply> applyList =
+                performanceApplyRepo.findAllByStatusAndPerformanceId(ApplyStatus.PASS, performanceId);
+        LocalDate startDate = performance.getEventStartDate();
+//        LocalDate endDate = performance.getEndDate();
+        LocalTime dayStart = performance.getMorningStartTime();
+        LocalTime dayEnd = performance.getMorningEndTime();
+//        Long length = performance.getProgrammeLength();
+
+        LocalTime dayChange = dayStart;
+        for (PerformanceApply apply : applyList) {
+//            if (start.isAfter(endDate)) {
+//                throw new BusinessException("展示时间过短,请编辑展演结束时间。");
+//            }
+            if (dayChange.isAfter(dayEnd)) {
+                dayChange = performance.getAfternoonStartTime();
+            }
+            apply.setShowStartTime(LocalDateTime.of(startDate, dayChange));
+            dayChange = dayChange.plusMinutes(30);
+            apply.setShowEndTime(LocalDateTime.of(startDate, dayChange));
         }
-        final LocalDateTime[] time = {showTime.get(0).getShowTime().plusMinutes(10)};
-        showTimeNull.forEach(apply -> {
-            apply.setShowTime(time[0]);
-            performanceApplyRepo.save(apply);
-            time[0] = time[0].plusMinutes(10);
+
+
+        Set<Long> artTypeId = new HashSet<>();
+        Set<Long> organizationId = new HashSet<>();
+        applyList.forEach(apply -> {
+            artTypeId.add(apply.getArtTypeId());
+            organizationId.add(apply.getOrganizationId());
         });
+
+        Map<Long, String> artMap = artTypeRepo.findAllById(artTypeId)
+                .stream()
+                .collect(Collectors.toMap(ArtType::getId, ArtType::getName));
+        Map<Long, String> organzationMap = organizationRepo.findAllById(organizationId)
+                .stream()
+                .collect(Collectors.toMap(Organization::getId, Organization::getName));
+        applyList.forEach(apply -> {
+            apply.setArtType(artMap.get(apply.getArtTypeId()));
+            apply.setOrganizer(organzationMap.get(apply.getOrganizationId()));
+        });
+        return applyList;
     }
 
     /*
     自动评奖
      */
     public void autoAwards(Long performanceId) {
-        List<PerformanceApply> applies = performanceApplyRepo.findAllByShowTimeIsNotNullAndPerformanceId(performanceId);
-        if (CollUtil.isEmpty(applies)) {
-            return;
-        }
-        applies.forEach(apply -> {
-            apply.setAwards("一等奖");
-            apply.setScore(100);
-            performanceApplyRepo.save(apply);
-        });
+//        List<PerformanceApply> applies = performanceApplyRepo.findAllByShowTimeIsNotNullAndPerformanceId(performanceId);
+//        if (CollUtil.isEmpty(applies)) {
+//            return;
+//        }
+//        applies.forEach(apply -> {
+//            apply.setAwards("一等奖");
+//            apply.setScore(100);
+//            performanceApplyRepo.save(apply);
+//        });
     }
 
 }

+ 4 - 8
src/main/java/com/izouma/wenlvju/web/PerformanceApplyController.java

@@ -1,17 +1,15 @@
 package com.izouma.wenlvju.web;
 
 import com.izouma.wenlvju.domain.PerformanceApply;
-import com.izouma.wenlvju.repo.ArtTypeRepo;
-import com.izouma.wenlvju.service.PerformanceApplyService;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.PerformanceApplyRepo;
+import com.izouma.wenlvju.service.PerformanceApplyService;
 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;
@@ -23,8 +21,7 @@ import java.util.List;
 @AllArgsConstructor
 public class PerformanceApplyController extends BaseController {
     private final PerformanceApplyService performanceApplyService;
-    private final PerformanceApplyRepo performanceApplyRepo;
-    private final ArtTypeRepo          artTypeRepo;
+    private final PerformanceApplyRepo    performanceApplyRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
@@ -42,7 +39,6 @@ public class PerformanceApplyController extends BaseController {
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/all")
     public Page<PerformanceApply> all(@RequestBody PageQuery pageQuery) {
-
         return performanceApplyService.all(pageQuery);
     }
 
@@ -71,8 +67,8 @@ public class PerformanceApplyController extends BaseController {
 
     @PostMapping("/autoArrangement")
     @ApiOperation("自动编排")
-    public void autoArrangement(@RequestParam Long performanceId) {
-        performanceApplyService.autoArrangement(performanceId);
+    public List<PerformanceApply> autoArrangement(@RequestParam Long performanceId) {
+       return performanceApplyService.autoArrangement1(performanceId);
     }
 
     @PostMapping("/autoAwards")

+ 8 - 3
src/main/vue/src/views/PerformanceApplyEdit.vue

@@ -9,6 +9,9 @@
             size="small"
             style="max-width: 500px;"
         >
+            <!-- <el-form-item prop="agency" label="选送机构">
+                <el-input v-model="formData.agency"></el-input>
+            </el-form-item> -->
             <el-form-item prop="composition" label="作品名称">
                 <el-input v-model="formData.composition"></el-input>
             </el-form-item>
@@ -27,9 +30,6 @@
             <el-form-item prop="teacher" label="指导老师">
                 <el-input v-model="formData.teacher"></el-input>
             </el-form-item>
-            <el-form-item prop="agency" label="选送机构">
-                <el-input v-model="formData.agency"></el-input>
-            </el-form-item>
             <el-form-item prop="contact" label="联系人">
                 <el-input v-model="formData.contact"></el-input>
             </el-form-item>
@@ -60,6 +60,7 @@
     </div>
 </template>
 <script>
+import { mapState } from 'vuex';
 export default {
     name: 'PerformanceApplyEdit',
     created() {
@@ -83,6 +84,9 @@ export default {
                 console.log(e);
             });
     },
+    computed: {
+        ...mapState(['organization'])
+    },
     data() {
         return {
             saving: false,
@@ -118,6 +122,7 @@ export default {
         submit() {
             let data = { ...this.formData };
             data.performanceId = Number(this.$route.query.perforId);
+            data.organizationId = this.organization.id;
             data.status = 'PENDING';
             this.saving = true;
             this.$http

+ 25 - 3
src/main/vue/src/views/PerformanceApplyList.vue

@@ -28,9 +28,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="composition" label="作品名称"> </el-table-column>
-            <el-table-column prop="professional" label="专业"> </el-table-column>
+            <el-table-column prop="artType" label="专业"> </el-table-column>
             <el-table-column prop="teacher" label="指导老师"> </el-table-column>
-            <el-table-column prop="agency" label="选送机构"> </el-table-column>
+            <el-table-column prop="organizer" label="选送机构"> </el-table-column>
             <el-table-column prop="contact" label="联系人"> </el-table-column>
             <el-table-column prop="phone" label="联系电话"> </el-table-column>
             <el-table-column prop="status" label="状态" :formatter="statusFormatter"> </el-table-column>
@@ -75,6 +75,13 @@
                 <el-table :data="person">
                     <el-table-column prop="name" label="姓名" align="center"></el-table-column>
                     <el-table-column prop="phone" label="手机号" align="center"></el-table-column>
+                    <el-table-column label="操作" align="center"
+                        ><template slot-scope="{ row }">
+                            <el-link style="font-size: 13px;" @click="deletePerson(row)" type="danger" size="mini" plain
+                                >删除</el-link
+                            >
+                        </template></el-table-column
+                    >
                 </el-table>
                 <div style="margin: 10px 170px 0">
                     <el-button class="dia-mar" type="primary" @click="add = true" v-if="!add" size="mini"
@@ -252,6 +259,7 @@ export default {
                 .post('/person/all', { size: 100, query: { del: false, performanceApplyId: id } }, { body: 'json' })
                 .then(res => {
                     this.person = res.content;
+                    this.form.performanceApplyId = id;
                 })
                 .catch(e => {
                     console.log(e);
@@ -273,7 +281,6 @@ export default {
                                 phone: ''
                             };
                             this.add = false;
-                            console.log(this.applyId);
                             this.getPerson(this.applyId);
                             // this.$router.go(-1);
                         })
@@ -286,6 +293,21 @@ export default {
                     return false;
                 }
             });
+        },
+        deletePerson(row) {
+            this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
+                .then(() => {
+                    return this.$http.post(`/person/del/${row.id}`);
+                })
+                .then(() => {
+                    this.$message.success('删除成功');
+                    this.getPerson(this.applyId);
+                })
+                .catch(e => {
+                    if (e !== 'cancel') {
+                        this.$message.error(e.error);
+                    }
+                });
         }
     }
 };

+ 51 - 6
src/main/vue/src/views/PerformanceApplyList2.vue

@@ -3,7 +3,7 @@
         <div class="filters-container">
             <!-- <el-input placeholder="输入关键字" v-model="search" clearable class="filter-item"></el-input>
             <el-button @click="getData" type="primary" icon="el-icon-search" class="filter-item">搜索 </el-button> -->
-            <el-button @click="dialogArrangement = true" type="primary" class="filter-item" :loading="loading"
+            <el-button @click="openArrangement" type="primary" class="filter-item" :loading="loading"
                 >自动编排
             </el-button>
             <el-button @click="distribute('已成功通知')" type="primary" class="filter-item">一键通知 </el-button>
@@ -31,9 +31,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="composition" label="作品名称"> </el-table-column>
-            <el-table-column prop="professional" label="专业"> </el-table-column>
+            <el-table-column prop="artType" label="专业"> </el-table-column>
             <el-table-column prop="teacher" label="指导老师"> </el-table-column>
-            <el-table-column prop="agency" label="选送机构"> </el-table-column>
+            <el-table-column prop="organizer" label="选送机构"> </el-table-column>
             <el-table-column prop="contact" label="联系人"> </el-table-column>
             <el-table-column prop="phone" label="联系电话"> </el-table-column>
             <el-table-column prop="status" label="状态" :formatter="statusFormatter"> </el-table-column>
@@ -131,9 +131,23 @@
                 </div>
             </div>
         </el-dialog>
-        <el-dialog title="自动编排" :visible.sync="dialogArrangement" width="600px" center>
+        <el-dialog title="自动编排" :visible.sync="dialogArrangement" width="1000px" center>
             <div style="margin-left: 20px;">
-                <img style="width: 500px; heght: 400px;" src="@/assets/arrangement.png" />
+                <!-- <img style="width: 500px; heght: 400px;" src="@/assets/arrangement.png" /> -->
+                <el-table :data="timeList">
+                    <el-table-column prop="composition" label="作品名称" min-width="100"> </el-table-column>
+                    <el-table-column prop="artType" label="专业" min-width="100"> </el-table-column>
+                    <el-table-column prop="organizer" label="选送机构" min-width="150"> </el-table-column>
+                    <el-table-column label="表演时间" show-overflow-tooltip min-width="180">
+                        <template slot-scope="{ row }"> {{ row.showStartTime }} 至 {{ row.showEndTime }} </template>
+                    </el-table-column>
+                    <el-table-column label="操作">
+                        <template slot-scope="{ row, $index }">
+                            <el-button icon="el-icon-top" circle @click="move($index, -1)"></el-button>
+                            <el-button icon="el-icon-bottom" @click="move($index, 1)" circle></el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
                 <div style="margin-top: 20px; margin-left: 445px;">
                     <el-button type="primary" @click="autoArrangement()">确定</el-button>
                 </div>
@@ -168,7 +182,8 @@ export default {
             },
             add: false,
             loading: false,
-            dialogArrangement: false
+            dialogArrangement: false,
+            timeList: []
         };
     },
     computed: {
@@ -346,6 +361,36 @@ export default {
                         message: '已取消删除'
                     });
                 });
+        },
+        getArrangement() {
+            this.loading = true;
+            this.$http
+                .post('/performanceApply/autoArrangement', {
+                    performanceId: Number(this.$route.query.perforId)
+                })
+                .then(res => {
+                    this.loading = false;
+                    this.timeList = res;
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.loading = false;
+                    this.$message.error(e.error);
+                });
+        },
+        openArrangement() {
+            this.dialogArrangement = true;
+            this.getArrangement();
+        },
+        move(index, direction) {
+            const start = index;
+            const end = direction + index;
+            const startInfo = { ...this.tableData[start] };
+            const endInfo = { ...this.tableData[end] };
+            // console.log(startInfo);
+            // console.log(endInfo);
+            startInfo.showStartTime = endInfo.showStartTime;
+            startInfo.showEndTime = endInfo.showEndTime;
         }
     }
 };

+ 72 - 15
src/main/vue/src/views/PerformanceEdit.vue

@@ -7,7 +7,7 @@
             label-width="90px"
             label-position="right"
             size="small"
-            style="max-width: 550px;"
+            style="max-width: 570px;"
         >
             <el-form-item prop="name" label="名称">
                 <el-input v-model="formData.name"></el-input>
@@ -25,7 +25,7 @@
                 </el-date-picker>
             </el-form-item>
             <el-form-item label="活动时间">
-                <el-date-picker
+                <!-- <el-date-picker
                     v-model="eventDateRange"
                     type="daterange"
                     value-format="yyyy-MM-dd"
@@ -34,17 +34,74 @@
                     range-separator="至"
                     style="width: 100%"
                 >
+                </el-date-picker> -->
+                <el-date-picker
+                    v-model="formData.eventStartDate"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择日期"
+                    style="width: 100%"
+                >
                 </el-date-picker>
             </el-form-item>
+            <el-form-item label="上午">
+                <!-- <el-time-select
+                    placeholder="起始时间"
+                    v-model="formData.morningStartTime"
+                    :picker-options="{
+                        start: '08:30',
+                        step: '00:15',
+                        end: '18:00'
+                    }"
+                    format="HH:mm:ss"
+                >
+                </el-time-select>
+                <span style="margin: 0 12px">至</span>
+                <el-time-select
+                    placeholder="结束时间"
+                    v-model="formData.morningEndTime"
+                    :picker-options="{
+                        start: '08:30',
+                        step: '00:15',
+                        end: '18:00',
+                        minTime: formData.morningStartTime
+                    }"
+                    format="HH:mm:ss"
+                >
+                </el-time-select> -->
+                <el-time-picker
+                    is-range
+                    v-model="eventTimeRange"
+                    range-separator="至"
+                    start-placeholder="开始时间"
+                    end-placeholder="结束时间"
+                    placeholder="选择时间范围"
+                    style="width: 100%"
+                    value-format="HH:mm:ss"
+                >
+                </el-time-picker>
+            </el-form-item>
+            <el-form-item label="下午">
+                <el-time-picker
+                    v-model="formData.afternoonStartTime"
+                    :picker-options="{
+                        selectableRange: '12:30:00 - 20:30:00'
+                    }"
+                    placeholder="任意时间点"
+                    value-format="HH:mm:ss"
+                >
+                </el-time-picker>
+            </el-form-item>
             <el-form-item prop="address" label="活动地点">
                 <el-input type="textarea" :rows="3" v-model="formData.address"></el-input>
             </el-form-item>
-            <el-form-item prop="status" label="状态">
-                <el-select v-model="formData.status" clearable filterable placeholder="请选择">
-                    <el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value">
-                    </el-option>
-                </el-select>
-            </el-form-item>
+            <!-- <el-form-item prop="status" label="状态">
+                <el-radio-group v-model="formData.status">
+                    <el-radio v-for="item in statusOptions" :key="item.value" :label="item.value"
+                        >{{ item.label }}
+                    </el-radio>
+                </el-radio-group>
+            </el-form-item> -->
             <el-form-item>
                 <el-button @click="onSave" :loading="saving" type="primary">保存</el-button>
                 <el-button @click="onDelete" :loading="saving" type="danger" v-if="formData.id">删除 </el-button>
@@ -62,8 +119,8 @@ export default {
                 .get('performance/get/' + this.$route.query.id)
                 .then(res => {
                     this.formData = res;
-                    this.dateRange = [res.startTime, res.endTime];
-                    this.eventDateRange = [res.eventStartTime, res.eventEndTime];
+                    this.dateRange = [res.startDate, res.endDate];
+                    this.eventTimeRange = [res.morningStartTime, res.morningEndTime];
                 })
                 .catch(e => {
                     console.log(e);
@@ -81,7 +138,7 @@ export default {
                 { label: '已结束', value: 'END' }
             ],
             dateRange: [],
-            eventDateRange: []
+            eventTimeRange: ''
         };
     },
     methods: {
@@ -96,10 +153,10 @@ export default {
         },
         submit() {
             let data = { ...this.formData };
-            data.startTime = this.dateRange[0];
-            data.endTime = this.dateRange[1];
-            data.eventStartTime = this.eventDateRange[0];
-            data.eventEndTime = this.eventDateRange[1];
+            data.startDate = this.dateRange[0];
+            data.endDate = this.dateRange[1];
+            data.morningStartTime = this.eventTimeRange[0];
+            data.morningEndTime = this.eventTimeRange[1];
             this.saving = true;
             this.$http
                 .post('/performance/save', data, { body: 'json' })

+ 20 - 11
src/main/vue/src/views/PerformanceList.vue

@@ -29,22 +29,27 @@
             <!-- <el-table-column prop="id" label="ID" width="100"> </el-table-column> -->
             <el-table-column prop="name" label="名称"> </el-table-column>
             <el-table-column label="报名时间" show-overflow-tooltip min-width="100">
-                <template slot-scope="{ row }"> {{ row.startTime }} 至 {{ row.endTime }} </template>
+                <template slot-scope="{ row }"> {{ row.startDate }} 至 {{ row.endDate }} </template>
             </el-table-column>
-            <el-table-column label="活动时间"
-                ><template slot-scope="{ row }">
-                    {{ row.eventStartTime }} 至 {{ row.eventEndTime }}
-                </template></el-table-column
-            >
+            <el-table-column prop="eventStartDate" label="活动时间"></el-table-column>;
             <el-table-column prop="address" label="地点"> </el-table-column>
-            <el-table-column prop="status" label="状态" :formatter="statusFormatter" width="80"> </el-table-column>
+            <el-table-column prop="status" label="状态" width="80">
+                <template slot-scope="{ row }">
+                    <el-link style="font-size: 13px" :underline="false" type="info" v-if="currentTime > row.endDate"
+                        >已结束</el-link
+                    >
+                    <el-link style="font-size: 13px" :underline="false" type="success" v-if="currentTime < row.endDate"
+                        >报名中</el-link
+                    >
+                </template>
+            </el-table-column>
             <el-table-column label="操作" align="center" fixed="right" min-width="130">
                 <template slot-scope="{ row }">
                     <el-button @click="handleCommand(row)" type="success" size="mini" plain v-if="!display"
-                        ><span v-if="row.status === 'APPLY'">报名入口</span> <span v-else>查看节目</span></el-button
+                        ><span v-if="currentTime < row.endDate">报名入口</span> <span v-else>查看节目</span></el-button
                     >
                     <el-button @click="handleCommand1(row)" type="success" size="mini" plain v-else
-                        ><span v-if="row.status === 'APPLY'">报名入口</span> <span v-else>查看节目</span></el-button
+                        ><span v-if="currentTime < row.endDate">报名入口</span> <span v-else>查看节目</span></el-button
                     >
                     <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
                     <!-- <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button> -->
@@ -77,6 +82,7 @@
 <script>
 import { mapState } from 'vuex';
 import pageableTable from '@/mixins/pageableTable';
+import { format } from 'date-fns';
 
 export default {
     name: 'PerformanceList',
@@ -91,11 +97,14 @@ export default {
                 { label: '报名中', value: 'APPLY' },
                 { label: '已结束', value: 'END' }
             ],
-            display: false
+            display: false,
+            currentTime: ''
         };
     },
     created() {
         this.getAdmin();
+        this.currentTime = format(new Date(), 'yyyy-MM-dd');
+        console.log(this.currentTime);
     },
     computed: {
         selection() {
@@ -192,7 +201,7 @@ export default {
                 path: '/performanceApplyList',
                 query: {
                     perforId: row.id,
-                    perforStatus: row.status
+                    perforStatus: this.currentTime < row.endDate ? 'APPLY' : 'END'
                 }
             });
         },

+ 3 - 3
src/main/vue/src/views/record/RecordOrganizationList.vue

@@ -39,7 +39,7 @@
             <el-table-column label="操作" align="center" fixed="right" min-width="140">
                 <template slot-scope="{ row }">
                     <el-button @click="editRow(row)" type="primary" size="mini" plain>查看</el-button>
-                    <el-button @click="openRoom(row)" type="warning" size="mini" plain>考场</el-button>
+                    <!-- <el-button @click="openRoom(row)" type="warning" size="mini" plain>考场</el-button> -->
                     <!-- <el-button @click="openDialog(row)" type="success" size="mini" plain>添加考场</el-button> -->
                     <!-- <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button> -->
                 </template>
@@ -188,9 +188,9 @@ export default {
         },
         editRow(row) {
             this.$router.push({
-                path: '/recordEdit',
+                path: '/recordInfo',
                 query: {
-                    id: row.id
+                    rid: row.id
                 }
             });
         },

+ 19 - 0
src/test/java/com/izouma/wenlvju/service/PerformanceApplyServiceTest.java

@@ -0,0 +1,19 @@
+package com.izouma.wenlvju.service;
+
+
+import com.izouma.wenlvju.ApplicationTests;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class PerformanceApplyServiceTest extends ApplicationTests {
+
+    @Autowired
+    private PerformanceApplyService performanceApplyService;
+
+    @Test
+    public void test() {
+        performanceApplyService.autoArrangement1(115L).forEach(System.out::println);
+
+    }
+
+}