Browse Source

Merge branch 'dev' of http://110.41.163.243:9980/kd-aiot/kd-aiot-frontend-mes into dev

yusheng 9 months ago
parent
commit
fbc12fd623
36 changed files with 1034 additions and 490 deletions
  1. 36 18
      src/views/outsourcing/components/details.vue
  2. 0 1
      src/views/pick/pickApply/index.vue
  3. 2 2
      src/views/produce/components/bom/components/workingProcedure.vue
  4. 0 120
      src/views/produce/components/bom/detailsPop.vue
  5. 27 10
      src/views/produce/components/feeding/components/batchProductsBom.vue
  6. 2 2
      src/views/produce/components/feeding/components/semiProductBom.vue
  7. 1 1
      src/views/produce/components/inspection/components/oneJobQualityBomPL.vue
  8. 7 5
      src/views/produce/components/inspection/components/semiProductJobBom.vue
  9. 1 1
      src/views/produce/components/inspection/components/semiProductJobBomPL.vue
  10. 3 3
      src/views/produce/components/inspection/components/workInProgress.vue
  11. 25 11
      src/views/produce/components/jobBooking/components/batchSemiProductJobBom.vue
  12. 1 1
      src/views/produce/components/jobBooking/components/detailPackagingGrouping.vue
  13. 10 0
      src/views/produce/components/jobBooking/components/jobBom.vue
  14. 3 3
      src/views/produce/components/jobBooking/components/newSemiProductJobBom.vue
  15. 40 1
      src/views/produce/components/jobBooking/components/oneJobQualityBomPL.vue
  16. 60 32
      src/views/produce/components/jobBooking/components/semiProductBom.vue
  17. 28 13
      src/views/produce/components/jobBooking/components/semiProductJobBom.vue
  18. 1 1
      src/views/produce/components/jobBooking/components/semiProductJobBomPL.vue
  19. 1 1
      src/views/produce/components/jobBooking/details.vue
  20. 4 1
      src/views/produce/components/outsourcing/details.vue
  21. 10 3
      src/views/produce/components/outsourcing/index.vue
  22. 165 13
      src/views/produce/components/outsourcing/outsourceList.vue
  23. 5 3
      src/views/produce/components/outsourcing/pickingList.vue
  24. 9 3
      src/views/produce/components/picking/index.vue
  25. 146 79
      src/views/produce/components/productionResource/index.vue
  26. 1 1
      src/views/produce/components/warehousing/components/detailsBom.vue
  27. 1 1
      src/views/produce/components/workPlan/components/term.vue
  28. 121 3
      src/views/produce/index.vue
  29. 18 14
      src/views/taskList/components/Ddtails.vue
  30. 101 33
      src/views/taskList/index.vue
  31. 7 2
      src/views/unacceptedProduct/components/factoryAdd.vue
  32. 4 1
      src/views/unacceptedProduct/detail.vue
  33. 26 2
      src/views/unacceptedProduct/rework/index.vue
  34. 3 1
      src/views/warehousing/index.vue
  35. 1 1
      vue.config.js
  36. 164 103
      yarn.lock

+ 36 - 18
src/views/outsourcing/components/details.vue

