JNDemo/target/classes/templates/jnquotation/index.html

774 lines
40 KiB
HTML
Raw Normal View History

2024-02-26 08:31:53 +08:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>报价</title>
<meta name="author" content="JIAL">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta name="HandheldFriendly" content="true">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<link rel="icon" href="/static/image/JNlogo.png" type="image/x-icon">
<link rel="stylesheet" href="/plugins/element-ui/index.css">
<!-- import CSS -->
<link rel="stylesheet" href="/static/jnquotation/css/index.css">
</head>
<body>
<div class="container" id="index-app">
<div class="center-container">
2024-02-28 15:01:49 +08:00
<el-form label-width="45%" :model="formLabelAlign" class="form-box">
<el-collapse v-model="activeNames">
<el-collapse-item title="财务费用明细" name="1" >
<div class="collapse-box">
<el-row>
<el-col :span="6">
<el-form-item label="办公费" title="办公费" >
<el-input v-model="formLabelAlign.officeExpense" placeholder="办公费"
@blur="validateAndSetDefault(formLabelAlign, 'officeExpense')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col >
<el-col :span="6">
<el-form-item label="差旅费" title="差旅费">
<el-input v-model="formLabelAlign.travelExpense" placeholder="差旅费"
@blur="validateAndSetDefault(formLabelAlign, 'travelExpense')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="工资及福利保险" title="工资及福利保险">
<el-input v-model="formLabelAlign.salaryInsur" placeholder="工资及福利保险"
@blur="validateAndSetDefault(formLabelAlign, 'salaryInsur')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="其他管理费" title="其他管理费">
<el-input v-model="formLabelAlign.otherMgmtExpense" placeholder="其他管理费"
@blur="validateAndSetDefault(formLabelAlign, 'otherMgmtExpense')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="汽车费用" title="汽车费用">
<el-input v-model="formLabelAlign.carExpense" placeholder="汽车费用"
@blur="validateAndSetDefault(formLabelAlign, 'carExpense')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col >
<el-col :span="6">
<el-form-item label="管理-业务招待费" title="管理-业务招待费">
<el-input v-model="formLabelAlign.mgmtBizEntFee" placeholder="管理-业务招待费"
@blur="validateAndSetDefault(formLabelAlign, 'mgmtBizEntFee')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="管理-折旧费" title="管理-折旧费">
<el-input v-model="formLabelAlign.mgmtDeprecExpense" placeholder="管理-折旧费"
@blur="validateAndSetDefault(formLabelAlign, 'mgmtDeprecExpense')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="咨询与审计费" title="咨询与审计费">
<el-input v-model="formLabelAlign.consultAuditFee" placeholder="咨询与审计费"
@blur="validateAndSetDefault(formLabelAlign, 'consultAuditFee')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="标书费用" title="标书费用">
<el-input v-model="formLabelAlign.tenderCost" placeholder="标书费用"
@blur="validateAndSetDefault(formLabelAlign, 'tenderCost')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="房租费" title="房租费">
<el-input v-model="formLabelAlign.rentExpense" placeholder="房租费"
@blur="validateAndSetDefault(formLabelAlign, 'rentExpense')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="工资" title="工资">
<el-input v-model="formLabelAlign.salary" placeholder="工资"
@blur="validateAndSetDefault(formLabelAlign, 'salary')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6" >
<el-form-item label="检验检查费">
<el-input v-model="formLabelAlign.inspectFee" placeholder="检验检查费"
@blur="validateAndSetDefault(formLabelAlign, 'inspectFee')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="销售-交通与差旅费" title="交通与差旅费">
<el-input v-model="formLabelAlign.transTravelExpense" placeholder="交通与差旅费"
@blur="validateAndSetDefault(formLabelAlign, 'transTravelExpense')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6" >
<el-form-item label="其他销售费" title="其他销售费">
<el-input v-model="formLabelAlign.otherSalesExpense" placeholder="其他销售费"
@blur="validateAndSetDefault(formLabelAlign, 'otherSalesExpense')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="投标费用" title="投标费用">
<el-input v-model="formLabelAlign.biddingCost" placeholder="投标费用"
@blur="validateAndSetDefault(formLabelAlign, 'biddingCost')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6" >
<el-form-item label="销售-业务费" title="销售-业务费">
<el-input v-model="formLabelAlign.bizFee" placeholder="销售-业务费"
@blur="validateAndSetDefault(formLabelAlign, 'bizFee')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6" >
<el-form-item label="销售-业务招待费" title="销售-业务招待费">
<el-input v-model="formLabelAlign.salesBizEntFee" placeholder="销售-业务招待费"
@blur="validateAndSetDefault(formLabelAlign, 'salesBizEntFee')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="运输装卸费" title="运输装卸费">
<el-input v-model="formLabelAlign.transpHandlingFee" placeholder="运输装卸费"
@blur="validateAndSetDefault(formLabelAlign, 'transpHandlingFee')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6" >
<el-form-item label="制造-折旧费" title="制造-折旧费">
<el-input v-model="formLabelAlign.manufDeprecExpense" placeholder="制造-折旧费"
@blur="validateAndSetDefault(formLabelAlign, 'manufDeprecExpense')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="利息支出" title="利息支出">
<el-input v-model="formLabelAlign.interestExpense" placeholder="利息支出"
@blur="validateAndSetDefault(formLabelAlign, 'interestExpense')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6" >
<el-form-item label="手续费" title="手续费">
<el-input v-model="formLabelAlign.handlingFee" placeholder="手续费"
@blur="validateAndSetDefault(formLabelAlign, 'handlingFee')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="贴现利息" title="贴现利息">
<el-input v-model="formLabelAlign.discInterest" placeholder="贴现利息"
@blur="validateAndSetDefault(formLabelAlign, 'discInterest')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6" >
<el-form-item label="财务-其他费用" title="财务-其他费用">
<el-input v-model="formLabelAlign.otherFinExpenses" placeholder="财务-其他费用"
@blur="validateAndSetDefault(formLabelAlign, 'otherFinExpenses')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="存货机会成本" title="存货机会成本">
<el-input v-model="formLabelAlign.invOpCost" placeholder="存货机会成本"
@blur="validateAndSetDefault(formLabelAlign, 'invOpCost')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="税金" title="税金">
<el-input v-model="formLabelAlign.tax" placeholder="税金"
@blur="validateAndSetDefault(formLabelAlign, 'tax')">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
</div>
</el-collapse-item>
<el-collapse-item title="财务费用合计" name="2">
<el-row class="collapse-box">
<el-col :span="6">
<el-form-item label="财务费用合计" title="财务费用合计">
<el-input v-model="formLabelAlign.totalFinExpenses" placeholder="财务费用合计">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6" >
<el-form-item label="厂价金额合计" title="厂价金额合计">
<el-input v-model="formLabelAlign.totalFactoryAmount" placeholder="厂价金额合计">
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6" >
<el-form-item label="实际金额合计" title="实际金额合计">
<el-input v-model="formLabelAlign.totalActualAmount" placeholder="实际金额合计">
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</el-form>
2024-02-26 08:31:53 +08:00
<div class="button-box">
<el-button type="text" @click="addMaterial">添加物料</el-button>
2024-02-28 15:01:49 +08:00
<el-button type="text" @click="calculatedData">计算数据</el-button>
2024-02-26 08:31:53 +08:00
</div>
<div class="table-box">
<el-table
:data="materialData"
border
:cell-style="cellStyle"
:header-cell-style="{ background: '#eef1f6', color: '#606266', 'text-align': 'center' }">
<el-table-column
fixed
label="编号"
type="index"
width="50">
</el-table-column>
<el-table-column
width="180"
2024-02-28 15:01:49 +08:00
prop="prodCategory"
label="产品大类">
2024-02-26 08:31:53 +08:00
</el-table-column>
<el-table-column
width="120"
2024-02-28 15:01:49 +08:00
prop="model"
label="型号">
2024-02-26 08:31:53 +08:00
</el-table-column>
<el-table-column
2024-02-28 15:01:49 +08:00
width="180"
prop="specification"
label="规格">
2024-02-26 08:31:53 +08:00
</el-table-column>
<el-table-column
width="180"
2024-02-28 15:01:49 +08:00
prop="voltLevel"
label="电压等级">
2024-02-26 08:31:53 +08:00
</el-table-column>
<el-table-column
width="180"
2024-02-28 15:01:49 +08:00
prop="measureUnit"
label="单位">
2024-02-26 08:31:53 +08:00
</el-table-column>
<el-table-column
2024-02-28 15:01:49 +08:00
width="180"
prop="matCostPrice"
label="材料成本价格">
2024-02-26 08:31:53 +08:00
</el-table-column>
<el-table-column
2024-02-28 15:01:49 +08:00
width="180"
prop="redBookPrice"
label="红本价格">
</el-table-column>
<el-table-column
width="180"
prop="redBookCost"
label="红本成本">
</el-table-column>
<el-table-column
width="180"
prop="rbFacPrice"
label="红本厂价">
</el-table-column>
<el-table-column
width="180"
prop="number"
label="数量">
2024-02-26 08:31:53 +08:00
<template slot-scope="scope">
2024-02-28 15:01:49 +08:00
<el-input v-model="scope.row.number" @blur="validateNumber(scope.row)">
</el-input>
2024-02-26 08:31:53 +08:00
</template>
</el-table-column>
<el-table-column
width="180"
2024-02-28 15:01:49 +08:00
prop="varRatio"
label="差异比率">
</el-table-column>
<el-table-column
width="180"
prop="wdFSurcharge"
label="盘具运费上浮金额">
2024-02-26 08:31:53 +08:00
<template slot-scope="scope">
2024-02-28 15:01:49 +08:00
<el-input v-model="scope.row.wdFSurcharge" >
<template slot="append"></template>
2024-02-26 08:31:53 +08:00
</el-input>
</template>
</el-table-column>
<el-table-column
2024-02-28 15:01:49 +08:00
width="180"
prop="laborCostFloat"
label="人工成本上浮点数">
<template slot-scope="scope">
<el-input v-model="scope.row.laborCostFloat" >
<template slot="append">%</template>
</el-input>
</template>
2024-02-26 08:31:53 +08:00
</el-table-column>
<el-table-column
width="180"
2024-02-28 15:01:49 +08:00
prop="hydroCostFloat"
label="水电成本上浮点数">
<template slot-scope="scope">
<el-input v-model="scope.row.hydroCostFloat" >
<template slot="append">%</template>
</el-input>
</template>
2024-02-26 08:31:53 +08:00
</el-table-column>
<el-table-column
fixed="right"
width="120"
prop="totalCost"
label="总成本">
</el-table-column>
<el-table-column
fixed="right"
width="120"
prop="totalFacPrice"
label="总厂价">
</el-table-column>
<el-table-column
fixed="right"
width="80"
label="操作">
<template slot-scope="scope">
<el-button @click="handleDeleteClick(scope.$index)" style="color: red;" type="text">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</div>
2024-02-28 15:01:49 +08:00
<el-dialog class="materialDialogTable" :visible.sync="dialogMaterialVisible" width="1100px">
2024-02-26 08:31:53 +08:00
<div slot="title" style="margin: 0px">
<el-form>
<el-form-item >
<el-input style="width: 200px; " v-model="precMaterialName" placeholder="开头物料名称精确查询">
</el-input>
<el-input style="width: 200px; " v-model="vagueMaterialName" placeholder="物料名称模糊查询">
</el-input>
<el-input style="width: 200px; " v-model="vagueModel" placeholder="规格模糊查询">
</el-input>
<el-button type="primary" size="small" @click="searchMaterial">查询物料</el-button>
</el-form-item>
</el-form>
</div>
<div style="display: flex; flex-direction: row;">
2024-02-28 15:01:49 +08:00
<div style="width: 688px">
2024-02-26 08:31:53 +08:00
<el-table
:data="getCurrentMaterialData"
ref="materialTable"
@selection-change="handleSelectionChange"
:header-cell-style="{ background: '#eef1f6', color: '#606266', 'text-align': 'center', 'padding': '0px'}"
:cell-style="{'text-align': 'center', 'padding': '5px 0px'}"
highlight-selection-row
2024-02-28 15:01:49 +08:00
:row-key="row => row.uid"
2024-02-26 08:31:53 +08:00
:reserve-selection="true"
border>
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column
label="序号"
type="index"
width="50">
</el-table-column>
<el-table-column
2024-02-28 15:01:49 +08:00
width="120"
prop="prodCategory"
label="产品大类">
2024-02-26 08:31:53 +08:00
</el-table-column>
<el-table-column
width="120"
prop="model"
label="型号">
</el-table-column>
<el-table-column
width="120"
prop="specification"
label="规格">
</el-table-column>
<el-table-column
width="120"
2024-02-28 15:01:49 +08:00
prop="voltLevel"
2024-02-26 08:31:53 +08:00
label="电压">
</el-table-column>
<el-table-column
width="100"
2024-02-28 15:01:49 +08:00
prop="measureUnit"
label="单位">
2024-02-26 08:31:53 +08:00
</el-table-column>
</el-table>
<div style="text-align: center; margin-top: 10px;">
<el-pagination
@current-change="handleMaterialCurrentChange"
:current-page.sync="materialCurrentPage"
:page-size="pageSize"
:total="materialTableData.length"
></el-pagination>
</div>
</div>
<div style="flex-grow: 1; padding-left: 20px;">
<div
v-for="(selectedItem, index) in selectedMaterialItems"
:key="index"
class="selected-item"
>
2024-02-28 15:01:49 +08:00
{{ selectedItem.model }} , {{ selectedItem.specification }} , {{ selectedItem.voltLevel }}
2024-02-26 08:31:53 +08:00
<el-button @click="removeSelectedItem(selectedItem)" type="text" class="remove-btn">&#10006;</el-button>
</div>
</div>
</div>
<div style="text-align: center; padding-top: 20px">
<el-button-group>
<el-button type="primary" size="small" style="margin-right: 80px" @click="addMaterialToTable">确认</el-button>
<el-button type="warning" size="small" @click="closeMaterialDialog">取消</el-button>
</el-button-group>
</div>
</el-dialog>
</div>
<script src="/plugins/vue/vue.js"></script>
<script src="/plugins/element-ui/index.js"></script>
<script src="/plugins/calendar/calendar.js"></script>
<script src="/plugins/axios/axios.min.js"></script>
<script src="/plugins/axios/request.js"></script>
<!-- import Script -->
<script src="/static/jnquotation/js/index.js"></script>
<script>
new Vue({
el: '#index-app',
data() {
return {
2024-02-28 15:01:49 +08:00
activeNames: ['2'],
2024-02-26 08:31:53 +08:00
formLabelAlign: {
2024-02-28 15:01:49 +08:00
officeExpense: 0.022,
travelExpense: 0.011,
salaryInsur: 0.394,
otherMgmtExpense: 0.373,
carExpense: 0.010,
mgmtBizEntFee:0.156, //管理-业务招待费
mgmtDeprecExpense: 0.016, //管理-折旧费
consultAuditFee: 0.026, //咨询审计费
tenderCost: 0.023, //标书费用
rentExpense: 0.052, //房租费
salary: 0.239, //工资
inspectFee: 0.016, //检验检测费
transTravelExpense: 0.020, //交通与差旅费
otherSalesExpense: 0.073, //其他销售费
biddingCost: 0.134, //投标费用
bizFee: 1.183, //销售-业务费
salesBizEntFee: 0.098, //销售-业务招待费
transpHandlingFee: 0.621, //运输装卸费
manufDeprecExpense: 0.217, //制造-折旧费
interestExpense: 0.436, //利息支出
handlingFee: 0.108, //手续费
discInterest: 0.363, //贴现利息
otherFinExpenses: 0.197, //财务-其他费用
invOpCost: 0.031, //存货机会成本
tax: 1.5, //税金
totalFinExpenses : 0,
totalFactoryAmount: 0,
totalActualAmount: 0,
2024-02-26 08:31:53 +08:00
},
2024-02-28 15:01:49 +08:00
2024-02-26 08:31:53 +08:00
materialData: [
],
materialCurrentPage: 1,
pageSize: 10,
dialogMaterialVisible: false,
materialTableData: [],
selectedMaterialItems: [], // 选中的数据
savedSelectedMaterials: [], // 保存选中的数据
precMaterialName: '',
vagueMaterialName: '',
vagueModel: '',
2024-02-28 15:01:49 +08:00
validationErrors: [], // 用于存储验证错误信息的数组
2024-02-26 08:31:53 +08:00
}
},
computed: {
getCurrentMaterialData() {
const start = (this.materialCurrentPage - 1) * this.pageSize;
const end = start + this.pageSize;
return this.materialTableData.slice(start, end);
},
},
created() {
2024-02-28 15:01:49 +08:00
this.calculateTotal();
2024-02-26 08:31:53 +08:00
},
2024-02-28 15:01:49 +08:00
2024-02-26 08:31:53 +08:00
mounted() {
},
methods: {
2024-02-28 15:01:49 +08:00
2024-02-26 08:31:53 +08:00
async init () {
},
cellStyle({row, column, rowIndex, columnIndex}) {
if(columnIndex === 0) {
return 'color : black; text-align : center; background : #E0E0E0; padding: 0px';
} else if (columnIndex === 8) {
return 'text-align : center; background : #F5F5F5; padding: 0px';
} else {
return ' text-align : center; padding: 0px';
}
},
2024-02-28 15:01:49 +08:00
calculateTotal() {
this.formLabelAlign.totalFinExpenses =parseFloat(
(
parseFloat(this.formLabelAlign.officeExpense) +
parseFloat(this.formLabelAlign.travelExpense) +
parseFloat(this.formLabelAlign.salaryInsur) +
parseFloat(this.formLabelAlign.otherMgmtExpense) +
parseFloat(this.formLabelAlign.carExpense) +
parseFloat(this.formLabelAlign.mgmtBizEntFee) +
parseFloat(this.formLabelAlign.mgmtDeprecExpense) +
parseFloat(this.formLabelAlign.consultAuditFee) +
parseFloat(this.formLabelAlign.tenderCost) +
parseFloat(this.formLabelAlign.rentExpense) +
parseFloat(this.formLabelAlign.salary) +
parseFloat(this.formLabelAlign.inspectFee) +
parseFloat(this.formLabelAlign.transTravelExpense) +
parseFloat(this.formLabelAlign.otherSalesExpense) +
parseFloat(this.formLabelAlign.biddingCost) +
parseFloat(this.formLabelAlign.bizFee) +
parseFloat(this.formLabelAlign.salesBizEntFee) +
parseFloat(this.formLabelAlign.transpHandlingFee) +
parseFloat(this.formLabelAlign.manufDeprecExpense) +
parseFloat(this.formLabelAlign.interestExpense) +
parseFloat(this.formLabelAlign.handlingFee) +
parseFloat(this.formLabelAlign.discInterest) +
parseFloat(this.formLabelAlign.otherFinExpenses) +
parseFloat(this.formLabelAlign.invOpCost) +
parseFloat(this.formLabelAlign.tax)
).toFixed(2))
},
2024-02-26 08:31:53 +08:00
handleDeleteClick(index){
this.materialData.splice(index, 1)
},
handleMaterialCurrentChange(val) {
this.currentPage = val;
},
addMaterial(){
this.dialogMaterialVisible = true;
},
handleSelectionChange(selection) {
selection.forEach(item => {
// 判断是否已经存在于已选列表中,避免重复添加
2024-02-28 15:01:49 +08:00
if (!this.selectedMaterialItems.some(selectedItem => selectedItem.uid === item.uid)) {
2024-02-26 08:31:53 +08:00
this.selectedMaterialItems.push(item);
}
});
},
removeSelectedItem(selectedItem) {
// 判断当前数据是否被选择
const isSelected = this.$refs.materialTable.selection.includes(selectedItem);
// 从已选列表中移除该项
2024-02-28 15:01:49 +08:00
const index = this.selectedMaterialItems.findIndex(item => item.uid === selectedItem.uid);
2024-02-26 08:31:53 +08:00
if (index !== -1) {
this.selectedMaterialItems.splice(index, 1);
}
// 如果当前数据被选择,则取消 el-table 中该项的选择状态
if (isSelected) {
this.$refs.materialTable.toggleRowSelection(selectedItem, false);
}
},
addMaterialToTable() {
// 将选中的物料信息添加到表格中
this.materialData = this.materialData.concat(this.selectedMaterialItems);
// 清空选中的物料信息
this.selectedMaterialItems = [];
this.$refs.materialTable.clearSelection();
this.dialogMaterialVisible = false;
},
closeMaterialDialog() {
this.dialogMaterialVisible = false;
},
searchMaterial() {
if(this.precMaterialName === '' && this.vagueMaterialName === '' && this.vagueModel === '') {
this.$message({
message: '请输入你要查询的物料条件',
type: 'warning'
});
}else {
const params = {
precMaterialName : this.precMaterialName,
vagueMaterialName : this.vagueMaterialName,
2024-02-28 15:01:49 +08:00
vagueModel : this.vagueModel,
2024-02-26 08:31:53 +08:00
}
queryMaterialListByParam(params).then(res => {
2024-02-28 15:01:49 +08:00
this.materialTableData = res.data || [];
2024-02-26 08:31:53 +08:00
}).catch(err => {
this.$message.error('请求出错了:' + err)
})
}
},
2024-02-28 15:01:49 +08:00
calculatedData() {
/**-------------计算财务总成本---------------**/
this.calculateTotal();
/**----------------------进行盘具、数量、人工、水电三个数值的验证---------------**/
this.validationErrors = []; // 清空之前的错误信息
this.materialData.forEach((row, index) => {
const wdFSurcharge = parseFloat(row.wdFSurcharge) || 0; // 如果为空默认为0
const laborCostFloat = parseFloat(row.laborCostFloat) || 0; // 如果为空默认为0
const hydroCostFloat = parseFloat(row.hydroCostFloat) || 0; // 如果为空默认为0
const quantity = parseFloat(row.number) || 0; // 如果为空默认为0
// 进行数量验证
if (isNaN(quantity) || quantity < 0) {
this.validationErrors.push(`第 ${index + 1} 行数量不符合要求\n`);
}
// 进行盘具运费的验证
if (isNaN(wdFSurcharge) || wdFSurcharge < 0) {
this.validationErrors.push(`第 ${index + 1} 行盘具运费上浮金额不符合要求`);
}
// 进行点数的验证
if (isNaN(laborCostFloat) || laborCostFloat < 0 || laborCostFloat > 100) {
this.validationErrors.push(`第 ${index + 1} 行人工成本上浮点数不符合要求(应在 0 到 100 之间)`);
}
if (isNaN(hydroCostFloat) || hydroCostFloat < 0 || hydroCostFloat > 100) {
this.validationErrors.push(`第 ${index + 1} 行水电成本上浮点数不符合要求(应在 0 到 100 之间)`);
}
});
2024-02-26 08:31:53 +08:00
2024-02-28 15:01:49 +08:00
/**-----------------------验证完成进行运算,验证结果通过才进行计算--------------------------**/
if (this.validationErrors.length === 0) {
// 遍历表格数据进行计算
this.materialData.forEach((row, index) => {
this.validationErrors = []; // 清空之前的错误信息
const redBookFacPrice = parseFloat(row.rbFacPrice);
const materialCost = parseFloat(row.matCostPrice);
const wdFSurcharge = parseFloat(row.wdFSurcharge) || 0; // 如果为空默认为0
const laborCostFloat = parseFloat(row.laborCostFloat) || 0; // 如果为空默认为0
const hydroCostFloat = parseFloat(row.hydroCostFloat) || 0; // 如果为空默认为0
const quantity = parseFloat(row.number) || 0; // 如果为空默认为0
// 进行其他计算
this.$set(this.materialData, index, {
...row,
varRatio: ((redBookFacPrice - materialCost) / redBookFacPrice * 100).toFixed(2),
totalFacPrice: (quantity * redBookFacPrice).toFixed(2),
totalCost: (
(materialCost + wdFSurcharge +
materialCost * (laborCostFloat / 100) + materialCost * (hydroCostFloat / 100)) *
quantity
).toFixed(2),
});
});
} else {
this.$message({
type: 'error',
dangerouslyUseHTMLString: true,
message: this.validationErrors.join('<br>')
});
2024-02-26 08:31:53 +08:00
}
2024-02-26 09:08:47 +08:00
2024-02-28 15:01:49 +08:00
// 计算厂价金额合计
const totalFactoryAmount = this.materialData.reduce((sum, row) => sum + parseFloat(row.totalFacPrice), 0);
this.formLabelAlign.totalFactoryAmount = totalFactoryAmount.toFixed(2);
// 计算实际金额合计
const totalCost = this.materialData.reduce((sum, row) => sum + parseFloat(row.totalCost), 0);
this.formLabelAlign.totalActualAmount = (totalCost + totalCost * (parseFloat(this.formLabelAlign.totalFinExpenses) / 100)).toFixed(2);
},
/**----------------表头表单验证-----------------**/
validateInputRange(value) {
const number = parseFloat(value);
return isNaN(number) || (number >= 0 && number <= 100);
},
validateAndSetDefault(model, field) {
if (!this.validateInputRange(model[field])) {
// 如果验证不通过,设置错误提示
this.$message({
type: 'error',
message: '填写错误范围为0~100'
});
this.$set(model, field, 0);
}
2024-02-26 09:08:47 +08:00
},
2024-02-26 08:31:53 +08:00
},
})
</script>
</body>
</html>