lrf402788946 5 anni fa
parent
commit
23e2213d47
2 ha cambiato i file con 105 aggiunte e 24 eliminazioni
  1. 103 24
      src/views/new-plan/parts/school-arrange.vue
  2. 2 0
      src/views/new-plan/template.vue

+ 103 - 24
src/views/new-plan/parts/school-arrange.vue

@@ -11,7 +11,7 @@
 
     <!-- 大表 -->
     <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">
           <template v-slot="{ row }">
             <el-row>
@@ -38,12 +38,33 @@
 
     <!-- 数据汇总 -->
     <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>
   </div>
 </template>
@@ -66,19 +87,10 @@ export default {
     return {
       list: [],
       termList: [],
-      totalList: [
-        {
-          type: '已分配',
-          term1: 1,
-          term2: 2,
-        },
-        {
-          type: '未分配',
-          term1: 1,
-          term2: 2,
-        },
-      ],
+      totalList: [],
+      carList: [],
       dialog: false,
+      activeName: '1',
     };
   },
   async created() {
@@ -140,11 +152,11 @@ export default {
       }
       this.$set(this, `termList`, termList);
       this.getTotal();
+      this.getCarTotal();
     },
     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()
             .year(this.year)
             .month(mon * 1 - 1)
@@ -158,10 +170,32 @@ export default {
             .format('YYYY-MM-DD');
           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;
     },
+    //手动更改
+    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() {
       const res = await this.schPlanQuery({ planid: this.id });
       if (this.$checkRes(res)) {
@@ -186,6 +220,7 @@ export default {
       });
       this.$set(this, `termList`, res);
     },
+    //名额统计
     getTotal() {
       let res = this.termList.map((i, index) => {
         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]);
     },
+    //车辆统计
+    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: {
     ...mapState(['user']),

+ 2 - 0
src/views/new-plan/template.vue

@@ -38,6 +38,7 @@ export default {
         { label: '默认每期中的批次数', required: true, model: 'batchnum', type: 'number' },
         { label: '默认每批次中的班级数', required: true, model: 'classnum', type: 'number' },
         { label: '默认每班中的人数', required: true, model: 'stunum', type: 'number' },
+        { label: '默认每车人数', required: true, model: 'carpnum', type: 'number' },
         { label: '默认颜色', model: 'color', custom: true },
       ],
       rules: {
@@ -46,6 +47,7 @@ export default {
         batchnum: [{ required: true, message: '请输入默认每期中的批次数' }],
         classnum: [{ required: true, message: '请输入默认每批次中的班级数' }],
         stunum: [{ required: true, message: '请输入默认每班中的人数' }],
+        carpnum: [{ required: true, message: '请输入默认每车人数' }],
       },
     };
   },