@@ -137,43 +137,50 @@
           {
             prop: 'categoryCode',
             label: '编码',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
           {
             prop: 'categoryName',
             label: '名称',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
 
           {
             prop: 'sourceType',
             slot: 'sourceType',
             label: '类型',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
 
           {
             prop: 'brandNum',
             label: '牌号',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
 
           {
             prop: 'specification',
             label: '规格',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
 
           {
             prop: 'modelType',
             label: '型号',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
 
           {
             slot: 'totalCount',
             label: '数量',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           }
         ];
       },
@@ -193,64 +200,75 @@
           {
             prop: 'categoryCode',
             label: '编码',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
           {
             prop: 'categoryName',
             label: '名称',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
 
           {
             prop: 'sourceType',
             slot: 'sourceType',
             label: '类型',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
 
           {
             prop: 'brandNum',
             label: '牌号',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
 
           {
             prop: 'modelType',
             label: '型号',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
 
           {
             prop: 'specification',
             label: '规格',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
 
           {
             label: '物料代号',
             prop: 'extInfo.materielCode',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
           {
             label: '客户代号',
             prop: 'extInfo.clientCode',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
           {
             label: '刻码',
             prop: 'extInfo.engrave',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
           {
             label: '重量',
             prop: 'totalWeight',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
 
           {
             slot: 'totalCount',
             label: '数量',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           }
         ];
       },

+ 0 - 1
src/views/pick/pickApply/index.vue

@@ -9,7 +9,6 @@
         ref="table"
         :columns="columns"
         :datasource="datasource"
-        row-key="id"
         cache-key="pickKey"
         :selection.sync="selection"
         autoAmendPage

+ 2 - 2
src/views/produce/components/bom/components/workingProcedure.vue

@@ -669,7 +669,7 @@
             row-key="id"
           >
             <!-- 表头工具栏 -->
-            <template v-slot:toolbar>
+            <!-- <template v-slot:toolbar>
               <el-button
                 size="small"
                 type="primary"
@@ -683,7 +683,7 @@
               <el-link type="primary" @click="handleDel(row, $index)"
                 >删除</el-link
               >
-            </template>
+            </template> -->
           </ele-pro-table>
         </el-tab-pane>
         <el-tab-pane label="工艺文件" name="工艺文件">

+ 0 - 120
src/views/produce/components/bom/detailsPop.vue

@@ -41,37 +41,6 @@
           </el-radio-group>
 
           <div style="margin-left: 100px">
-            <el-button
-              type="primary"
-              size="mini"
-              icon="el-icon-plus"
-              @click="handleAdd"
-              v-if="
-                $hasPermission('main:categoryparam:saveBom') &&
-                currentNodeData.bomType == 1 &&
-                (currentNodeData.parentId == '0' || !currentNodeData.parentId)
-              "
-            >
-              新建
-            </el-button>
-
-            <el-button
-              type="danger"
-              size="mini"
-              icon="el-icon-delete"
-              @click="remove"
-              v-if="
-                (currentNodeData.approvalStatus == 0 ||
-                  currentNodeData.approvalStatus == 3) &&
-                $hasPermission('main:categoryparam:deleteBom') &&
-                (currentNodeData.parentId == '0' ||
-                  !currentNodeData.parentId) &&
-                isNotData
-              "
-            >
-              删除
-            </el-button>
-
             <el-button
               v-if="
                 currentNodeData.bomType == 1 &&
@@ -84,95 +53,6 @@
               >导出</el-button
             >
 
-            <el-button
-              @click="uploadFile"
-              v-if="
-                currentNodeData.bomType == 1 &&
-                (currentNodeData.parentId == '0' || !currentNodeData.parentId)
-              "
-              type="primary"
-              size="mini"
-              icon="el-icon-upload2"
-              plain
-              >导入</el-button
-            >
-            <el-button
-              type="primary"
-              size="mini"
-              icon="el-icon-refresh"
-              plain
-              @click="transformation('P')"
-              :disabled="currentNodeData.approvalStatus != 2"
-              v-if="
-                currentNodeData.bomType == 4 &&
-                (currentNodeData.parentId == '0' ||
-                  !currentNodeData.parentId) &&
-                isNotData
-              "
-              >转换PBOM</el-button
-            >
-
-            <el-button
-              type="primary"
-              size="mini"
-              icon="el-icon-refresh"
-              plain
-              :disabled="currentNodeData.approvalStatus != 2"
-              @click="transformation('E')"
-              v-if="
-                currentNodeData.bomType == 1 &&
-                (currentNodeData.parentId == '0' || !currentNodeData.parentId)
-              "
-              >转换EBOM</el-button
-            >
-
-            <el-button
-              type="primary"
-              size="mini"
-              icon="el-icon-refresh"
-              plain
-              :disabled="currentNodeData.approvalStatus != 2"
-              @click="transformation('M')"
-              v-if="
-                currentNodeData.bomType == 1 &&
-                (searchObj.isProduct ||
-                  ['1', '9'].includes(searchObj.rootPathIdParent)) &&
-                (currentNodeData.parentId == '0' || !currentNodeData.parentId)
-              "
-              >转换MBOM</el-button
-            >
-
-            <el-button
-              type="primary"
-              size="mini"
-              icon="el-icon-refresh"
-              plain
-              :disabled="currentNodeData.approvalStatus != 2"
-              @click="transformation('A')"
-              v-if="
-                currentNodeData.bomType == 1 &&
-                (searchObj.isProduct ||
-                  ['1', '9'].includes(searchObj.rootPathIdParent)) &&
-                (currentNodeData.parentId == '0' || !currentNodeData.parentId)
-              "
-              >转换ABOM</el-button
-            >
-
-            <el-button
-              type="primary"
-              size="mini"
-              @click="handSubmit"
-              v-if="
-                (currentNodeData.approvalStatus == 0 ||
-                  currentNodeData.approvalStatus == 3) &&
-                (currentNodeData.parentId == '0' ||
-                  !currentNodeData.parentId) &&
-                isNotData
-              "
-            >
-              提交发布
-            </el-button>
-
             <el-button
               type="primary"
               size="mini"

+ 27 - 10
src/views/produce/components/feeding/components/batchProductsBom.vue

@@ -123,7 +123,7 @@
         },
         itemData: {},
         itemIndex: '',
-        columnsVersion:0
+        columnsVersion: 0
       };
     },
 
@@ -144,7 +144,11 @@
     computed: {
       columns() {
         let action = {};
-        let columnsVersion=this.columnsVersion;
+        let columnsVersion = this.columnsVersion;
+
+        let selection = {
+          show: false
+        };
 
         if (!this.isEdit) {
           action = {
@@ -160,15 +164,28 @@
           };
         }
 
-        return [
-          {
-            width: 55,
-            type: 'index',
-            columnKey: 'index',
+        if (!this.isEdit) {
+          selection = {
+            width: 45,
+            type: 'selection',
+            columnKey: 'selection',
             align: 'center',
-            label: '序号',
-            fixed: 'left'
-          },
+            fixed: 'left',
+            reserveSelection: true,
+            show: true
+          };
+        }
+
+        return [
+          selection,
+          // {
+          //   width: 55,
+          //   type: 'index',
+          //   columnKey: 'index',
+          //   align: 'center',
+          //   label: '序号',
+          //   fixed: 'left'
+          // },
           {
             minWidth: 120,
             slot: 'batchNo',

+ 2 - 2
src/views/produce/components/feeding/components/semiProductBom.vue

@@ -191,7 +191,7 @@
                   ? '半成品'
                   : row.rootCategoryLevelId == 9
                   ? '产品'
-                  : item.rootCategoryLevelId == 28
+                  : row.rootCategoryLevelId == 28
                   ? '废品'
                   : '';
               }
@@ -326,7 +326,7 @@
       return {
         deviceList: [],
         cacheKeyUrl: 'mes_produce_feeding_semiProductBom',
-        columnsVersion:0
+        columnsVersion: 0
       };
     },
 

+ 1 - 1
src/views/produce/components/inspection/components/oneJobQualityBomPL.vue

@@ -463,7 +463,7 @@
             value: 2
           },
           {
-            name: '让步接',
+            name: '让步接',
             value: 3
           }
         ]

+ 7 - 5
src/views/produce/components/inspection/components/semiProductJobBom.vue

@@ -46,7 +46,7 @@
               ? '半成品'
               : row.rootCategoryLevelId == 9
               ? '产品'
-              : item.rootCategoryLevelId == 28
+              : row.rootCategoryLevelId == 28
               ? '废品'
               : ''
           }}
@@ -220,10 +220,12 @@
             v-model="row.extInfo.isQualified"
             filterable
             placeholder="请选择"
-            :disabled="isDetails ||
-            taskObj.type == 2 ||
-            taskObj.type == 3 ||
-            taskObj.type == 6"
+            :disabled="
+              isDetails ||
+              taskObj.type == 2 ||
+              taskObj.type == 3 ||
+              taskObj.type == 6
+            "
           >
             <el-option
               v-for="item in isQualifiedList"

+ 1 - 1
src/views/produce/components/inspection/components/semiProductJobBomPL.vue

@@ -244,7 +244,7 @@
               ? '半成品'
               : row.rootCategoryLevelId == 9
               ? '产品'
-              : item.rootCategoryLevelId == 28
+              : row.rootCategoryLevelId == 28
               ? '废品'
               : ''
           }}

+ 3 - 3
src/views/produce/components/inspection/components/workInProgress.vue

@@ -113,7 +113,7 @@
       },
       columns() {
         // let materielCode = this.workInfo.singleReport == 0 && ;
-        let columnsVersion=this.columnsVersion
+        let columnsVersion = this.columnsVersion;
 
         return [
           ...[
@@ -168,7 +168,7 @@
                   ? '半成品'
                   : row.rootCategoryLevelId == 9
                   ? '产品'
-                  : item.rootCategoryLevelId == 28
+                  : row.rootCategoryLevelId == 28
                   ? '废品'
                   : '';
               }
@@ -299,7 +299,7 @@
       return {
         deviceList: [],
         cacheKeyUrl: 'mes_produce_feeding_semiProductBom',
-        columnsVersion:0
+        columnsVersion: 0
       };
     },
 

+ 25 - 11
src/views/produce/components/jobBooking/components/batchSemiProductJobBom.vue

@@ -746,26 +746,37 @@
           };
         }
 
-        if (!this.isChoose) {
+        // if (!this.isChoose) {
+        //   selection = {
+        //     width: 45,
+        //     type: 'selection',
+        //     columnKey: 'selection',
+        //     align: 'center',
+        //     fixed: 'left',
+        //     reserveSelection: true
+        //   };
+        // }
+        if (!this.isDetails) {
           selection = {
             width: 45,
             type: 'selection',
             columnKey: 'selection',
             align: 'center',
             fixed: 'left',
-            reserveSelection: true
+            reserveSelection: true,
+            show: true
           };
         }
         return [
-          // selection,
-          {
-            width: 45,
-            type: 'selection',
-            columnKey: 'selection',
-            align: 'center',
-            fixed: 'left',
-            reserveSelection: true
-          },
+          selection,
+          // {
+          //   width: 45,
+          //   type: 'selection',
+          //   columnKey: 'selection',
+          //   align: 'center',
+          //   fixed: 'left',
+          //   reserveSelection: true
+          // },
           {
             width: 55,
             type: 'index',
@@ -1161,8 +1172,11 @@
           return false;
         }
 
+        const data = this.stepsList.find((it) => it.taskId == this.form.taskId);
+
         this.list.forEach((item, index) => {
           this.$set(this.list[index].extInfo, 'taskId', this.form.taskId);
+          this.$set(this.list[index].extInfo, 'taskName', data.taskTypeName);
         });
 
         this.$forceUpdate();

+ 1 - 1
src/views/produce/components/jobBooking/components/detailPackagingGrouping.vue

@@ -325,7 +325,7 @@
                 ? '半成品'
                 : row.rootCategoryLevelId == 9
                 ? '产品'
-                : item.rootCategoryLevelId == 28
+                : row.rootCategoryLevelId == 28
                 ? '废品'
                 : '';
             }

+ 10 - 0
src/views/produce/components/jobBooking/components/jobBom.vue

@@ -277,6 +277,16 @@
             this.$set(this.item.workReportInfo, 'formedNum', formedNum);
             this.$set(this.item.workReportInfo, 'notFormedNum', notFormedNum);
           }
+
+          // if (
+          //   this.clientEnvironmentId == 3 &&
+          //   this.item.currentTaskDiagram.type == 6
+          // ) {
+          //   if (newVal.semiProductList.length != 0) {
+          //     const semiList = newVal.semiProductList;
+          //     // if(semiList.ba)
+          //   }
+          // }
           // this.set()
           // if(this.taskObj.type == 6 ){
           //   console.log('112334',newVal)

+ 3 - 3
src/views/produce/components/jobBooking/components/newSemiProductJobBom.vue

@@ -550,7 +550,7 @@
         stepsList: [],
         selection: [],
         cacheKeyUrl: 'mes_produce_jobBooking_semiProductJobBom',
-        columnsVersion:0,
+        columnsVersion: 0,
         weight: 0,
         reportWeight: 0,
 
@@ -657,7 +657,7 @@
         return this.$store.state.user.taskObj;
       },
       columns() {
-        let columnsVersion=this.columnsVersion
+        let columnsVersion = this.columnsVersion;
         let areaCodeColumns = {
           width: 55,
           show: false
@@ -743,7 +743,7 @@
                 ? '半成品'
                 : row.rootCategoryLevelId == 9
                 ? '产品'
-                : item.rootCategoryLevelId == 28
+                : row.rootCategoryLevelId == 28
                 ? '废品'
                 : '';
             }

+ 40 - 1
src/views/produce/components/jobBooking/components/oneJobQualityBomPL.vue

@@ -271,6 +271,7 @@
                 placeholder="请选择"
                 style="width: 300px"
                 :disabled="isDetails"
+                @change="qualityChange"
               >
                 <el-option
                   v-for="item in qualityList"
@@ -478,7 +479,7 @@
             value: 2
           },
           {
-            name: '让步接',
+            name: '让步接',
             value: 3
           }
         ]
@@ -502,6 +503,34 @@
         this.list.splice(idx, 1);
       },
 
+      qualityChange() {
+        if (this.item.sampleQuality && this.item.sampleQuality.length != 0) {
+          let formedNum = 0;
+          let notFormedNum = 0;
+          this.item.sampleQuality.forEach((item) => {
+            if (item.extInfo.batchReportInfo.length == 0) {
+              const data = item.extInfo;
+              if (data.appearance == 1 || data.appearance == 3) {
+                formedNum++;
+              }
+
+              if (data.appearance == 2) {
+                notFormedNum++;
+              }
+            } else if (item.extInfo.batchReportInfo.length != 0) {
+              const data = item.extInfo.batchReportInfo;
+              data.forEach((it) => {
+                formedNum += Number(it.allFeedQuantity);
+              });
+            }
+          });
+
+          this.$set(this.item.workReportInfo, 'formedNum', formedNum);
+          this.$set(this.item.workReportInfo, 'notFormedNum', notFormedNum);
+          this.$forceUpdate();
+        }
+      },
+
       blurNum2(it, idx, yyIdx) {
         // console.log(it.sample, 'it.sample');
         let value = it.sample;
@@ -523,6 +552,8 @@
             this.$forceUpdate();
           }
         }
+
+        this.qualityChange();
       },
 
       handSample() {
@@ -533,7 +564,15 @@
         };
 
         sample(param).then((res) => {
+          if (res.length != 0) {
+            res.forEach((it) => {
+              if (it.extInfo.batchReportInfo.length == 0) {
+                it.extInfo.isQuality = 1;
+              }
+            });
+          }
           this.item.sampleQuality = res || [];
+          this.qualityChange();
           this.$forceUpdate();
         });
       },

+ 60 - 32
src/views/produce/components/jobBooking/components/semiProductBom.vue

@@ -29,7 +29,13 @@
       </el-table-column>
       <el-table-column label="批次号" type="code" minWidth="110">
         <template slot-scope="{ row, $index }">
-          <el-input v-model="row.batchNo" size="mini" class="content_num" :disabled="isDetails" style="width: 100%"></el-input>
+          <el-input
+            v-model="row.batchNo"
+            size="mini"
+            class="content_num"
+            :disabled="isDetails"
+            style="width: 100%"
+          ></el-input>
         </template>
       </el-table-column>
       <el-table-column label="序列号" type="productSequence" minWidth="110">
@@ -42,19 +48,23 @@
           {{ row.name }}
         </template>
       </el-table-column>
-      <el-table-column label="物品分类" type="rootCategoryLevelId" minWidth="110">
+      <el-table-column
+        label="物品分类"
+        type="rootCategoryLevelId"
+        minWidth="110"
+      >
         <template slot-scope="{ row, $index }">
-            {{
-              row.rootCategoryLevelId == 2
-                ? '在制品'
-                : row.rootCategoryLevelId == 23
-                ? '半成品'
-                : row.rootCategoryLevelId == 9
-                ? '产品'
-                : item.rootCategoryLevelId == 28
-                ? '废品'
-                : ''
-            }}
+          {{
+            row.rootCategoryLevelId == 2
+              ? '在制品'
+              : row.rootCategoryLevelId == 23
+              ? '半成品'
+              : row.rootCategoryLevelId == 9
+              ? '产品'
+              : row.rootCategoryLevelId == 28
+              ? '废品'
+              : ''
+          }}
         </template>
       </el-table-column>
 
@@ -83,8 +93,10 @@
       </el-table-column> -->
 
       <el-table-column
-         v-if="clientEnvironmentId == 3 && workInfo.singleReport == 1"
-        :label="currentTaskDiagram.isFirstTask == 1 ? '物料重量' : '上道工序重量'"
+        v-if="clientEnvironmentId == 3 && workInfo.singleReport == 1"
+        :label="
+          currentTaskDiagram.isFirstTask == 1 ? '物料重量' : '上道工序重量'
+        "
         type="weightUnit"
         width="120"
       >
