diff --git a/src/views/report/project/components/equipmentsEdit.vue b/src/views/report/project/components/equipmentsEdit.vue index 3903b6b2bc4091e1aaecaa2c288141961c117ad0..e922e0bc051cd3ea462b6f8ce520d419ea83a9d6 100644 --- a/src/views/report/project/components/equipmentsEdit.vue +++ b/src/views/report/project/components/equipmentsEdit.vue @@ -7,14 +7,285 @@ </div> </a-col> </a-row> + <a-row type="flex" class="item_inner"> + <a-col :span="1" class="bg-gray"> + <div class="special-middle"> + <div>序号</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>设备名称</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>功能和技术指标</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>单价(万元/套台)</div> + </div> + </a-col> + <a-col :span="1" class="bg-gray"> + <div class="special-middle"> + <div>数量(套台)</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>金额(万元)</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>购置单位</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>存放单位(地点)</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>设备类型</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>主要生产<br />厂家及国别</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>规格型号</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>拟开发共享范围</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>购置必要性及<br />对项目研究的<br />作用和用途</div> + </div> + </a-col> + </a-row> + <a-row v-for="(item, index) in equipments" :key="'equipments' + index" type="flex" class="item_inner"> + <a-col :span="1"> + <div class="special-middle"><a-button icon="close" type="primary" shape="circle" size="small" @click="deleteEquipment(item)"></a-button> {{ index + 1 }}</div> + </a-col> + <a-col :span="2"> + <a-form-model-item :prop="'equipments.' + index + '.name'" :rules="{required: true, message: '*', trigger: 'blur',}"> + <a-input v-model="item.name" :maxLength="100" style="width: 90%;" /> + </a-form-model-item> + </a-col> + <a-col :span="2"> + <a-form-model-item :prop="'equipments.' + index + '.functionTarget'" :rules="{required: true, message: '*', trigger: 'blur',}"> + <a-input v-model="item.functionTarget" :maxLength="200" style="width: 90%;" /> + </a-form-model-item> + </a-col> + <a-col :span="2"> + <a-form-model-item :prop="'equipments.' + index + '.unitPrice'" :rules="{required: true, message: '*', trigger: 'blur',}"> + <a-input-number v-model="item.unitPrice" @change="outUnitPriceChange(index)" :min="0" :step="0.01" style="width: 80%" /> + </a-form-model-item> + </a-col> + <a-col :span="1"> + <a-form-model-item :prop="'equipments.' + index + '.quantity'" :rules="{required: true, message: '*', trigger: 'blur',}"> + <a-input-number v-model="item.quantity" @change="outNumberChange(index)" :min="1" :step="1" style="width: 80%" /> + </a-form-model-item> + </a-col> + <a-col :span="2"> + <div class="special-middle"> + <div>{{ parseFloat(item.totalBudget).toFixed(2) }}</div> + </div> + </a-col> + <a-col :span="2"> + <a-form-model-item :prop="'equipments.' + index + '.buyUnit'" :rules="{required: true, message: '*', trigger: 'blur',}"> + <a-input v-model="item.buyUnit" :maxLength="100" style="width: 90%;" /> + </a-form-model-item> + </a-col> + <a-col :span="2"> + <a-form-model-item :prop="'equipments.' + index + '.storageLocation'" :rules="{required: true, message: '*', trigger: 'blur',}"> + <a-input v-model="item.storageLocation" :maxLength="200" style="width: 90%;" /> + </a-form-model-item> + </a-col> + <a-col :span="2"> + <a-form-model-item :prop="'equipments.' + index + '.equipmentType'" :rules="{required: true, message: '*', trigger: 'blur',}"> + <a-input v-model="item.equipmentType" :maxLength="100" style="width: 90%;" /> + </a-form-model-item> + </a-col> + <a-col :span="2"> + <a-form-model-item :prop="'equipments.' + index + '.manufacturer'" :rules="{required: true, message: '*', trigger: 'blur',}"> + <a-input v-model="item.manufacturer" :maxLength="100" style="width: 90%;" /> + </a-form-model-item> + </a-col> + <a-col :span="2"> + <a-form-model-item :prop="'equipments.' + index + '.specificationType'" :rules="{required: true, message: '*', trigger: 'blur',}"> + <a-input v-model="item.specificationType" :maxLength="100" style="width: 90%;" /> + </a-form-model-item> + </a-col> + <a-col :span="2"> + <a-form-model-item :prop="'equipments.' + index + '.sharedScope'" :rules="{required: true, message: '*', trigger: 'blur',}"> + <a-input v-model="item.sharedScope" :maxLength="100" style="width: 90%;" /> + </a-form-model-item> + </a-col> + <a-col :span="2"> + <a-form-model-item :prop="'equipments.' + index + '.useFrom'" :rules="{required: true, message: '*', trigger: 'blur',}"> + <a-input v-model="item.useFrom" :maxLength="200" style="width: 90%;" /> + </a-form-model-item> + </a-col> + </a-row> + + <a-row type="flex" class="item_inner"> + <a-col :span="5"> + <div class="special-middle"><div>单价50万元及以上购置设备合计</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="1"> + <div class="special-middle"><div>{{ fiftyUpNumber }}</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>{{ parseFloat(fiftyUpAmount).toFixed(2) }}</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + </a-row> + <a-row type="flex" class="item_inner"> + <a-col :span="5"> + <div class="special-middle"><div>单价50万元以下购置设备合计</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="1"> + <div class="special-middle"><div>{{ fiftyDownNumber }}</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>{{ parseFloat(fiftyDownAmount).toFixed(2) }}</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + </a-row> + <a-row type="flex" class="item_inner"> + <a-col :span="5"> + <div class="special-middle"><div>累计</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="1"> + <div class="special-middle"><div>{{ totalNumber }}</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>{{ parseFloat(totalAmount).toFixed(2) }}</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="24" style="text-align: center"> + <div class="special-middle"> + <a-button type="dashed" style="width: 20%" @click="addArrey()"> + <a-icon type="plus" /> 添加 <span style="color:red;margin-left:10px"></span> + </a-button> + </div> + </a-col> + </a-row> </div> </template> <script> +const Equipment = { + id: "", + objectId: "", + name: "", + functionTarget: "", + specificationType: "", + quantity: 1, + totalBudget: 0.00, + useFrom: "", + buyUnit: "", + storageLocation: "", + equipmentType: "", + manufacturer: "", + sharedScope: "", + unitPrice: 0.00, +}; + export default { name: "EquipmentEdit", data() { - return {}; + return { + fiftyUpNumber: 0, + fiftyUpAmount: 0.00, + fiftyDownNumber: 0, + fiftyDownAmount: 0.00, + totalNumber: 0, + totalAmount: 0.00, + }; }, props: { equipments: { @@ -24,6 +295,45 @@ export default { }, }, }, - methods: {}, + created () { + }, + methods: { + calNumberAmount() { + this.fiftyUpAmount = 0.00 + this.fiftyDownAmount = 0.00 + this.fiftyUpNumber = 0 + this.fiftyDownNumber = 0 + this.equipments.forEach(e => { + if (e.unitPrice >= 50) { + this.fiftyUpAmount += e.unitPrice * e.quantity + this.fiftyUpNumber += e.quantity + } else { + this.fiftyDownAmount += e.unitPrice * e.quantity + this.fiftyDownNumber += e.quantity + } + }) + this.totalNumber = this.fiftyUpNumber + this.fiftyDownNumber + this.totalAmount = this.fiftyUpAmount + this.fiftyDownAmount + }, + outUnitPriceChange(index) { + this.equipments[index].totalBudget = this.equipments[index].unitPrice * this.equipments[index].quantity + this.calNumberAmount() + }, + outNumberChange(index) { + this.equipments[index].totalBudget = this.equipments[index].unitPrice * this.equipments[index].quantity + this.calNumberAmount() + }, + addArrey() { + this.equipments.push(Object.assign({ ...Equipment })) + this.calNumberAmount() + }, + deleteEquipment(item) { + let index = this.equipments.indexOf(item) + if (index !== -1) { + this.equipments.splice(index, 1) + } + this.calNumberAmount() + }, + }, }; </script> \ No newline at end of file diff --git a/src/views/report/project/components/equipmentsInfo.vue b/src/views/report/project/components/equipmentsInfo.vue index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9b99eedd6ede7108e11e234ba106f08634a75f27 100644 --- a/src/views/report/project/components/equipmentsInfo.vue +++ b/src/views/report/project/components/equipmentsInfo.vue @@ -0,0 +1,295 @@ +<template> + <div> + <a-row type="flex" class="item_inner"> + <a-col :span="24" class="bg-gray"> + <div class="special-middle"> + <div>设备费-购置设备预算明细表</div> + </div> + </a-col> + </a-row> + <a-row type="flex" class="item_inner"> + <a-col :span="1" class="bg-gray"> + <div class="special-middle"> + <div>序号</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>设备名称</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>功能和技术指标</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>单价(万元/套台)</div> + </div> + </a-col> + <a-col :span="1" class="bg-gray"> + <div class="special-middle"> + <div>数量(套台)</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>金额(万元)</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>购置单位</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>存放单位(地点)</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>设备类型</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>主要生产<br />厂家及国别</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>规格型号</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>拟开发共享范围</div> + </div> + </a-col> + <a-col :span="2" class="bg-gray"> + <div class="special-middle"> + <div>购置必要性及<br />对项目研究的<br />作用和用途</div> + </div> + </a-col> + </a-row> + <a-row v-for="(item, index) in equipments" :key="'equipments' + index" type="flex" class="item_inner"> + <a-col :span="1"> + <div class="special-middle">{{ index + 1 }}</div> + </a-col> + <a-col :span="2"> + <div class="special-middle">{{ item.name }}</div> + </a-col> + <a-col :span="2"> + <div class="special-middle">{{ item.functionTarget }}</div> + </a-col> + <a-col :span="2"> + <div class="special-middle">{{parseFloat(item.unitPrice).toFixed(2)}}</div> + </a-col> + <a-col :span="1"> + <div class="special-middle">{{ item.quantity }}</div> + </a-col> + <a-col :span="2"> + <div class="special-middle">{{ parseFloat(item.totalBudget).toFixed(2) }}</div> + </a-col> + <a-col :span="2"> + <div class="special-middle">{{ item.buyUnit }}</div> + </a-col> + <a-col :span="2"> + <div class="special-middle">{{ item.storageLocation }}</div> + </a-col> + <a-col :span="2"> + <div class="special-middle">{{ item.equipmentType }}</div> + </a-col> + <a-col :span="2"> + <div class="special-middle">{{ item.manufacturer }}</div> + </a-col> + <a-col :span="2"> + <div class="special-middle">{{ item.specificationType }}</div> + </a-col> + <a-col :span="2"> + <div class="special-middle">{{ item.sharedScope }}</div> + </a-col> + <a-col :span="2"> + <div class="special-middle">{{ item.useFrom }}</div> + </a-col> + </a-row> + + <a-row type="flex" class="item_inner"> + <a-col :span="5"> + <div class="special-middle"><div>单价50万元及以上购置设备合计</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="1"> + <div class="special-middle"><div>{{ fiftyUpNumber }}</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>{{ parseFloat(fiftyUpAmount).toFixed(2) }}</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + </a-row> + <a-row type="flex" class="item_inner"> + <a-col :span="5"> + <div class="special-middle"><div>单价50万元以下购置设备合计</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="1"> + <div class="special-middle"><div>{{ fiftyDownNumber }}</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>{{ parseFloat(fiftyDownAmount).toFixed(2) }}</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + </a-row> + <a-row type="flex" class="item_inner"> + <a-col :span="5"> + <div class="special-middle"><div>累计</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="1"> + <div class="special-middle"><div>{{ totalNumber }}</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>{{ parseFloat(totalAmount).toFixed(2) }}</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + <a-col :span="2"> + <div class="special-middle"><div>/</div></div> + </a-col> + </a-row> + </div> + </template> + + <script> + const Equipment = { + id: "", + objectId: "", + name: "", + functionTarget: "", + specificationType: "", + quantity: 1, + totalBudget: 0.00, + useFrom: "", + buyUnit: "", + storageLocation: "", + equipmentType: "", + manufacturer: "", + sharedScope: "", + unitPrice: 0.00, + }; + + export default { + name: "EquipmentEdit", + data() { + return { + fiftyUpNumber: 0, + fiftyUpAmount: 0.00, + fiftyDownNumber: 0, + fiftyDownAmount: 0.00, + totalNumber: 0, + totalAmount: 0.00, + }; + }, + props: { + equipments: { + type: Array, + default: () => { + return []; + }, + }, + }, + created () { + }, + methods: { + calNumberAmount() { + this.fiftyUpAmount = 0.00 + this.fiftyDownAmount = 0.00 + this.fiftyUpNumber = 0 + this.fiftyDownNumber = 0 + this.equipments.forEach(e => { + if (e.unitPrice >= 50) { + this.fiftyUpAmount += e.unitPrice * e.quantity + this.fiftyUpNumber += e.quantity + } else { + this.fiftyDownAmount += e.unitPrice * e.quantity + this.fiftyDownNumber += e.quantity + } + }) + this.totalNumber = this.fiftyUpNumber + this.fiftyDownNumber + this.totalAmount = this.fiftyUpAmount + this.fiftyDownAmount + }, + outUnitPriceChange(index) { + this.equipments[index].totalBudget = this.equipments[index].unitPrice * this.equipments[index].quantity + this.calNumberAmount() + }, + outNumberChange(index) { + this.equipments[index].totalBudget = this.equipments[index].unitPrice * this.equipments[index].quantity + this.calNumberAmount() + }, + }, + }; + </script> \ No newline at end of file diff --git a/src/views/report/project/components/projectEdit.vue b/src/views/report/project/components/projectEdit.vue index 29070d89dfcb5d4568936914632feef02d11e9e5..c485a55211928b2b052ec9b9e728b26a88a45d5f 100644 --- a/src/views/report/project/components/projectEdit.vue +++ b/src/views/report/project/components/projectEdit.vue @@ -793,8 +793,8 @@ export default { this.formData.cooperativeUnits = [{ ...Cooperative }] if (!!!this.formData.members || this.formData.members.length == 0) this.formData.members = [{ ...Members }] - if (!!!this.formData.equipments || this.formData.equipments.length == 0) - this.formData.equipments = [{ ...Equipments }] + if (!!!this.formData.equipments || !this.formData.equipments.length || this.formData.equipments.length == 0) + this.formData.equipments = [] if (!!!!this.formData.fileList || !this.formData.fileList.length || this.formData.fileList.length == 0) { this.formData.fileList = [] }