Przeglądaj źródła

文件上传取主应用

yusheng 11 miesięcy temu
rodzic
commit
abfb4448c3

+ 2 - 1
src/main.js

@@ -65,7 +65,8 @@ Vue.use(VueClipboard);
 let instance = null;
 
 function render(props = {}) {
-  const { container, routerBase } = props;
+  const { container, routerBase, fileMain } = props;
+  Vue.component('fileMain', fileMain);
   // const router = new VueRouter({
   //   base: window.__POWERED_BY_QIANKUN__ ? routerBase : process.env.BASE_URL,
   //   mode: 'history',

+ 893 - 0
src/views/produce/components/jobBooking/components/semiProductJobBomCopy.vue

@@ -0,0 +1,893 @@
+<template>
+  <div>
+    <div class="title_box rx-bc mt6">
+
+      <div class="name">报工信息({{ list.length || 0 }})个 </div>
+
+      <div class="rx-bc"><el-button type="text" size="mini" @click="batchDelete()">批量删除</el-button> </div>
+    </div>
+    <el-table ref="oneJobQualityBom" class="table_content" :max-height="600" :data="list" tooltip-effect="dark"
+      style="width: 100%" stripe border  @selection-change="tableDataSelectChange">
+      <el-table-column
+          type="selection"
+          align="center"
+          width="55">
+      </el-table-column>
+      <el-table-column label="序号" type="index" width="55">
+        <template slot-scope="{ row, $index }">
+          {{ $index + 1 }}
+        </template>
+      </el-table-column>
+
+
+
+      <el-table-column label="编码" prop="code" minWidth="110">
+        <template slot-scope="{ row, $index }">
+          {{ row.code }}
+        </template>
+      </el-table-column>
+
+      <el-table-column label="名称" prop="name" minWidth="140">
+        <template slot-scope="{ row, $index }">
+          {{ row.name }}
+        </template>
+      </el-table-column>
+      <el-table-column label="物品分类" type="rootCategoryLevelId" minWidth="90">
+        <template slot-scope="{ row, $index }">
+            {{
+              row.rootCategoryLevelId == 2
+                ? '在制品'
+                : row.rootCategoryLevelId == 23
+                ? '半成品'
+                : row.rootCategoryLevelId == 9
+                ? '产品'
+                : item.rootCategoryLevelId == 28
+                ? '废品'
+                : ''
+            }}
+        </template>
+      </el-table-column>
+
+
+
+
+      <el-table-column v-if="singleReport == 1" label="刻码" prop="engrave">
+        <template slot-scope="{ row, $index }">
+          <span v-if="isDetails">{{ row.extInfo.engrave }}</span>
+          <el-input v-else size="mini" class="content_num" v-model="row.extInfo.engrave" placeholder="刻码" />
+        </template>
+      </el-table-column>
+      <el-table-column label="序列号" prop="productSequence">
+        <template slot-scope="{ row, $index }">
+          {{ row.extInfo?.productSequence }}
+        </template>
+      </el-table-column>
+      <el-table-column label="发货条码" prop="sendCode">
+        <template slot-scope="{ row, $index }">
+          <el-input size="mini" class="content_num" v-model="row.extInfo.sendCode" placeholder="发货条码"
+            :disabled="isDetails" />
+        </template>
+      </el-table-column>
+      <el-table-column v-if="singleReport == 1" label="物料代号" prop="materielCode">
+        <template slot-scope="{ row, $index }">
+          <span v-if="isDetails">{{ row.extInfo.materielCode }}</span>
+          <el-input v-else size="mini" class="content_num" v-model="row.extInfo.materielCode" placeholder="物料代号" />
+        </template>
+      </el-table-column>
+      <el-table-column label="客户代号" prop="clientCode"  v-if="item.singleReport == 1">
+        <template slot-scope="{ row, $index }">
+          <span v-if="isDetails"> {{ row.extInfo.clientCode }}</span>
+          <el-input
+            v-else
+            size="mini"
+            class="content_num"
+            v-model="row.extInfo.clientCode"
+            placeholder="请输入客户代号"
+          />
+        </template>
+      </el-table-column>
+
+
+      <el-table-column v-if="singleReport == 1 && deviceList.length > 0" width="140" label="设备" prop="deviceId">
+        <template slot-scope="{ row, $index }">
+          <el-select
+            class="content_num"
+            v-model="row.deviceId"
+            filterable
+            placeholder="请选择"
+            @change="(e) => selectVal(e, row, $index)"
+            size="mini"
+            :disabled="isDetails"
+          >
+            <el-option
+              v-for="item in deviceList"
+              :label="item.name + '-' + item.codeNumber"
+              :value="item.id || item.instanceId"
+              :key="item.id || item.instanceId"
+            >
+            </el-option>
+          </el-select>
+          <!-- {{ row.deviceName || row.extInfo.deviceName }} -->
+        </template>
+      </el-table-column>
+
+      <el-table-column v-if="singleReport == 1 && deviceList.length > 0" label="炉次号" width="90" prop="heatNumber">
+        <template slot-scope="{ row, $index }">
+          <el-input size="mini" class="content_num" v-model="row.extInfo.heatNumber" placeholder="请输入炉次号" :disabled="isDetails"/>
+        </template>
+      </el-table-column>
+
+      <el-table-column v-if="singleReport == 1" label="数量" width="90" prop="feedQuantity">
+        <template slot-scope="{ row, $index }">
+          <el-input size="mini" class="content_num" v-model="row.feedQuantity" :disabled="isDetails" placeholder="数量" />
+        </template>
+      </el-table-column>
+
+      <el-table-column v-if="singleReport == 1" label="位置" width="110" prop="position">
+        <template slot-scope="{ row, $index }">
+          <span v-if="isDetails">{{ row.extInfo.position }}</span>
+          <el-input v-else size="mini" class="content_num" v-model="row.extInfo.position" placeholder="位置" />
+        </template>
+      </el-table-column>
+
+      <el-table-column v-if="singleReport == 1" label="上道工序重量" width="180" prop="weight">
+        <template slot-scope="{ row, $index }">
+          <div style="display: flex;align-items: center">
+            <div class="tag_box">{{ row.extInfo.newWeight ? '上' : '原' }}</div>
+            <span v-if="Object.prototype.hasOwnProperty.call(row.extInfo, 'newWeight')">{{
+              row.extInfo.newWeight
+            }}</span>
+
+            <el-input v-if="!Object.prototype.hasOwnProperty.call(row.extInfo, 'newWeight')" size="mini"
+              class="content_num2" style="width: 100px;" v-model="row.extInfo.weight" :disabled="isDetails"
+              prop="digit" />
+              <div style="width: 55px;">{{ row.weightUnit }}</div>
+          </div>
+        </template>
+      </el-table-column>
+
+      <el-table-column v-if="singleReport == 1" label="报工重量" width="150" prop="reportWeight">
+        <template slot-scope="{ row, $index }">
+          <div style="display: flex;align-items: center">
+            <span v-if="isDetails">{{ row.extInfo.reportWeight }}</span>
+            <el-input v-else size="mini" class="content_num" type="number" v-model="row.extInfo.reportWeight"
+              placeholder="报工重量" prop="digit" @input="handleInput" />
+            <div style="width: 55px;">{{ row.weightUnit }}</div>
+          </div>
+
+        </template>
+      </el-table-column>
+
+      <el-table-column v-if="singleReport == 1" label="是否合格" width="110" prop="isQualified">
+        <template slot-scope="{ row, $index }">
+          <el-select size="mini" class="content_num" v-model="row.extInfo.isQualified" @change="handlerSelect"
+            filterable placeholder="请选择" :disabled="isDetails">
+            <el-option v-for="item in isQualifiedList" :label="item.name" :value="item.code" :key="item.code">
+            </el-option>
+          </el-select>
+
+        </template>
+      </el-table-column>
+
+
+      <el-table-column v-if="singleReport == 1" label="不合格品处置类型" width="160" prop="notType">
+        <template slot-scope="{ row, $index }">
+          <el-select v-if="row.extInfo.isQualified && row.extInfo.isQualified == 2" size="mini" class="content_num"
+            v-model="row.extInfo.notType" filterable placeholder="请选择" :disabled="isDetails">
+            <el-option v-for="item in notTypeList" :label="item.name" :value="item.code" :key="item.code">
+            </el-option>
+          </el-select>
+
+        </template>
+      </el-table-column>
+
+
+      <!-- <el-table-column
+        label="质检结果"
+        width="80"
+        prop=""
+        v-if="item.currentTaskDiagram.isFirstTask == 1"
+      >
+        <template slot-scope="{ row, $index }">
+          <div @click="openNumerate(row, $index)" v-if="![1,2,3,4].includes(Number(row.extInfo.notType))">
+            <div class="numerate">点击计算</div>
+          </div>
+        </template>
+      </el-table-column> -->
+      <!-- label="/" -->
+      <el-table-column width="130" prop="taskName">
+        <template slot="header" slot-scope="scope">
+          <div>
+            不良原因<span style="color: #f00;padding: 0 2px;">/</span>处置
+          </div>
+        </template>
+        <template slot-scope="{ row, $index }">
+          <div v-if="row.extInfo.isQualified != 1 && row.extInfo.notType && row.extInfo.notType != 5">
+            <span v-if="isDetails">{{ row.extInfo.notReason }}</span>
+            <el-input v-else size="mini" class="content_num" v-model="row.extInfo.notReason" placeholder="原因" />
+          </div>
+          <div v-if="![1, 2, 3, 4].includes(Number(row.extInfo.notType))">
+            <span v-if="isDetails">{{ row.extInfo.taskName }}</span>
+            <el-select v-else size="mini" class="content_num" v-model="row.extInfo.taskId" filterable placeholder="请选择"
+              @change="(e) => selectName(e, $index)">
+              <el-option v-for="item in stepsList" :label="item.taskTypeName" :value="item.taskId" :key="item.taskId">
+              </el-option>
+            </el-select>
+          </div>
+        </template>
+      </el-table-column>
+
+      <el-table-column label="次数" prop="index" width="80">
+        <template slot-scope="{ row, $index }">
+          <div class="tag_box" v-if="
+            Object.prototype.hasOwnProperty.call(row, 'extInfo') &&
+            Object.prototype.hasOwnProperty.call(
+              row.extInfo,
+              'productionTimes'
+            ) &&
+            Object.prototype.hasOwnProperty.call(
+              row.extInfo.productionTimes,
+              item.currentTaskDiagram.taskId
+            )
+          ">
+            {{ row.extInfo.productionTimes[item.currentTaskDiagram.taskId] }}
+          </div>
+
+          <div class="tag_box" v-if="row.isCache">缓</div>
+        </template>
+      </el-table-column>
+
+      <el-table-column label="型号" prop="modelType">
+        <template slot-scope="{ row, $index }">
+          {{ row.modelType }}
+        </template>
+      </el-table-column>
+
+      <el-table-column label="规格" prop="specification">
+        <template slot-scope="{ row, $index }">
+          {{ row.specification }}
+        </template>
+      </el-table-column>
+
+      <el-table-column label="牌号" prop="brandNum">
+        <template slot-scope="{ row, $index }">
+          {{ row.brandNum }}
+        </template>
+      </el-table-column>
+      <el-table-column label="数量" prop="feedQuantity">
+        <template slot-scope="{ row, $index }">
+          {{ row.feedQuantity }}
+        </template>
+      </el-table-column>
+
+      <!-- <el-table-column label="包装库存" prop="brandNum">
+        <template slot-scope="{ row, $index }">
+          {{ row.packingCountBase }}/ {{ row.minUnit }}
+        </template>
+      </el-table-column> -->
+
+
+      <el-table-column label="操作" fixed="right" width="60px" v-if="!isDetails">
+        <template slot-scope="{ $index, row }">
+          <el-link type="danger" @click="getDelete($index)">删除</el-link>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <el-dialog title="工序计算列表" :visible.sync="show" :before-close="cancel" :close-on-click-modal="false"
+      :close-on-press-escape="false" append-to-body width="800px">
+      <div class="material">
+        <div class="btn_end">
+          <el-button type="primary" size="mini" @click="handAddParam">添加</el-button>
+        </div>
+        <div class="content_table2">
+          <div class="head row rx-sc">
+            <div class="item ww30">工序名称</div>
+            <div class="item ww20">坯体密度</div>
+            <div class="item ww20">密度系数</div>
+            <div class="item ww20">重量</div>
+            <div class="item ww20">操作</div>
+          </div>
+
+          <div class="table">
+            <div class="tr row rx-sc" v-for="(it, idx) in paramList" :key="idx">
+              <div class="item ww30">
+                <el-select size="mini" class="content_num" filterable v-model="it.taskId" placeholder="请选择">
+                  <el-option v-for="item in stepsList" :label="item.taskTypeName" :value="item.taskId"
+                    :key="item.taskId">
+                  </el-option>
+                </el-select>
+              </div>
+
+              <div class="item ww20">
+                <el-input class="content_num" size="mini" v-model="it.billet" type="digit"
+                  @input="changeInp(it, idx)"></el-input>
+              </div>
+
+              <div class="item ww20">
+                <el-input class="content_num" size="mini" v-model="it.density" type="digit"
+                  @input="changeInp(it, idx)"></el-input>
+              </div>
+
+              <div class="item ww20" v-if="idx == 0 || idx != paramList.length - 1">
+                < {{ it.CVIWeight }} </div>
+
+                  <div class="item ww20" v-if="paramList.length > 1 && idx == paramList.length - 1">
+                    ≥ {{ it.CVIWeight }}
+                  </div>
+
+                  <div class="item ww20 rx-cc" @click="getDelete2(idx)">
+                    <el-link type="danger">删除</el-link>
+                  </div>
+              </div>
+            </div>
+          </div>
+
+          <div class="formula_box">计算公式: 物料重量/坯体密度*密度系数 </div>
+
+          <div class="reportWeight rx-sc">
+            物料重量: {{ weight }} ; 报工重量: {{ reportWeight }}
+          </div>
+        </div>
+
+        <template slot="footer">
+          <el-button size="mini" type="primary" @click="paramSave">保存并计算</el-button>
+          <el-button size="mini" type="primary" @click="save">计算</el-button>
+          <el-button size="mini" @click="cancel">取消</el-button>
+        </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  getTaskInstanceList,
+  getComputeParam,
+  saveParam
+} from '@/api/produce/job';
+export default {
+  name: 'semiProductJobBom',
+  props: {
+    list: {
+      type: Array,
+      default: () => []
+    },
+    equipmentList: {
+      type: Array,
+      default: () => []
+    },
+
+    item: {
+      type: Object,
+      default: () => { }
+    },
+    isDetails: {
+      type: Boolean,
+      default: false
+    },
+    singleReport: {
+      default: null
+    }
+  },
+
+  watch: {
+    equipmentList: {
+      immediate: true,
+      deep: true,
+      handler(newVal) {
+        this.deviceList = newVal;
+        console.log(newVal,'1111121547646549896498')
+        this.changeHeatNumber();
+      }
+    },
+    list: {
+      immediate: true,
+      deep: true,
+      handler(newVal) {
+        console.log('aaaaaa',newVal)
+        if (newVal.length) {
+          console.log(newVal);
+          this.newList = newVal;
+          // if(this.taskObj.type != 4){
+             this.sumweight(newVal);
+             this.sunTj();
+          // }
+          
+
+        }
+      }
+    },
+  },
+  computed: {
+    taskObj() {
+      return this.$store.state.user.taskObj;
+    },
+    clientEnvironmentId() {
+      return this.$store.state.user.info.clientEnvironmentId;
+    }
+  },
+  created() {
+    this.getTaskFn();
+  },
+
+  // item
+  data() {
+    return {
+      deviceList: [],
+      newList: [],
+      stepsList: [],
+      cacheKeyUrl:'mes_produce_jobBooking_semiProductJobBom',
+      weight: 0,
+      reportWeight: 0,
+
+      paramList: [],
+
+      resultObj: {},
+      resultIdx: 0,
+
+      show: false,
+
+
+
+      isQualifiedList: [{
+        code: 1,
+        name: '合格'
+      },
+      {
+        code: 2,
+        name: '不合格'
+      }
+      ],
+
+      notTypeList: [{
+        code: 1,
+        name: '返工'
+      },
+      {
+        code: 2,
+        name: '返修'
+      },
+      {
+        code: 3,
+        name: '报废'
+      },
+      {
+        code: 4,
+        name: '降级使用'
+      },
+      {
+        code: 5,
+        name: '让步接收'
+      }
+      ],
+      selectArr:[],
+    };
+  },
+
+  methods: {
+    sunTj() {
+      this.item.workReportInfo.formedNum = this.newList.filter(v => v.extInfo.isQualified == 1).length;
+      this.item.workReportInfo.notFormedNum = this.newList.filter(v => v.extInfo.isQualified !== 1).length;
+    },
+    sumweight(arr) {
+      console.log(arr, 6666667777);
+      let formedWeight = 0;
+      let noFormedWeight = 0;
+      arr.map((s,i) => {
+        if (s.extInfo.reportWeight) {
+          if (s.extInfo.isQualified == 1) {
+            formedWeight += s.extInfo.reportWeight * 1;
+          } else {
+            noFormedWeight += s.extInfo.reportWeight * 1;
+          }
+        } else {
+          s.extInfo.reportWeight = null;
+        }
+        this.$set(this.list[i].extInfo,'reportWeight',s.extInfo.reportWeight)
+      })
+      
+      this.item.workReportInfo.formedWeight = parseFloat((formedWeight).toFixed(2));
+      this.item.workReportInfo.notFormedWeight = parseFloat((noFormedWeight).toFixed(2));
+    },
+
+
+    handlerSelect() {
+      this.sunTj();
+      this.sumweight(this.list);
+    },
+
+    handleInput() {
+      console.log(12354987498498)
+      let arr = JSON.parse(JSON.stringify(this.list));
+      this.sumweight(arr);
+      this.sunTj();
+      // console.log('arr11111112222',arr)
+      // console.log('this.list33333',this.list)
+    },
+
+    // changeHeatNumber() {
+    //   if (this.deviceList.length > 0) {
+    //     const device = this.deviceList[0];
+    //     this.$emit('update:heatNumber', device.heatNumber);
+    //   }
+    // },
+
+    getTaskFn() {
+      getTaskInstanceList(this.item.workOrderId).then((res) => {
+        // this.stepsList = res;
+        this.stepsList=res.filter(item=>{return item.taskId != -2})
+      });
+    },
+    selectVal(e, item, idx) {
+        let obj = this.deviceList.find((f) => f.id == e);
+
+        this.$set(
+          this.list[idx],
+          'deviceName',
+          obj.name + '-' + obj.codeNumber
+        );
+        this.$set(
+          this.list[idx]['extInfo'],
+          'heatNumber',
+          obj.extInfo.heatNumber
+        );
+      },
+
+    changeHeatNumber() {
+      this.deviceList.forEach((f) => {
+        this.list.forEach((o,index) => {
+          if (
+            o.deviceId &&
+            f.instanceId == o.deviceId &&
+            this.deviceList.length > 1
+          ) {
+            // o.extInfo.heatNumber = f.extInfo.heatNumber;
+            this.$set(this.list[index].extInfo,'heatNumber',f.extInfo.heatNumber)
+            this.$forceUpdate();
+          } else if (this.deviceList.length == 1) {
+            o['deviceId'] = this.deviceList[0].id || f.instanceId;
+            console.log('111111',this.deviceList[0].id)
+            // o.extInfo.heatNumber = this.deviceList[0].extInfo.heatNumber;
+            // this.$set(this.list[index],'heatNumber',this.deviceList[0].extInfo.heatNumber)
+            this.$set(this.list[index].extInfo,'heatNumber',this.deviceList[0].extInfo.heatNumber)
+            this.$forceUpdate();
+          }
+        });
+      });
+    },
+
+    selectName(value, idx) {
+      const taskObj = this.stepsList.find((item) => item.taskId === value);
+      this.$set(this.list[idx].extInfo, 'taskName', taskObj.taskTypeName);
+      this.$forceUpdate();
+    },
+
+    openNumerate(row, idx) {
+      if (!row.extInfo.reportWeight) {
+        this.$message({ message: '请先输入报工重量', type: 'warning' });
+        return false;
+      }
+      this.weight = row.extInfo.weight;
+      this.reportWeight = row.extInfo.reportWeight;
+      this.resultIdx = idx;
+
+      this.show = true;
+    },
+
+    getCompute() {
+      getComputeParam(
+        this.item.workOrderId,
+        this.item.currentTaskDiagram.taskId
+      ).then((res) => {
+        this.paramList = [];
+        this.paramList = (res && res.paramList) || [];
+        this.paramObj = res || {};
+      });
+    },
+
+    handAddParam() {
+      this.paramList.push({
+        taskId: null,
+        taskName: null
+      });
+    },
+    getDelete(idx) {
+      this.list.splice(idx, 1);
+    },
+
+    getDelete2(idx) {
+      this.paramList.splice(idx, 1);
+    },
+
+    changeInp(item, index) {
+      if (Number(item.billet) && Number(item.density)) {
+        this.paramList[index].CVIWeight = (
+          (Number(this.weight) / item.billet) *
+          item.density
+        ).toFixed(2);
+      }
+    },
+
+    cancel() {
+      this.show = false;
+      this.reportWeight = 0;
+      this.weight = 0;
+    },
+
+    paramSave() {
+      if (this.paramList.length > 0) {
+        let bol;
+        let _i;
+        bol = this.paramList.every((e, i) => {
+          _i = i + 1;
+          return e.taskId && e.billet && e.density;
+        });
+
+        if (!bol) {
+          this.$message({ message: `第${_i}行数据不全`, type: 'warning' });
+
+          return false;
+        }
+
+        if (this.paramList.length < 1) {
+          this.$message({
+            message: '请输入二个以上计算数据',
+            type: 'warning'
+          });
+
+          return false;
+        }
+      }
+      let param = {};
+
+      if (!Object.prototype.hasOwnProperty.call(this.paramObj, 'id')) {
+        param = {
+          paramList: this.paramList,
+          workOrderId: this.item.workOrderId,
+          taskId: this.item.currentTaskDiagram.taskId
+        };
+      } else {
+        this.paramObj.paramList = this.paramList;
+        param = this.paramObj;
+      }
+
+      saveParam(param).then((res) => {
+        this.$message({ message: '保存成功', type: 'success' });
+        this.getCompute();
+
+        this.save();
+      });
+    },
+
+    save() {
+      if (this.item.currentTaskDiagram.isFirstTask == 1) {
+        this.resultObj = {};
+
+        if (Number(this.reportWeight) < Number(this.paramList[0].CVIWeight)) {
+          this.resultObj = this.paramList[0];
+          this.setDataSave();
+          return false;
+        }
+
+        if (
+          Number(this.reportWeight) >=
+          this.paramList[this.paramList.length - 1].CVIWeight
+        ) {
+          this.resultObj = this.paramList[this.paramList.length - 1];
+          this.setDataSave();
+          return false;
+        }
+
+        for (let i = 1; i < this.paramList.length; i++) {
+          console.log(
+            11,
+            Number(this.paramList[i - 1].CVIWeight),
+            Number(this.reportWeight)
+          );
+          if (
+            Number(this.paramList[i - 1].CVIWeight) <
+            Number(this.reportWeight) &&
+            Number(this.reportWeight) < Number(this.paramList[i].CVIWeight)
+          ) {
+            this.resultObj = this.paramList[i];
+            break;
+          }
+        }
+        this.setDataSave();
+      }
+    },
+
+    setDataSave() {
+      this.$set(
+        this.list[this.resultIdx].extInfo,
+        'taskId',
+        this.resultObj.taskId
+      );
+      this.$set(
+        this.list[this.resultIdx].extInfo,
+        'density',
+        this.resultObj.density
+      );
+      this.$set(
+        this.list[this.resultIdx].extInfo,
+        'billet',
+        this.resultObj.billet
+      );
+      this.$set(
+        this.list[this.resultIdx].extInfo,
+        'taskName',
+        this.resultObj.taskName
+      );
+
+      this.cancel();
+    },
+    // 多选
+    tableDataSelectChange(val) {
+      let arr=[];
+      this.selectArr=[]
+      if(val.length>0){
+        val.map(item=>{
+          arr.push(item.id || item.instanceId)
+        })
+        this.selectArr=arr
+      }
+      console.log(arr);
+
+    },
+    //批量删除
+    batchDelete(){
+      if (!this.selectArr.length) {
+        this.$message.warning('请至少选择一条数据');
+        return;
+      }
+      this.$confirm('确定要删除选中的报工信息吗?', '提示', {
+          type: 'warning'
+        })
+          .then(() => {
+            this.selectArr.forEach((sitem, sindex) => {
+              this.list.forEach((item, index) => {
+                let id=item.id || item.instanceId
+                  if (id==sitem) {
+                    this.list.splice(index, 1);
+                  }
+                })
+            });
+        })
+        .catch(() => {});
+
+    }
+  },
+
+  created() {
+    this.getTaskFn();
+    this.getCompute();
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.tag_box {
+  display: inline-block;
+  padding: 1px 6px;
+  margin-right: 6px;
+  background: #e6a23c;
+  font-size: 11px;
+  color: #fff;
+  border-radius: 2px;
+}
+
+.content_num2 {
+  --input-background-color: #f0f8f2;
+}
+
+.numerate {
+  font-size: 22rpx;
+  color: #157a2c;
+  cursor: pointer;
+}
+
+.material {
+  width: 100%;
+}
+
+.btn_end {
+  text-align: right;
+  margin-bottom: 10px;
+}
+
+.content_table2 {
+  width: 100%;
+
+  .row {
+    width: 100%;
+
+    .item {
+      color: #404446;
+      font-size: 14px;
+      padding-left: 6px;
+    }
+
+    .color157 {
+      color: #157a2c;
+    }
+
+    .ww20 {
+      width: 20%;
+    }
+
+    .ww30 {
+      width: 30%;
+    }
+
+    .ww25 {
+      width: 25%;
+    }
+
+    .ww35 {
+      width: 35%;
+    }
+
+    .ww10 {
+      width: 10%;
+    }
+  }
+
+  .head {
+    height: 32px;
+    background: #f7f9fa;
+    border-top: 1px solid #e3e5e5;
+    border-left: 1px solid #e3e5e5;
+
+    .item {
+      height: 32px;
+      line-height: 32px;
+      border-right: 1px solid #e3e5e5;
+      box-sizing: border-box;
+    }
+  }
+
+  .tr {
+    border-top: 1px solid #e3e5e5;
+    border-left: 1px solid #e3e5e5;
+
+    .item {
+      font-size: 12px;
+      min-height: 32px;
+      display: flex;
+      align-items: center;
+      border-right: 1px solid #e3e5e5;
+      box-sizing: border-box;
+      white-space: normal;
+      word-break: break-all;
+    }
+
+    &:last-child {
+      border-bottom: 1px solid #e3e5e5;
+    }
+  }
+}
+
+.formula_box {
+  font-size: 12px;
+  font-style: normal;
+  font-weight: 400;
+  margin-top: 15px;
+  color: #157a2c;
+}
+
+.reportWeight {
+  font-size: 12px;
+  font-style: normal;
+  font-weight: 400;
+  margin-top: 15px;
+  color: #157a2c;
+}
+
+.content_num {
+  display: flex;
+  align-items: center;
+  padding: 2px;
+  --input-background-color: #f0f8f2;
+
+}
+</style>