@@ -99,16 +111,18 @@
         </template>
       </el-table-column>
 
-      <el-table-column 
+      <el-table-column
         v-if="workInfo.singleReport == 1"
-       label="刻码" type="engrave">
+        label="刻码"
+        type="engrave"
+      >
         <template slot-scope="{ row, $index }">
           {{ row.extInfo.engrave }}
         </template>
       </el-table-column>
 
       <el-table-column
-       v-if="workInfo.singleReport == 1"
+        v-if="workInfo.singleReport == 1"
         label="物料代号"
         type="materielCode"
       >
@@ -159,14 +173,15 @@
         </template>
       </el-table-column>
 
-      <el-table-column
-      
-        label="数量"
-        width="90"
-        type="feedQuantity"
-      >
+      <el-table-column label="数量" width="90" type="feedQuantity">
         <template slot-scope="{ row, $index }">
-          <el-input size="mini"  class="content_num" v-model="row.feedQuantity" placeholder="数量" :disabled="isDetails"/>
+          <el-input
+            size="mini"
+            class="content_num"
+            v-model="row.feedQuantity"
+            placeholder="数量"
+            :disabled="isDetails"
+          />
         </template>
       </el-table-column>
 
@@ -183,13 +198,18 @@
       </el-table-column>
 
       <el-table-column
-        v-if="clientEnvironmentId == 3 && workInfo.singleReport ==1"
+        v-if="clientEnvironmentId == 3 && workInfo.singleReport == 1"
         label="位置"
         width="110"
         type="feedQuantity"
       >
         <template slot-scope="{ row, $index }">
-          <el-input size="mini" v-model="row.extInfo.position" placeholder="位置" :disabled="isDetails"/>
+          <el-input
+            size="mini"
+            v-model="row.extInfo.position"
+            placeholder="位置"
+            :disabled="isDetails"
+          />
         </template>
       </el-table-column>
 
@@ -277,10 +297,10 @@
       },
 
       changeHeatNumber() {
-        console.log(this.deviceList,'aahashasoshaiuhuigwsiu');
+        console.log(this.deviceList, 'aahashasoshaiuhuigwsiu');
 
         this.deviceList.forEach((f) => {
-          this.list.forEach((o,index) => {
+          this.list.forEach((o, index) => {
             if (
               o.deviceId &&
               f.id == o.deviceId &&
@@ -288,14 +308,22 @@
             ) {
               // o.extInfo.heatNumber = f.extInfo.heatNumber;
               o['workstationName'] = f.workstationName;
-              this.$set(this.list[index].extInfo,'heatNumber',f.extInfo.heatNumber)
+              this.$set(
+                this.list[index].extInfo,
+                'heatNumber',
+                f.extInfo.heatNumber
+              );
               this.$forceUpdate();
             } else if (this.deviceList.length == 1) {
               o['deviceName'] = this.deviceList[0].name;
               o['deviceId'] = this.deviceList[0].id;
               o['workstationName'] = this.deviceList[0].workstationName;
               // o.extInfo.heatNumber = this.deviceList[0].extInfo.heatNumber;
-              this.$set(this.list[index].extInfo,'heatNumber',this.deviceList[0].extInfo.heatNumber)
+              this.$set(
+                this.list[index].extInfo,
+                'heatNumber',
+                this.deviceList[0].extInfo.heatNumber
+              );
               this.$forceUpdate();
             }
           });
@@ -310,7 +338,7 @@
     margin-bottom: 4px;
   }
 
-  .content_num{
+  .content_num {
     --input-background-color: #f0f8f2;
   }
 </style>

+ 28 - 13
src/views/produce/components/jobBooking/components/semiProductJobBom.vue

@@ -294,7 +294,7 @@
           </el-select>
         </div>
       </template>
-      <!-- <template v-slot:index="{ row, $index }">
+      <template v-slot:index="{ row, $index }">
         <div
           class="tag_box"
           v-if="
@@ -313,7 +313,7 @@
         </div>
 
         <div class="tag_box" v-if="row.isCache">缓</div>
-      </template> -->
+      </template>
       <!-- 操作列 -->
       <template v-slot:action="{ row, $index }" v-if="!isDetails">
         <el-link
@@ -697,26 +697,38 @@
           };
         }
 
-        if (!this.isChoose) {
+        // if (!this.isChoose) {
+        //   selection = {
+        //     width: 45,
+        //     type: 'selection',
+        //     columnKey: 'selection',
+        //     align: 'center',
+        //     fixed: 'left',
+        //     reserveSelection: true
+        //   };
+        // }
+
+        if (!this.isDetails) {
           selection = {
             width: 45,
             type: 'selection',
             columnKey: 'selection',
             align: 'center',
             fixed: 'left',
-            reserveSelection: true
+            reserveSelection: true,
+            show: true
           };
         }
         return [
-          // selection,
-          {
-            width: 45,
-            type: 'selection',
-            columnKey: 'selection',
-            align: 'center',
-            fixed: 'left',
-            reserveSelection: true
-          },
+          selection,
+          // {
+          //   width: 45,
+          //   type: 'selection',
+          //   columnKey: 'selection',
+          //   align: 'center',
+          //   fixed: 'left',
+          //   reserveSelection: true
+          // },
           {
             width: 55,
             type: 'index',
@@ -1043,8 +1055,11 @@
           return false;
         }
 
+        const data = this.stepsList.find((it) => it.taskId == this.form.taskId);
+
         this.list.forEach((item, index) => {
           this.$set(this.list[index].extInfo, 'taskId', this.form.taskId);
+          this.$set(this.list[index].extInfo, 'taskName', data.taskTypeName);
         });
 
         this.$forceUpdate();

+ 1 - 1
src/views/produce/components/jobBooking/components/semiProductJobBomPL.vue

@@ -378,7 +378,7 @@
               ? '半成品'
               : row.rootCategoryLevelId == 9
               ? '产品'
-              : item.rootCategoryLevelId == 28
+              : row.rootCategoryLevelId == 28
               ? '废品'
               : ''
           }}

+ 1 - 1
src/views/produce/components/jobBooking/details.vue

@@ -164,7 +164,7 @@
 
           <oneJobQualityBomPL
             v-if="
-              taskType == 6 &&
+              objData.currentTaskDiagram.type == 6 &&
               clientEnvironmentId == 3 &&
               objData.singleReport == 0
             "

+ 4 - 1
src/views/produce/components/outsourcing/details.vue

@@ -418,7 +418,10 @@
         });
       },
       refresh() {
-        this.getList(this.workListIds);
+        this.$nextTick(() => {
+          this.getList(this.workListIds);
+        });
+        // this.getList(this.workListIds);
       },
 
       handleAdd() {

+ 10 - 3
src/views/produce/components/outsourcing/index.vue

@@ -418,7 +418,8 @@
         activeName: '1',
         textarea2: '',
         gysList: [],
-        factoryList: []
+        factoryList: [],
+        clientEnvironmentId: this.$store.state.user.info.clientEnvironmentId
       };
     },
     props: {
@@ -434,13 +435,19 @@
           console.log(val, 'outsourceForm');
           Object.assign(this.attributeData, val);
 
-          console.log(this.attributeData.newStepsList, 'attributeData');
+          // console.log(this.attributeData.newStepsList, 'attributeData');
 
           // this.newStepsList = this.attributeData.newStepsList.filter(
           //   (item) => item.type != 2 && item.type != 3 && item.type != 6
           // );
+          if (this.clientEnvironmentId == 3) {
+            this.newStepsList = this.attributeData.newStepsList.filter(
+              (item) => item.type != 6
+            );
+          } else {
+            this.newStepsList = this.attributeData.newStepsList;
+          }
 
-          this.newStepsList = this.attributeData.newStepsList;
           this.getWarehouseFn();
           this.produceFn();
         },

+ 165 - 13
src/views/produce/components/outsourcing/outsourceList.vue

@@ -19,6 +19,17 @@
     <el-tabs v-model="activeName">
       <el-tab-pane label="物品清单" name="0">
         <div class="materialList">
+          <div class="u-reset">
+            <el-button
+              type="primary"
+              size="small"
+              class="u-reset-button"
+              @click="openPicking(2, 'goods')"
+              v-if="clientEnvironmentId == 3"
+            >
+              添加
+            </el-button>
+          </div>
           <!--  <div class="u-reset" style="display: flex;" v-if="clientEnvironmentId != 2">
 						<el-checkbox color="#fff" v-model="checkedAll" :checked="seletedAll" @change="_seletedAll">全选
 						</el-checkbox>
@@ -192,9 +203,18 @@
               show-overflow-tooltip
             >
               <template slot-scope="{ row, $index }">
-                {{ row.feedQuantity }}
+                <el-input
+                  v-model="row.feedQuantity"
+                  v-if="row.isSelection == '1'"
+                  @input="inputNum(row, $index)"
+                ></el-input>
+                <span v-else> {{ row.feedQuantity }}</span>
               </template>
+              <!-- <template slot-scope="{ row, $index }" v-else>
+                {{ row.feedQuantity }}
+              </template> -->
             </el-table-column>
+
             <el-table-column
               label="重量"
               type="weightUnit"
@@ -229,6 +249,14 @@
                 {{ row.extInfo.clientCode }}
               </template>
             </el-table-column>
+
+            <el-table-column label="操作" show-overflow-tooltip fixed="right">
+              <template slot-scope="{ row, $index }">
+                <el-button type="text" @click="deleteData(row, $index)"
+                  >删除</el-button
+                >
+              </template>
+            </el-table-column>
           </el-table>
         </div>
       </el-tab-pane>
@@ -239,7 +267,7 @@
               type="primary"
               size="small"
               class="u-reset-button"
-              @click="openPicking(2)"
+              @click="openPicking(2, 'belting')"
             >
               添加
             </el-button>
@@ -258,6 +286,19 @@
                     <span>编码</span>{{ item.code }}
                   </div>
 
+                  <div v-if="clientEnvironmentId == 3">
+                    <el-button type="text" @click="convertList(item, index)"
+                      >转物品清单</el-button
+                    >
+
+                    <el-button
+                      type="text"
+                      style="color: red"
+                      @click="deleteBomMaterial(item, index)"
+                      >删除</el-button
+                    >
+                  </div>
+
                   <div
                     v-for="(itm, index) in tableH(item.rootCategoryLevelId)"
                     :key="index"
@@ -324,7 +365,7 @@
               type="primary"
               size="small"
               class="u-reset-button"
-              @click="openPicking(3)"
+              @click="openPicking(3, 'output')"
             >
               添加
             </el-button>
