|
@@ -10,33 +10,10 @@
|
|
<el-col :span="2">
|
|
<el-col :span="2">
|
|
<el-button type="primary" size="mini" @click="toConfirm">一键分配</el-button>
|
|
<el-button type="primary" size="mini" @click="toConfirm">一键分配</el-button>
|
|
</el-col>
|
|
</el-col>
|
|
- <el-col :span="2">
|
|
|
|
|
|
+ <!-- <el-col :span="2">
|
|
<el-button type="primary" size="mini" plain @click="dialog = true">查看汇总</el-button>
|
|
<el-button type="primary" size="mini" plain @click="dialog = true">查看汇总</el-button>
|
|
- </el-col>
|
|
|
|
|
|
+ </el-col> -->
|
|
</el-row>
|
|
</el-row>
|
|
- <!-- <el-table :data="list" border stripe size="mini" max-height="650px" @cell-click="cellClick" :show-summary="true" v-if="already">
|
|
|
|
- <el-table-column label="学校" fixed align="center" prop="name" width="180">
|
|
|
|
- <template v-slot="{ row }">
|
|
|
|
- <el-row>
|
|
|
|
- <el-col :span="24">
|
|
|
|
- {{ row.name }}
|
|
|
|
- </el-col>
|
|
|
|
- <el-col :span="24" v-if="row.number"> 名额:{{ row.remaining }} </el-col>
|
|
|
|
- </el-row>
|
|
|
|
- </template>
|
|
|
|
- </el-table-column>
|
|
|
|
- <el-table-column align="center" v-for="(i, index) in termList" :key="index" :label="`第${i.term}期`">
|
|
|
|
- <el-table-column align="center" width="95" :prop="`term${i.term}`">
|
|
|
|
- <template #header>
|
|
|
|
- <el-row>
|
|
|
|
- <el-col :span="24">{{ i.start }}</el-col>
|
|
|
|
- <el-col :span="24">至</el-col>
|
|
|
|
- <el-col :span="24">{{ i.end }}</el-col>
|
|
|
|
- </el-row>
|
|
|
|
- </template>
|
|
|
|
- </el-table-column>
|
|
|
|
- </el-table-column>
|
|
|
|
- </el-table> -->
|
|
|
|
<a-table
|
|
<a-table
|
|
:termList="termList"
|
|
:termList="termList"
|
|
:data="list"
|
|
:data="list"
|
|
@@ -49,7 +26,7 @@
|
|
</detail-frame>
|
|
</detail-frame>
|
|
|
|
|
|
<el-drawer :visible.sync="drawer" direction="rtl" title="名额分配" @close="toClose">
|
|
<el-drawer :visible.sync="drawer" direction="rtl" title="名额分配" @close="toClose">
|
|
- <el-row type="flex" align="middle" justify="center" style="padding:20px" :gutter="20">
|
|
|
|
|
|
+ <el-row type="flex" align="top" justify="center" style="padding:20px" :gutter="20">
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
<el-card>
|
|
<el-card>
|
|
<el-form size="mini">
|
|
<el-form size="mini">
|
|
@@ -64,11 +41,12 @@
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
<el-card>
|
|
<el-card>
|
|
<el-form size="mini">
|
|
<el-form size="mini">
|
|
- <el-form-item label="期数">{{ form | getProp('term.term') }}</el-form-item>
|
|
|
|
- <el-form-item label="开始时间">{{ form | getProp('term.start') }}</el-form-item>
|
|
|
|
- <el-form-item label="结束时间">{{ form | getProp('term.end') }}</el-form-item>
|
|
|
|
- <el-form-item label="总名额">{{ form | getProp('term.tpt') }}</el-form-item>
|
|
|
|
- <el-form-item label="剩余名额">{{ form | getProp('term.remaining') }}</el-form-item>
|
|
|
|
|
|
+ <el-form-item label="期数">{{ form | getProp('info.term') }}</el-form-item>
|
|
|
|
+ <el-form-item label="批次">{{ form | getProp('info.batch') }}</el-form-item>
|
|
|
|
+ <el-form-item label="开始时间">{{ form | getProp('info.start') }}</el-form-item>
|
|
|
|
+ <el-form-item label="结束时间">{{ form | getProp('info.end') }}</el-form-item>
|
|
|
|
+ <el-form-item label="总名额">{{ form | getProp('info.bpt') }}</el-form-item>
|
|
|
|
+ <el-form-item label="剩余名额">{{ form | getProp('info.remaining') }}</el-form-item>
|
|
</el-form>
|
|
</el-form>
|
|
</el-card>
|
|
</el-card>
|
|
</el-col>
|
|
</el-col>
|
|
@@ -105,7 +83,7 @@
|
|
</el-drawer>
|
|
</el-drawer>
|
|
|
|
|
|
<!-- 数据汇总 -->
|
|
<!-- 数据汇总 -->
|
|
- <el-dialog :visible.sync="dialog" title="数据汇总">
|
|
|
|
|
|
+ <!-- <el-dialog :visible.sync="dialog" title="数据汇总">
|
|
<el-collapse v-model="activeName" accordion>
|
|
<el-collapse v-model="activeName" accordion>
|
|
<el-collapse-item :title="`各期情况 (${isOk() ? '已完成' : '未完成'})`" name="1">
|
|
<el-collapse-item :title="`各期情况 (${isOk() ? '已完成' : '未完成'})`" name="1">
|
|
<el-table :data="totalList" border stripe size="mini">
|
|
<el-table :data="totalList" border stripe size="mini">
|
|
@@ -133,7 +111,7 @@
|
|
</el-table>
|
|
</el-table>
|
|
</el-collapse-item>
|
|
</el-collapse-item>
|
|
</el-collapse>
|
|
</el-collapse>
|
|
- </el-dialog>
|
|
|
|
|
|
+ </el-dialog> -->
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
@@ -153,76 +131,9 @@ export default {
|
|
components: { detailFrame, aTable },
|
|
components: { detailFrame, aTable },
|
|
data: () => {
|
|
data: () => {
|
|
return {
|
|
return {
|
|
- list: [
|
|
|
|
- {
|
|
|
|
- code: '10183',
|
|
|
|
- name: '吉林大学',
|
|
|
|
- level: '本科',
|
|
|
|
- address: '长春',
|
|
|
|
- hascar: '1',
|
|
|
|
- shortname: '吉大',
|
|
|
|
- cynum: 100,
|
|
|
|
- jynum: 200,
|
|
|
|
- mznum: 0,
|
|
|
|
- number: 300,
|
|
|
|
- remaining: 300,
|
|
|
|
- daterange: [{ start: '2020-06-01', end: '2020-10-31' }],
|
|
|
|
- carTerm: [],
|
|
|
|
- plan: {
|
|
|
|
- meta: { state: 0, createdAt: '2020-06-22T01:30:46.633Z', updatedAt: '2020-06-22T06:34:32.640Z' },
|
|
|
|
- daterange: ['6', '7', '8', '9', '10'],
|
|
|
|
- _id: '5ef009c620af53716453aab1',
|
|
|
|
- schid: '10183',
|
|
|
|
- year: '2020',
|
|
|
|
- planid: '5eec849a8b3bc60be869867e',
|
|
|
|
- term: [{ _id: '5ef050f8a4cae173b00e8a4c', termnum: '336', number: '100', termid: '5eec89778b3bc60be8698703', carnum: '2' }],
|
|
|
|
- __v: 10,
|
|
|
|
- id: '5ef009c620af53716453aab1',
|
|
|
|
- },
|
|
|
|
- },
|
|
|
|
- ],
|
|
|
|
|
|
+ list: [],
|
|
plan: {},
|
|
plan: {},
|
|
- termList: [
|
|
|
|
- {
|
|
|
|
- batchnum: [
|
|
|
|
- {
|
|
|
|
- _id: '5eec89778b3bc60be8698704',
|
|
|
|
- batch: '1',
|
|
|
|
- class: '2',
|
|
|
|
- type: '0',
|
|
|
|
- number: '56',
|
|
|
|
- color: '#FF9D00',
|
|
|
|
- name: '第336期第1批次',
|
|
|
|
- term: '336',
|
|
|
|
- termid: '5eec89778b3bc60be8698703',
|
|
|
|
- start: '2020-06-28',
|
|
|
|
- end: '2020-07-03',
|
|
|
|
- bpt: 112,
|
|
|
|
- remaining: 112,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- _id: '5eec89778b3bc60be8698705',
|
|
|
|
- batch: '2',
|
|
|
|
- class: '2',
|
|
|
|
- type: '0',
|
|
|
|
- number: '56',
|
|
|
|
- color: '#FF9D00',
|
|
|
|
- name: '第336期第2批次',
|
|
|
|
- term: '336',
|
|
|
|
- termid: '5eec89778b3bc60be8698703',
|
|
|
|
- start: '2020-06-29',
|
|
|
|
- end: '2020-07-04',
|
|
|
|
- bpt: 112,
|
|
|
|
- remaining: 112,
|
|
|
|
- },
|
|
|
|
- ],
|
|
|
|
- _id: '5eec89778b3bc60be8698703',
|
|
|
|
- term: '336',
|
|
|
|
- classnum: '4',
|
|
|
|
- total: 0,
|
|
|
|
- remaining: 0,
|
|
|
|
- },
|
|
|
|
- ],
|
|
|
|
|
|
+ termList: [],
|
|
totalList: [],
|
|
totalList: [],
|
|
carList: [],
|
|
carList: [],
|
|
template: {},
|
|
template: {},
|
|
@@ -258,7 +169,7 @@ export default {
|
|
});
|
|
});
|
|
this.$set(this, `list`, school);
|
|
this.$set(this, `list`, school);
|
|
await this.getSchoolPlan();
|
|
await this.getSchoolPlan();
|
|
- await this.getTotal();
|
|
|
|
|
|
+ // await this.getTotal();
|
|
}
|
|
}
|
|
},
|
|
},
|
|
//自动安排提示确认
|
|
//自动安排提示确认
|
|
@@ -282,12 +193,7 @@ export default {
|
|
//整理每个学校的daterange:[{start,end}]的形式
|
|
//整理每个学校的daterange:[{start,end}]的形式
|
|
school = this.changeRange(school);
|
|
school = this.changeRange(school);
|
|
let termList = JSON.parse(JSON.stringify(this.termList));
|
|
let termList = JSON.parse(JSON.stringify(this.termList));
|
|
- let setInfo = (sch, b) => {
|
|
|
|
- sch[this.proAffix(b._id, 'term_batch')] = b.termid; //记录这期和批次的对应关系 term_batch-${batchid} = termid
|
|
|
|
- sch[this.proAffix(b.termid, 'term')] = b.term; //记录该期 term-${termid} = term
|
|
|
|
- sch[this.proAffix(b._id, 'batch')] = b.batch; //记录该批次 batch-${batchid} = batch
|
|
|
|
- //之前添加 批次分配的人数 batch_total-${batchid} = 人数
|
|
|
|
- };
|
|
|
|
|
|
+ //批次分配的人数 batch_total-${batchid} = 人数
|
|
for (const sch of school) {
|
|
for (const sch of school) {
|
|
for (const t of termList) {
|
|
for (const t of termList) {
|
|
for (const b of t.batchnum) {
|
|
for (const b of t.batchnum) {
|
|
@@ -298,8 +204,7 @@ export default {
|
|
if (sch.remaining > b.remaining) {
|
|
if (sch.remaining > b.remaining) {
|
|
sch.remaining = sch.remaining - b.remaining; //学校剩余名额 = 学校剩余名额(原) - 本批次剩余名额
|
|
sch.remaining = sch.remaining - b.remaining; //学校剩余名额 = 学校剩余名额(原) - 本批次剩余名额
|
|
if (b.remaining > 0) {
|
|
if (b.remaining > 0) {
|
|
- sch[this.proAffix(b._id, 'batch_total')] = b.remaining; //学校哪一批次有多少人,表格上显示的
|
|
|
|
- setInfo(sch, b);
|
|
|
|
|
|
+ this.setNumOthers(sch, b, b.remaining);
|
|
}
|
|
}
|
|
b.remaining = 0; //本批次剩余名额=0;
|
|
b.remaining = 0; //本批次剩余名额=0;
|
|
continue;
|
|
continue;
|
|
@@ -307,8 +212,7 @@ export default {
|
|
//学校名额<=本批次剩余名额
|
|
//学校名额<=本批次剩余名额
|
|
b.remaining = b.remaining - sch.remaining; //本批次剩余名额 = 本批次剩余名额(原) - 学校剩余名额;
|
|
b.remaining = b.remaining - sch.remaining; //本批次剩余名额 = 本批次剩余名额(原) - 学校剩余名额;
|
|
if (sch.remaining > 0) {
|
|
if (sch.remaining > 0) {
|
|
- sch[this.proAffix(b._id, 'batch_total')] = sch.remaining; //学校哪一批次有多少人,表格上显示的
|
|
|
|
- setInfo(sch, b);
|
|
|
|
|
|
+ this.setNumOthers(sch, b, sch.remaining);
|
|
}
|
|
}
|
|
sch.remaining = 0; //学校剩余名额 = 0
|
|
sch.remaining = 0; //学校剩余名额 = 0
|
|
break;
|
|
break;
|
|
@@ -320,57 +224,68 @@ export default {
|
|
if (index >= 0) this.$set(this.list, index, sch);
|
|
if (index >= 0) this.$set(this.list, index, sch);
|
|
}
|
|
}
|
|
this.$set(this, `termList`, termList);
|
|
this.$set(this, `termList`, termList);
|
|
- // this.listClear();
|
|
|
|
- // this.getTotal();
|
|
|
|
- // this.getCarTotal();
|
|
|
|
|
|
+ this.getCarTotal();
|
|
},
|
|
},
|
|
//保存整体计划
|
|
//保存整体计划
|
|
async toSave() {
|
|
async toSave() {
|
|
//修改学校上报计划,整理数据
|
|
//修改学校上报计划,整理数据
|
|
- let schPlan = this.list.map(i => {
|
|
|
|
|
|
+ let duplicate = _.cloneDeep(this.list);
|
|
|
|
+ duplicate = duplicate.filter(f => Object.keys(f).find(key => key.includes('batch_total')));
|
|
|
|
+ console.log(duplicate);
|
|
|
|
+ let schPlan = duplicate.map(i => {
|
|
let plan = _.cloneDeep(i.plan);
|
|
let plan = _.cloneDeep(i.plan);
|
|
- let keys = Object.keys(i).filter(f => _.startsWith(f, 'term'));
|
|
|
|
- if (keys.length > 0) {
|
|
|
|
- let term = [];
|
|
|
|
- for (const key of keys) {
|
|
|
|
- let object = {};
|
|
|
|
- object.termnum = key.match(/\d+(.\d+)?/g)[0];
|
|
|
|
- object._id = i[`_id_term${object.termnum}`];
|
|
|
|
- object.number = i[`term${object.termnum}`];
|
|
|
|
- object.termid = i[`id_term${object.termnum}`];
|
|
|
|
- if (i.carTerm) {
|
|
|
|
- let car = i.carTerm.find(f => f.term == object.termnum);
|
|
|
|
- if (car) object.carnum = car.num;
|
|
|
|
- }
|
|
|
|
- term.push(object);
|
|
|
|
- plan.term.push(object);
|
|
|
|
- }
|
|
|
|
- plan.term = term;
|
|
|
|
- return plan;
|
|
|
|
- }
|
|
|
|
|
|
+ console.log(i);
|
|
|
|
+ // let keys = Object.keys(i).filter(f => _.startsWith(f, 'term'));
|
|
|
|
+ // if (keys.length > 0) {
|
|
|
|
+ // let term = [];
|
|
|
|
+ // for (const key of keys) {
|
|
|
|
+ // let object = {};
|
|
|
|
+ // object.termnum = key.match(/\d+(.\d+)?/g)[0];
|
|
|
|
+ // object._id = i[`_id_term${object.termnum}`];
|
|
|
|
+ // object.number = i[`term${object.termnum}`];
|
|
|
|
+ // object.termid = i[`id_term${object.termnum}`];
|
|
|
|
+ // if (i.carTerm) {
|
|
|
|
+ // let car = i.carTerm.find(f => f.term == object.termnum);
|
|
|
|
+ // if (car) object.carnum = car.num;
|
|
|
|
+ // }
|
|
|
|
+ // term.push(object);
|
|
|
|
+ // plan.term.push(object);
|
|
|
|
+ // }
|
|
|
|
+ // plan.term = term;
|
|
|
|
+ return plan;
|
|
|
|
+ // }
|
|
});
|
|
});
|
|
schPlan = _.compact(schPlan);
|
|
schPlan = _.compact(schPlan);
|
|
- const res = await this.setSchPlan(schPlan);
|
|
|
|
- this.$checkRes(res, '保存成功', res.errmsg);
|
|
|
|
|
|
+ // const res = await this.setSchPlan(schPlan);
|
|
|
|
+ // this.$checkRes(res, '保存成功', res.errmsg);
|
|
|
|
+ },
|
|
|
|
+ cellClick(data) {
|
|
|
|
+ this.drawer = true;
|
|
|
|
+ this.$set(this, `form`, data);
|
|
},
|
|
},
|
|
- cellClick() {},
|
|
|
|
toSend() {
|
|
toSend() {
|
|
let num = _.get(this.form, 'num');
|
|
let num = _.get(this.form, 'num');
|
|
- let term = _.get(this.form, 'term');
|
|
|
|
let sch = _.get(this.form, 'sch');
|
|
let sch = _.get(this.form, 'sch');
|
|
- let tn = term.term;
|
|
|
|
- sch[`term${tn}`] = num;
|
|
|
|
- sch[`id_term${tn}`] = term.termid;
|
|
|
|
- // sch[`remaining`] = sch.remaining;
|
|
|
|
- // term.remaining = term.remaining;
|
|
|
|
|
|
+ let info = _.get(this.form, 'info');
|
|
|
|
+ sch = this.setNumOthers(sch, info, num);
|
|
let si = _.findIndex(this.list, f => f.code == sch.code);
|
|
let si = _.findIndex(this.list, f => f.code == sch.code);
|
|
- let ti = _.findIndex(this.termList, f => f.term == term.term);
|
|
|
|
- this.$set(this.list, si, sch);
|
|
|
|
- this.$set(this.termList, ti, term);
|
|
|
|
|
|
+ let termIndex = this.termList.findIndex(f => f._id == info.termid);
|
|
|
|
+ let batchIndex = this.termList.find(f => f._id == info.termid).batchnum.findIndex(f => f._id == info._id);
|
|
|
|
+ if (termIndex >= 0 && batchIndex >= 0 && si >= 0) {
|
|
|
|
+ this.$set(this.list, si, sch);
|
|
|
|
+ this.$set(this.termList[termIndex].batchnum, batchIndex, info);
|
|
|
|
+ } else this.$message.error('数据处理错误,请反馈该bug:未找到指定学校或指定期或指定批次');
|
|
this.toClose();
|
|
this.toClose();
|
|
- this.getTotal();
|
|
|
|
this.getCarTotal();
|
|
this.getCarTotal();
|
|
},
|
|
},
|
|
|
|
+ //设置人数的配套信息
|
|
|
|
+ setNumOthers(sch, b, number) {
|
|
|
|
+ sch[this.proAffix(b._id, 'term_batch')] = b.termid; //记录这期和批次的对应关系 term_batch-${batchid} = termid
|
|
|
|
+ sch[this.proAffix(b.termid, 'term')] = b.term; //记录该期 term-${termid} = term
|
|
|
|
+ sch[this.proAffix(b._id, 'batch')] = b.batch; //记录该批次 batch-${batchid} = batch
|
|
|
|
+ sch[this.proAffix(b._id, 'batch_total')] = number; //学校哪一批次有多少人,表格上显示的
|
|
|
|
+ return sch;
|
|
|
|
+ },
|
|
//将学校上报的月份数组[String]=>[{start,end}]方法
|
|
//将学校上报的月份数组[String]=>[{start,end}]方法
|
|
changeRange(data) {
|
|
changeRange(data) {
|
|
let duplicate = JSON.parse(JSON.stringify(data));
|
|
let duplicate = JSON.parse(JSON.stringify(data));
|
|
@@ -420,6 +335,7 @@ export default {
|
|
.format('YYYY-MM-DD');
|
|
.format('YYYY-MM-DD');
|
|
return { start, end };
|
|
return { start, end };
|
|
},
|
|
},
|
|
|
|
+ //处理不连续月份
|
|
getConRange(array) {
|
|
getConRange(array) {
|
|
let res = [];
|
|
let res = [];
|
|
let limit = _.get(array, 'length') - 1;
|
|
let limit = _.get(array, 'length') - 1;
|
|
@@ -511,131 +427,77 @@ export default {
|
|
});
|
|
});
|
|
return events;
|
|
return events;
|
|
},
|
|
},
|
|
- //名额统计
|
|
|
|
- getTotal() {
|
|
|
|
- let res = this.termList.map((i, index) => {
|
|
|
|
- i.total = this.list.reduce((prev, next) => prev + (next[`term${i.term}`] * 1 || 0), 0);
|
|
|
|
- return i;
|
|
|
|
- });
|
|
|
|
- let aObject = { type: '已分配' };
|
|
|
|
- let rObject = { type: '未分配' };
|
|
|
|
- res.map(i => {
|
|
|
|
- aObject[`term${i.term}`] = i.total || 0;
|
|
|
|
- i.remaining = i.tpt - i.total || 0;
|
|
|
|
- rObject[`term${i.term}`] = i.remaining || 0;
|
|
|
|
- });
|
|
|
|
- this.$set(this, `totalList`, [aObject, rObject]);
|
|
|
|
- },
|
|
|
|
//车辆统计
|
|
//车辆统计
|
|
getCarTotal() {
|
|
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 });
|
|
|
|
- }
|
|
|
|
|
|
+ let carpnum = this.template.carpnum * 1 || 53;
|
|
|
|
+ let list = this.list.map(i => {
|
|
|
|
+ let keys = Object.keys(i).filter(f => f.includes('batch_total'));
|
|
|
|
+ keys.map(key => {
|
|
|
|
+ let { value: batchid } = this.proAffix(key);
|
|
|
|
+ let carnum = Math.ceil(i[key] / carpnum);
|
|
|
|
+ i[this.proAffix(batchid, 'car_total')] = carnum;
|
|
|
|
+ });
|
|
|
|
+ return i;
|
|
});
|
|
});
|
|
- school = school.filter(f => _.get(f, 'carTerm.length', 0) > 0);
|
|
|
|
- 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;
|
|
|
|
|
|
+ this.$set(this, `list`, list);
|
|
},
|
|
},
|
|
//分配重置
|
|
//分配重置
|
|
async toReset() {
|
|
async toReset() {
|
|
this.getBatchList();
|
|
this.getBatchList();
|
|
let list = this.list.map(i => {
|
|
let list = this.list.map(i => {
|
|
- let arr = ['address', 'code', 'daterange', 'hascar', 'level', 'name', 'shortname', 'number', 'plan'];
|
|
|
|
|
|
+ let arr = ['address', 'code', 'daterange', 'hascar', 'level', 'name', 'shortname', 'number', 'plan', 'cynum', 'jynum', 'mznum'];
|
|
let object = _.pick(i, arr);
|
|
let object = _.pick(i, arr);
|
|
object.remaining = object.number * 1;
|
|
object.remaining = object.number * 1;
|
|
return object;
|
|
return object;
|
|
});
|
|
});
|
|
this.$set(this, `list`, list);
|
|
this.$set(this, `list`, list);
|
|
},
|
|
},
|
|
- //将分配为0的数据清除
|
|
|
|
- listClear() {
|
|
|
|
- let list = this.list.map(i => {
|
|
|
|
- let keys = Object.keys(i).filter(f => _.startsWith(f, 'term'));
|
|
|
|
- for (const key of keys) {
|
|
|
|
- if (i[key] == 0) {
|
|
|
|
- delete i[key];
|
|
|
|
- delete i[`id_${key}`];
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return i;
|
|
|
|
- });
|
|
|
|
- this.$set(this, `list`, list);
|
|
|
|
- },
|
|
|
|
//抽屉名额响应式计算
|
|
//抽屉名额响应式计算
|
|
- dComputed(cv, ov) {
|
|
|
|
- let sch = this.form.sch;
|
|
|
|
- let term = this.form.term;
|
|
|
|
- let keys = Object.keys(sch)
|
|
|
|
- .filter(f => _.startsWith(f, 'term'))
|
|
|
|
- .filter(f => f != `term${term.term}`);
|
|
|
|
- let sr = keys.reduce((prev, next) => prev - sch[next], sch.number) - cv;
|
|
|
|
- let tr = this.list.reduce((prev, next) => {
|
|
|
|
- if (next.code != sch.code) return prev - (next[`term${term.term}`] * 1 || 0);
|
|
|
|
- else return prev;
|
|
|
|
- }, term.tpt);
|
|
|
|
- tr = tr - cv;
|
|
|
|
- this.$set(this.form.sch, `remaining`, sr);
|
|
|
|
- this.$set(this.form.term, `remaining`, tr);
|
|
|
|
|
|
+ dComputed(cv = 0, ov = 0) {
|
|
|
|
+ let sr = _.get(this.form.sch, 'remaining');
|
|
|
|
+ let pr = _.get(this.form.info, 'remaining');
|
|
|
|
+ let remainder = cv - ov;
|
|
|
|
+ // console.log(cv, ov, remainder, sr, pr);
|
|
|
|
+ this.$set(this.form.sch, `remaining`, sr - remainder);
|
|
|
|
+ this.$set(this.form.info, `remaining`, pr - remainder);
|
|
},
|
|
},
|
|
//计算抽屉最大值
|
|
//计算抽屉最大值
|
|
dGetMax(data) {
|
|
dGetMax(data) {
|
|
if (!this.drawer) return 0;
|
|
if (!this.drawer) return 0;
|
|
|
|
+ // console.log(data);
|
|
|
|
+ let { num = 0, info, sch } = data;
|
|
|
|
+ let { remaining: pl, bpt, _id: batchid } = info; //批次限制,批次总限制,批次id
|
|
|
|
+ let { remaining: sl, number: spt, code } = sch; ////学校限制
|
|
|
|
+ // console.log(pl, sl);
|
|
let res = 0;
|
|
let res = 0;
|
|
- let t = this.termList.find(f => f.termid == this.form.term.termid);
|
|
|
|
- let sch = this.list.find(f => f.code == this.form.sch.code);
|
|
|
|
- let s = _.get(data, 'sch');
|
|
|
|
- let tr = _.get(data, 'term.remaining', 0) * 1;
|
|
|
|
- let sr = _.get(data, 'sch.remaining', 0) * 1;
|
|
|
|
- let num = this.form.num;
|
|
|
|
- if (s.remaining == 0) return num;
|
|
|
|
- if (tr > sr) {
|
|
|
|
- res = sch.number * 1 || 0;
|
|
|
|
- } else if (tr == sr) {
|
|
|
|
- let keys = Object.keys(s)
|
|
|
|
- .filter(f => _.startsWith(f, 'term'))
|
|
|
|
- .filter(f => f != `term${t.term}`);
|
|
|
|
- let nsr = keys.reduce((prev, next) => prev - s[next], s.number);
|
|
|
|
- res = nsr;
|
|
|
|
- } else {
|
|
|
|
- res = t.tpt * 1 - t.total * 1 || 0;
|
|
|
|
|
|
+ //如果学校没有名额了,那么数字框内的最大值就是当前的值
|
|
|
|
+ if (sl == 0) {
|
|
|
|
+ console.log('学校名额没了');
|
|
|
|
+ res = num;
|
|
}
|
|
}
|
|
- return res * 1;
|
|
|
|
|
|
+ //根据这个表来看,2中算法
|
|
|
|
+ // 1) 纵向计算(按批次算) 批次总限制 - 这批次 除了这个学校外 所有学校分配的人数之和
|
|
|
|
+ // 2) 横向计算(按学校算) 学校总限制 - 这个学校 除了当前批次外 所有批次的分配的人数之和
|
|
|
|
+ //如果批次限制 大于 学校限制:那么最大值 = 横向计算结果
|
|
|
|
+ if (pl > sl) {
|
|
|
|
+ let keys = Object.keys(sch).filter(f => f.includes('batch_total') && f != this.proAffix(batchid, 'batch_total'));
|
|
|
|
+ let obj = _.pick(sch, keys);
|
|
|
|
+ let ot = Object.values(obj).reduce((prev, next) => prev + next * 1, 0);
|
|
|
|
+ res = spt * 1 - ot || 0;
|
|
|
|
+ }
|
|
|
|
+ //如果批次限制 小于等于 学校限制:那么最大值 = 批次总限制 - 纵向计算结果
|
|
|
|
+ if (pl <= sl) {
|
|
|
|
+ let bTotal = this.list.reduce((prev, next) => {
|
|
|
|
+ let num = 0;
|
|
|
|
+ if (next.code != code) {
|
|
|
|
+ num = next[this.proAffix(batchid, 'batch_total')] * 1 || 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return prev + num;
|
|
|
|
+ }, 0);
|
|
|
|
+ res = bpt - bTotal;
|
|
|
|
+ }
|
|
|
|
+ return res;
|
|
},
|
|
},
|
|
//关闭抽屉
|
|
//关闭抽屉
|
|
toClose() {
|
|
toClose() {
|
|
@@ -684,6 +546,10 @@ export default {
|
|
await this.getSchool();
|
|
await this.getSchool();
|
|
},
|
|
},
|
|
//batch分离与拼接
|
|
//batch分离与拼接
|
|
|
|
+ /**
|
|
|
|
+ * value 拼接标识值
|
|
|
|
+ * affix 拼接词缀
|
|
|
|
+ */
|
|
proAffix(value, affix) {
|
|
proAffix(value, affix) {
|
|
if (affix) return `${affix}-${value}`;
|
|
if (affix) return `${affix}-${value}`;
|
|
else {
|
|
else {
|