panhui 4 tahun lalu
induk
melakukan
20c880a65d

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

@@ -328,10 +328,17 @@ export default {
             });
         },
         assignExpert(row) {
+            let keys = [...this.columnKeys].slice(0, 3).map(item => {
+                return row[item];
+            });
+            let info = this.getInfo(this.showTable, keys);
+            let aid = info.list.map(item => {
+                return item.id;
+            });
             this.$router.push({
                 path: '/arrangeAssignExpert',
                 query: {
-                    aid: row.id
+                    aid: aid.join(',')
                 }
             });
         },
@@ -401,7 +408,6 @@ export default {
                 let keys = [...this.columnKeys].slice(0, keyIndex + 1).map(item => {
                     return row[item];
                 });
-                console.log(keys);
                 let info = this.getInfo(this.showTable, keys);
                 if (rowIndex === info.active) {
                     return {

+ 78 - 10
src/main/vue/src/views/performance/ProgrammeScoreList.vue

@@ -21,15 +21,15 @@
                         </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 @change="getData" v-model="date" type="date" placeholder="选择日期">
                         </el-date-picker>
                     </el-form-item>
-                    <el-form-item label="时间"></el-form-item>
+                    <el-form-item label="时间">
+                        <el-radio-group v-model="morning" @change="getData">
+                            <el-radio-button :label="true">上午</el-radio-button>
+                            <el-radio-button :label="false">下午</el-radio-button>
+                        </el-radio-group>
+                    </el-form-item>
                     <el-form-item label="活动地点">
                         <el-select v-model="form.address">
                             <el-option
@@ -66,8 +66,37 @@
             <el-table-column prop="quantity" label="表演人数" min-width="70"> </el-table-column>
             <el-table-column prop="signedIn" label="状态" :formatter="signedInFormatter"> </el-table-column>
             <el-table-column prop="score" label="成绩"> </el-table-column>
-            <el-table-column prop="myScore" label="评分"> </el-table-column>
-            <el-table-column prop="remark" label="备注"> </el-table-column>
+            <el-table-column prop="myScore" label="评分" align="center" min-width="120">
+                <template slot-scope="{ row }">
+                    <span v-if="row.second">{{ row.myScore }}</span>
+                    <el-input-number
+                        v-else
+                        v-model="row.myScore"
+                        size="mini"
+                        label=""
+                        :min="0"
+                        :max="100"
+                        :step="1"
+                        :controls="true"
+                        controls-position="both"
+                        @change="saveScore(row)"
+                    >
+                    </el-input-number>
+                </template>
+            </el-table-column>
+            <el-table-column prop="remark" label="备注" align="center" min-width="120">
+                <template slot-scope="{ row }">
+                    <span v-if="row.second">{{ row.myScore }}</span>
+                    <el-input
+                        v-else
+                        size="mini"
+                        @change="saveScore(row)"
+                        v-model="row.remark"
+                        placeholder="请输入备注"
+                        clearable
+                    ></el-input>
+                </template>
+            </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>
@@ -124,6 +153,9 @@ import delChild from '@/mixins/delChild';
 import { mapState } from 'vuex';
 import pageableTable from '@/mixins/pageableTable';
 import QrcodeVue from 'qrcode.vue';
+import { format, isSameDay, startOfDay } from 'date-fns';
+import endOfDay from 'date-fns/endOfDay';
+import addHours from 'date-fns/addHours';
 
 export default {
     name: 'ProgrammeScoreList',
@@ -144,10 +176,14 @@ export default {
                 { label: '已调整', value: 'ADJUSTED' }
             ],
             signForm: {},
-            addresses: []
+            addresses: [],
+            morning: true,
+            date: new Date()
         };
     },
     created() {
+        this.morning = isSameDay(addHours(new Date(), 12), new Date());
+
         this.$http
             .post(
                 '/performance/all',
@@ -195,6 +231,20 @@ export default {
             if (this.performanceId) {
                 data.query.performanceId = this.performanceId;
             }
+            if (this.date) {
+                if (this.morning) {
+                    data.query.showBegin = [
+                        format(startOfDay(this.date), 'yyyy-MM-dd HH:mm:ss'),
+                        format(this.date, 'yyyy-MM-dd') + ' 12:00:00'
+                    ].join(',');
+                } else {
+                    data.query.showBegin = [
+                        format(this.date, 'yyyy-MM-dd') + ' 12:00:00',
+                        format(endOfDay(this.date), 'yyyy-MM-dd HH:mm:ss')
+                    ].join(',');
+                }
+            }
+
             return data;
         },
         toggleMultipleMode(multipleMode) {
@@ -235,6 +285,24 @@ export default {
                         this.$message.error(e.error);
                     }
                 });
+        },
+        saveScore(row) {
+            if (!row.myScore) {
+                this.$message.warning('请输入评分');
+                return;
+            }
+            this.$http
+                .post('/programmeScore/saveScore?programmeId=' + row.id, {
+                    score: row.myScore,
+                    remark: row.remark
+                })
+                .then(res => {
+                    this.$message.success('评分成功');
+                    this.getData();
+                })
+                .catch(e => {
+                    this.$message.error(e.error);
+                });
         }
     }
 };