@@ -353,10 +394,19 @@
                   <div class="items content_num">
                     <span>数量</span>
                     <input
-                      style="width: 90% !important"
+                      style="width: 30% !important"
                       v-model="item.demandQuantity"
                     />
                   </div>
+
+                  <div>
+                    <el-button
+                      type="text"
+                      @click="deleteOutput(index)"
+                      style="color: red"
+                      >删除</el-button
+                    >
+                  </div>
                 </div>
               </div>
             </label>
@@ -459,7 +509,8 @@
         checkListLen: 0,
 
         warehouseList: [],
-        pickOutInListSelect: []
+        pickOutInListSelect: [],
+        selectionIds: []
       };
     },
 
@@ -499,14 +550,25 @@
       // 	// this.outsourceMaterialFn()
       // 	// this.getWarehouseFn()
       // },
-      allSelection(e, item) {
+      allSelection(e, item, type) {
         if (e == 2) {
-          if (item.length) {
-            item.map((v) => {
-              this.bomMaterialList.push(v);
+          if (type == 'goods') {
+            item.map((it) => {
+              it.isSelection = '1';
+              it.categoryCode = it.code;
+              it.feedQuantity = 1;
+              it.categoryId = it.id;
+              it.newWeight = it.weight;
+              this.pickOutInList.push(this.deepCopy(it));
             });
+            this.selectionData();
+          } else {
+            if (item.length) {
+              item.map((v) => {
+                this.bomMaterialList.push(v);
+              });
+            }
           }
-          console.log(this.bomMaterialList);
         } else if (e == 3) {
           if (item.length) {
             this.standardOutputList = item;
@@ -514,8 +576,34 @@
         }
       },
 
-      openPicking(id) {
-        this.$refs.pickingListRef.open(id);
+      // selectionData(ids) {
+      //   this.$nextTick(() => {
+      //     this.tableData.forEach((row) => {
+      //       if (ids.includes(row.id)) {
+      //         this.$refs.table.toggleRowSelection(row, true);
+      //       }
+      //     });
+      //   });
+      // },
+
+      deepCopy(obj, hash = new WeakMap()) {
+        if (obj === null) return null;
+        if (obj instanceof Date) return new Date(obj);
+        if (obj instanceof RegExp) return new RegExp(obj);
+        if (typeof obj !== 'object' && typeof obj !== 'function') return obj;
+        if (hash.has(obj)) return hash.get(obj);
+
+        const result = Array.isArray(obj) ? [] : {};
+        hash.set(obj, result);
+
+        return Object.keys(obj).reduce((acc, key) => {
+          acc[key] = this.deepCopy(obj[key], hash);
+          return acc;
+        }, result);
+      },
+
+      openPicking(id, type) {
+        this.$refs.pickingListRef.open(id, type);
       },
 
       outsourceMaterialFn(res) {
@@ -525,6 +613,7 @@
         this.pickOutInList = _arr.reduce((acc, item) => {
           const existingItem = acc.find((existing) => existing.id === item.id);
           if (!existingItem) {
+            item.isSelection = '2';
             acc.push(item);
           }
           return acc;
@@ -578,6 +667,17 @@
         });
       },
 
+      inputNum(item, index) {
+        if (item.feedQuantity) {
+          const totalWeight = Number(item.feedQuantity) * Number(item.weight);
+          this.$set(this.pickOutInList[index], 'newWeight', totalWeight);
+          this.$forceUpdate();
+        } else {
+          this.$set(this.pickOutInList[index], 'newWeight', item.weight);
+          this.$forceUpdate();
+        }
+      },
+
       // 仓库
       getWarehouseFn() {
         getWarehouseList().then((res) => {
@@ -585,6 +685,10 @@
         });
       },
 
+      deleteData(item, index) {
+        this.pickOutInList.splice(index, 1);
+      },
+
       handTab(item) {
         this.actTab = item.name;
       },
@@ -647,6 +751,39 @@
         this.pickOutInListSelect = val;
       },
 
+      deleteOutput(index) {
+        this.standardOutputList.splice(index, 1);
+      },
+
+      deleteBomMaterial(item, index) {
+        this.bomMaterialList.splice(index, 1);
+      },
+
+      convertList(item, index) {
+        if (item.demandQuantity) {
+          item.categoryCode = item.code;
+          item.feedQuantity = item.demandQuantity;
+          item.isSelection = '1';
+          item.categoryId = item.id;
+          item.newWeight = item.weight;
+          this.pickOutInList.push(item);
+          this.selectionData();
+          this.bomMaterialList.splice(index, 1);
+          this.$forceUpdate();
+        } else {
+          return this.$message({
+            message: '请输入转换数量',
+            type: 'warning'
+          });
+        }
+      },
+
+      selectionData() {
+        this.$nextTick(() => {
+          this.$refs.pickOutRef.toggleAllSelection();
+        });
+      },
+
       scrolltolower() {},
 
       addPicking(id) {
@@ -692,6 +829,16 @@
           _pickOutInList = this.pickOutInListSelect;
         }
 
+        for (let i = 0; i < _pickOutInList.length; i++) {
+          if (
+            !_pickOutInList[i].feedQuantity &&
+            _pickOutInList[i].isSelection == '1'
+          ) {
+            this.$message.warning('物品数量不能为空');
+            return;
+          }
+        }
+
         let param = {
           ...this.outObj,
           isRelease: isRelease,
@@ -800,7 +947,7 @@
 
   .items {
     font-size: 12px;
-    width: 28%;
+    width: 25%;
     display: flex;
     align-items: center;
     white-space: nowrap;
@@ -818,4 +965,9 @@
       background-color: #f7f9fa;
     }
   }
+
+  ::v-deep .el-input--medium .el-input__inner {
+    height: 26px;
+    line-height: 26px;
+  }
 </style>

+ 5 - 3
src/views/produce/components/outsourcing/pickingList.vue

@@ -189,7 +189,8 @@
         selection: [],
 
         allSelection: [],
-        temporaryList: []
+        temporaryList: [],
+        type: ''
       };
     },
 
@@ -575,6 +576,7 @@
             });
           });
         } else if (this.isType == 'weiwai') {
+          this.type = item;
           this.treeIds = '9, 23, 2, 1, 4, 14, 5, 8, 16, 13, 15, 6, 10, 22';
           this.visible = true;
         }
@@ -619,7 +621,7 @@
 
             resolve();
           }).then(() => {
-            this.$emit('allSelection', this.id, this.allSelection);
+            this.$emit('allSelection', this.id, this.allSelection, this.type);
             this.handleClose();
           });
         } else {
@@ -627,7 +629,7 @@
             (a, b) => a.rootCategoryLevelId - b.rootCategoryLevelId
           );
 
-          this.$emit('allSelection', this.id, this.allSelection);
+          this.$emit('allSelection', this.id, this.allSelection, this.type);
           this.handleClose();
         }
       }

+ 9 - 3
src/views/produce/components/picking/index.vue

@@ -52,10 +52,10 @@
               <div class="name">产品名称</div>
               <div class="content">{{ item.productName }}</div>
             </div>
-            <div class="col">
+            <!-- <div class="col">
               <div class="name">批次号</div>
               <div class="content">{{ item.batchNo }}</div>
-            </div>
+            </div> -->
             <div class="col pd6" v-if="clientEnvironmentId != 21">
               <el-button
                 type="primary"
@@ -80,7 +80,7 @@
           >
             <el-table-column label="序号" type="index" width="60">
               <template slot-scope="{ row, $index }">
-                {{ $index }}
+                {{ $index + 1 }}
               </template>
             </el-table-column>
 
@@ -223,6 +223,12 @@
               </template>
             </el-table-column>
 
+            <!-- <el-table-column
+              label="所选领料仓库的库存数量"
+              prop="availableCountBase"
+            >
+            </el-table-column> -->
+
             <el-table-column label="操作" fixed="right" width="100px">
               <template slot-scope="{ $index, row }">
                 <el-link type="danger" @click="removeItem(idx, $index)"

+ 146 - 79
src/views/produce/components/productionResource/index.vue

@@ -2,8 +2,14 @@
   <div>
     <el-tabs v-model="activeName" type="border-card" @tab-click="tabsChange">
       <el-tab-pane lazy label="工艺参数" name="工艺参数">
-        <ele-pro-table ref="table" :datasource="newBomObj.produceList" :immediate="true" :need-page="false"
-          :columns="produceColumns" height="260px">
+        <ele-pro-table
+          ref="table"
+          :datasource="newBomObj.produceList"
+          :immediate="true"
+          :need-page="false"
+          :columns="produceColumns"
+          height="260px"
+        >
         </ele-pro-table>
       </el-tab-pane>
       <el-tab-pane lazy label="质检参数" name="质检参数"></el-tab-pane>
@@ -14,12 +20,19 @@
         <normalHoursInfo :normalHours="newBomObj.normalHours"></normalHoursInfo>
       </el-tab-pane>
       <el-tab-pane lazy label="材料定额" name="材料定额">
-        <ele-pro-table ref="materialQuotaTable" :columns="materialQuotaColumns" :datasource="newBomObj.materialQuota"
-          :need-page="false" :immediate="true" height="260px">
+        <ele-pro-table
+          ref="materialQuotaTable"
+          :columns="materialQuotaColumns"
+          :datasource="newBomObj.materialQuota"
+          :need-page="false"
+          :immediate="true"
+          height="260px"
+        >
           <template v-slot:toolbar>
             基本数量:
             <span style="color: rgb(21, 122, 44)">
-              {{ newBomObj.baseCount }} {{ newBomObj.baseCountUnit }}</span>
+              {{ newBomObj.baseCount }} {{ newBomObj.baseCountUnit }}</span
+            >
           </template>
 
           <template v-slot:isReworkBom="{ row }">
@@ -27,36 +40,64 @@
           </template>
 
           <template v-slot:bomArtFiles="{ row }">
-            <el-button size="mini" type="primary" @click="downloadFile(row.bomArtFiles)">下载</el-button>
+            <el-button
+              size="mini"
+              type="primary"
+              @click="downloadFile(row.bomArtFiles)"
+              >下载</el-button
+            >
           </template>
         </ele-pro-table>
       </el-tab-pane>
 
       <el-tab-pane lazy label="关键设备" name="关键设备">
-        <ele-pro-table ref="standardDeviceTable" :columns="standardColumns" :datasource="newBomObj.standardDevice"
-          row-key="id" height="260px">
+        <ele-pro-table
+          ref="standardDeviceTable"
+          :columns="standardColumns"
+          :datasource="newBomObj.standardDevice"
+          row-key="id"
+          height="260px"
+        >
         </ele-pro-table>
       </el-tab-pane>
 
       <el-tab-pane lazy label="制造资源" name="制造资源">
