Forráskód Böngészése

量化积分以及其他修改

yuhan 1 éve%!(EXTRA string=óta)
szülő
commit
e317beb9f2

+ 127 - 78
itdmWeb/src/views/module-iTDM/itdmYeWu/itdmGcShishi.vue

@@ -1,90 +1,90 @@
 <template>
   <div class="u-OA-jixiao">
     <div class="head">第三部分 项目过程实施</div>
+    <el-form ref="xnJiesuanForm" :model="stepEdit" :rules="rules">
     <table class="main-table">
-      <tr v-for="(item, index) in stepEdit.assessmentLog" :key="index">
+      <tr v-for="(item, key) in stepEdit.assessmentLog" :key="key">
         <!-- <td :rowspan="12" style="width: 80px">项目成员<br/>考核日志</td> -->
         <td class="title" style="width: 100px;">
-          <div>{{index + 1}}</div>
+          <div>{{key + 1}}</div>
           <input v-model="item.name" style="width: 80px;height: 30px;text-align: center" placeholder="" :disabled="stepParameter.disabled"/>
           <input v-model="item.job" style="width: 80px;height: 30px;text-align: center" placeholder="" :disabled="stepParameter.disabled"/>
         </td>
-        <td class="content" colspan="8">
+        <td class="content" colspan="6">
           <div style="display: flex; align-items: flex-end;">
             <div style="width: 500px;">
-              <div>——★考核结果★——工作质量10×积极性10×工作量{{item.resultData.gongshi * item.resultData.qiangdu}}=得分{{10*10*item.resultData.gongshi * item.resultData.qiangdu}}</div>
-              <table>
-                <thead>
-                  <td style="width: 80px;">序号</td>
-                  <td style="width: 80px;">日期</td>
-                  <td style="width: 80px;">工时</td>
-                  <td style="width: 80px;">强度</td>
-                  <td style="width: 80px;">工作量</td>
-                  <!-- <td style="width: 80px;">告知数</td>
-                  <td style="width: 80px;">差错数</td>
-                  <td style="width: 80px;">催促数</td>
-                  <td style="width: 80px;">警告数</td> -->
-                  <!-- <td style="width: 60px">操作</td> -->
-                </thead>
-                <tr style="height: 30px;">
-                  <td>1</td>
-                  <td><input style="width: 80px;height: 20px;" v-model="item.resultData.date" :disabled="stepParameter.disabled" /></td>
-                  <td><input style="width: 80px;height: 20px;" v-model="item.resultData.gongshi" :disabled="stepParameter.disabled" /></td>
-                  <td><input style="width: 80px;height: 20px;" v-model="item.resultData.qiangdu" :disabled="stepParameter.disabled" /></td>
-                  <td>{{item.resultData.gongshi*item.resultData.qiangdu}}</td>
-                </tr>
-                <!-- <td><input style="width: 80px;" v-model="item.resultData.gaozhiNum" /></td>
-                <td><input style="width: 80px;" v-model="item.resultData.chacuoNum" /></td>
-                <td><input style="width: 80px;" v-model="item.resultData.cuicuNum" /></td>
-                <td><input style="width: 80px;" v-model="item.resultData.jinggaoNum" /></td> -->
-                <!-- <td><div class="delBtn" @click="delRow(index)" v-show="stepEdit.cleanPrice.length >= 2">删除</div></td> -->
-              </table>
+              <div>——★考核结果★——工作质量10×积极性10×工作量{{item.gzlItemTotal}}=得分{{item.itemDefen}}</div>
+              <el-table :data="item.resultData" class="u-dynamic-table" border ref="table" style="width: 800px;">
+                <el-table-column type="index" label="序号" align="center" min-width="60"></el-table-column>
+                <el-table-column prop="date" label="日期" align="center" min-width="120">
+                  <template slot-scope="scope">
+                    <el-input v-model="scope.row.date" placeholder="请输入" :readonly="stepParameter.disabled"/>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="gongshi" label="工时" align="center" min-width="120">
+                  <template slot-scope="scope">
+                    <el-form-item :prop="`assessmentLog[${key}].resultData[${scope.$index}].gongshi`" :rules="rules.gongshi">
+                      <el-input-number v-model="scope.row.gongshi" controls-position="right" @change="handleInputChange(item, key, scope.$index)" :min="0" :readonly="stepParameter.disabled"></el-input-number>
+                    </el-form-item>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="qiangdu" label="强度" align="center" min-width="120">
+                  <template slot-scope="scope">
+                    <el-form-item :prop="`assessmentLog[${key}].resultData[${scope.$index}].qiangdu`" :rules="rules.qiangdu">
+                      <el-input-number v-model="scope.row.qiangdu" controls-position="right" @change="handleInputChange(item, key, scope.$index)" :min="0" :readonly="stepParameter.disabled"></el-input-number>
+                    </el-form-item>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="gzliang" label="工作量" align="center" min-width="120"></el-table-column>
+              </el-table>
             </div>