+ 81 - 5
src/main/vue/src/views/performance/ProgrammeSignList.vue

@@ -65,6 +65,7 @@
             row-class-name="table-row"
             cell-class-name="table-cell"
             :height="tableHeight"
+            :span-method="objectSpanMethod"
         >
             <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> -->
@@ -137,6 +138,8 @@ import { mapState } from 'vuex';
 import pageableTable from '@/mixins/pageableTable';
 import QrcodeVue from 'qrcode.vue';
 import formatter from '@/mixins/formatters';
+import { format, startOfDay } from 'date-fns';
+import endOfDay from 'date-fns/endOfDay';
 
 export default {
     name: 'ProgrammeSignList',
@@ -147,7 +150,9 @@ export default {
             search: '',
             url: '/programme/byArrange',
             downloading: false,
-            form: {},
+            form: {
+                date: new Date()
+            },
             dialogSign: false,
             performances: [],
             signedInOptions: [
@@ -156,7 +161,8 @@ export default {
                 { label: '已调整', value: 'ADJUSTED' }
             ],
             signForm: {},
-            addresses: []
+            addresses: [],
+            columnKeys: ['arrangeName', 'gradingOrganization', 'organization']
         };
     },
     created() {
@@ -209,9 +215,45 @@ export default {
     computed: {
         selection() {
             return this.$refs.table.selection.map(i => i.id);
+        },
+        showTable() {
+            return this.backMap(this.tableData);
         }
     },
     methods: {
+        backMap(list, key = 'arrangeName', preActive = 0) {
+            let _map = new Map();
+            list.forEach((item, index) => {
+                let info = {
+                    active: index + preActive,
+                    childNum: 1,
+                    list: []
+                };
+                if (_map.has(item[key])) {
+                    info = _map.get(item[key]);
+                    info.list.push(item);
+                    info.childNum = info.list.length;
+                } else {
+                    info.list.push(item);
+                }
+
+                _map.set(item[key], info);
+            });
+
+            let keyIndex = this.columnKeys.indexOf(key);
+            if (keyIndex !== this.columnKeys.length - 1) {
+                [..._map.keys()].forEach(item => {
+                    let info = _map.get(item);
+                    let childMap = this.backMap(info.list, this.columnKeys[keyIndex + 1], info.active);
+                    _map.set(item, {
+                        ...info,
+                        childMap: childMap
+                    });
+                });
+            }
+
+            return _map;
+        },
         signedInFormatter(row, column, cellValue, index) {
             let selectedOption = this.signedInOptions.find(i => i.value === cellValue);
             if (selectedOption) {
@@ -228,9 +270,9 @@ export default {
                 data.query.address = this.form.address;
             }
             if (this.form.date) {
-                // let startDate = new Date(this.form.date);
-                // let endDate = new Date(startDate.getTime() + 3600 * 1000 * 24 - 1);
-                // data.query.showBegin = startDate + ',' + endDate;
+                let startDate = format(startOfDay(this.form.date), 'yyyy-MM-dd HH:mm:ss');
+                let endDate = format(endOfDay(this.form.date), 'yyyy-MM-dd HH:mm:ss');
+                data.query.showBegin = startDate + ',' + endDate;
             }
             if (this.form.signedIn) {
                 data.query.signedIn = this.form.signedIn;
@@ -275,6 +317,40 @@ export default {
                         this.$message.error(e.error);
                     }
                 });
+        },
+        getInfo(mapInfo = new Map(), keys = ['date']) {
+            let info = {};
+            keys.forEach(item => {
+                if (mapInfo.has(item)) {
+                    info = mapInfo.get(item);
+                    mapInfo = mapInfo.get(item).childMap;
+                }
+            });
+            return info;
+        },
+        objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+            let keyIndex = columnIndex;
+            // if (column.label === '操作') {
+            //     keyIndex = 2;
+            // }
+
+            if (keyIndex < this.columnKeys.length) {
+                let keys = [...this.columnKeys].slice(0, keyIndex + 1).map(item => {
+                    return row[item];
+                });
+                let info = this.getInfo(this.showTable, keys);
+                if (rowIndex === info.active) {
+                    return {
+                        rowspan: info.childNum,
+                        colspan: 1
+                    };
+                } else {
+                    return {
+                        rowspan: 0,
+                        colspan: 0
+                    };
+                }
+            }
         }
     }
 };