-        <ele-pro-table ref="resourceTable" :columns="materialQuotaColumns" :datasource="newBomObj.resource"
-          :need-page="false" :immediate="true" height="260px">
+        <ele-pro-table
+          ref="resourceTable"
+          :columns="materialQuotaColumns"
+          :datasource="newBomObj.resource"
+          :need-page="false"
+          :immediate="true"
+          height="260px"
+        >
           <template v-slot:isReworkBom="{ row }">
             {{ row.isReworkBom ? '是' : '否' }}
           </template>
 
           <template v-slot:bomArtFiles="{ row }">
-            <el-button size="mini" type="primary" @click="downloadFile(row.bomArtFiles)">下载</el-button>
+            <el-button
+              size="mini"
+              type="primary"
+              @click="downloadFile(row.bomArtFiles)"
+              >下载</el-button
+            >
           </template>
         </ele-pro-table>
       </el-tab-pane>
       <el-tab-pane lazy label="替代料" name="替代料">
-        <ele-pro-table ref="replaceMaterialTable" :columns="materialQuotaColumns"
-          :datasource="newBomObj.replaceMaterial" :need-page="false" :immediate="true" height="260px">
+        <ele-pro-table
+          ref="replaceMaterialTable"
+          :columns="materialQuotaColumns"
+          :datasource="newBomObj.replaceMaterial"
+          :need-page="false"
+          :immediate="true"
+          height="260px"
+        >
           <template v-slot:toolbar>
             基本数量:
             <span style="color: rgb(21, 122, 44)">
-              {{ newBomObj.baseCount2 }} {{ newBomObj.baseCountUnit2 }}</span>
+              {{ newBomObj.baseCount2 }} {{ newBomObj.baseCountUnit2 }}</span
+            >
           </template>
 
           <template v-slot:isReworkBom="{ row }">
@@ -64,26 +105,52 @@
           </template>
 
           <template v-slot:bomArtFiles="{ row }">
-            <el-button size="mini" type="primary" @click="downloadFile(row.bomArtFiles)">下载</el-button>
+            <el-button
+              size="mini"
+              type="primary"
+              @click="downloadFile(row.bomArtFiles)"
+              >下载</el-button
+            >
           </template>
         </ele-pro-table>
       </el-tab-pane>
       <el-tab-pane lazy label="工种" name="工种">
-        <ele-pro-table ref="aptitudeParamTable" :columns="aptitudeParamColumns" :datasource="newBomObj.aptitudeParam"
-          row-key="id" height="260px">
+        <ele-pro-table
+          ref="aptitudeParamTable"
+          :columns="aptitudeParamColumns"
+          :datasource="newBomObj.aptitudeParam"
+          row-key="id"
+          height="260px"
+        >
         </ele-pro-table>
       </el-tab-pane>
       <el-tab-pane lazy label="工艺文件" name="工艺文件">
-        <ele-pro-table ref="fileParamTable" :columns="fileParamColumns" :datasource="newBomObj.fileParam" row-key="id"
-          height="260px">
+        <ele-pro-table
+          ref="fileParamTable"
+          :columns="fileParamColumns"
+          :datasource="newBomObj.fileParam"
+          row-key="id"
+          height="260px"
+        >
           <template v-slot:path="{ row }">
-            <el-button v-if="row.path" size="mini" type="primary" @click="downloadFile(row.path)">下载</el-button>
+            <el-button
+              v-if="row.path"
+              size="mini"
+              type="primary"
+              @click="downloadFile(row.path)"
+              >下载</el-button
+            >
           </template>
         </ele-pro-table>
       </el-tab-pane>
       <el-tab-pane lazy label="标准产出" name="标准产出">
-        <ele-pro-table ref="standardTable" :columns="standardColumns" :datasource="newBomObj.standardOutput"
-          row-key="id" height="260px">
+        <ele-pro-table
+          ref="standardTable"
+          :columns="standardColumns"
+          :datasource="newBomObj.standardOutput"
+          row-key="id"
+          height="260px"
+        >
         </ele-pro-table>
       </el-tab-pane>
     </el-tabs>
@@ -91,69 +158,69 @@
 </template>
 
 <script>
-import {
-  produceColumns,
-  materialQuotaColumns,
-  aptitudeParamColumns,
-  fileParamColumns,
-  standardColumns
-} from './columnsTab.js';
-
-import beatInfo from './components/beatInfo.vue';
-import normalHoursInfo from './components/normalHoursInfo.vue';
-
-import { getFile } from '@/api/system/file';
-export default {
-  components: {
-    beatInfo,
-    normalHoursInfo
-  },
-
-  props: {
-    BomObj: {
-      type: Object
-    }
-  },
+  import {
+    produceColumns,
+    materialQuotaColumns,
+    aptitudeParamColumns,
+    fileParamColumns,
+    standardColumns
+  } from './columnsTab.js';
+
+  import beatInfo from './components/beatInfo.vue';
+  import normalHoursInfo from './components/normalHoursInfo.vue';
+
+  import { getFile } from '@/api/system/file';
+  export default {
+    components: {
+      beatInfo,
+      normalHoursInfo
+    },
+
+    props: {
+      BomObj: {
+        type: Object
+      }
+    },
 
-  watch: {
-    BomObj: {
-      handler(val) {
-        this.newBomObj = JSON.parse(JSON.stringify(val));
+    watch: {
+      BomObj: {
+        handler(val) {
+          this.newBomObj = JSON.parse(JSON.stringify(val));
 
-        this.$forceUpdate();
-      },
-      immediate: true,
-      deep: true
-    }
-  },
-
-  data() {
-    return {
-      activeName: '工艺参数',
-      newBomObj: {},
-
-      produceColumns,
-      materialQuotaColumns,
-      aptitudeParamColumns,
-      fileParamColumns,
-      standardColumns
-    };
-  },
-
-  methods: {
-    tabsChange(tab) {
-      this.activeName = tab.name;
+          this.$forceUpdate();
+        },
+        immediate: true,
+        deep: true
+      }
     },
 
-    downloadFile(url) {
-      getFile({ objectName: url }, '附件');
+    data() {
+      return {
+        activeName: '工艺参数',
+        newBomObj: {},
+
+        produceColumns,
+        materialQuotaColumns,
+        aptitudeParamColumns,
+        fileParamColumns,
+        standardColumns
+      };
+    },
+
+    methods: {
+      tabsChange(tab) {
+        this.activeName = tab.name;
+      },
+
+      downloadFile(url) {
+        getFile({ objectName: url }, '附件');
+      }
     }
-  }
-};
+  };
 </script>
 
 <style lang="scss">
-.el-tabs__content {
-  padding: 4px !important;
-}
+  .el-tabs__content {
+    padding: 4px !important;
+  }
 </style>

+ 1 - 1
src/views/produce/components/warehousing/components/detailsBom.vue

@@ -400,7 +400,7 @@
                 ? '半成品'
                 : row.rootCategoryLevelId == 9
                 ? '产品'
-                : item.rootCategoryLevelId == 28
+                : row.rootCategoryLevelId == 28
                 ? '废品'
                 : '';
             }

+ 1 - 1
src/views/produce/components/workPlan/components/term.vue

@@ -114,7 +114,7 @@
             value: 2
           },
           {
-            name: '让步接',
+            name: '让步接',
             value: 3
           }
         ],

+ 121 - 3
src/views/produce/index.vue

@@ -236,6 +236,24 @@
                   v-if="isOutsource"
                 ></outsourceList>
               </div>
+
+              <!-- <div class="menu-container">
+                <div class="main-btn" @click="toggleMenu">
+                  <span>+</span>
+                </div>
+
+                <transition-group name="fan" tag="div">
+                  <div
+                    v-for="(btn, index) in buttons"
+                    :key="btn.label"
+                    class="sub-btn"
+                    :style="getBtnStyle(index)"
+                    v-show="isOpen"
+                  >
+                    {{ btn.label }}
+                  </div>
+                </transition-group>
+              </div> -->
             </div>
           </template>
         </ele-split-layout>
@@ -277,6 +295,9 @@
 
     <!-- 周转车列表 -->
     <turnover ref="turnoverRef" />
+
+    <!-- BOM详情 -->
+    <BomDetailsPop ref="bomDrawer"></BomDetailsPop>
   </div>
 </template>
 
@@ -307,6 +328,7 @@
   import device from './components/device/index.vue';
   import turnover from './components/turnover/index.vue';
   import outsourcingDetails from './components/outsourcing/details.vue';
+  import BomDetailsPop from './components/bom/detailsPop.vue';
   import { parameterGetByCode } from '@/api/system/dictionary-data';
   import {
     getByTaskId,
@@ -340,7 +362,8 @@
       createError,
       device,
       turnover,
-      outsourcingDetails
+      outsourcingDetails,
+      BomDetailsPop
     },
     data() {
       return {
@@ -385,7 +408,15 @@
           taskId: null,
           workOrderId: null,
           bomCategoryId: null
-        }
+        },
+        isOpen: false,
+        buttons: [
+          { label: '按钮1' },
+          { label: '按钮2' },
+          { label: '按钮3' },
+          { label: '按钮4' }
+        ],
+        radius: 120 // 按钮展开的半径
       };
     },
 
@@ -415,6 +446,20 @@
         this.name = '';
         this.seekInput();
       },
+
+      toggleMenu() {
+        this.isOpen = !this.isOpen;
+      },
+      getBtnStyle(index) {
+        // 计算扇形角度分布
+        const angle = Math.PI / 2 / (this.buttons.length - 1); // 90° 扇形
+        const x = Math.cos(angle * index) * this.radius;
+        const y = Math.sin(angle * index) * this.radius;
+        return {
+          transform: `translate(${x}px, ${y}px)`,
+          transitionDelay: `${index * 0.05}s`
+        };
+      },
       // 前端筛选
       seekInput() {
         // console.log(activeName);
@@ -728,8 +773,21 @@
           } else if (this.workListIds.length < 1)
             return this.$message.warning('请选择工单!');
           else {
+            console.log(this.workData);
+            const row = this.workData.list[0];
+            let rowData = {
+              categoryId: row.categoryId,
+              categoryName: row.bomCategoryName,
+              code: row.code,
+              versions: row.bomCategoryVersions,
+              rootPathIdParent: row.categoryLevelPathIdParent || '',
+              isProduct: true,
+              bomType: Number(row.bomType),
+              isTemp: 0
+            };
+            this.$refs.bomDrawer.open(rowData);
             // /
-            console.log(this.workData.list, 'this.workData.list');
+            // console.log(this.workData.list, 'this.workData.list');
           }
           //    let rowData = {
           //   categoryId: row.id,