-            <div v-if="index !== 0" class="addRow" @click="delRow(index)" :style="{'pointer-events':stepParameter.disabled?'none':'auto'}">删除</div>
-            <div v-if="index === stepEdit.assessmentLog.length - 1" class="addRow" @click="addRow" :style="{'pointer-events':stepParameter.disabled?'none':'auto'}">添加</div>
+            <el-button v-if="key !== 0" class="addRow" @click="delPersonRow(key)" :disabled='stepParameter.disabled'>删除</el-button>
+            <el-button v-if="key === stepEdit.assessmentLog.length - 1" class="addRow" @click="addPersonRow" :disabled='stepParameter.disabled'>添加</el-button>
           </div>
         </td>
-        <!-- <td class="content" style="width: 100px">量化积分</td> -->
+        <td class="content" colspan="2" style="width: 200px;font-weight: bold;color: #e52727;font-size: 15px;">★量化积分—{{ item.lhJifen }}</td>
       </tr>
       <tr>
         <td class="title" style="width: 100px;">非考核<br/>支持人员</td>
         <td class="content" colspan="4">
-          <el-table :data="stepEdit.feikaohePersons" class="u-dynamic-table" style="width: 100%" border>
-            <el-table-column type="index" label="序号" min-width="50" align="center"></el-table-column>
-            <el-table-column prop="person" label="人员" min-width="60" align="center">
-              <template slot-scope="scope">
-                <el-input v-model="scope.row.person" placeholder="请输入" :readonly="stepParameter.disabled"/>
-              </template>
-            </el-table-column>
-            <el-table-column prop="content" label="支持内容" min-width="80" align="center">
-              <template slot-scope="scope">
-                <el-input v-model="scope.row.content" placeholder="请输入" :readonly="stepParameter.disabled"/>
-              </template>
-            </el-table-column>
-            <el-table-column prop="time" label="支持工时" min-width="80" align="center">
-              <template slot-scope="scope">
-                <el-input v-model="scope.row.time" placeholder="请输入" :readonly="stepParameter.disabled"/>
-              </template>
-            </el-table-column>
-            <el-table-column prop="remark" label="备注" min-width="80" align="center">
-              <template slot-scope="scope">
-                <el-input v-model="scope.row.remark" placeholder="请输入" :readonly="stepParameter.disabled"/>
-              </template>
-            </el-table-column>
-            <el-table-column label="操作" min-width="100" align="center">
-              <template slot-scope="scope">
-                <el-button type="text" size="small" @click="stepEdit.feikaohePersons.splice(scope.$index, 1)" :style="{'pointer-events':stepParameter.disabled?'none':'auto'}">删除</el-button>
-              </template>
-            </el-table-column>
-          </el-table>
-          <div @click="stepEdit.feikaohePersons.push({})">添加</div>
+          <div style="display: flex;align-items: flex-end;">
+            <el-table :data="stepEdit.feikaohePersons" class="u-dynamic-table" style="width: 90%" border>
+              <el-table-column type="index" label="序号" min-width="50" align="center"></el-table-column>
+              <el-table-column prop="person" label="人员" min-width="60" align="center">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.person" placeholder="请输入" :readonly="stepParameter.disabled"/>
+                </template>
+              </el-table-column>
+              <el-table-column prop="content" label="支持内容" min-width="80" align="center">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.content" placeholder="请输入" :readonly="stepParameter.disabled"/>
+                </template>
+              </el-table-column>
+              <el-table-column prop="time" label="支持工时" min-width="80" align="center">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.time" placeholder="请输入" :readonly="stepParameter.disabled"/>
+                </template>
+              </el-table-column>
+              <el-table-column prop="remark" label="备注" min-width="80" align="center">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.remark" placeholder="请输入" :readonly="stepParameter.disabled"/>
+                </template>
+              </el-table-column>
+              <el-table-column label="操作" min-width="100" align="center">
+                <template slot-scope="scope">
+                  <el-button type="text" size="small" @click="stepEdit.feikaohePersons.splice(scope.$index, 1)" :disabled="stepParameter.disabled">删除</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+            <el-button class="addRow" @click="stepEdit.feikaohePersons.push({})" :disabled='stepParameter.disabled'>添加</el-button>
+          </div>
         </td>
         <td class="title white" style="width: 100px;">项目成员<br/>考核汇总</td>
         <td class="content" colspan="3">
           <span>工时:{{ zongGongshi }}</span>
           <span>强度:{{ zongQiangdu }}</span>
           <span>工作量:{{ zongGongzuoliang }}</span>
