licailing 4 lat temu
rodzic
commit
07d18cda7f

+ 0 - 25
src/main/java/com/izouma/wenlvju/converter/RateAuditListConverter.java

@@ -1,25 +0,0 @@
-package com.izouma.wenlvju.converter;
-
-import com.alibaba.fastjson.JSON;
-import com.izouma.wenlvju.domain.RateAudit;
-import org.apache.commons.lang3.StringUtils;
-
-import javax.persistence.AttributeConverter;
-import java.util.List;
-
-public class RateAuditListConverter implements AttributeConverter<List<RateAudit>, String> {
-    @Override
-    public String convertToDatabaseColumn(List<RateAudit> list) {
-        if (list != null)
-            return JSON.toJSONString(list);
-        return null;
-    }
-
-    @Override
-    public List<RateAudit> convertToEntityAttribute(String s) {
-        if (StringUtils.isNotEmpty(s)) {
-            return JSON.parseArray(s, RateAudit.class);
-        }
-        return null;
-    }
-}

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

@@ -9,6 +9,7 @@ import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+
 import javax.persistence.Column;
 import javax.persistence.Convert;
 import javax.persistence.Entity;
@@ -25,6 +26,9 @@ public class Performance extends BaseEntity {
     @ApiModelProperty(value = "名称")
     private String name;
 
+    @ApiModelProperty(value = "年度")
+    private String year;
+
     @ApiModelProperty(value = "报名开始时间")
     private LocalDate startDate;
 
@@ -43,10 +47,13 @@ public class Performance extends BaseEntity {
     private String email;
 
     /**
-     *附件
+     * 附件
      */
     @ApiModelProperty(value = "活动方案")
     private String programme;
 
     private String codeImg;
+
+    @ApiModelProperty(value = "是否发布")
+    private boolean publish;
 }

+ 17 - 0
src/main/java/com/izouma/wenlvju/service/performance/PerformanceScheduleService.java

@@ -2,12 +2,16 @@ package com.izouma.wenlvju.service.performance;
 
 import com.izouma.wenlvju.domain.performance.PerformanceSchedule;
 import com.izouma.wenlvju.dto.PageQuery;
+import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.performance.PerformanceScheduleRepo;
 import com.izouma.wenlvju.utils.JpaUtils;
+import com.izouma.wenlvju.utils.ObjUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service
 @AllArgsConstructor
 public class PerformanceScheduleService {
@@ -17,4 +21,17 @@ public class PerformanceScheduleService {
     public Page<PerformanceSchedule> all(PageQuery pageQuery) {
         return performanceScheduleRepo.findAll(JpaUtils.toSpecification(pageQuery, PerformanceSchedule.class), JpaUtils.toPageRequest(pageQuery));
     }
+
+    public void batchSave(List<PerformanceSchedule> scheduleList) {
+        scheduleList.forEach(schedule -> {
+            if (schedule.getId() != null) {
+                PerformanceSchedule orig = performanceScheduleRepo.findById(schedule.getId())
+                        .orElseThrow(new BusinessException("无记录"));
+                ObjUtils.merge(orig, schedule);
+                performanceScheduleRepo.save(orig);
+            } else {
+                performanceScheduleRepo.save(schedule);
+            }
+        });
+    }
 }

+ 9 - 4
src/main/java/com/izouma/wenlvju/web/performance/PerformanceScheduleController.java

@@ -1,17 +1,16 @@
 package com.izouma.wenlvju.web.performance;
 
-import com.izouma.wenlvju.web.BaseController;
+import com.alibaba.fastjson.JSONObject;
 import com.izouma.wenlvju.domain.performance.PerformanceSchedule;
-import com.izouma.wenlvju.service.performance.PerformanceScheduleService;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.performance.PerformanceScheduleRepo;
+import com.izouma.wenlvju.service.performance.PerformanceScheduleService;
 import com.izouma.wenlvju.utils.ObjUtils;
 import com.izouma.wenlvju.utils.excel.ExcelUtils;
-
+import com.izouma.wenlvju.web.BaseController;
 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;
@@ -59,5 +58,11 @@ public class PerformanceScheduleController extends BaseController {
         List<PerformanceSchedule> data = all(pageQuery).getContent();
         ExcelUtils.export(response, data);
     }
+
+    @PostMapping("/batchSave")
+    public void batchSave(String schedules) {
+        List<PerformanceSchedule> scheduleList = JSONObject.parseArray(schedules, PerformanceSchedule.class);
+        performanceScheduleService.batchSave(scheduleList);
+    }
 }
 

+ 177 - 50
src/main/vue/src/views/performance/PerformanceEdit.vue

@@ -7,11 +7,16 @@
             label-width="90px"
             label-position="right"
             size="small"
-            style="max-width: 570px;"
+            style="max-width: 700px;"
         >
             <el-form-item prop="name" label="名称">
                 <el-input v-model="formData.name" :readonly="!display"></el-input>
             </el-form-item>
+            <el-form-item prop="year" label="年度">
+                <el-select v-model="formData.year">
+                    <el-option v-for="item in years" :key="item" :label="item" :value="item"></el-option>
+                </el-select>
+            </el-form-item>
             <el-form-item label="报名时间">
                 <el-date-picker
                     v-model="dateRange"
@@ -25,53 +30,93 @@
                 >
                 </el-date-picker>
             </el-form-item>
-            <el-form-item label="活动时间">
-                <el-date-picker
-                    v-model="formData.eventStartDate"
-                    type="date"
-                    value-format="yyyy-MM-dd"
-                    placeholder="选择日期"
-                    style="width: 100%"
-                    :readonly="!display"
-                >
-                </el-date-picker>
+            <el-form-item prop="online" label="展演形式">
+                <el-radio-group v-model="formData.online">
+                    <el-radio :label="true">线上</el-radio>
+                    <el-radio :label="false">线下</el-radio>
+                </el-radio-group>
             </el-form-item>
-            <el-form-item label="上午">
-                <el-time-picker
-                    is-range
-                    v-model="eventTimeRange"
-                    range-separator="至"
-                    start-placeholder="开始时间"
-                    end-placeholder="结束时间"
-                    placeholder="选择时间范围"
-                    style="width: 100%"
-                    value-format="HH:mm:ss"
-                    :readonly="!display"
-                >
-                </el-time-picker>
+            <el-form-item label="计划安排">
+                <el-button type="primary" size="mini" @click="onAddOtherForm()">添加计划</el-button>
+                <div class="add-con" v-for="(item, index) in schedules" :key="index">
+                    <div v-if="!item.del">
+                        <el-row>
+                            <el-col :span="11">
+                                <el-form-item prop="content" label="活动内容">
+                                    <el-input v-model="item.content"></el-input>
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="11">
+                                <el-form-item prop="date" label="活动时间">
+                                    <el-date-picker
+                                        v-model="item.date"
+                                        type="date"
+                                        value-format="yyyy-MM-dd"
+                                        placeholder="选择日期"
+                                    >
+                                    </el-date-picker>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                        <el-row>
+                            <el-col :span="20">
+                                <el-form-item label="活动地点">
+                                    <el-input v-model="item.address"></el-input>
+                                </el-form-item>
+                            </el-col>
+
+                            <el-col :span="3">
+                                <el-form-item>
+                                    <el-button
+                                        class="del"
+                                        type="danger"
+                                        size="small"
+                                        icon="el-icon-delete"
+                                        @click="onDeleteOtherForm(item, index)"
+                                    ></el-button>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                    </div>
+                </div>
             </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"
-                    :readonly="!display"
-                >
-                </el-time-picker>
+            <el-form-item label="咨询电话">
+                <el-button type="primary" size="mini" @click="onAddPhoneForm()">添加电话</el-button>
+                <div class="add-con" v-for="(item, index) in phones" :key="index">
+                    <el-row>
+                        <el-col :span="10">
+                            <el-form-item label="联系人">
+                                <el-input v-model="item.name"></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="10">
+                            <el-form-item label="电话">
+                                <el-input v-model="item.phone"></el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="3">
+                            <el-form-item>
+                                <el-button
+                                    class="del"
+                                    type="danger"
+                                    size="small"
+                                    icon="el-icon-delete"
+                                    @click="onDeletePhoneForm(item, index)"
+                                ></el-button>
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                </div>
             </el-form-item>
-            <el-form-item prop="address" label="活动地点">
-                <el-input type="textarea" :rows="3" v-model="formData.address" :readonly="!display"></el-input>
+            <el-form-item prop="email" label="活动邮箱">
+                <el-input v-model="formData.email"></el-input>
+            </el-form-item>
+            <el-form-item prop="programme" label="活动方案">
+                <file-upload v-model="formData.programme"></file-upload>
+            </el-form-item>
+            <el-form-item prop="codeImg" label="活动工作群">
+                <single-upload v-model="formData.codeImg"></single-upload>
             </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" v-if="display">保存</el-button>
                 <el-button @click="onDelete" :loading="saving" type="danger" v-if="formData.id && display">
@@ -88,12 +133,25 @@ export default {
     name: 'PerformanceEdit',
     created() {
         if (this.$route.query.id) {
+            this.performanceId = Number(this.$route.query.id);
             this.$http
                 .get('performance/get/' + this.$route.query.id)
                 .then(res => {
                     this.formData = res;
+                    if (typeof res.performanceEnquiries != 'undefined') {
+                        this.phones = res.performanceEnquiries;
+                    }
                     this.dateRange = [res.startDate, res.endDate];
-                    this.eventTimeRange = [res.morningStartTime, res.morningEndTime];
+
+                    this.$http
+                        .post(
+                            '/performanceSchedule/all',
+                            { size: 100, query: { performanceId: this.$route.query.id } },
+                            { body: 'json' }
+                        )
+                        .then(res => {
+                            this.schedules = res.content;
+                        });
                 })
                 .catch(e => {
                     console.log(e);
@@ -113,11 +171,28 @@ export default {
             ],
             dateRange: [],
             eventTimeRange: '',
-            display: false
+            display: false,
+            years: ['2021', '2022', '2023', '2024', '2025'],
+            schedules: [],
+            phones: [],
+            performanceId: ''
         };
     },
     computed: {
-        ...mapState(['userInfo'])
+        ...mapState(['userInfo']),
+        saveOtherJson() {
+            const schedules = [...this.schedules]
+                .filter(item => {
+                    return !!item.content || !!item.date || !!item.address;
+                })
+                .map(item => {
+                    return {
+                        ...item,
+                        performanceId: this.performanceId
+                    };
+                });
+            return JSON.stringify(schedules);
+        }
     },
     methods: {
         onSave() {
@@ -133,13 +208,17 @@ export default {
             let data = { ...this.formData };
             data.startDate = this.dateRange[0];
             data.endDate = this.dateRange[1];
-            data.morningStartTime = this.eventTimeRange[0];
-            data.morningEndTime = this.eventTimeRange[1];
+            data.performanceEnquiries = this.phones;
             this.saving = true;
             this.$http
                 .post('/performance/save', data, { body: 'json' })
                 .then(res => {
                     this.saving = false;
+                    this.$nextTick(() => {
+                        this.$http.post('/performanceSchedule/batchSave', {
+                            schedules: this.saveOtherJson
+                        });
+                    });
                     this.$message.success('成功');
                     this.$router.go(-1);
                 })
@@ -172,8 +251,56 @@ export default {
                     this.display = true;
                 }
             });
+        },
+        onAddOtherForm() {
+            this.schedules.push({
+                content: '',
+                date: '',
+                address: ''
+            });
+        },
+        onAddPhoneForm() {
+            this.phones.push({
+                name: '',
+                phone: ''
+            });
+        },
+        onDeleteOtherForm(info, index) {
+            this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'warning' })
+                .then(() => {
+                    const schedules = [...this.schedules];
+                    if (info.id) {
+                        info.del = true;
+                        schedules[index] = info;
+                    } else {
+                        schedules.splice(index, 1);
+                    }
+                    this.schedules = schedules;
+                    this.$message.success('删除成功');
+                })
+                .catch(e => {});
+        },
+        onDeletePhoneForm(info, index) {
+            this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'warning' })
+                .then(() => {
+                    const phones = [...this.phones];
+                    phones.splice(index, 1);
+                    this.phones = phones;
+                    this.$message.success('删除成功');
+                })
+                .catch(e => {});
         }
     }
 };
 </script>
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+.add-con {
+    background-color: #f7f7f7;
+    width: 100%;
+    margin: 7px 0;
+    padding-top: 14px;
+}
+.del {
+    float: right;
+}
+</style>