@@ -770,6 +828,8 @@
             ...res.data
           };
           this.outsourceForm.name = this.taskObj.name + '委外';
+          this.isStep = false;
+          this.isOutsource = false;
 
           if (res.data.outsource) {
             this.isType = '3';
@@ -1024,4 +1084,62 @@
     height: calc((100vh - 70px - 50px - 80px - 12px));
     background: #f0f3f3;
   }
+
+  .menu-container {
+    position: relative;
+    width: 200px;
+    height: 200px;
+    margin: 100px;
+  }
+
+  /* 主按钮 */
+  .main-btn {
+    width: 60px;
+    height: 60px;
+    background: #3498db;
+    border-radius: 50%;
+    color: #fff;
+    font-size: 30px;
+    text-align: center;
+    line-height: 60px;
+    cursor: pointer;
+    position: absolute;
+    left: 0;
+    bottom: 0;
+    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3);
+    transition: transform 0.3s;
+  }
+  .main-btn:hover {
+    transform: rotate(90deg);
+  }
+
+  /* 子按钮 */
+  .sub-btn {
+    width: 40px;
+    height: 40px;
+    background: #e74c3c;
+    border-radius: 50%;
+    color: #fff;
+    font-size: 14px;
+    text-align: center;
+    line-height: 50px;
+    position: absolute;
+    left: 5px;
+    bottom: 5px;
+    box-shadow: 0 3px 8px rgba(0, 0, 0, 0.25);
+    transform: translate(0, 0);
+    transition: all 0.4s ease;
+    opacity: 1;
+  }
+
+  /* 动画进入/离开 */
+  .fan-enter-active,
+  .fan-leave-active {
+    transition: all 0.4s ease;
+  }
+  .fan-enter,
+  .fan-leave-to {
+    opacity: 0;
+    transform: translate(0, 0);
+  }
 </style>

+ 18 - 14
src/views/taskList/components/Ddtails.vue

@@ -205,32 +205,36 @@
               trigger: 'blur'
             }
           ],
-          qualifiedWeight: [
-            {
-              required: true,
-              message: '请输入合格重量',
-              trigger: 'blur'
-            }
-          ],
+          // qualifiedWeight: [
+          //   {
+          //     required: true,
+          //     message: '请输入合格重量',
+          //     trigger: 'blur'
+          //   }
+          // ],
           unqualifiedQuantity: [
             {
               required: true,
               message: '请输入不合格数量',
               trigger: 'blur'
             }
-          ],
-          unqualifiedWeight: [
-            {
-              required: true,
-              message: '请输入不合格重量',
-              trigger: 'blur'
-            }
           ]