-          <span>总得分:{{ zongFen }}</span>
+          <span>总得分:{{ stepEdit.zongfen }}</span>
         </td>
       </tr>
       <tr>
@@ -102,6 +102,7 @@
         </td>
       </tr>
     </table>
+    </el-form>
   </div>
 </template>
 
@@ -118,30 +119,51 @@ export default {
   },
   data() {
     return {
+      // 第三部分所需步骤参数
       stepParameter: {
         disabled: true,
         fqUserName: null,
         shenheTime: null,
       },
       stepEdit: {
+        // 考核人员量化积分情况
         assessmentLog: [
-          { name: '', job: '', resultData: {gongshi: 0, qiangdu: 0} }
+          { 
+            name: '',
+            job: '',
+            gzlItemTotal: 0, // 每个人的工作量和
+            itemDefen: 0, // 每个人的得分和
+            lhJifen: 0, // 每个人的量化积分
+            resultData: [{gongshi: 0, qiangdu: 0, gzliang: 0}], // 每个人单条工作量(目前只设置一条不能增)
+          }
         ],
-        feikaohePersons: [],
-        isApply: 0,
+        zongfen: 0, // 所有人的总分(该项目的总分)
+        feikaohePersons: [], // 非考核支持人员
+        isApply: 0, // 是否申请完工
       },
+      rules: {
+        gongshi: [
+          { required: true, message: "不能为空", trigger: "change" }
+        ],
+        qiangdu: [
+          { required: true, message: "不能为空", trigger: "change" }
+        ],
+      },
+      // 绩效总额(第一步之后按照第五步显示的计算的绩效总额)
+      xnJixiaoZonge: 0,
     }
   },
   watch: {
     tableData3: {
       handler(newV, oldV){
-        if(newV && newV[0]){
+        if(newV && newV[1]){
           console.log(newV)
-          var arrData = newV[0]
+          var arrData = newV[1]
           this.stepEdit = arrData.saveData ? JSON.parse(arrData.saveData) : this.stepEdit
           this.stepParameter = arrData
           this.stepParameter.disabled = !(arrData.dangqian && arrData.isUpdate)
           console.log(this.stepParameter)
+          this.xnJixiaoZonge = JSON.parse(newV[0].saveData).xnJixiaoZonge
         }
       },
       // deep: true,
@@ -209,12 +231,44 @@ export default {
     console.log(33333,this.tableData3)
   },
   methods: {
-    addRow(){
-      this.stepEdit.assessmentLog.push({ name: '', job: '', resultData: {gongshi: 0, qiangdu: 0} })
+    // 添加一行考核人员及其绩效
+    addPersonRow(){
+      this.stepEdit.assessmentLog.push({
+        name: '',
+        job: '',
+        gzlItemTotal: 0,
+        itemDefen: 0,
+        lhJifen: 0,
+        resultData: [{gongshi: 0, qiangdu: 0, gzliang: 0}] })
+    },
+    // 删除当前考核人员及其绩效
+    delPersonRow(key){
+      this.stepEdit.assessmentLog.splice(key, 1)
     },
-    delRow(index){
-      this.stepEdit.assessmentLog.splice(index, 1)
+    // 当工时或强度改变时,计算工作量和量化积分
+    handleInputChange(item, key, index){
+      // 计算当前人员当前行工作量
+      var gzliang = item.resultData[index].gongshi * item.resultData[index].qiangdu
+      this.stepEdit.assessmentLog[key].resultData[index].gzliang = gzliang
+      // 计算当前人员工作量(现在是只有一行,即只有一个工作量,万一以后有多个工作量需要求和,如下)
+      var gzlItemTotal = this.stepEdit.assessmentLog[key].resultData.reduce((old, now) => {
+        console.log(old, now)
+        return old + now.gzliang
+      }, 0)
+      this.stepEdit.assessmentLog[key].gzlItemTotal = gzlItemTotal
+      // 计算当前人员个人得分和
+      this.stepEdit.assessmentLog[key].itemDefen = 10 * 10 * gzlItemTotal
+      // 计算总分
+      this.stepEdit.zongfen = this.stepEdit.assessmentLog.reduce((old, now) => {
+        return old + now.itemDefen
+      }, 0)
+      // 计算量化积分
+      this.stepEdit.assessmentLog.forEach(res => {
+        res.lhJifen = ((res.itemDefen / this.stepEdit.zongfen) * this.xnJixiaoZonge).toFixed(2)
+      })
+      console.log(this.stepEdit.assessmentLog)
     },
+
     submitData() {
       var saveData = {
         runFlowPathStep: this.stepParameter.id,
@@ -254,15 +308,10 @@ tr {
   font-weight: bold;
 }
 .addRow {
-  width: 60px;
-  height: 24px;
-  background-color: #fff;
-  border-radius: 4px;
+  padding: 6px 10px;
   text-align: center;
-  line-height: 24px;
   font-size: 12px;
   margin-left: 20px;
-  cursor: pointer;
 }
 .btn {
   display: inline-block;

+ 264 - 42
itdmWeb/src/views/module-iTDM/itdmYeWu/itdmXmShuru.vue

@@ -14,7 +14,7 @@
         </td>
       </tr>
       <tr>
-        <td class="title">实验信息</td>
+        <td class="title" style="width: 100px;">实验信息</td>
         <td class="content">
           <!-- <input v-model="stepEdit.shiyanXinxi" :disabled="stepParameter.disabled" style="text-align: center" /> -->
           详见委托管理
@@ -113,43 +113,51 @@
         </td>
       </tr>
       <tr>
-        <td class="title">项目<br />虚拟结算额</td>
+        <td class="title" style="width: 100px;">项目<br />虚拟结算额</td>
         <td class="content" colspan="3">
           <div style="display: flex;align-items: flex-end;">
-            <el-table :data="stepEdit.xnJiesuanPrice" class="u-dynamic-table"  show-summary :summary-method="getSummaries" border ref="table" style="width: 800px;">
-              <el-table-column type="index" label="序号" align="center" min-width="60"></el-table-column>
-              <el-table-column prop="eqName" label="试验设备" align="center" min-width="100">
-                <template slot-scope="scope">
-                  <el-select v-model="scope.row.eqName" placeholder="请选择"   value-key="id" @change="chooseEquipment($event, scope.$index)" style="width: 100%;" :disabled="stepParameter.disabled">
-                    <el-option
-                      v-for="item in equipmentOptions"
-                      :key="item.id"
-                      :label="item.deviceName"
-                      :value="item">
-                    </el-option>
-                  </el-select>
-                </template>
-              </el-table-column>
-              <el-table-column prop="typeName" label="试验类型" align="center" min-width="120"></el-table-column>
-              <el-table-column prop="time" label="试验时间(h)" align="center" min-width="120">
-                <template slot-scope="scope">
-                  <el-input v-model="scope.row.time" placeholder="请输入" @input="handleCheng(scope.row, scope.$index)" :readonly="stepParameter.disabled"/>
-                </template>
-              </el-table-column>
-              <el-table-column prop="unitPrice" label="试验单价(rmb/h)" align="center" min-width="140"></el-table-column>
-              <el-table-column prop="costPrice" label="试验费用" align="center" min-width="100"></el-table-column>
-              <el-table-column label="操作" min-width="100">
-                <template slot-scope="scope">
-                  <el-button type="text" size="small" @click="handleDelete(scope.row, scope.$index)" :style="{'pointer-events':stepParameter.disabled?'none':'auto'}">删除</el-button>
-                </template>
-              </el-table-column>
-            </el-table>
-            <div class="addRow" @click="addRow" :style="{'pointer-events':stepParameter.disabled?'none':'auto'}">添加</div>
+            <el-form ref="xnJiesuanForm" :model="stepEdit" :rules="rules">
+              <el-table :data="stepEdit.xnJiesuanPrice" class="u-dynamic-table" show-summary :summary-method="getSummaries" border ref="table" style="width: 800px;">
+                <el-table-column type="index" label="序号" align="center" min-width="60"></el-table-column>
+                <el-table-column prop="eqName" label="试验设备" align="center" min-width="100">
+                  <template slot-scope="scope">
+                    <el-form-item :prop="'xnJiesuanPrice.'+scope.$index+'.eqName'" :rules="rules.eqName">
+                      <el-select v-model="scope.row.eqName" placeholder="请选择"   value-key="id" @change="chooseEquipment($event, scope.$index)" style="width: 100%;" :disabled="stepParameter.disabled">
+                        <el-option
+                          v-for="item in equipmentOptions"
+                          :key="item.id"
+                          :label="item.deviceName"
+                          :value="item">
+                        </el-option>
+                      </el-select>
+                    </el-form-item>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="typeName" label="重要性标准" align="center" min-width="120"></el-table-column>
+                <el-table-column prop="time" label="试验时间(h)" align="center" min-width="120">
+                  <template slot-scope="scope">
+                    <el-form-item :prop="'xnJiesuanPrice.'+scope.$index+'.time'" :rules="rules.time">
+                      <el-input-number v-model="scope.row.time" controls-position="right" @change="handleCheng(scope.row, scope.$index)" :min="1" :readonly="stepParameter.disabled"></el-input-number>
+                    </el-form-item>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="unitPrice" label="试验单价(rmb/h)" align="center" min-width="140"></el-table-column>
+                <el-table-column prop="costPrice" label="试验费用" align="center" min-width="100"></el-table-column>
+                <el-table-column label="操作" min-width="100">
+                  <template slot-scope="scope">
+                    <el-button v-if="stepEdit.xnJiesuanPrice.length>1" type="text" size="small" @click="handleDelete(scope.row, scope.$index)" :disabled="stepParameter.disabled">删除</el-button>
+                  </template>
+                </el-table-column>
+              </el-table>
+            </el-form>
+            
+            <!-- <div class="addRow" @click="addRow" :style="{'pointer-events':stepParameter.disabled?'none':'auto'}">添加</div> -->
+            <el-button class="addRow" @click="addRow" :disabled='stepParameter.disabled'>添加</el-button>
           </div>
         </td>
       </tr>
       <tr>
-        <td class="title">预计报价</td>
+        <td class="title" style="width: 100px;">预计报价</td>
         <td class="content" colspan="3">
           <input style="width: 100%; text-align: center" v-model="stepEdit.yujiBaojia" :disabled="stepParameter.disabled"/>
           <div class="btn" style="margin-top:1%" @click="submitData" :style="{'pointer-events':stepParameter.disabled?'none':'auto'}">保存</div>
@@ -193,7 +201,7 @@ export default {
     return {
       // 获取的流程数据
       stepParameter: {
-        disabled: true
+        disabled: null
       },
       // 数据编辑信息
       stepEdit: {
@@ -205,7 +213,18 @@ export default {
         xnJiesuanPrice: [{}],
         baogaoTixi: null,
         zizhiYaoqiu: [],
+        // 第五部分
+        hZXnJiesuanE: [],
+        jixiaoData: null,
+        xnJixiaoZonge: null,
+        xnJixiaoZongeArr: [],
       },
+      // 重要性标准
+      defineXishu: [
+        { type: 0, xishu: 0.40 },
+        { type: 1, xishu: 0.70 },
+        { type: 2, xishu: 1 },
+      ],
       // 评审信息
       stepReview: {
         id: null,
@@ -216,6 +235,14 @@ export default {
       },
       // 试验设备数据
       equipmentOptions: [],
+      rules: {
+        eqName: [
+          { required: true, message: "不能为空", trigger: "change" }
+        ],
+        time: [
+          { required: true, message: "不能为空", trigger: "change" }
+        ],
+      }
     }
   },
   created() {
@@ -231,6 +258,7 @@ export default {
       handler(newV, oldV){
         if(newV && newV[0]){
           console.log(newV)
+          console.log(JSON.parse(newV[0].saveData))
           var arrData = newV
           this.stepParameter = arrData[0]
           this.stepParameter.disabled = !(arrData[0].dangqian && arrData[0].isUpdate)
@@ -312,6 +340,195 @@ export default {
     addRow() {
       this.stepEdit.xnJiesuanPrice.push({})
     },
+    submitData() {
+      this.$refs["xnJiesuanForm"].validate(valid => {
+        if (valid) {
+          console.log(valid)
+          // 计算核准虚拟结算额
+          this.stepEdit.hZXnJiesuanE = this.changeData(this.stepEdit.xnJiesuanPrice, 'costPrice')
+          // 项目绩效基础计算
+          this.computeJixiaoData()
+          // 计算虚拟结算绩效总额
+          this.computeJXXishuZonge()
+
+
+          var saveData = {
+            runFlowPathStep: this.stepParameter.id,
+            saveData: JSON.stringify(this.stepEdit),
+          }
+          this.$emit('save', saveData)
+        }
+      })
+    },
+    // 将试验类型相同的金额相加,用于:核准虚拟结算额和虚拟结算绩效总额
+    changeData(array, key){
+      let totalArr = []
+      array.forEach(element => {
+        var itemObj = { type: element.type, typeName: element.typeName, price: element[key] }
+        if(totalArr.length === 0){
+          totalArr.push(itemObj)
+        } else {
+          var index = totalArr.findIndex(res => res.type === element.type)
+          if(index === -1){
+            // 原来没有  push
+            totalArr.push(itemObj)
+          } else {
+            // 原来有  相加
+            totalArr[index].price += itemObj.price
+          }
+        }
+      });
+      // console.log(totalArr)
+      return totalArr
+    },
+    // 项目绩效基础计算
+    computeJixiaoData(){
+      var dataLists = []
+      for (let i = 0; i < this.stepEdit.hZXnJiesuanE.length; i++) {
+        const item = this.stepEdit.hZXnJiesuanE[i];
+        const money = item.price * 0.8
+        if(money > 500000){
+          // 50万以上
+          console.log(money+':50万以上')
+          var arr = [
+            {
+              type: item.type,
+              typeName: item.typeName,
+              fenduan: item.fenduan,
+              bili: 0.05,
+              ticheng: 50000 * 0.05,
+              yue: 50000
+            },
+            {
+              type: item.type,
+              typeName: item.typeName,
+              fenduan: item.fenduan,
+              bili: 0.04,
+              ticheng: 50000 * 0.04,
+              yue: 50000
+            },
+            {
+              type: item.type,
+              typeName: item.typeName,
+              fenduan: item.fenduan,
+              bili: 0.03,
+              ticheng: 400000 * 0.03,
+              yue: 400000
+            },
+            {
+              type: item.type,
+              typeName: item.typeName,
+              fenduan: item.fenduan,
+              bili: 0.02,
+              ticheng: (money - 500000) * 0.02,
+              yue: money - 500000
+            },
+          ]
+          dataLists.push(...arr)
+        } else if (money > 100000){
+          // 10万-50万之间
+          console.log(money+':10万-50万之间')
+          var arr = [
+            {
+              type: item.type,
+              typeName: item.typeName,
+              fenduan: item.fenduan,
+              bili: 0.05,
+              ticheng: 50000 * 0.05,
+              yue: 50000
+            },
+            {
+              type: item.type,
+              typeName: item.typeName,
+              fenduan: item.fenduan,
+              bili: 0.04,
+              ticheng: 50000 * 0.04,
+              yue: 50000
+            },
+            {
+              type: item.type,
+              typeName: item.typeName,
+              fenduan: item.fenduan,
+              bili: 0.03,
+              ticheng: (money - 100000) * 0.03,
+              yue: money - 100000
+            },
+          ]
+          dataLists.push(...arr)
+        } else if (money > 50000){
+          // 5万-10万(包含)之间
+          console.log(money+':5万-10万(包含)之间')
+          var arr = [
+            {
+              type: item.type,
+              typeName: item.typeName,
+              fenduan: item.fenduan,
+              bili: 0.05,
+              ticheng: 50000 * 0.05,
+              yue: 50000
+            },
+            {
+              type: item.type,
+              typeName: item.typeName,
+              fenduan: item.fenduan,
+              bili: 0.04,
+              ticheng: (money - 50000) * 0.04,
+              yue: money - 50000
+            },
+          ]
+          dataLists.push(...arr)
+        } else if (money >= 0){
+          // 0-5万(包含)之间
+          console.log(money+':0-5万(包含)之间')
+          var arr = [
+            {
+              type: item.type,
+              typeName: item.typeName,
+              fenduan: item.fenduan,
+              bili: 0.05,
+              ticheng: money * 0.05,
+              yue: money
+            },
+          ]
+          dataLists.push(...arr)
+        }
+      }
+      this.stepEdit.jixiaoData = dataLists
+    },
+    // 计算虚拟结算绩效总额
+    computeJXXishuZonge(){
+      // 将试验类型相同的金额相加
+      var noHasXishuZonge = this.changeData(this.stepEdit.jixiaoData, 'ticheng')
+      var total = 0
+      var arr = noHasXishuZonge.map(item => {
+        var obj = this.defineXishu.find(res => res.type === item.type)
+        // 根据试验类型*对应系数
+        item.price = this.multiply(item.price, obj.xishu)
+        console.log(item.price)
+        // 计算出总和
+        total += item.price
+        return item
+      })
+      this.stepEdit.xnJixiaoZongeArr = arr
+      console.log(total)
+      this.stepEdit.xnJixiaoZonge = total
+    },
+    // 解决经度丢失
+    multiply(num1, num2) {
+      const num1Str = num1.toString();
+      const num2Str = num2.toString();
+      const num1Digits = num1Str.includes('.') ? num1Str.length - num1Str.indexOf('.') - 1 : 0;
+      const num2Digits = num2Str.includes('.') ? num2Str.length - num2Str.indexOf('.') - 1 : 0;
+      const precision = num1Digits + num2Digits;
+
+      const num1Int = parseInt(num1Str.replace('.', ''));
+      const num2Int = parseInt(num2Str.replace('.', ''));
+
+      let result = num1Int * num2Int;
+      result /= Math.pow(10, precision);
+
+      return result;
+    },
 
     submitReview() {
       var saveData = {
@@ -321,13 +538,6 @@ export default {
       console.log(saveData)
       this.$emit('save', saveData)
     },
-    submitData() {
-      var saveData = {
-        runFlowPathStep: this.stepParameter.id,
-        saveData: JSON.stringify(this.stepEdit),
-      }
-      this.$emit('save', saveData)
-    },
   },
 }
 </script>
@@ -375,6 +585,13 @@ export default {
     .el-input__inner{
       background: transparent !important;
     }
+    // 并且-有校验错误时显示
+    .is-error {
+      margin-bottom: 22px;
+      .el-input__inner{
+        border: 1px solid #F56C6C;
+      }
+    }
   }
 }
 </style>
@@ -422,9 +639,14 @@ tr {
 .title {
   background-color: #fff;
   font-weight: bold;
+  width: 100px;
 }
 .addRow {
-  width: 60px;
+  padding: 6px 10px;
+  text-align: center;
+  font-size: 12px;
+  margin-left: 20px;
+  /* width: 60px;
   height: 24px;
   background-color: #fff;
   border-radius: 4px;
@@ -432,7 +654,7 @@ tr {
   line-height: 24px;
   font-size: 12px;
   margin-left: 20px;
-  cursor: pointer;
+  cursor: pointer; */
 }
 .btn {
   display: inline-block;

+ 25 - 8
itdmWeb/src/views/module-iTDM/itdmYeWu/itdmXnJiesuan.vue

@@ -7,14 +7,14 @@
         <td class="title" style="width: 100px">核准<br/>虚拟结算额</td>
         <td class="content" style="width: 360px">
           <div>
-            <div v-for="(item, index) in stepEdit.xnJiesuanE" :key="index">{{ item.typeName }}:{{ item.price }};</div>
+            <div v-for="(item, index) in stepEdit.hZXnJiesuanE" :key="index">{{ item.typeName }}:{{ item.price }};</div>
           </div>
         </td>
         <td class="title white" style="width: 100px">核准<br/>虚拟结算毛利</td>
         <td class="content">
           <!-- <input v-model="stepEdit.xnMaoli" style="text-align: center" /> -->
           <div>
-            <div v-for="(item, index) in stepEdit.xnJiesuanE" :key="index">{{ item.typeName }}:{{ item.price * 0.8 }};</div>
+            <div v-for="(item, index) in stepEdit.hZXnJiesuanE" :key="index">{{ item.typeName }}:{{ item.price * 0.8 }};</div>
           </div>
         </td>
       </tr>
@@ -134,7 +134,7 @@ export default {
       },
       // 数据编辑信息
       stepEdit: {
-        xnJiesuanE: [],
+        hZXnJiesuanE: [],
         tichengJishu: null,
         manyidu: 100,
         fenshu: 100,
@@ -218,7 +218,7 @@ export default {
           if(arrData[0].saveData){
             // 计算核准虚拟结算额
             var xnJiesuanPrice = JSON.parse(arrData[0].saveData).xnJiesuanPrice
-            this.stepEdit.xnJiesuanE = this.changeData(xnJiesuanPrice, 'costPrice')
+            this.stepEdit.hZXnJiesuanE = this.changeData(xnJiesuanPrice, 'costPrice')
             // 项目绩效基础计算
             this.computeJixiaoData()
             // 计算虚拟结算绩效总额
@@ -248,7 +248,7 @@ export default {
     // 获取第一部分设置的项目虚拟结算额并计算数据
     getXnJiesuanE(){
       // 计算核准虚拟结算额
-      // this.stepEdit.xnJiesuanE = this.changeData(this.moniData, 'costPrice')
+      // this.stepEdit.hZXnJiesuanE = this.changeData(this.moniData, 'costPrice')
       // 项目绩效基础计算
       this.computeJixiaoData()
       // 计算虚拟结算绩效总额
@@ -279,8 +279,8 @@ export default {
     // 项目绩效基础计算
     computeJixiaoData(){
       var dataLists = []
-      for (let i = 0; i < this.stepEdit.xnJiesuanE.length; i++) {
-        const item = this.stepEdit.xnJiesuanE[i];
+      for (let i = 0; i < this.stepEdit.hZXnJiesuanE.length; i++) {
+        const item = this.stepEdit.hZXnJiesuanE[i];
         const money = item.price * 0.8
         if(money > 500000){
           // 50万以上
@@ -398,7 +398,8 @@ export default {
       var arr = noHasXishuZonge.map(item => {
         var obj = this.defineXishu.find(res => res.type === item.type)
         // 根据试验类型*对应系数
-        item.price = item.price * obj.xishu
+        item.price = this.multiply(item.price, obj.xishu)
+        console.log(item.price)
         // 计算出总和
         total += item.price
         return item
@@ -407,6 +408,22 @@ export default {
       console.log(total)
       this.stepEdit.xnJixiaoZonge = total
     },
+    // 解决经度丢失
+    multiply(num1, num2) {
+      const num1Str = num1.toString();
+      const num2Str = num2.toString();
+      const num1Digits = num1Str.includes('.') ? num1Str.length - num1Str.indexOf('.') - 1 : 0;
+      const num2Digits = num2Str.includes('.') ? num2Str.length - num2Str.indexOf('.') - 1 : 0;
+      const precision = num1Digits + num2Digits;
+
+      const num1Int = parseInt(num1Str.replace('.', ''));
+      const num2Int = parseInt(num2Str.replace('.', ''));
+
+      let result = num1Int * num2Int;
+      result /= Math.pow(10, precision);
+
+      return result;
+    },
     // 提交
     submitSCReview(){
       var saveData = {