|
@@ -11,7 +11,7 @@
|
|
|
|
|
|
<!-- 大表 -->
|
|
<!-- 大表 -->
|
|
<el-card>
|
|
<el-card>
|
|
- <el-table :data="list" border stripe size="mini" height="700px">
|
|
|
|
|
|
+ <el-table :data="list" border stripe size="mini" height="700px" @cell-click="cellClick">
|
|
<el-table-column label="学校" fixed align="center" prop="name" width="180">
|
|
<el-table-column label="学校" fixed align="center" prop="name" width="180">
|
|
<template v-slot="{ row }">
|
|
<template v-slot="{ row }">
|
|
<el-row>
|
|
<el-row>
|
|
@@ -38,12 +38,33 @@
|
|
|
|
|
|
<!-- 数据汇总 -->
|
|
<!-- 数据汇总 -->
|
|
<el-dialog :visible.sync="dialog" title="数据汇总">
|
|
<el-dialog :visible.sync="dialog" title="数据汇总">
|
|
- <el-card header="各期情况">
|
|
|
|
- <el-table :data="totalList" border stripe size="mini">
|
|
|
|
- <el-table-column prop="type"></el-table-column>
|
|
|
|
- <el-table-column v-for="(i, index) in termList" align="center" :key="index" :label="`第${i.term}期`" :prop="`term${i.term}`"> </el-table-column>
|
|
|
|
- </el-table>
|
|
|
|
- </el-card>
|
|
|
|
|
|
+ <el-collapse v-model="activeName" accordion>
|
|
|
|
+ <el-collapse-item :title="`各期情况 (${isOk() ? '已完成' : '未完成'})`" name="1">
|
|
|
|
+ <el-table :data="totalList" border stripe size="mini">
|
|
|
|
+ <el-table-column prop="type"></el-table-column>
|
|
|
|
+ <el-table-column v-for="(i, index) in termList" align="center" :key="index" :label="`第${i.term}期`" :prop="`term${i.term}`"> </el-table-column>
|
|
|
|
+ </el-table>
|
|
|
|
+ </el-collapse-item>
|
|
|
|
+ <el-collapse-item :title="`车辆统计 共计(${getAllCarTotal()})`" name="2">
|
|
|
|
+ <el-table :data="carList" border stripe size="mini" height="500px">
|
|
|
|
+ <el-table-column type="expand">
|
|
|
|
+ <template v-slot="{ row }">
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="24" v-for="(i, index) in row.carTerm" :key="index">
|
|
|
|
+ <span v-if="i.num > 0">第 {{ i.term }} 期需要 {{ i.num }} 辆车</span>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ <el-table-column label="学校" align="center" prop="name" width="180"></el-table-column>
|
|
|
|
+ <el-table-column label="车辆需求总数" align="center">
|
|
|
|
+ <template v-slot="{ row }">
|
|
|
|
+ {{ getTableCarTotal(row.carTerm) }}
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ </el-table>
|
|
|
|
+ </el-collapse-item>
|
|
|
|
+ </el-collapse>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
@@ -66,19 +87,10 @@ export default {
|
|
return {
|
|
return {
|
|
list: [],
|
|
list: [],
|
|
termList: [],
|
|
termList: [],
|
|
- totalList: [
|
|
|
|
- {
|
|
|
|
- type: '已分配',
|
|
|
|
- term1: 1,
|
|
|
|
- term2: 2,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- type: '未分配',
|
|
|
|
- term1: 1,
|
|
|
|
- term2: 2,
|
|
|
|
- },
|
|
|
|
- ],
|
|
|
|
|
|
+ totalList: [],
|
|
|
|
+ carList: [],
|
|
dialog: false,
|
|
dialog: false,
|
|
|
|
+ activeName: '1',
|
|
};
|
|
};
|
|
},
|
|
},
|
|
async created() {
|
|
async created() {
|
|
@@ -140,11 +152,11 @@ export default {
|
|
}
|
|
}
|
|
this.$set(this, `termList`, termList);
|
|
this.$set(this, `termList`, termList);
|
|
this.getTotal();
|
|
this.getTotal();
|
|
|
|
+ this.getCarTotal();
|
|
},
|
|
},
|
|
changeRange(data) {
|
|
changeRange(data) {
|
|
- data = data.map(i => {
|
|
|
|
- let daterange = _.get(i, `daterange`, []); //['4','5','6']形式
|
|
|
|
- i.daterange = daterange.map(mon => {
|
|
|
|
|
|
+ let c = r => {
|
|
|
|
+ return r.map(mon => {
|
|
let start = moment()
|
|
let start = moment()
|
|
.year(this.year)
|
|
.year(this.year)
|
|
.month(mon * 1 - 1)
|
|
.month(mon * 1 - 1)
|
|
@@ -158,10 +170,32 @@ export default {
|
|
.format('YYYY-MM-DD');
|
|
.format('YYYY-MM-DD');
|
|
return { start, end };
|
|
return { start, end };
|
|
});
|
|
});
|
|
- return i;
|
|
|
|
- });
|
|
|
|
|
|
+ };
|
|
|
|
+ if (_.isArray(data)) {
|
|
|
|
+ data = data.map(i => {
|
|
|
|
+ let daterange = _.get(i, `daterange`, []); //['4','5','6']形式
|
|
|
|
+ i.daterange = c(daterange);
|
|
|
|
+ return i;
|
|
|
|
+ });
|
|
|
|
+ } else if (_.isObject(data)) {
|
|
|
|
+ data.daterange = c(data.daterange);
|
|
|
|
+ }
|
|
|
|
+
|
|
return data;
|
|
return data;
|
|
},
|
|
},
|
|
|
|
+ //手动更改
|
|
|
|
+ cellClick(row, column) {
|
|
|
|
+ //获取指定期
|
|
|
|
+ let term = this.termList.find(f => f.term == column.property.match(/\d+(.\d+)?/g)[0]);
|
|
|
|
+ //学校上报时间转换
|
|
|
|
+ row = this.changeRange(row);
|
|
|
|
+ let { result } = this.$tqInRange(term.start, term.end, row.daterange);
|
|
|
|
+ console.log(result);
|
|
|
|
+ if (result) {
|
|
|
|
+ //可以输入,整理显示数据
|
|
|
|
+ } else this.$message.error('');
|
|
|
|
+ },
|
|
|
|
+
|
|
async getSchoolPlan() {
|
|
async getSchoolPlan() {
|
|
const res = await this.schPlanQuery({ planid: this.id });
|
|
const res = await this.schPlanQuery({ planid: this.id });
|
|
if (this.$checkRes(res)) {
|
|
if (this.$checkRes(res)) {
|
|
@@ -186,6 +220,7 @@ export default {
|
|
});
|
|
});
|
|
this.$set(this, `termList`, res);
|
|
this.$set(this, `termList`, res);
|
|
},
|
|
},
|
|
|
|
+ //名额统计
|
|
getTotal() {
|
|
getTotal() {
|
|
let res = this.termList.map((i, index) => {
|
|
let res = this.termList.map((i, index) => {
|
|
i.total = this.list.reduce((prev, next) => prev + (next[`term${i.term}`] * 1 || 0), 0);
|
|
i.total = this.list.reduce((prev, next) => prev + (next[`term${i.term}`] * 1 || 0), 0);
|
|
@@ -199,6 +234,50 @@ export default {
|
|
});
|
|
});
|
|
this.$set(this, `totalList`, [aObject, rObject]);
|
|
this.$set(this, `totalList`, [aObject, rObject]);
|
|
},
|
|
},
|
|
|
|
+ //车辆统计
|
|
|
|
+ getCarTotal() {
|
|
|
|
+ let school = this.list.filter(f => f.hascar == '1');
|
|
|
|
+ let carpnum = this.template.carpnum;
|
|
|
|
+ school.map(sch => {
|
|
|
|
+ let keys = Object.keys(sch).filter(f => _.startsWith(f, 'term'));
|
|
|
|
+ let pt = 0; //人数总数
|
|
|
|
+ sch.carTerm = [];
|
|
|
|
+ for (const key of keys) {
|
|
|
|
+ let term = key.match(/\d+(.\d+)?/g)[0];
|
|
|
|
+ let num = Math.ceil(sch[key] / carpnum);
|
|
|
|
+ sch.carTerm.push({ term, num });
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ this.$set(this, `carList`, school);
|
|
|
|
+ },
|
|
|
|
+ //计算车辆
|
|
|
|
+ getTableCarTotal(data) {
|
|
|
|
+ return data.reduce((prev, next) => {
|
|
|
|
+ return prev + (next.num || 0);
|
|
|
|
+ }, 0);
|
|
|
|
+ },
|
|
|
|
+ getAllCarTotal() {
|
|
|
|
+ return this.carList.reduce((prev, next) => {
|
|
|
|
+ let num = next.carTerm.reduce((p, n) => p + (n.num || 0), 0);
|
|
|
|
+ return prev + num;
|
|
|
|
+ }, 0);
|
|
|
|
+ },
|
|
|
|
+ //是否分配完毕,按期来说
|
|
|
|
+ isOk() {
|
|
|
|
+ let res = true;
|
|
|
|
+ let obj = this.totalList[1];
|
|
|
|
+ if (obj) {
|
|
|
|
+ let keys = Object.keys(obj).filter(f => f != 'type');
|
|
|
|
+ for (const key of keys) {
|
|
|
|
+ if (obj[key] > 0) {
|
|
|
|
+ res = false;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else res = false;
|
|
|
|
+
|
|
|
|
+ return res;
|
|
|
|
+ },
|
|
},
|
|
},
|
|
computed: {
|
|
computed: {
|
|
...mapState(['user']),
|
|
...mapState(['user']),
|