+          // unqualifiedWeight: [
+          //   {
+          //     required: true,
+          //     message: '请输入不合格重量',
+          //     trigger: 'blur'
+          //   }
+          // ]
         },
         current: {},
         detailsVisible: false,
         fieldMap: {
           orderList: [
+            { label: '计划批次号:', prop: 'batchNo' },
+            { label: '产品编码', prop: 'productCode' },
+            { label: '名称', prop: 'productName' },
+            { label: '规格', prop: 'specification' },
             { label: '生产订单编码:', prop: 'workOrderCode' },
             { label: '计划编号:', prop: 'productionPlanCode' },
             { label: '工艺路线:', prop: 'produceRoutingName' },

+ 101 - 33
src/views/taskList/index.vue

@@ -4,7 +4,7 @@
       <task-search @search="reload"></task-search>
       <!-- <taskDialog-search></taskDialog-search> -->
       <el-tabs v-model="tabValue" type="card" @tab-click="handleTabClick">
-        <!-- <el-tab-pane
+        <el-tab-pane
           label="我的任务"
           name="1"
           v-if="$hasPermission('mes:taskreport:myorder')"
@@ -13,10 +13,10 @@
           label="全部任务"
           name="2"
           v-if="$hasPermission('mes:taskreport:allorder')"
-        ></el-tab-pane> -->
+        ></el-tab-pane>
 
-        <el-tab-pane label="我的任务" name="1"></el-tab-pane>
-        <el-tab-pane label="全部任务" name="2"></el-tab-pane>
+        <!-- <el-tab-pane label="我的任务" name="1"></el-tab-pane>
+        <el-tab-pane label="全部任务" name="2"></el-tab-pane> -->
       </el-tabs>
     </el-card>
     <ele-pro-table
@@ -45,6 +45,13 @@
         </el-link>
       </template>
       <template v-slot:action="{ row }">
+        <!-- <el-link
+          v-if="tabValue == '2'"
+          :underline="false"
+          type="primary"
+          @click="reassignTask(row)"
+          >转派
+        </el-link> -->
         <el-link
           :underline="false"
           type="primary"
@@ -58,6 +65,37 @@
     </ele-pro-table>
     <modifyDialog ref="modifyRef" />
     <Ddtails ref="detailsRef" @success="reload" />
+
+    <el-dialog
+      title="选择人员"
+      :visible.sync="dialogFormVisible"
+      width="30%"
+      center
+    >
+      <el-form :model="form">
+        <el-form-item label="人员">
+          <el-select
+            size="mini"
+            class="content_num"
+            filterable
+            v-model="form.userId"
+            placeholder="请选择任务人员"
+          >
+            <el-option
+              v-for="item in teamList"
+              :label="item.name"
+              :value="item.id"
+              :key="item.id"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible = false">取 消</el-button>
+        <el-button type="primary" @click="chooseUser">确 定</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -65,6 +103,7 @@
   import TaskSearch from './components/task-search.vue';
   import Ddtails from './components/Ddtails.vue';
   import modifyDialog from '@/views/taskList/components/modifyDialog.vue';
+  import { getteampage } from '@/api/produceWord/index.js';
   import {
     pageByCurrentUser,
     pageByCurrentUserLeader,
@@ -81,7 +120,12 @@
           { label: '待生产', value: 4 },
           { label: '生产中', value: 5 },
           { label: '待下达', value: 8 }
-        ]
+        ],
+        form: {
+          userId: ''
+        },
+        dialogFormVisible: false,
+        teamList: []
       };
     },
     computed: {
@@ -329,7 +373,7 @@
           {
             columnKey: 'action',
             label: '操作',
-            width: 150,
+            width: 200,
             align: 'center',
             resizable: false,
             fixed: 'right',
@@ -340,25 +384,25 @@
     },
     created() {},
     mounted() {
-      console.log(
-        this.$hasPermission('mes:taskreport:myorder'),
-        this.$hasPermission('mes:taskreport:allorder')
-      );
+      // console.log(
+      //   this.$hasPermission('mes:taskreport:myorder'),
+      //   this.$hasPermission('mes:taskreport:allorder')
+      // );
 
-      // if (this.$hasPermission('mes:taskreport:myorder')) {
-      //   this.tabValue = '1';
-      // }
+      if (this.$hasPermission('mes:taskreport:myorder')) {
+        this.tabValue = '1';
+      }
 
-      // if (this.$hasPermission('mes:taskreport:allorder')) {
-      //   this.tabValue = '2';
-      // }
+      if (this.$hasPermission('mes:taskreport:allorder')) {
+        this.tabValue = '2';
+      }
 
-      // if (
-      //   !this.$hasPermission('mes:taskreport:myorder') &&
-      //   !this.$hasPermission('mes:taskreport:allorder')
-      // ) {
-      //   this.tabValue = '';
-      // }
+      if (
+        !this.$hasPermission('mes:taskreport:myorder') &&
+        !this.$hasPermission('mes:taskreport:allorder')
+      ) {
+        this.tabValue = '';
+      }
 
       // console.log(this.tabValue);
       // console.log(
@@ -378,18 +422,38 @@
       /* 表格数据源 */
       datasource({ page, limit, where }) {
         // console.log(this.tabValue, 'this.tabValue');
-        // if (this.tabValue && this.tabValue != 0) {
-        let api =
-          this.tabValue === '1' ? pageByCurrentUser : pageByCurrentUserLeader;
-        return api({
-          ...where,
-          pageNum: page,
-          size: limit
+        if (this.tabValue && this.tabValue != 0) {
+          let api =
+            this.tabValue === '1' ? pageByCurrentUser : pageByCurrentUserLeader;
+          return api({
+            ...where,
+            pageNum: page,
+            size: limit
+          });
+        } else {
+          return [];
+        }
+      },
+
+      chooseUser() {
+        if (!this.form.userId) {
+          return this.$message.warning('请选择转派人员');
+        }
+
+        this.dialogFormVisible = false;
+
+        this.reload();
+      },
+
+      async reassignTask(item) {
+        this.form.userId = '';
+        await getteampage({ name: item.assignTeamName }).then((res) => {
+          this.teamList = res.list[0].userVOList;
         });
-        // } else {
-        //   return [];
-        // }
+
+        this.dialogFormVisible = true;
       },
+
       reload(where) {
         this.$refs.table.reload({ page: 1, where });
       },
@@ -414,7 +478,11 @@
           weight: row.weight,
           quantity: row.quantity,
           durationText: row.durationText,
-          apsAssigneeId: row.id
+          apsAssigneeId: row.id,
+          batchNo: row.batchNo,
+          productCode: row.productCode,
+          productName: row.productName,
+          specification: row.specification
         };
         let form = {
           realEndTime: row.realEndTime,

+ 7 - 2
src/views/unacceptedProduct/components/factoryAdd.vue

@@ -423,8 +423,11 @@
     watch: {
       factoryData: {
         handler(val) {
-          console.log(this.form);
-          this.form.productInfoList = val;
+          val.forEach((item, index) => {
+            // item.requiredFormingNum=item.measureQuantity
+            this.$set(item, 'requiredFormingNum', item.measureQuantity);
+          });
+          this.$set(this.form, 'productInfoList', val);
         },
         immediate: true
       }
@@ -1045,6 +1048,8 @@
           if (this.form.productInfoList.length) {
             this.form.productInfoList.map((item, index) => {
               delete item.selectionRowShow;
+              item.productCode = item.categoryCode;
+              item.productName = item.categoryName;
               if (item.bomVersionList && item.bomVersionList.length) {
                 item.bomCategoryName = item.bomVersionList[0].name;
                 item.bomCategoryVersions = item.bomVersionList[0].versions;

+ 4 - 1
src/views/unacceptedProduct/detail.vue

@@ -546,7 +546,10 @@
     async created() {
       this.qualityType = this.$route.query.qualityType;
       this.warehouseList = await getWarehouseLists();
-      this.getRefluxTask();
+      if (this.$route.query.workOrderCode) {
+        this.getRefluxTask();
+      }
+
       // console.log(this.warehouseList, 'this.warehouseList');
     },
 

+ 26 - 2
src/views/unacceptedProduct/rework/index.vue

@@ -130,8 +130,7 @@
             align: 'center',
             reserveSelection: true,
             selectable: (row, index) => {
-              return true;
-              return row.disposalStatus !== 2; //
+              return row.status == 0; //
             }
           },
           {
@@ -250,6 +249,31 @@
             label: '原因',
             align: 'center'
           },
+          {
+            prop: 'type',
+            label: '处理类型',
+            align: 'center',
+            width: 120,
+            formatter: (row, column, cellValue) => {
+              return cellValue == 1
+                ? '转生产计划'
+                : cellValue == 2
+                ? '转生产订单'
+                : cellValue == 3
+                ? '转生产工单'
+                : cellValue == 4
+                ? '回流'
+                : '';
+            }
+          },
+          {
+            prop: 'status',
+            label: '状态',
+            align: 'center',
+            formatter: (row, column, cellValue) => {
+              return cellValue == 0 ? '未处理' : cellValue == 1 ? '已处理' : '';
+            }
+          },
 
           {
             prop: 'createTime',

+ 3 - 1
src/views/warehousing/index.vue

@@ -23,7 +23,7 @@
         </template>
 
         <template v-slot:approvalStatus="{ row }">
-          <span :class="{ 'ele-text-danger': row.approvalStatus == 2 }">
+          <span :class="{ 'ele-text-success': row.approvalStatus == 2 }">
             {{ statusFormatter(row.approvalStatus) }}
           </span>
         </template>
@@ -173,6 +173,8 @@
                 ? '生产入库'
                 : cellValue == 8
                 ? '委外入库'
+                : cellValue == 3
+                ? '退料入库'
                 : '';
             }
           },

+ 1 - 1
vue.config.js

@@ -34,7 +34,7 @@ module.exports = {
         // target: 'http://124.71.68.31:50001',
         // target: 'http://192.168.1.116:18086',
         // target: 'http://192.168.1.251:18086',
-        // // target: 'http://192.168.1.103:18086',192.168.1.116
+        // target: 'http://192.168.1.103:18086',192.168.1.116
         target: 'http://192.168.1.125:18086',
         // target: 'http://192.168.1.116:18086',
         // target: 'http://192.168.1.144:18086',

+ 164 - 103
yarn.lock

@@ -1175,15 +1175,7 @@
     "@types/eslint" "*"
     "@types/estree" "*"
 
-"@types/eslint@*":
-  version "9.6.1"
-  resolved "https://registry.npmmirror.com/@types/eslint/-/eslint-9.6.1.tgz"
-  integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==
-  dependencies:
-    "@types/estree" "*"
-    "@types/json-schema" "*"
-
-"@types/eslint@^7.29.0 || ^8.4.1":
+"@types/eslint@*", "@types/eslint@^7.29.0 || ^8.4.1":
   version "8.56.12"
   resolved "https://registry.npmmirror.com/@types/eslint/-/eslint-8.56.12.tgz"
   integrity sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==
@@ -1196,7 +1188,7 @@
   resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz"
   integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
 
-"@types/express-serve-static-core@*", "@types/express-serve-static-core@^5.0.0":
+"@types/express-serve-static-core@*":
   version "5.0.6"
   resolved "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz"
   integrity sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==
@@ -1216,16 +1208,7 @@
     "@types/range-parser" "*"
     "@types/send" "*"
 
-"@types/express@*":
-  version "5.0.3"
-  resolved "https://registry.npmmirror.com/@types/express/-/express-5.0.3.tgz"
-  integrity sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==
-  dependencies:
-    "@types/body-parser" "*"
-    "@types/express-serve-static-core" "^5.0.0"
-    "@types/serve-static" "*"
-
-"@types/express@^4.17.13":
+"@types/express@*", "@types/express@^4.17.13":
   version "4.17.23"
   resolved "https://registry.npmmirror.com/@types/express/-/express-4.17.23.tgz"
   integrity sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==
@@ -1907,7 +1890,7 @@ acorn-walk@^8.0.0, acorn-walk@^8.0.2:
 
 "acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.0.4, acorn@^8.0.5, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.9.0:
   version "8.15.0"
-  resolved "https://registry.npmmirror.com/acorn/-/acorn-8.15.0.tgz"
+  resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz"
   integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
 
 address@^1.1.2:
@@ -1949,7 +1932,17 @@ ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1:
     json-schema-traverse "^0.4.1"
     uri-js "^4.2.2"
 
-ajv@^8.0.0, ajv@^8.8.2, ajv@^8.9.0:
+ajv@^8.0.0:
+  version "8.17.1"
+  resolved "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz"
+  integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==
+  dependencies:
+    fast-deep-equal "^3.1.3"
+    fast-uri "^3.0.1"
+    json-schema-traverse "^1.0.0"
+    require-from-string "^2.0.2"
+
+ajv@^8.8.2, ajv@^8.9.0:
   version "8.17.1"
   resolved "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz"
   integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==
@@ -2614,7 +2607,23 @@ chalk@^3.0.0:
     ansi-styles "^4.1.0"
     supports-color "^7.1.0"
 
-chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2:
+chalk@^4.0.0:
+  version "4.1.2"
+  resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz"
+  integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+  dependencies:
+    ansi-styles "^4.1.0"
+    supports-color "^7.1.0"
+
+chalk@^4.1.0:
+  version "4.1.2"
+  resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz"
+  integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+  dependencies:
+    ansi-styles "^4.1.0"
+    supports-color "^7.1.0"
+
+chalk@^4.1.2:
   version "4.1.2"
   resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz"
   integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -2845,7 +2854,12 @@ comma-separated-tokens@^2.0.0:
   resolved "https://registry.npmmirror.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz"
   integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==
 
-commander@^2.15.1, commander@^2.20.0:
+commander@^2.15.1:
+  version "2.20.3"
+  resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz"
+  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@^2.20.0:
   version "2.20.3"
   resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz"
   integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
@@ -2877,14 +2891,7 @@ component-classes@^1.2.3:
   dependencies:
     component-indexof "0.0.3"
 
-component-closest@*:
-  version "1.0.1"
-  resolved "https://registry.npmmirror.com/component-closest/-/component-closest-1.0.1.tgz"
-  integrity sha512-1rpXfxA9UK1zChrPxhvBUBfpPKxMRh/YkE4k0W4VaVCyqc7+r0p59kUjA5UBH+yN/LNOrzYqN49MshTccuR+9w==
-  dependencies:
-    component-matches-selector "~0.1.6"
-
-component-closest@^0.1.4:
+component-closest@*, component-closest@^0.1.4:
   version "0.1.4"
   resolved "https://registry.npmmirror.com/component-closest/-/component-closest-0.1.4.tgz"
   integrity sha512-NF9hMj6JKGM5sb6wP/dg7GdJOttaIH9PcTsUNdWcrvu7Kw/5R5swQAFpgaYEHlARrNMyn4Wf7O1PlRej+pt76Q==
@@ -2904,12 +2911,7 @@ component-emitter@^1.2.1:
   resolved "https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.1.tgz"
   integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==
 
-component-event@*:
-  version "0.2.1"
-  resolved "https://registry.npmmirror.com/component-event/-/component-event-0.2.1.tgz"
-  integrity sha512-wGA++isMqiDq1jPYeyv2as/Bt/u+3iLW0rEa+8NQ82jAv3TgqMiCM+B2SaBdn2DfLilLjjq736YcezihRYhfxw==
-
-component-event@^0.1.4:
+component-event@*, component-event@^0.1.4:
   version "0.1.4"
   resolved "https://registry.npmmirror.com/component-event/-/component-event-0.1.4.tgz"
   integrity sha512-GMwOG8MnUHP1l8DZx1ztFO0SJTFnIzZnBDkXAj8RM2ntV2A6ALlDxgbMY1Fvxlg6WPQ+5IM/a6vg4PEYbjg/Rw==
@@ -2919,7 +2921,7 @@ component-indexof@0.0.3:
   resolved "https://registry.npmmirror.com/component-indexof/-/component-indexof-0.0.3.tgz"
   integrity sha512-puDQKvx/64HZXb4hBwIcvQLaLgux8o1CbWl39s41hrIIZDl1lJiD5jc22gj3RBeGK0ovxALDYpIbyjqDUUl0rw==
 
-component-matches-selector@^0.1.5, component-matches-selector@~0.1.5, component-matches-selector@~0.1.6:
+component-matches-selector@^0.1.5, component-matches-selector@~0.1.5:
   version "0.1.7"
   resolved "https://registry.npmmirror.com/component-matches-selector/-/component-matches-selector-0.1.7.tgz"
   integrity sha512-Yb2+pVBvrqkQVpPaDBF0DYXRreBveXJNrpJs9FnFu8PF6/5IIcz5oDZqiH9nB5hbD2/TmFVN5ZCxBzqu7yFFYQ==
@@ -3162,7 +3164,15 @@ css-select@^4.1.3:
     domutils "^2.8.0"
     nth-check "^2.0.1"
 
-css-tree@^1.1.2, css-tree@^1.1.3:
+css-tree@^1.1.2:
+  version "1.1.3"
+  resolved "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz"
+  integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==
+  dependencies:
+    mdn-data "2.0.14"
+    source-map "^0.6.1"
+
+css-tree@^1.1.3:
   version "1.1.3"
   resolved "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz"
   integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==
@@ -3371,12 +3381,7 @@ deep-is@^0.1.3:
   resolved "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz"
   integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
 
-deepmerge@^1.2.0:
-  version "1.5.2"
-  resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz"
-  integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==
-
-deepmerge@^1.5.2:
+deepmerge@^1.2.0, deepmerge@^1.5.2:
   version "1.5.2"
   resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz"
   integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==
@@ -3612,7 +3617,7 @@ domready@1.0.8:
   resolved "https://registry.npmmirror.com/domready/-/domready-1.0.8.tgz"
   integrity sha512-uIzsOJUNk+AdGE9a6VDeessoMCzF8RrZvJCX/W8QtyfgdR6Uofn/MvRonih3OtCO79b2VDzDOymuiABrQ4z3XA==
 
-domutils@^1.5.1, domutils@^1.7.0:
+domutils@^1.5.1:
   version "1.7.0"
   resolved "https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz"
   integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
@@ -3620,16 +3625,15 @@ domutils@^1.5.1, domutils@^1.7.0:
     dom-serializer "0"
     domelementtype "1"
 
-domutils@^2.5.2:
-  version "2.8.0"
-  resolved "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz"
-  integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
+domutils@^1.7.0:
+  version "1.7.0"
+  resolved "https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz"
+  integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
   dependencies:
-    dom-serializer "^1.0.1"
-    domelementtype "^2.2.0"
-    domhandler "^4.2.0"
+    dom-serializer "0"
+    domelementtype "1"
 
-domutils@^2.8.0:
+domutils@^2.5.2, domutils@^2.8.0:
   version "2.8.0"
   resolved "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz"
   integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
@@ -3950,7 +3954,12 @@ escape-latex@^1.2.0:
   resolved "https://registry.npmmirror.com/escape-latex/-/escape-latex-1.2.0.tgz"
   integrity sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==
 
-escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5, escape-string-regexp@1.0.5:
+escape-string-regexp@^1.0.2:
+  version "1.0.5"
+  resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
+  integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+escape-string-regexp@^1.0.5:
   version "1.0.5"
   resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
   integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
@@ -3965,6 +3974,11 @@ escape-string-regexp@^5.0.0:
   resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz"
   integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==
 
+escape-string-regexp@1.0.5:
+  version "1.0.5"
+  resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
+  integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
 eslint-config-prettier@^8.10.0:
   version "8.10.0"
   resolved "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz"
@@ -4411,7 +4425,15 @@ find-cache-dir@^3.3.1:
     make-dir "^3.0.2"
     pkg-dir "^4.1.0"
 
-find-up@^4.0.0, find-up@^4.1.0:
+find-up@^4.0.0:
+  version "4.1.0"
+  resolved "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz"
+  integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+  dependencies:
+    locate-path "^5.0.0"
+    path-exists "^4.0.0"
+
+find-up@^4.1.0:
   version "4.1.0"
   resolved "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz"
   integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
@@ -4640,26 +4662,26 @@ github-markdown-css@^5.1.0:
   resolved "https://registry.npmmirror.com/github-markdown-css/-/github-markdown-css-5.8.1.tgz"
   integrity sha512-8G+PFvqigBQSWLQjyzgpa2ThD9bo7+kDsriUIidGcRhXgmcaAWUIpCZf8DavJgc+xifjbCG+GvMyWr0XMXmc7g==
 
-glob-parent@^5.1.2, glob-parent@~5.1.2:
+glob-parent@^5.1.2:
   version "5.1.2"
   resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz"
   integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
   dependencies:
     is-glob "^4.0.1"
 
-glob-parent@^6.0.1:
+glob-parent@^6.0.1, glob-parent@^6.0.2:
   version "6.0.2"
   resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz"
   integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
   dependencies:
     is-glob "^4.0.3"
 
-glob-parent@^6.0.2:
-  version "6.0.2"
-  resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz"
-  integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+glob-parent@~5.1.2:
+  version "5.1.2"
+  resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz"
+  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
   dependencies:
-    is-glob "^4.0.3"
+    is-glob "^4.0.1"
 
 glob-to-regexp@^0.4.1:
   version "0.4.1"
@@ -4688,7 +4710,14 @@ globals@^11.1.0:
   resolved "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz"
   integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
 
-globals@^13.19.0, globals@^13.24.0:
+globals@^13.19.0:
+  version "13.24.0"
+  resolved "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz"
+  integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
+  dependencies:
+    type-fest "^0.20.2"
+
+globals@^13.24.0:
   version "13.24.0"
   resolved "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz"
   integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
@@ -5547,12 +5576,7 @@ isarray@^2.0.5:
   resolved "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz"
   integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
 
-isarray@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz"
-  integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
-
-isarray@1.0.0:
+isarray@~1.0.0, isarray@1.0.0:
   version "1.0.0"
   resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz"
   integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
@@ -5576,7 +5600,12 @@ isobject@^2.1.0:
   dependencies:
     isarray "1.0.0"
 
-isobject@^3.0.0, isobject@^3.0.1:
+isobject@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz"
+  integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
+
+isobject@^3.0.1:
   version "3.0.1"
   resolved "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz"
   integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
@@ -5757,7 +5786,21 @@ keyv@^4.5.3:
   dependencies:
     json-buffer "3.0.1"
 
-kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+kind-of@^3.0.2:
+  version "3.2.2"
+  resolved "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz"
+  integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==
+  dependencies:
+    is-buffer "^1.1.5"
+
+kind-of@^3.0.3:
+  version "3.2.2"
+  resolved "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz"
+  integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==
+  dependencies:
+    is-buffer "^1.1.5"
+
+kind-of@^3.2.0:
   version "3.2.2"
   resolved "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz"
   integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==
@@ -5944,7 +5987,15 @@ lower-case@^2.0.2:
   dependencies:
     tslib "^2.0.3"
 
-lru-cache@^4.0.1, lru-cache@^4.1.2:
+lru-cache@^4.0.1:
+  version "4.1.5"
+  resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz"
+  integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+  dependencies:
+    pseudomap "^1.0.2"
+    yallist "^2.1.2"
+
+lru-cache@^4.1.2:
   version "4.1.5"
   resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz"
   integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
@@ -6521,12 +6572,7 @@ micromatch@3.1.0:
     snapdragon "^0.8.1"
     to-regex "^3.0.1"
 
-"mime-db@>= 1.43.0 < 2":
-  version "1.54.0"
-  resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.54.0.tgz"
-  integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==
-
-mime-db@1.52.0:
+"mime-db@>= 1.43.0 < 2", mime-db@1.52.0:
   version "1.52.0"
   resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz"
   integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
@@ -7096,7 +7142,12 @@ parse5@^5.1.1:
   resolved "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz"
   integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
 
-parse5@^6.0.0, parse5@^6.0.1:
+parse5@^6.0.0:
+  version "6.0.1"
+  resolved "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz"
+  integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
+
+parse5@^6.0.1:
   version "6.0.1"
   resolved "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz"
   integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
@@ -7134,17 +7185,17 @@ path-is-absolute@^1.0.0:
   resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
   integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
 
-path-key@^2.0.0, path-key@^2.0.1:
+path-key@^2.0.0:
   version "2.0.1"
   resolved "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz"
   integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
 
-path-key@^3.0.0:
-  version "3.1.1"
-  resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz"
-  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+path-key@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz"
+  integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
 
-path-key@^3.1.0:
+path-key@^3.0.0, path-key@^3.1.0:
   version "3.1.1"
   resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz"
   integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
@@ -7474,7 +7525,7 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
   resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
   integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
 
-postcss@^5.2.17, "postcss@>4 <9":
+postcss@^5.2.17:
   version "5.2.18"
   resolved "https://registry.npmmirror.com/postcss/-/postcss-5.2.18.tgz"
   integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==
@@ -7484,7 +7535,7 @@ postcss@^5.2.17, "postcss@>4 <9":
     source-map "^0.5.6"
     supports-color "^3.2.3"
 
-"postcss@^7.0.0 || ^8.0.1", postcss@^8.0.9, postcss@^8.1.0, postcss@^8.2.15, postcss@^8.2.2, postcss@^8.2.6, postcss@^8.3.5, postcss@^8.4.14, postcss@^8.4.33, postcss@^8.5.3:
+"postcss@^7.0.0 || ^8.0.1", postcss@^8.0.9, postcss@^8.1.0, postcss@^8.2.15, postcss@^8.2.2, postcss@^8.2.6, postcss@^8.3.5, postcss@^8.4.14, postcss@^8.4.33, postcss@^8.5.3, "postcss@>4 <9":
   version "8.5.5"
   resolved "https://registry.npmmirror.com/postcss/-/postcss-8.5.5.tgz"
   integrity sha512-d/jtm+rdNT8tpXuHY5MMtcbJFBkhXE6593XVR9UoGCH8jSFGci7jGvMGH5RYd5PBJW+00NZQt6gf7CbagJCrhg==
@@ -8061,12 +8112,7 @@ sass@^1.3.0, sass@^1.54.8:
   optionalDependencies:
     "@parcel/watcher" "^2.4.1"
 
-sax@^1.2.4:
-  version "1.4.1"
-  resolved "https://registry.npmmirror.com/sax/-/sax-1.4.1.tgz"
-  integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==
-
-sax@~1.2.4:
+sax@^1.2.4, sax@~1.2.4:
   version "1.2.4"
   resolved "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz"
   integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
@@ -8103,7 +8149,27 @@ schema-utils@^3.1.1:
     ajv "^6.12.5"
     ajv-keywords "^3.5.2"
 
-schema-utils@^4.0.0, schema-utils@^4.3.0, schema-utils@^4.3.2:
+schema-utils@^4.0.0:
+  version "4.3.2"
+  resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.2.tgz"
+  integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==
+  dependencies:
+    "@types/json-schema" "^7.0.9"
+    ajv "^8.9.0"
+    ajv-formats "^2.1.1"
+    ajv-keywords "^5.1.0"
+
+schema-utils@^4.3.0:
+  version "4.3.2"
+  resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.2.tgz"
+  integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==
+  dependencies:
+    "@types/json-schema" "^7.0.9"
+    ajv "^8.9.0"
+    ajv-formats "^2.1.1"
+    ajv-keywords "^5.1.0"
+
+schema-utils@^4.3.2:
   version "4.3.2"
   resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.2.tgz"
   integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==
@@ -9024,12 +9090,7 @@ trough@^2.0.0:
   resolved "https://registry.npmmirror.com/trough/-/trough-2.2.0.tgz"
   integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==
 
-tslib@^2.0.3:
-  version "2.8.1"
-  resolved "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz"
-  integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
-
-tslib@2.3.0:
+tslib@^2.0.3, tslib@2.3.0:
   version "2.3.0"
   resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz"
   integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
@@ -9421,7 +9482,7 @@ vue-demi@^0.13.11:
 
 vue-direction-key@^1.0.5:
   version "1.0.5"
-  resolved "https://registry.npmmirror.com/vue-direction-key/-/vue-direction-key-1.0.5.tgz"
+  resolved "https://registry.npmjs.org/vue-direction-key/-/vue-direction-key-1.0.5.tgz"
   integrity sha512-5H8u0xYOyVvEXmuydIBH15zhRWzM4iyYxBXBDaeqnVqJ//40XUyN4DIT14ClE7D+C2Za/iJNQ4EfS5YLVbJjxw==
 
 vue-echarts@^6.2.3: