|
|
@@ -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
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
};
|