+ 22 - 40
src/main/vue/src/views/performance/PerformanceList.vue

@@ -28,10 +28,17 @@
             <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="name" label="活动名称"> </el-table-column>
-            <el-table-column label="年度"> </el-table-column>
+            <el-table-column prop="year" label="年度"> </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 style="font-size: 13px" :underline="false" type="info" v-if="currentTime < row.startDate"
+                        >未开始</el-link
+                    >
+                    <el-link
+                        style="font-size: 13px"
+                        :underline="false"
+                        type="info"
+                        v-else-if="currentTime > row.endDate"
                         >已结束</el-link
                     >
                     <el-link
@@ -43,37 +50,24 @@
                     >
                 </template>
             </el-table-column>
-            <el-table-column label="发布状态"></el-table-column>
+            <el-table-column label="发布状态">
+                <template slot-scope="{ row }">
+                    <span v-if="row.publish">已发布</span>
+                    <span v-else>未发布</span>
+                </template>
+            </el-table-column>
             <el-table-column label="推送节目数量"></el-table-column>
             <el-table-column label="操作" align="right" fixed="right" min-width="130">
                 <template slot-scope="{ row }">
                     <el-button @click="editRow(row)" type="success" size="mini" plain>
                         查看
                     </el-button>
-                    <!--<el-button
-                        @click="handleCommand1(row)"
-                        type="success"
-                        size="mini"
-                        plain
-                        v-if="display && currentTime >= row.startDate"
-                    >
-                        <span v-if="currentTime > row.startDate && currentTime < row.endDate">报名入口</span>
-                        <span v-else>查看节目</span>
-                    </el-button>
-                    <el-button @click="editRow(row)" type="primary" size="mini" plain v-if="display">编辑</el-button> -->
-                    <!-- <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button> -->
                     <el-dropdown @command="handleCommand">
                         <el-button size="mini" plain style="margin-left:10px">更多</el-button>
                         <el-dropdown-menu slot="dropdown">
-                            <el-dropdown-item :command="`/customCategoryList?vendorInfoId=${row.id}`"
-                                >编辑</el-dropdown-item
-                            >
-                            <el-dropdown-item :command="`/informationList?vendorInfoId=${row.id}`"
-                                >发布</el-dropdown-item
-                            >
-                            <el-dropdown-item :command="`/successCaseList?vendorInfoId=${row.id}&type=CASE`"
-                                >撤销</el-dropdown-item
-                            >
+                            <el-dropdown-item :command="`/performanceEdit?id=${row.id}`">编辑</el-dropdown-item>
+                            <el-dropdown-item>发布</el-dropdown-item>
+                            <el-dropdown-item>撤销</el-dropdown-item>
                         </el-dropdown-menu>
                     </el-dropdown>
                 </template>
@@ -219,22 +213,10 @@ export default {
                     }
                 });
         },
-        handleCommand(row) {
-            this.$router.push({
-                path: '/performanceApplyList',
-                query: {
-                    perforId: row.id,
-                    perforStatus: this.currentTime < row.endDate ? 'APPLY' : 'END'
-                }
-            });
-        },
-        handleCommand1(row) {
-            this.$router.push({
-                path: '/performanceApplyList2',
-                query: {
-                    perforId: row.id
-                }
-            });
+        handleCommand(command) {
+            if (command) {
+                this.$router.push(command);
+            }
         },
         getAdmin() {
             let data = this.userInfo.authorities;

+ 0 - 29
src/main/vue/src/views/rate/RateEdit.vue

@@ -72,35 +72,6 @@
                         </el-radio-group>
                     </el-form-item>
                 </div>
-                <!-- <div class="info-item">
-                    <el-form-item prop="district" label="考级机构">
-                        <el-select v-model="formData.district" style="width:190px">
-                            <el-option
-                                v-for="item in grading"
-                                :key="item.value"
-                                :value="item.value"
-                                :label="item.label"
-                                :disabled="readonly"
-                            ></el-option>
-                        </el-select>
-                    </el-form-item>
-                    <el-form-item prop="district" label="代理专业">
-                        <el-select v-model="formData.district" style="width:190px">
-                            <el-option
-                                v-for="item in districts"
-                                :key="item.id"
-                                :value="item.name"
-                                :label="item.name"
-                                :disabled="readonly"
-                            ></el-option>
-                        </el-select>
-                    </el-form-item>
-                </div>
-                <div class="info-item address">
-                    <el-form-item prop="privacyPolicy" label="合作协议">
-                        <file-upload v-model="formData.privacyPolicy" :readonly="readonly"></file-upload>
-                    </el-form-item>
-                </div> -->
                 <el-form-item>
                     <el-button type="primary" size="small" @click="onAddOtherForm()" v-if="!readonly"
                         >新增承办过的艺术考级活动</el-button