Crunchy
2023-12-07 6d213775d14a63d18d9eb17b44ba14bd3bb220da
Merge remote-tracking branch 'origin/master'
已添加12个文件
已修改54个文件
8315 ■■■■ 文件已修改
.gitignore 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/title.css 1256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/plan/productionschedul.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/product/handymantype.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/product/personboard.js 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/quality/Packaging_ledger.js 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/quality/packageInspect.js 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/quality/rawMaterial.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/warehouse/pallettransports.js 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/views/index.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/util/fileTransform.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/admin/productType/index.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/basic/workstation/workstation-form.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/common/operation.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/common/ztt-table.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/plan/customerorder/customerorder-form.vue 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/plan/customerorder/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/plan/manufacturingorder/index.vue 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/plan/manufacturingorder/productorder-form.vue 113 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/plan/manufacturingorder/teststandardtable.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/plan/masterproductionschedule/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/plan/productionschedul/index.vue 531 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/plan/productionschedul/template-form.vue 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/product/workbench/batchproductout-form-new.vue 79 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/product/workbench/feed-form.vue 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/product/workbench/feed-pane.vue 118 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/product/workbench/index.vue 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/product/workbench/operation-task-pane.vue 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/product/workbench/productInDialog.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/product/workbench/productoutput-list.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/product/workbench/productoutput-table.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/product/workbench/workReportCard.vue 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/Packaging_ledger/index.vue 441 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/Packaging_ledger/pack-from.vue 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/Packaging_ledger/pack-fromadd.vue 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/exception/exception.vue 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/finishedProductInspection/finishedProduct-form.vue 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/finishedProductInspection/finishedProducter-print.vue 454 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/finishedProductInspection/index.vue 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/package/index.vue 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/packageinspect/index.vue 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/packageinspect/packageInspect-form.vue 602 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/processInspect/index.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/processInspect/processInspect-form.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/processconfiguration/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/rawMaterial/QrcodeReader.vue 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/rawMaterial/index.vue 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/rawMaterial/rawMaterial-form.vue 270 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/rawMaterial/rawMaterial-print.vue 748 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/teststandard/index.vue 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/quality/teststandard/standard-form.vue 332 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/technology/completeproductstructure/completeproductstructure-form.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/technology/completeproductstructure/index.vue 177 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/technology/operation/index.vue 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/technology/operation/operation-form.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/technology/routing/edit-routing-operation.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/technology/routing/index.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/technology/routing/routing-form.vue 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/technology/structure/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/technology/structure/single-structure-form.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/warehouse/pallettransports/detail-ifslocation-form.vue 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/warehouse/pallettransports/ifslocation-form.vue 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/warehouse/pallettransports/ifsstock-form.vue 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/warehouse/pallettransports/index.vue 574 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -19,6 +19,7 @@
# Editor directories and files
.idea
.vscode
.nvmdrc
*.suo
*.ntvs*
*.njsproj
@@ -29,6 +30,3 @@
# Lock File
package-lock.json
yarn.lock
# config.js
vue.config.js
package.json
@@ -45,6 +45,7 @@
    "vue-json-editor": "^1.2.3",
    "vue-json-tree-view": "^2.1.4",
    "vue-qr": "^4.0.9",
    "vue-qrcode-reader": "^5.4.1",
    "vue-quill-editor": "3.0.6",
    "vue-router": "^3.0.2",
    "vuedraggable": "^2.24.3",
public/title.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1256 @@
@page {
    margin: 10mm 5mm;
    margin-bottom: 0;
    margin-top:0;
}
.xl6524921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 10.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: general;
    vertical-align: middle;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl6624921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: .5pt solid windowtext;
    border-left: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl6724921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl6824921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl6924921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 700;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl7024921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 700;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl7124921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: general;
    vertical-align: top;
    border: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl7224921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: top;
    border: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl7324921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: .5pt solid windowtext;
    border-bottom: .5pt solid windowtext;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl7424921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 14.0pt;
    font-weight: 700;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl7524921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 14.0pt;
    font-weight: 700;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl7624921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 700;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: .5pt solid windowtext;
    border-left: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl7724921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 700;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: .5pt solid windowtext;
    border-bottom: .5pt solid windowtext;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl7824921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: left;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: .5pt solid windowtext;
    border-left: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl7924921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: left;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: .5pt solid windowtext;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl8024921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: left;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: .5pt solid windowtext;
    border-bottom: .5pt solid windowtext;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl8124921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: .5pt solid windowtext;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl8224921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: general;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: .5pt solid windowtext;
    border-bottom: .5pt solid windowtext;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl8324921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: .5pt solid windowtext;
    border-left: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl8424921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: .5pt solid windowtext;
    border-bottom: .5pt solid windowtext;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl8524921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: left;
    vertical-align: middle;
    border: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl8624921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: left;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: .5pt solid windowtext;
    border-left: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl8724921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: left;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: .5pt solid windowtext;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl8824921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: left;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: .5pt solid windowtext;
    border-bottom: .5pt solid windowtext;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl8924921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: left;
    vertical-align: middle;
    border: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl9024921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: left;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: none;
    border-left: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl9124921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: left;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: none;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl9224921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: left;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: .5pt solid windowtext;
    border-bottom: none;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl9324921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 700;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: .5pt solid windowtext;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl9424921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 700;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: .5pt solid windowtext;
    border-left: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl9524921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 700;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: .5pt solid windowtext;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl9624921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 700;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: .5pt solid windowtext;
    border-bottom: .5pt solid windowtext;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl9724921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: top;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: .5pt solid windowtext;
    border-left: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl9824921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: top;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: .5pt solid windowtext;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl9924921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: top;
    border-top: .5pt solid windowtext;
    border-right: .5pt solid windowtext;
    border-bottom: .5pt solid windowtext;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl10024921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: general;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: .5pt solid windowtext;
    border-left: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl10124921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: general;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: .5pt solid windowtext;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl10224921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: general;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: .5pt solid windowtext;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl10324921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 700;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: left;
    vertical-align: middle;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl10424921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: none;
    border-left: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl10524921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: .5pt solid windowtext;
    border-bottom: none;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl10624921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: none;
    border-right: none;
    border-bottom: .5pt solid windowtext;
    border-left: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl10724921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: none;
    border-right: .5pt solid windowtext;
    border-bottom: .5pt solid windowtext;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.xl10824921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: none;
    border-bottom: none;
    border-left: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl10924921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: .5pt solid windowtext;
    border-right: .5pt solid windowtext;
    border-bottom: none;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl11024921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: none;
    border-right: none;
    border-bottom: none;
    border-left: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl11124921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: none;
    border-right: .5pt solid windowtext;
    border-bottom: none;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl11224921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: none;
    border-right: none;
    border-bottom: .5pt solid windowtext;
    border-left: .5pt solid windowtext;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
.xl11324921 {
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 12.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: center;
    vertical-align: middle;
    border-top: none;
    border-right: .5pt solid windowtext;
    border-bottom: .5pt solid windowtext;
    border-left: none;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: normal;
}
ruby {
    ruby-align: left;
}
rt {
    color: windowtext;
    font-size: 9.0pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-char-type: none;
}
.head{
    display: flex;
    width: 900pt;
    .head-1{
        padding: 40px;
    }
    .head-2{
        margin-left: auto;
        margin-right: 0;
        margin-top: 13px;
        text-align: right;
    }
}
.bodycss{
        margin-left: 85px;
}
.bodycs{
   margin-top: -30px;
}
.bodycs-1{
        display: flex;
        text-align: left;
        height: 60px;
        width: auto;
        margin-top: -80px;
    }
.bodycs-2{
    display: flex;
    margin-left: 130px;
    margin-top: 30px;
}
.bodycs-3{
    display: flex;
    margin-left: 140px;
}
.ziti{
    display: flex;
   margin-left: 140px;
   padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 20pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: å®‹ä½“;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: general;
    vertical-align: middle;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.time{
    display: flex;
   margin-left: 80px;
   margin-top: 20px;
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 20pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: é»‘体;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: general;
    vertical-align: middle;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.chilen{
    display: flex;
    margin-left: 250px;
}
.cldata{
    display: flex;
    margin-left: 130px;
}
.pagefooting{
    font-size:8pt;
    font-family:宋体;
    margin-right: 15pt;
    color: deepskyblue;
}
.x1111111{
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 50pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: é»‘体;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: general;
    vertical-align: middle;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.x1111112{
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 20pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: é»‘体;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: general;
    vertical-align: middle;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
.x1111113{
    padding: 0px;
    mso-ignore: padding;
    color: black;
    font-size: 20pt;
    font-weight: 400;
    font-style: normal;
    text-decoration: none;
    font-family: é»‘体;
    mso-generic-font-family: auto;
    mso-font-charset: 134;
    mso-number-format: General;
    text-align: general;
    vertical-align: middle;
    mso-background-source: auto;
    mso-pattern: auto;
    white-space: nowrap;
}
src/api/plan/productionschedul.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
import request from '@/router/axios'
export function fetchScheduleList(query) {
  return request({
    url: '/mes/productionSchedul/page',
    method: 'get',
    params: query
  })
}
export function fetchScheduleById(id) {
  return request({
    url: '/mes/productionSchedul/'+id,
    method: 'get',
  })
}
export function fillTime(data) {
  return request({
    url: '/mes/productionSchedul/fillTime',
    method: 'put',
    data: data
  })
}
src/api/product/handymantype.js
@@ -119,3 +119,18 @@
    params: query
  })
}
export function isProductionCounting(query) {
  return request({
    url: '/mes/product/isProductionCounting',
    method: 'get',
        params: query
  })
}
export function qualifiedLocation(id) {
  return request({
    url: '/mes/product/qualifiedLocation/' + id,
    method: 'get'
  })
}
src/api/product/personboard.js
@@ -94,6 +94,14 @@
  })
}
export function getFeed2(query, workstationId) {
  return request({
    url: '/mes/stock/getFeedingStock2/' + workstationId,
    method: 'get',
    params: query
  })
}
export function getTodoStock(query) {
  return request({
    url: '/mes/stock/getToDealStockByWorkstationId',
@@ -129,6 +137,14 @@
export function getOperationTask(query) {
  return request({
    url: '/mes/operationTask/getOperationTask',
    method: 'get',
    params: query
  })
}
export function getOperationTaskCopy(query) {
  return request({
    url: '/mes/operationTask/getOperationTaskCopy',
    method: 'get',
    params: query
  })
@@ -335,6 +351,15 @@
}
// æ‰¹é‡æäº¤
export function batchChangeCopy(qury, event) {
  return request({
    url: '/mes/product/state/batchChangeCopy/' + event,
    method: 'post',
    data: qury
  })
}
// æ‰¹é‡æäº¤
export function batchChange2(ids, event) {
  return request({
    url: '/mes/product/state/batchChange/' + event,
@@ -510,9 +535,41 @@
  })
}
export function getOperationTaskCopy(query) {
export function submitInsPart(obj) {
  return request({
    url: '/mes/operationTask/getOperationTaskCopy',
    url: '/mes/applyPart/submitIns',
    method: 'post',
    data: obj
  })
}
export function submitProductMain(obj) {
  return request({
    url: '/mes/product/submitProductMain',
    method: 'post',
    data: obj
  })
}
export function inputHandle(obj) {
  return request({
    url: '/mes/feeding/inputHandle',
    method: 'post',
    data: obj
  })
}
export function cancellationOfWorkApplication(query) {
  return request({
    url: '/mes/product/cancellationOfWorkApplication',
    method: 'get',
    params: query
  })
}
export function generateBackflush(query) {
  return request({
    url: '/mes/product/generateBackFlush',
    method: 'get',
    params: query
  })
src/api/quality/Packaging_ledger.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
import request from '@/router/axios'
export function pagedata(query) {
  return request({
    url: '/mes/qualityPackageBox/page',
    method: 'get',
    params: query
  })
}
export function dataadd(query) {
    return request({
      url: '/mes/qualityPackageBoxDetail/selProduct',
      method: 'get',
      params: query
    })
}
export function list(query) {
    return request({
      url: '/mes//qualityPackageBoxDetail/list',
      method: 'get',
      params: query
    })
}
export function customerpage(query) {
    return request({
      url: '/mes/customer/page',
      method: 'get',
      params: query
    })
}
export function pagedataadd(obj) {
    return request({
      url: '/mes/qualityPackageBox/add',
      method: 'post',
      data: obj
    })
}
export function saveList(obj) {
    return request({
      url: '/mes/qualityPackageBoxDetail/saveList',
      method: 'post',
      data: obj
    })
}
export function dropById(query) {
    return request({
      url: '/mes/qualityPackageBox/dropById',
      method: 'get',
      params: query
    })
}
export function deledata(query) {
    return request({
      url: '/mes/qualityPackageBoxDetail/dropById',
      method: 'get',
      params: query
    })
}
export function sAuditstatus(obj) {
  return request({
    url: '/mes/packageInspect/add',
    method: 'post',
    data: obj
  })
}
src/api/quality/packageInspect.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
import request from '@/router/axios'
export function fetchList(query) {
  return request({
    url: '/mes/packageInspect/page',
    method: 'get',
    params: query
  })
}
export function fetchListById(id) {
  return request({
    url: '/mes/packageInspect/'+id,
    method: 'get',
  })
}
export function deleteById(id) {
  return request({
    url: '/mes/packageInspect/'+id,
    method: 'delete',
  })
}
export function updatePackageInsProduct(data) {
  return request({
    url: '/mes/packageInsProduct/updatePackageInsProduct',
    method: 'post',
    data: data
  })
}
export function updatePackageInspectById(data) {
  return request({
    url: '/mes/packageInspect/updatePackageInspectById',
    method: 'post',
    params: data
  })
}
src/api/quality/rawMaterial.js
@@ -30,6 +30,15 @@
  })
}
export function downloadReport(data) {
  return request({
    url: '/mes/rawInspect/downloadReport',
    method: 'post',
    data: data,
    responseType: 'blob',
  })
}
export function delObj(data) {
  return request({
    url: '/mes/rawInspect/'+data,
src/api/warehouse/pallettransports.js
@@ -23,6 +23,14 @@
  })
}
export function selectAll(data) {
  return request({
    url: '/mes/palletTransportsDetail/selectAll',
    method: 'get',
    params: data
  })
}
export function putPalletTransports(obj) {
  return request({
    url: '/mes/palletTransports',
@@ -46,6 +54,30 @@
  })
}
export function getPalletTransportsAllDetailDataApi(query) {
  return request({
    url: '/mes/palletTransportsMaterial/detail/click',
    method: 'get',
    params: query
  })
}
export function palletTransportsMaterialFetchListCopy(query) {
  return request({
    url: '/mes/palletTransportsMaterial/page/copy',
    method: 'get',
    params: query
  })
}
export function palletTransportsMaterialListClick(query) {
  return request({
    url: '/mes/palletTransportsMaterial/page/click',
    method: 'get',
    params: query
  })
}
export function addPalletTransportsMaterial(obj) {
  return request({
    url: '/mes/palletTransportsMaterial',
@@ -56,6 +88,14 @@
export function putPalletTransportsMaterial(obj) {
  return request({
    url: '/mes/palletTransportsMaterial',
    method: 'put',
    data: obj
  })
}
export function putPalletTransportsMaterialCopy(obj) {
  return request({
    url: '/mes/palletTransportsMaterial/update',
    method: 'put',
    data: obj
  })
@@ -115,6 +155,14 @@
  })
}
export function updateBatchPalletTransportsCopy(obj) {
  return request({
    url: '/mes/palletTransportsMaterial/updateBatchPalletTransportsCopy',
    method: 'put',
    data: obj
  })
}
export function updateBatchPalletTransportsDetail(obj) {
  return request({
    url: '/mes/palletTransportsDetail/updateBatch',
src/router/views/index.js
@@ -145,6 +145,23 @@
    ]
  },
  {
    path: '/quality/packageinspect',
    component: Layout,
    children: [
      {
        path: 'packageInspect-form',
        name: 'packageInspectForm',
        component: () =>
          import(/* webpackChunkName: "views" */ '@/views/quality/packageinspect/packageInspect-form'),
        meta: {
          keepAlive: false,
          isTab: false,
          isAuth: false
        }
      }
    ]
  },
  {
    path: '/quality/rawMaterial',
    component: Layout,
    children: [
src/util/fileTransform.js
@@ -17,3 +17,23 @@
    document.body.removeChild(elink)
  }
}
export function transformZip(response) {
  const relType = ['application/zip']
  let type = response.data.type
  if (relType.includes(type)) {
    const blob = new Blob([response.data], {type: 'application/zip'})
    const disposition = response.headers["content-disposition"]
    let temp = disposition.substring(disposition.lastIndexOf('=') + 1)
    let filename = decodeURI(temp)
    // åˆ›å»ºä¸€ä¸ªè¶…链接,将文件流赋进去,然后实现这个超链接的单击事件
    const elink = document.createElement('a')
    elink.download = filename
    elink.style.display = 'none'
    elink.href = URL.createObjectURL(blob)
    document.body.appendChild(elink)
    elink.click()
    URL.revokeObjectURL(elink.href) // é‡Šæ”¾URL å¯¹è±¡
    document.body.removeChild(elink)
  }
}
src/views/admin/productType/index.vue
@@ -54,7 +54,7 @@
      <el-dialog :visible.sync="dialogAddVisible" :close-on-click-modal="false" title="新增配置">
      <el-form :model="prodForm" :rules="rules" ref="addDialog">
        <el-form-item prop="staffName" label="用户名称:" label-width="90px">
            <el-select style="width:100%" v-model="prodForm.staffName">
            <el-select style="width:100%" v-model="prodForm.staffName" filterable placeholder="请选择">
              <el-option v-for="(item,index) in staffNamesOptions" :key="index" :value="item.id" :label="item.staffName"/>
            </el-select>
        </el-form-item>
@@ -70,12 +70,12 @@
    </el-dialog>
    </div>
  </template>
  <script>
  import { tableOption } from '@/const/crud/admin/productType'
  import { getList,addObj,delObj,chooseStaff } from '@/api/admin/productType'
  import { mapGetters } from 'vuex'
  export default {
    name: 'TableProduct',
    data() {
@@ -184,7 +184,7 @@
    }
  }
  </script>
  <style lang="scss" scoped>
    .el-dialog__wrapper {
    .el-dialog {
@@ -203,4 +203,3 @@
    }
    }
  </style>
src/views/basic/workstation/workstation-form.vue
@@ -127,7 +127,7 @@
          >
          </el-transfer>
        </el-tab-pane>
        <el-tab-pane label="产出待检库位" name="inspection">
       <!--  <el-tab-pane label="产出待检库位" name="inspection">
          <el-transfer
            filterable
            v-model="inspectionLocationIds"
@@ -137,7 +137,7 @@
            @change="handleChangeInspectionLocation"
          >
          </el-transfer>
        </el-tab-pane>
        </el-tab-pane> -->
        <!-- <el-tab-pane label="产出不合格库位" name="disqualified">
          <el-transfer
            filterable
@@ -160,7 +160,7 @@
          >
          </el-transfer>
        </el-tab-pane> -->
        <el-tab-pane label="检验待处理库位" name="pending">
        <!-- <el-tab-pane label="检验待处理库位" name="pending">
          <el-transfer
            filterable
            v-model="pendingLocationIds"
@@ -170,7 +170,7 @@
            @change="handleChangePendingLocation"
          >
          </el-transfer>
        </el-tab-pane>
        </el-tab-pane> -->
        <el-tab-pane label="成品待检库位" name="product">
          <el-transfer
            filterable
src/views/common/operation.vue
@@ -94,8 +94,8 @@
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
          },
          {
          }/*,
           {
            minWidth: '100',
            prop: 'productionCounting',
            label: '是否报工',
@@ -159,7 +159,7 @@
            optList: () => {
              return this.getChangeList()
            }
          }
          } */
        ]
      },
      addOrUpdateVisible: false,
src/views/common/ztt-table.vue
@@ -149,11 +149,7 @@
        v-bind="$attrs"
        v-on="$listeners"
        :highlight-current-row="true"
        :row-key="
          (row) => {
            return row.id
          }
        "
        :row-key="rowKey"
        @row-dblclick="dbClickRow"
        @row-contextmenu="contextMenu"
        @header-click="headClick"
@@ -563,6 +559,12 @@
  name: 'TTable',
  components: { exSlot, advancedSearchDialog, zttdraggable },
  props: {
    rowKey: {
      type: String,
      default: ()=>{
        return 'id'
      }
    },
    // è¡¨æ ¼åž‹å·ï¼šmini,medium,small
    tableSize: { type: String, default: 'small' },
    // æ•°æ®è¯·æ±‚方法
@@ -937,7 +939,8 @@
      }
    },
    getDataList(selectedId) {
      this.dataListLoading = true
      // this.dataListLoading = true
      this.dataListLoading = false
      var criteria = {}
      criteria.dateTimeFilters = this.dateTimeFilters
      criteria.multiSearchFilter = this.multiSearchFilter
src/views/plan/customerorder/customerorder-form.vue
@@ -209,13 +209,12 @@
                <el-input
                  v-model="dataForm.partNo"
                  placeholder=""
                  disabled
                >
                  <el-button
                    slot="append"
                    icon="el-icon-search"
                    @click="openSalesPartDialog()"
                    v-show="dataForm.id==null"
                    @click="openPartDialog()"
                  ></el-button>
                </el-input>
              </el-form-item>
@@ -1052,7 +1051,7 @@
            // } else {
            //   console.log('2')
            this.dataForm = response.data.data
            // }
            // this.fileList = response.data.data.customerOrderAttachmentList
            const sourceId = response.data.data.sourceId
@@ -1194,25 +1193,35 @@
        }
      })
    },
    // é›¶ä»¶é€‰æ‹©
        // é›¶ä»¶é€‰æ‹©
    openPartDialog() {
      if (
        this.dataForm.coState === '01partUnCheck' ||
        this.dataForm.coState === '02technologyUnCheck'
      ) {
        this.showPart = true
      } else {
        this.$message.warning(
          '订单只有在【零件待选】、【工艺文件待选】状态下,才能进行零件修改'
        )
      }
      this.showPart = true
    },
    selectPart(part) {
      console.log(part);
      if (part) {
        this.dataForm.partNo = part.partNo
        this.$refs.dataForm.validateField('partNo', (valid) => {})
      }
    },
    // é›¶ä»¶é€‰æ‹©
    // openPartDialog() {
    //   if (
    //     this.dataForm.coState === '01partUnCheck' ||
    //     this.dataForm.coState === '02technologyUnCheck'
    //   ) {
    //     this.showPart = true
    //   } else {
    //     this.$message.warning(
    //       '订单只有在【零件待选】、【工艺文件待选】状态下,才能进行零件修改'
    //     )
    //   }
    // },
    // selectPart(part) {
    //   if (part) {
    //     this.dataForm.partNo = part.partNo
    //     this.$refs.dataForm.validateField('partNo', (valid) => {})
    //   }
    // },
    // å…¨å±
    fullscreen() {
      this.isFullScreen = !this.isFullScreen
src/views/plan/customerorder/index.vue
@@ -93,7 +93,6 @@
          > -->
        </template>
      </ttable>
      <!-- å¼¹çª—, æ—¥æœŸé€‰æ‹© -->
      <ConfirmPullCustomerorder
        v-if="showPullCustomerOrderVisible"
src/views/plan/manufacturingorder/index.vue
@@ -105,12 +105,18 @@
            :loading="loadingExcel"
            >导出
          </el-button>
          <el-button
            @click="labelPrint"
            type="primary"
            style="margin-left:10px;"
            >标签打印
          </el-button>
          <!-- <el-button
            v-if="permissions.manufacturingorder_update_orderno"
            @click="updateOrderNo"
            type="primary"
            style="margin-left:10px;"
            >更新订单号
            >更新订单号
          </el-button>-->
        </template>
      </ttable>
@@ -190,6 +196,31 @@
        </span>
      </el-dialog>
    </basic-container>
    <!-- æ ‡ç­¾æ‰“印 -->
    <el-dialog title="标签列表" :visible.sync="diaPrintTab" width="500px">
      <div class="dia_body" style="height: 400px;overflow-y: auto;padding: 0 10px;">
        <el-card class="box-card" v-for="(item, i) in qrData" :key="i" style="margin-bottom: 15px;width:100%">
              <el-row>
                <el-col :span="10" :offset="3">序号:</el-col>
                <el-col :span="10" style="font-weight: bold;">{{ i + 1 }}</el-col>
              </el-row>
              <el-row>
                <el-col :span="10" :offset="3">车间订单号:</el-col>
                <el-col :span="10" style="font-weight: bold;">{{ item.moNo2 }}</el-col>
              </el-row>
              <el-row>
                <el-col :span="10" :offset="3">订单二维码:</el-col>
                <el-col :span="10">
                  <vueQr :text="JSON.stringify(item)" :size="80" :margin="2"></vueQr>
                </el-col>
              </el-row>
          </el-card>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="diaPrintTab = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="diaPrintTab = false">打 å°</el-button>
      </span>
    </el-dialog>
  </div>
</template>
@@ -218,9 +249,14 @@
import DelMatUnIssueVue from './DelMatUnIssue.vue'
import { getStore } from '@/util/store.js'
import { getObj as getSysParam } from '@/api/admin/sys-public-param'
import vueQr from 'vue-qr'
export default {
  data() {
    return {
      checkList: [],
      qrData: [],
      orderDatalist:[],
      diaPrintTab:false,
      showCustomerorder: false,
      paramObj: { customerList: null },
      customerOrder: null,
@@ -421,6 +457,15 @@
            minWidth: '120',
            prop: 'lengthRequirement',
            label: '盘长要求',
            sort: true,
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
          },
           {
            minWidth: '120',
            prop: 'scrapQty',
            label: '报废数量',
            sort: true,
            isTrue: true,
            isSearch: true,
@@ -823,14 +868,7 @@
          }
        ],
        toolbar: [],
        operator: [
          // {
          //   text: '查看库存',
          //   type: 'text',
          //   size: 'small',
          //   fun: this.searchStock
          // }
        ],
        operator: null,
        operatorConfig: {
          fixed: 'right',
          label: '操作',
@@ -902,7 +940,8 @@
    AutoOperationtask,
    IssueMaterialForm,
    OrderMergeForm,
    DelMatUnIssueVue
    DelMatUnIssueVue,
    vueQr
  },
  created() {
    this.getManufactureAttrs()
@@ -1003,7 +1042,6 @@
      }
    })
  },
  computed: {
    ...mapGetters(['permissions'])
  },
@@ -1130,6 +1168,7 @@
                getByMoIds([this.orderPlan.id]).then((repsonse) => {
                  const resData = repsonse.data.data
                  const resCode = repsonse.data.code
                  console.log("resData-----",repsonse);
                  if (resCode === 0) {
                    const _that = this
                    for (const key in resData) {
@@ -1361,8 +1400,35 @@
        }
      }
    },
    //初始化二维码标签数据
    initQrData(data){
      if(data){
        let index = Number(data.qtyRequired) + Number(data.scrapQty)
        if(index>0){
          for(var i=1;i<= index;i++){
            let obj = {
              moNo: data.moNo,
              moNo2: null,
            }
            let no = (i+"").padStart(3,'0')
            obj.moNo2 = data.moNo + no
            this.qrData.push(obj)
          }
        }
      }
    },
    // table自带事件
    handleSelectionChange(val) {
      let orderData = []
      orderData =val.map( el =>{
         return{
            moNo:el.moNo,
            qtyRequired: el.qtyRequired,
            scrapQty: el.scrapQty
         }
      })
     this.orderDatalist = orderData
     this.initQrData(orderData[0])
      // æ ¹æ®çŠ¶æ€ï¼Œç¦ç”¨è¡¨å¤´æŒ‰é’®
      // ç­›é€‰å‡ºé€‰ä¸­è®°å½•的状态
      var stateArr = val.map(function(value, index) {
@@ -1654,6 +1720,13 @@
      } else {
        this.$message.error('上传失败')
      }
    },
    labelPrint(){
      if(this.multipleSelection.length==0){
          this.$message.warning('请选择一条数据')
          return
        }
      this.diaPrintTab = true
    }
  }
}
@@ -1662,4 +1735,4 @@
.gantt-info {
  display: none !important;
}
</style>
</style>
src/views/plan/manufacturingorder/productorder-form.vue
@@ -8,7 +8,7 @@
      </div>
      <div class="btn-group header-right" v-if="editable">
        <el-button :disabled="isSubmit" v-thinclick="`dataFormSubmit`"
          >保存</el-button
          type="primary">保存</el-button
        >
      </div>
    </div>
@@ -126,7 +126,6 @@
              </el-form-item>
            </el-col>
          </el-row>
          <el-row :gutter="10">
            <el-col :span="6">
              <el-form-item label="备注" prop="remark">
@@ -151,39 +150,37 @@
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="8">
              <el-col
                :span="8"
                v-if="permissions.plan_manufacturingorder_bom_sure"
              >
                <el-form-item label="BOM确认">
                  <el-switch v-model="dataForm.bomConfirmStatus"> </el-switch>
                </el-form-item>
              </el-col>
              <el-col
                :span="8"
                v-if="permissions.plan_manufacturingorder_process_sure"
              >
                <el-form-item label="工艺确认">
                  <el-switch v-model="dataForm.processConfirmStatus">
                  </el-switch>
                </el-form-item>
              </el-col>
              <el-col
                :span="8"
                v-if="permissions.plan_manufacturingorder_test_sure"
              >
                <el-form-item label="检测标准确认">
                  <el-switch v-model="dataForm.standardConfirmStatus">
                  </el-switch>
                </el-form-item>
              </el-col>
            <el-col
              :span="2"
              v-if="permissions.plan_manufacturingorder_bom_sure"
            >
              <el-form-item label="BOM确认" label-width="110px">
                <el-switch v-model="dataForm.bomConfirmStatus"> </el-switch>
              </el-form-item>
            </el-col>
            <el-col :span="4">
            <el-col
              :span="2"
              v-if="permissions.plan_manufacturingorder_process_sure"
            >
              <el-form-item label="工艺确认" label-width="110px">
                <el-switch v-model="dataForm.processConfirmStatus">
                </el-switch>
              </el-form-item>
            </el-col>
            <el-col
              :span="2"
              v-if="permissions.plan_manufacturingorder_test_sure"
            >
              <el-form-item label="检测标准确认" label-width="140px">
                <el-switch v-model="dataForm.standardConfirmStatus">
                </el-switch>
              </el-form-item>
            </el-col>
            <el-col :span="2">
              <el-form-item
                label="IFS车间订单接收时报告工序"
                prop="isReportOperation"
                label-width="200px"
                label-width="250px"
              >
                <el-switch v-model="dataForm.isReportOperation" disabled>
                </el-switch>
@@ -595,8 +592,19 @@
              <el-tab-pane label="产品结构" id="ta1" key="ta1" name="ta1">
                <el-row>
                  <el-col :span="11">
                    <el-form-item label="完整BOM">
                  <el-col :span="2" style="text-align: center">
                    <el-button
                      type="text"
                      size="small"
                      icon="el-icon-circle-plus-outline"
                      style="color:#f56c6c;"
                      :disabled="!dataForm.id"
                      @click="addStruct()"
                      >添加元素
                    </el-button>
                  </el-col>
                  <el-col :offset="11" :span="11">
                    <!-- <el-form-item label="完整BOM">
                      <el-select
                        @change="bomSelectChanged"
                        disabled
@@ -622,18 +630,7 @@
                        >
                        </el-option>
                      </el-select>
                    </el-form-item>
                  </el-col>
                  <el-col :offset="11" :span="2" style="text-align: center">
                    <el-button
                      type="text"
                      size="small"
                      icon="el-icon-circle-plus-outline"
                      style="color:#f56c6c;"
                      :disabled="!dataForm.id"
                      @click="addStruct()"
                      >添加元素
                    </el-button>
                    </el-form-item> -->
                  </el-col>
                </el-row>
                <el-row>
@@ -644,7 +641,7 @@
                    style="width: 100%"
                    height="400px"
                  >
                    <el-table-column type="selection" width="40" fixed="left" />
                    <!-- <el-table-column type="selection" width="40" fixed="left" /> -->
                    <el-table-column
                      type="index"
                      width="50"
@@ -662,7 +659,7 @@
                    />
                    <el-table-column
                      prop="partName"
                      width=""
                      width="200"
                      header-align="center"
                      align="left"
                      label="零件"
@@ -2107,17 +2104,17 @@
    },
    // æ‰“å¼€bom节点
    addStruct() {
      if (this.structSelection.length <= 0) {
        this.$message.error('请选择需要添加元素的节点')
      } else {
        if (this.structSelection.length === 1) {
          this.selectedStruct = this.structSelection[0]
          this.moId = this.dataForm.id
          this.showStructForm = true
        } else {
          this.$message.error('只能为单个节点添加元素')
        }
      }
      this.selectedStruct = this.structSelection[0]
      this.moId = this.dataForm.id
      this.showStructForm = true
      // if (this.structSelection.length <= 0) {
      //   this.$message.error('请选择需要添加元素的节点')
      // } else {
      //   if (this.structSelection.length === 1) {
      //   } else {
      //     this.$message.error('只能为单个节点添加元素')
      //   }
      // }
    },
    refreshBom(node) {
      if (this.selectedStruct.children != null) {
src/views/plan/manufacturingorder/teststandardtable.vue
@@ -111,14 +111,14 @@
        height="100%"
        style="width: 100%"
      >
        <el-table-column prop="index" label="序号" align="center" width="50" />
        <!-- <el-table-column prop="index" label="序号" align="center" width="50" />
        <el-table-column label="线芯" prop="wireCore" align="center" />
        <el-table-column
          prop="isCheck"
          label="抽检"
          align="center"
          :formatter="isCheckFormatter"
        />
        /> -->
        <el-table-column label="参数编号" prop="code" align="center" />
        <el-table-column label="参数项" prop="parameterItem" align="center" />
        <el-table-column label="检测范围" prop="referenceValue" align="center">
@@ -162,10 +162,10 @@
            ></el-input>
          </template>
        </el-table-column>
        <el-table-column label="通道" prop="aisle" align="center" />
        <el-table-column label="部位" prop="position" align="center" />
        <!-- <el-table-column label="通道" prop="aisle" align="center" />
        <el-table-column label="部位" prop="position" align="center" /> -->
        <el-table-column label="单位" prop="unit" align="center" />
        <el-table-column
        <!-- <el-table-column
          prop="extendsRoutingNo"
          label="继承工艺路线"
          align="center"
@@ -184,7 +184,7 @@
          prop="extendsTestStandardParamNo"
          label="继承标准参数"
          align="center"
        />
        /> -->
        <el-table-column label="操作" align="center" width="118">
          <template slot-scope="scope">
            <el-button
@@ -193,12 +193,12 @@
              @click.stop="insertOperationParam(scope.row)"
              >插入
            </el-button>
            <el-button
            <!-- <el-button
              type="text"
              size="mini"
              @click.stop="editTestStandardParam(scope.row)"
              >公式
            </el-button>
            </el-button> -->
            <el-button
              type="text"
              size="mini"
src/views/plan/masterproductionschedule/index.vue
@@ -626,7 +626,7 @@
        operatorConfig: {
          fixed: 'right',
          label: '操作',
          width: 240,
          width: 140,
          minWidth: 100
        }
      },
src/views/plan/productionschedul/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,531 @@
<template>
  <div class="mod-config">
    <basic-container>
      <el-row>
        <el-col :span="12">
          <div style="height:80vh;padding: 0px 10px;">
            <avue-crud :data="tableData" ref="crud" :option="option" :span-method="spanMethod"
            @refresh-change="getData"
            :page="page"
            @selection-change="selectionRow"
            :table-loading="loading">
            <template #menu="{ row, index }">
              <el-button type="text" icon="el-icon-delete" size="small" @click="deleteHandle(row, index)">删除</el-button>
            </template>
          </avue-crud>
          </div>
        </el-col>
        <el-col :span="12" style="padding-left: 10px">
          <div style="">
            <el-card>
              <div slot="header" class="clearfix">
                <span>调度时间线</span>
                <el-button v-if="scheduleList.length>0" @click="openEditDialog" style="float: right; padding: 3px 0" type="text">编辑</el-button>
              </div>
              <div style="height:70vh;overflow-y: scroll;">
                <el-timeline>
                    <el-timeline-item
                      placement="top"
                      v-for="(item, index) in scheduleList"
                      :key="index"
                      :timestamp="item.title">
                        <el-card shadow="hover" :body-style="{margin: '0',padding:'0px 20px 0px 20px'}" style="width:90%;">
                          <p>
                            <span style="font-weight: bold;">计划时间: </span>
                            {{item.planTime}}
                          </p>
                          <p>
                            <span style="font-weight: bold;">实际时间: </span>
                            {{ item.actualTime }}</p>
                        </el-card>
                    </el-timeline-item>
                </el-timeline>
            </div>
            </el-card>
          </div>
        </el-col>
      </el-row>
    </basic-container>
    <el-dialog
    title="编辑时间线"
    :visible.sync="dialogVisible"
    top="5vh"
    width="50%"
    :before-close="handleClose">
      <div style="height:60vh;overflow-y: scroll;">
        <el-timeline>
          <el-timeline-item
            placement="top"
            v-for="(item, index) in scheduleEditList"
            :key="index"
            :timestamp="item.title">
              <el-card shadow="hover" style="width:90%" :body-style="{padding:'20px 20px 5px 20px'}">
                <el-row>
                  <el-col :span="3">
                    <p style="font-weight: bold;line-height: 50%;">计划时间: </p>
                  </el-col>
                  <el-col :span="21">
                    <el-date-picker
                      style="width:100%"
                      v-model="item.planTime"
                      value-format="yyyy-MM-dd HH:mm:ss"
                      type="datetime"
                      placeholder="选择日期时间">
                    </el-date-picker>
                  </el-col>
                </el-row>
                <el-row>
                  <el-col :span="3">
                    <p style="font-weight: bold;line-height: 50%;">实际时间: </p>
                  </el-col>
                  <el-col :span="21">
                    <el-date-picker
                      style="width:100%"
                      v-model="item.actualTime"
                      value-format="yyyy-MM-dd HH:mm:ss"
                      type="datetime"
                      placeholder="选择日期时间">
                    </el-date-picker>
                  </el-col>
                </el-row>
              </el-card>
          </el-timeline-item>
        </el-timeline>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="confirmEditSchedul">ç¡® å®š</el-button>
      </span>
  </el-dialog>
  </div>
</template>
<script>
import {
  fetchScheduleList,
  fetchScheduleById,
  fillTime
} from '@/api//plan/productionschedul'
import TableForm from './template-form'
import ttable from '@/views/common/ztt-table.vue'
import { mapGetters } from 'vuex'
export default {
    data() {
    return {
      dialogVisible: false,
      scheduleList: [],
      scheduleEditList: [],
      typeOptions: [],
      multipleSelection: [],
      loading: true,
      tableData: [],
      page: {
        total: 10,
        currentPage: 1,
        pageSize: 10
      },
      option: {
        height: 400,
        selection: true,
        columnBtn: false,
        index: true,
        rowKey: 'product',
        indexLabel: '序号',
        menuAlign: 'center',
        menuWidth: 100,
        editBtn: false,
        delBtn: false,
        addBtn: false,
        border: true,
        align: 'center',
        column: [
          {
            minWidth: 120,
            prop: 'projectName',
            label: '项目名称',
            overHidden: true,
          },
          {
            minWidth: 100,
            prop: 'contractNo',
            label: '合同号',
            overHidden: true,
          },
          {
            minWidth: 120,
            prop: 'orderTime',
            label: '接单日期',
            overHidden: true,
            formatter: (row,columnValue)=> this.formatDate(row,columnValue)
          },
          {
            minWidth: 120,
            prop: 'customerName',
            label: '客户名称',
            overHidden: true,
          },
          {
            minWidth: 120,
            prop: 'deliveryDate',
            label: '交货日期',
            overHidden: true,
            formatter: (row,columnValue)=> this.formatDate(row,columnValue)
          },
          {
            minWidth: 120,
            prop: 'productType',
            label: '产品类型',
            overHidden: true,
          },
          {
            minWidth: 120,
            prop: 'product',
            label: '产品名',
            overHidden: true,
          },
          {
            minWidth: 120,
            prop: 'specs',
            label: '规格型号',
            overHidden: true,
          },
          {
            minWidth: 120,
            prop: 'unit',
            label: '单位',
            overHidden: true,
          },
          {
            minWidth: 120,
            prop: 'number',
            label: '数量',
            overHidden: true,
          },
          {
            minWidth: 120,
            prop: 'productionStatus',
            label: '生产情况',
            overHidden: true,
          },
          {
            minWidth: 120,
            prop: 'productionRoutine',
            label: '生产程度',
            overHidden: true,
          },
          {
            minWidth: 120,
            prop: 'projectLeader',
            label: '项目负责人',
            overHidden: true,
          },
          {
            minWidth: 150,
            prop: 'remark',
            label: '备注',
            overHidden: true,
          }
        ],
      },
      spanArr: [{
        prop: 'projectName',
        span: []
      }, {
        prop: 'contractNo',
        span: []
      },
      {
        prop: 'orderTime',
        span: []
      },
      {
        prop: 'customerName',
        span: []
      },
      {
        prop: 'deliveryDate',
        span: []
      },
      {
        prop: 'productType',
        span: []
      },
    ],
    }
  },
  components: {
    ttable,
    TableForm,
  },
  computed: {
    ...mapGetters(['permissions']),
  },
  created(){
    this.loading = true
    this.getData()
    this.getParamType()
    this.rowSort()
    this.rowCalc()
  },
  beforeUpdate() {
    this.rowSort()
    this.rowCalc()
  },
  watch:{
  },
  mounted() {
  },
  beforeDestroy() {
  },
  methods: {
    openEditDialog(){
      this.scheduleEditList = JSON.parse(JSON.stringify(this.scheduleList))
      this.dialogVisible = true
    },
    confirmEditSchedul(){
      let data = this.scheduleEditList
      let orderObj = this.multipleSelection[0]
      console.log("data---",data)
      console.log("orderObj-----",orderObj)
      let obj = {
        "documentActualTime": data[0].actualTime,
        "documentPlanTime": data[0].planTime,
        "bomActualTime": data[1].actualTime,
        "bomPlanTime": data[1].planTime,
        "contractActualTime": data[2].actualTime,
        "contractPlanTime": data[2].planTime,
        "arrivalActualTime": data[3].actualTime,
        "arrivalPlanTime": data[3].planTime,
        "checkActualTime": data[4].actualTime,
        "checkPlanTime": data[4].planTime,
        "productActualTime": data[5].actualTime,
        "productPlanTime": data[5].planTime,
        "id": orderObj.id,
        "contractNo": orderObj.contractNo,
        "customerName": orderObj.customerName,
        "deliveryDate": orderObj.deliveryDate,
        "orderTime": orderObj.orderTime,
        "productType": orderObj.productType,
        "projectName": orderObj.projectName
      }
      console.log("obj----->>>",obj);
      fillTime(obj).then(res=>{
        if(res.status===200){
          this.$message.success("更新成功")
        }else{
          this.$message.error("更新失败")
        }
        this.getScheduleById(orderObj.id)
        this.dialogVisible = false
      }).catch(error=>{
        console.log(error);
      })
    },
    handleClose(done){
      done()
    },
    initTimeLine(data){
      this.scheduleList = []
      if(data){
        let arr = [
          {
            title: '文件签发',
            actualTime: data.documentActualTime,
            planTime: data.documentPlanTime,
          },
          {
            title: '下达物料需求',
            actualTime: data.bomActualTime,
            planTime: data.bomPlanTime,
          },
          {
            title: '采购询价+合同签订',
            actualTime: data.contractActualTime,
            planTime: data.contractPlanTime,
          },
          {
            title: '物料采购到货',
            actualTime: data.arrivalActualTime,
            planTime: data.arrivalPlanTime,
          },
          {
            title: '物料到货检验',
            actualTime: data.checkActualTime,
            planTime: data.checkPlanTime,
          },
          {
            title: '领料、装箱入库',
            actualTime: data.productActualTime,
            planTime: data.productPlanTime,
          },
        ]
        this.scheduleList = arr
      }
    },
    getScheduleById(id){
      if(id){
        fetchScheduleById(id).then(res=>{
          this.initTimeLine(res.data.data)
        }).catch(error=>{
          console.log(error);
        })
      }
    },
    selectionRow(val){
      if (val.length > 1) {
        const preVal = val.shift();
        this.$refs.crud.toggleRowSelection(preVal, false);
      }
      else{
        this.scheduleList=[]
      }
      this.multipleSelection = val
      this.getScheduleById(val[0].id)
    },
    formatDate(row, cellValue){
      if (cellValue) {
        const dutyDateList = /\d{4}-\d{1,2}-\d{1,2}/g.exec(cellValue)
        if (dutyDateList && dutyDateList.length > 0) {
          return dutyDateList[0]
        }
      }
      return ''
    },
    // èŽ·å–æ•°æ®åˆ—è¡¨
    getData() {
      this.loading = true
      let param = {
        size: 20,
        current: 1,
      }
      fetchScheduleList(param).then((res) => {
        this.tableData = res.data.data.records
        this.page.total = res.data.data.total
        this.page.currentPage = res.data.data.records.pages
        this.scheduleList = []
      })
      this.loading = false
    },
    handleCurrentChange(val) {
      this.multipleSelection = val
    },
    // åˆ é™¤
    deleteHandle(row,index) {
      this.$confirm('是否确认删除', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(function() {
      })
    },
    //动态合并方法
    rowCalc() {
      this.spanArr.forEach((ele, index) => {
        let parent
        if (index !== 0) parent = this.spanArr[ele.parent || index - 1].span
        ele.span = this.rowSpan(ele.prop, parent)
      })
    },
    rowSort(list) {
      let propList = this.spanArr.map(ele => ele.prop)
      this.spanArr.forEach((ele, index) => {
        let key = ele.prop
        this.tableData = this.tableData.sort((a, b) => {
          let flag = true;
          for (let i = 0; i < index; i++) {
            let prop = this.spanArr[i].prop
            flag = flag && a[prop] == b[prop]
          }
          if (flag) {
            if (a[key] < b[key]) { return 1; }
            else if (a[key] > b[key]) { return -1; }
            return 0;
          }
          return 0;
        })
      })
    },
    rowSpan(key, parent) {
      let list = [];
      let position = 0;
      this.tableData.forEach((item, index) => {
        if (index === 0) {
          list.push(1)
          let position = 0;
        } else {
          if (this.tableData[index][key] === this.tableData[index - 1][key]) {
            if (parent && parent[index] !== 0) {
              list.push(1)
              position = index
            } else {
              list[position] += 1;
              list.push(0)
            }
          } else {
            list.push(1)
            position = index
          }
        }
      })
      return list
    },
    spanMethod({ row, column, rowIndex, columnIndex }) {
      for (let i = 0; i < this.spanArr.length; i++) {
        const ele = this.spanArr[i]
        if (column.property == ele.prop) {
          const _row = ele.span[rowIndex];
          const _col = _row > 0 ? 1 : 0;
          return {
            rowspan: _row,
            colspan: _col
          }
        }
      }
    }
  }
}
</script>
<style>
.basic-template-table .el-table__body .el-table__row td:first-child .cell {
  padding-left: 0px;
  padding-right: 0px;
}
.basic-template-table .el-table__body .el-table__row:hover {
  cursor: move;
}
.basic-template-table .el-table__body .el-table__row:hover .icon {
  display: inline-block;
}
.basic-template-table .el-table__body .el-table__row .icon {
  color: rgba(0, 0, 0, 0.45);
  font-size: 12px;
  line-height: 18px;
  display: none;
}
.aufontAll {
  font-family: aufontAll !important;
  font-size: 14px;
  font-style: normal;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.h-icon-all-drag {
  background: url('/img/tz.png') center center no-repeat;
  background-size: cover;
  font-size: 14px;
}
.h-icon-all-drag:before {
  content: '\E63E';
  font-size: 14px;
  visibility: hidden;
}
</style>
src/views/plan/productionschedul/template-form.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,173 @@
<template>
  <el-dialog
    v-diadrag
    :title="!dataForm.id ? '新增' : '修改'"
    :close-on-click-modal="false"
    :visible.sync="visible"
  >
    <el-form
      :model="dataForm"
      :rules="dataRule"
      ref="dataForm"
      label-width="100px"
      class="l-mes"
    >
      <el-form-item label="模板编号" prop="templateNo">
        <el-input
          v-model="dataForm.templateNo"
          placeholder="模板编号"
        ></el-input>
      </el-form-item>
      <el-form-item label="模板名称" prop="templateName">
        <el-input
          v-model="dataForm.templateName"
          placeholder="模板名称"
        ></el-input>
      </el-form-item>
      <el-form-item label="模板类型" prop="templateType">
        <el-select
          v-model="dataForm.templateType"
          placeholder="模板类型"
          filterable
          style="width: 100%"
          clearable
          @change="templateTypeChange"
        >
          <el-option
            v-for="item in templateTypeList"
            :key="item.id"
            :label="item.templateTypeName"
            :value="item.templateTypeName"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="备注" prop="remark">
        <el-input v-model="dataForm.remark" placeholder="备注"></el-input>
      </el-form-item>
    </el-form>
    <span slot="footer" class="dialog-footer">
      <el-button @click="visible = false">取消</el-button>
      <el-button
        type="primary"
        :disabled="isSubmit"
        v-thinclick="`dataFormSubmit`"
        >确定</el-button
      >
    </span>
  </el-dialog>
</template>
<script>
import { getObj, addObj, putObj, getTemplateTypes } from '@/api/basic/template'
export default {
  data() {
    return {
      templateTypeList: [],
      visible: false,
      dataForm: {
        id: 0,
        templateName: '',
        templateNo: '',
        templateType: '',
        dataType: '',
        remark: ''
      },
      dataRule: {
        templateName: [
          { required: true, message: '模板名称不能为空', trigger: 'blur' }
        ],
        templateType: [
          { required: true, message: '模板类型不能为空', trigger: 'blur' }
        ]
      },
      isSubmit: false
    }
  },
  methods: {
    init(id) {
      this.dataForm.id = id || 0
      this.visible = true
      this.$nextTick(() => {
        this.$refs.dataForm.resetFields()
        Promise.all([this.getDict(), this.getDataForm(this.dataForm.id)]).then(
          (res) => {}
        )
      })
    },
    getDataForm(id) {
      return new Promise((resolve, reject) => {
        if (id) {
          getObj(id)
            .then((response) => {
              if (response.data.code === 0) {
                this.dataForm = response.data.data
                resolve()
              } else {
                this.dataForm = {}
                reject()
              }
            })
            .catch((error) => {
              reject(error)
            })
        }
      })
    },
    getDict() {
      return new Promise((resolve, reject) => {
        getTemplateTypes()
          .then((response) => {
            if (response.data.code === 0) {
              this.templateTypeList = response.data.data
              resolve()
            } else {
              this.templateTypeList = []
              reject()
            }
          })
          .catch((error) => {
            reject(error)
          })
      })
    },
    templateTypeChange() {
      const currOperationTemplateType = this.dataForm.templateType
      const templateType = this.templateTypeList.find(
        (item) => item.templateTypeName === currOperationTemplateType
      )
      console.log(templateType)
      if (templateType != undefined) {
        this.dataForm.dataType = templateType.dataType
      } else {
        this.dataForm.dataType = ''
      }
    },
    // è¡¨å•提交
    dataFormSubmit() {
      this.isSubmit = true
      this.$refs.dataForm.validate((valid) => {
        if (valid) {
          if (this.dataForm.id) {
            putObj(this.dataForm).then((data) => {
              this.$message.success('修改成功')
              this.visible = false
              this.isSubmit = false
              this.$emit('refreshDataList')
            })
          } else {
            addObj(this.dataForm).then((data) => {
              this.$message.success('添加成功')
              this.visible = false
              this.isSubmit = false
              this.$emit('refreshDataList')
            })
          }
        } else {
          this.isSubmit = false
        }
      })
    }
  }
}
</script>
src/views/product/workbench/batchproductout-form-new.vue
@@ -12,7 +12,7 @@
    title="汇报产出"
    :visible.sync="innerVisible"
    append-to-body
    @close="$emit('update:currshowlist', false)"
    @close="handleClose"
    :show="currshowlist"
    :close-on-click-modal="false"
    class="batch-product-out-form"
@@ -57,9 +57,9 @@
        ><el-col :span="2" class="batch-product-out-form-header-col"
          ><span>零件名称</span></el-col
        >
        <el-col :span="4" class="batch-product-out-form-header-col"
        <!-- <el-col :span="4" class="batch-product-out-form-header-col"
          ><span>序列号</span></el-col
        >
        > -->
        <!-- <el-col :span="2" class="batch-product-out-form-header-col"
          ><span>载具编号</span></el-col
        >
@@ -78,9 +78,9 @@
        <el-col :span="1" class="batch-product-out-form-header-col"
          ><span>单位</span></el-col
        >
        <el-col :span="2" class="batch-product-out-form-header-col"
        <!-- <el-col :span="2" class="batch-product-out-form-header-col"
          ><span>WDR号</span></el-col
        >
        > -->
        <!-- <el-col :span="1" class="batch-product-out-form-header-col"
          ><span>分段描述</span></el-col
        > -->
@@ -133,11 +133,11 @@
              <span class="inline-el-hidden">{{ item.partName }}</span>
            </el-tooltip>
          </el-col>
          <el-col :span="4" class="batch-product-out-form-body-col l-mes">
          <!-- <el-col :span="4" class="batch-product-out-form-body-col l-mes"> -->
            <!-- <span>{{ item.outBatchNo }}</span> -->
            <el-input v-model="item.outBatchNo">
            <!-- <el-input v-model="item.outBatchNo">
            </el-input>
          </el-col>
          </el-col> -->
          <!-- <el-col :span="2" class="batch-product-out-form-body-col l-mes">
            <el-input v-model="item.reelNumber"></el-input>
          </el-col>
@@ -156,17 +156,22 @@
          <el-col :span="1" class="batch-product-out-form-body-col">
            <span>{{ item.unit }}</span>
          </el-col>
          <el-col :span="2" class="batch-product-out-form-body-col l-mes">
          <!-- <el-col :span="2" class="batch-product-out-form-body-col l-mes">
            <el-input v-model="item.wdr"></el-input>
          </el-col>
          </el-col> -->
          <!-- <el-col :span="1" class="batch-product-out-form-body-col l-mes">
            <el-input v-model="item.segmentDesc"></el-input>
          </el-col> -->
                    <el-col :span="2" class="batch-product-out-form-body-col l-mes">
                      <el-input v-model="item.outNum"></el-input>
                      <span v-text="item.outNum"></span>
                    </el-col>
          <el-col :span="2" class="batch-product-out-form-body-col l-mes">
            <el-input v-model="item.scrapQty"></el-input>
            <el-select v-model="item.scrapQty">
              <el-option label="0" value="0">
              </el-option>
              <el-option label="1" value="1">
              </el-option>
            </el-select>
          </el-col>
          <!-- <el-col :span="1" class="batch-product-out-form-body-col l-mes">
            <el-input v-model="item.reelWeight"></el-input>
@@ -191,7 +196,7 @@
            <el-input v-model="item.remark"></el-input>
          </el-col>-->
          <el-col :span="2" class="batch-product-out-form-body-col l-mes">
            <el-input v-model="item.mainRemark"></el-input>
            <el-input v-model="item.remark"></el-input>
          </el-col>
          <el-col :span="1" class="batch-product-out-form-body-col">
            <span
@@ -359,6 +364,7 @@
  data() {
    return {
      innerVisible: false,
      staffNameList: [],
      personSelection: [],
      saveDisabled: false,
      currDutyInitproducts: [], // ç”¨äºŽç¼“存页面中原有的staff产出记录,并且是属于当前班次下的,用于勾选人员时作为原数据参照
@@ -374,6 +380,36 @@
    }
  },
  methods: {
    initProductList(){
      let val = this.personSelection
      //按人员报工
      if(this.groupStatus){
        this.products = []
        this.addProductOutForPerson()
      }else{
        //按组报工
        let nameList = []
        val.forEach(obj=>{
          nameList.push(obj.staffName)
        })
        let staffName = Array.from(new Set(nameList)).join(",")
        if(staffName!=''){
          this.products = this.productList
          this.products.forEach(item=>{
            item.staffName = staffName
            item.outNum=1
          })
        }else{
          this.products = []
        }
      }
    },
    handleClose(){
      this.$emit('update:currshowlist', false)
      this.$nextTick(()=>{
        this.$refs.productOutPersonList.clearSelection()
      })
    },
    isNumber(value) {
      var reg = /^[0-9]+(.[0-9]{1,4})?$/
      if (
@@ -419,6 +455,9 @@
      // å†åŽ»ä¸Žproducts(此为页面的实时数据,用户有改动即更新)对比,将其中存在的相同人员的生产数量和生产批次同步过来,若products中生产数量或生产批次不存在值,则不进行同步,沿用原来的。
      // æœ€åŽï¼Œå°†ç»„装好的选中人员信息,更新到products(按照班次进行),注意更新之后选中人员信息在products位置顺序
      this.personSelection = val
      if(this.currshowlist){
        this.initProductList()
      }
    },
    // æ ¹æ®é€‰ä¸­çš„人员,生成人员产出信息,并且放在右边列表的最前面
    addProductOutForPerson() {
@@ -445,7 +484,8 @@
          newProduct.partNo = this.parentInfo.partNo
          newProduct.partName = this.parentInfo.partName
          newProduct.outBatchNo = oriOutBatchNo
          newProduct.productQty = 0
          newProduct.productQty = 1
          newProduct.outNum = 1
          newProduct.unit = this.parentInfo.unit
          newProduct.productStaffs = productStaffs
          newProduct.productStaffIds = productStaffIds
@@ -502,20 +542,21 @@
        saveProductOuts2() {
            this.clickDateArr.push(new Date().getTime())
            var productOutputList = []
            this.productList.forEach(a=>{
            this.products.forEach(a=>{
                productOutputList.push({
                    partId: a.partId,
                    productQty: a.outNum,
                    outBatchNo: a.outBatchNo,
                    scrapQty: a.scrapQty,
                    remark: a.remark,
          wdr: a.wdr,
                  wdr: a.wdr,
                    staffNo: a.staffNo,
                    staffName: a.staffName,
                    status: a.status,
                    dutyRecordId: a.dutyRecordId,
                    productStaffIds: a.productStaffIds,
                    productStaffs: a.productStaffs
                    productStaffs: a.productStaffs,
                    sortNo: a.sortNo
                })
            })
            var productMains = {
@@ -1055,14 +1096,14 @@
            this.products.push(this.productList[i])
          }
          this.$nextTick(() => {
            this.$refs.productOutPersonList.clearSelection()
            this.$refs.productOutPersonList.toggleAllSelection()
          })
        } else {
          for (let i = 0; i < this.productList.length; i++) {
            this.products.push(this.productList[i])
          }
          this.$nextTick(() => {
            this.$refs.productOutPersonList.clearSelection()
            this.$refs.productOutPersonList.toggleAllSelection()
          })
        }
      }
src/views/product/workbench/feed-form.vue
@@ -1,6 +1,7 @@
<template>
  <el-dialog
    width="40%"
    width="60%"
    top="5vh"
    title="投料"
    :visible.sync="innerVisible"
    append-to-body
@@ -15,24 +16,28 @@
          :key="tableKey"
          :data="dataList"
          border
          style="width: 100%;"
          height="400"
          style="width: 100%;overflow-y: scroll;"
          @cell-dblclick="dblhandleCurrentChange"
          show-summary
          :span-method="objectSpanMethod"
          :summary-method="getSummaries"
        >
          <el-table-column header-align="center" align="center" type="index" label="序号"></el-table-column>
          <el-table-column
            prop="partNo"
            header-align="center"
            align="center"
            label="零件编号"
            show-overflow-tooltip
          >
          </el-table-column>
          <el-table-column
            prop="partDescription"
            prop="partName"
            header-align="center"
            align="center"
            label="零件描述"
            label="零件"
            show-overflow-tooltip
          >
          </el-table-column>
          <el-table-column
@@ -40,6 +45,7 @@
            header-align="center"
            align="center"
            label="批号"
            show-overflow-tooltip
          >
          </el-table-column>
          <!-- <el-table-column
@@ -72,7 +78,13 @@
            header-align="center"
            align="center"
            label="单位"
            show-overflow-tooltip
          >
          </el-table-column>
          <el-table-column prop="menu" label="操作"  header-align="center" align="center">
            <template scope="scope">
              <el-button type="text" icon="el-icon-circle-close" @click="cancelFeed(scope.$index,scope.row)">取消</el-button>
            </template>
          </el-table-column>
        </el-table>
      </div>
@@ -142,6 +154,12 @@
      password: null
    }
  },
  beforeUpdate(){
    this.$nextTick(()=>{
      this.objectSpanMethod()
      this.$refs.table.doLayout()
    })
  },
  directives: {
    focus: {
      inserted: function(el, option) {
@@ -162,6 +180,10 @@
    }
  },
  methods: {
    //投入取消按钮
    cancelFeed(index,row){
      this.dataList.splice(index,1)
    },
    confirmData() {
      if (this.password != null) {
        checkSubmitPassword({ password: this.password }).then((response) => {
@@ -205,13 +227,13 @@
      getCheckRawPart(partNoList).then((response) => {
        if (response.data.code === 0) {
          // éœ€è¦å¯†ç ç¡®è®¤æƒ…况
          if (response.data.data.success === false) {
            this.messages = response.data.data.message
            this.onnerVisible = true
          } else {
          //if (response.data.data.success === false) {
          //  this.messages = response.data.data.message
          //  this.onnerVisible = true
          //} else {
            // ä¸éœ€è¦å¯†ç  ç›´æŽ¥æŠ•æ–™
            this.saveFeed()
          }
          //}
        }
      })
    },
@@ -286,16 +308,16 @@
      return reg.test(value)
    },
    objectSpanMethod() {
      setTimeout(() => {
      this.$nextTick(()=>{
        if (this.$refs.table.$el) {
          const current = this.$refs.table.$el
            .querySelector('.el-table__footer-wrapper')
            .querySelector('.el-table__footer')
          const cell = current.rows[0].cells
          // cell[1].style.display = 'none'
          cell[0].colSpan = '4'
          cell[0].colSpan = '6'
        }
      }, 50)
      })
    },
    getSummaries(param) {
      const { columns, data } = param
@@ -325,12 +347,19 @@
  },
  watch: {
    currshowlist() {
      this.innerVisible = this.currshowlist
      this.password = null
      if (this.currshowlist) {
        this.$nextTick(() => {})
      const _than = this
      _than.innerVisible = _than.currshowlist
      _than.password = null
      if (!_than.currshowlist) {
        _than.$nextTick(() => {
        })
      }
    }
    },
  },
  created(){
    this.$nextTick(()=>{
      this.objectSpanMethod()
    })
  },
  mounted() {}
}
src/views/product/workbench/feed-pane.vue
@@ -137,7 +137,7 @@
      </el-table-column>
    </el-table>
    <el-tabs v-model="activeName">
      <el-tab-pane name="first" label="线边仓合格物料">
      <!-- <el-tab-pane name="first" label="线边仓合格物料"> -->
        <div class="line-side-warehouse-header">
          <div>
            <el-divider class="pane-divider" direction="vertical"></el-divider
@@ -229,16 +229,16 @@
            </template>
          </el-table-column> -->
          <el-table-column
            label="零件描述"
            prop="partDescription"
            label="零件"
            prop="partName"
            align="center" show-overflow-tooltip
          >
            <template slot="header">
              <div style="line-height: 14px;">零件描述</div>
              <div style="line-height: 14px;">零件</div>
              <div class="th" @click.stop>
                <el-input
                  type="text"
                  v-model="queryParamTwo.partDescription"
                  v-model="queryParamTwo.partName"
                  @keyup.enter.native="handleStockList"
                  clearable
                  @clear="handleStockList"
@@ -247,12 +247,12 @@
              </div>
            </template>
            <template slot-scope="scope">
              <span>{{ scope.row.partDescription }}</span>
              <span>{{ scope.row.partName }}</span>
            </template>
          </el-table-column>
          <el-table-column label="IFS批次号" prop="ifsBatchNo" align="center">
          <el-table-column label="批次号" prop="ifsBatchNo" align="center">
            <template slot="header">
              <div style="line-height: 14px;">IFS批次号</div>
              <div style="line-height: 14px;">批次号</div>
              <div class="th" @click.stop>
                <el-input
                  type="text"
@@ -268,7 +268,7 @@
              <span>{{ scope.row.ifsBatchNo }}</span>
            </template>
          </el-table-column>
                    <el-table-column label="WDR号" prop="ifsWdr" align="center">
                    <!-- <el-table-column label="WDR号" prop="ifsWdr" align="center">
                      <template slot="header">
                        <div style="line-height: 14px;">WDR号</div>
                        <div class="th" @click.stop>
@@ -285,7 +285,7 @@
                      <template slot-scope="scope">
                        <span>{{ scope.row.ifsWdr }}</span>
                      </template>
                    </el-table-column>
                    </el-table-column> -->
          <!-- <el-table-column label="SN号" prop="partBatchNo" align="center">
            <template slot="header">
              <div style="line-height: 14px;">SN号</div>
@@ -375,7 +375,7 @@
          >
            <template slot="header">
              <div style="line-height: 14px;">可用数量</div>
              <!-- <div class="th" @click.stop>
              <div class="th" @click.stop>
                <el-input
                  type="text"
                  v-model="queryParamTwo.availableStockQuantity"
@@ -384,7 +384,7 @@
                  @clear="handleStockList"
                  size="mini"
                ></el-input>
              </div> -->
              </div>
            </template>
            <template slot-scope="scope">
              <span>{{ scope.row.availableStockQuantity }}</span>
@@ -393,7 +393,7 @@
          <el-table-column label="库存数量" prop="stockQuantity" align="center">
            <template slot="header">
              <div style="line-height: 14px;">库存数量</div>
              <!-- <div class="th" @click.stop>
              <div class="th" @click.stop>
                <el-input
                  type="text"
                  v-model="queryParamTwo.stockQuantity"
@@ -402,19 +402,19 @@
                  @clear="handleStockList"
                  size="mini"
                ></el-input>
              </div> -->
              </div>
            </template>
            <template slot-scope="scope">
              <span>{{ scope.row.stockQuantity }}</span>
            </template>
          </el-table-column>
          <el-table-column
          <!-- <el-table-column
            label="预留数量"
            prop="reserveQuantity"
            align="center"
          >
            <template slot="header">
              <div style="line-height: 14px;">预留数量</div>
              <div style="line-height: 14px;">预留数量</div> -->
              <!-- <div class="th" @click.stop>
                <el-input
                  type="text"
@@ -425,9 +425,33 @@
                  size="mini"
                ></el-input>
              </div> -->
            </template>
            <!-- </template>
            <template slot-scope="scope">
              <span>{{ scope.row.reserveQuantity }}</span>
            </template>
          </el-table-column> -->
          <el-table-column label="是否工序库存" prop="operationStockStatus" align="center">
            <template slot-scope="scope">
              <span v-if="scope.row.operationStockStatus">是</span>
              <span v-else>否</span>
            </template>
          </el-table-column>
          <el-table-column label="所属工序" prop="name" align="center">
            <template slot="header">
              <div style="line-height: 14px;">所属工序</div>
              <div class="th" @click.stop>
                <el-input
                  type="text"
                  v-model="queryParamTwo.name"
                  @keyup.enter.native="handleStockList"
                  clearable
                  @clear="handleStockList"
                  size="mini"
                ></el-input>
              </div>
            </template>
            <template slot-scope="scope">
              <span>{{ scope.row.name }}</span>
            </template>
          </el-table-column>
          <el-table-column label="库位号" prop="locationNo" align="center">
@@ -461,7 +485,7 @@
          >
          </el-pagination>
        </div> -->
      </el-tab-pane>
      <!-- </el-tab-pane> -->
      <!-- <el-tab-pane name="second" label="线边仓待处理物料">
        <div class="line-side-warehouse-header">
          <div>
@@ -480,7 +504,7 @@
              >扫码投料</el-button
            >
            <el-button
              class="feeding-btn"
              class="feeding-btn"locationNo
              type="primary"
              icon="feed-btn-feeding"
              @click="addFeed()"
@@ -1202,7 +1226,7 @@
        :show-overflow-tooltip="true"
      >
        <template slot="header" slot-scope="scope">
          <div style="line-height: 14px;">零件描述</div>
          <div style="line-height: 14px;">零件</div>
          <div class="th" @click.stop>
            <el-input
              type="text"
@@ -1218,9 +1242,9 @@
          <span>{{ scope.row.partName }}</span>
        </template>
      </el-table-column>
      <el-table-column label="IFS批次号" prop="ifsBatchNo" align="center">
      <el-table-column label="批次号" prop="ifsBatchNo" align="center">
        <template slot="header" slot-scope="scope">
          <div style="line-height: 14px;">IFS批次号</div>
          <div style="line-height: 14px;">批次号</div>
          <div class="th" @click.stop>
            <el-input
              type="text"
@@ -1236,7 +1260,7 @@
          <span>{{ scope.row.ifsBatchNo }}</span>
        </template>
      </el-table-column>
            <el-table-column label="WDR号" prop="ifsWdr" align="center">
            <!-- <el-table-column label="WDR号" prop="ifsWdr" align="center">
              <template slot="header" slot-scope="scope">
                <div style="line-height: 14px;">WDR号</div>
                <div class="th" @click.stop>
@@ -1253,7 +1277,7 @@
              <template slot-scope="scope">
                <span>{{ scope.row.ifsWdr }}</span>
              </template>
            </el-table-column>
            </el-table-column> -->
      <!-- <el-table-column label="SN号" prop="partBatchNo" align="center">
        <template slot="header" slot-scope="scope">
          <div style="line-height: 14px;">SN号</div>
@@ -1358,6 +1382,30 @@
          <span>{{ scope.row.stockQuantity }}</span>
        </template>
      </el-table-column>
      <el-table-column label="是否工序库存" prop="operationStockStatus" align="center">
        <template slot-scope="scope">
          <span v-if="scope.row.operationStockStatus">是</span>
          <span v-else>否</span>
        </template>
      </el-table-column>
      <el-table-column label="所属工序" prop="name" align="center">
        <template slot="header">
          <div style="line-height: 14px;">所属工序</div>
          <div class="th" @click.stop>
            <el-input
                  type="text"
                  v-model="queryParamTwo.name"
                  @keyup.enter.native="handleStockList"
                  clearable
                  @clear="handleStockList"
                  size="mini"
            ></el-input>
          </div>
        </template>
        <template slot-scope="scope">
          <span>{{ scope.row.name }}</span>
        </template>
      </el-table-column>
      <el-table-column label="库位号" prop="ifsLocation" align="center">
        <template slot="header" slot-scope="scope">
          <div style="line-height: 14px;">库位号</div>
@@ -1373,7 +1421,7 @@
          </div>
        </template>
        <template slot-scope="scope">
          <span>{{ scope.row.ifsLocation }}</span>
          <span>{{ scope.row.locNo }}</span>
        </template>
      </el-table-column>
      <el-table-column label="单位" prop="unit" align="center">
@@ -1487,11 +1535,11 @@
</template>
<script>
import { getStock, getFeed, getTodoStock, submitInsPart, inputHandle } from '@/api/product/personboard'
import { getStock, getFeed,getFeed2, getTodoStock, submitInsPart, inputHandle } from '@/api/product/personboard'
import { getMaterial } from '@/api/plan/operationtask'
import {
  getERPStockListByPart,
  fetchList
  fetchList,
} from '@/api/warehouse/joinstockorder'
import feedFormDialog from './feed-form'
import returnMaterialFormDialog from './returnmaterial-form'
@@ -1814,7 +1862,7 @@
          this.paramObject,
          this.queryParamThree
        )
        getFeed(query, stationId)
        getFeed2(query, stationId)
          .then((response) => {
            var data = response.data
            if (data.code === 0) {
@@ -2035,8 +2083,7 @@
      getERPStockListByPart({
        partNo: part.partNo,
        partBatchNo: part.partBatchNo
      })
        .then((resp) => {
      }).then((resp) => {
          const respCode = resp.data.code
          const respData = resp.data.data
          if (respCode === 0) {
@@ -2045,8 +2092,7 @@
            this.isSubmit = false
            this.$message.error('库存列表查询失败')
          }
        })
        .catch(() => {
        }).catch(() => {
          this.isSubmit = false
          console.log('查询零件对应的库存列表时,发生错误')
        })
@@ -2178,6 +2224,14 @@
    }
  },
  watch: {
    showFeedForm:{
      handler(newVal,oldVal){
        if(!newVal){
          this.$refs.stockTable.toggleAllSelection(false)
        }
      },
      deep: true
    },
    workstationId() {
      this.$nextTick(() => {
        if (this.currItem != null && this.currItem === 'feed') {
src/views/product/workbench/index.vue
@@ -528,10 +528,11 @@
              </el-form-item>
            </el-form>
          </div>
          <!--  :style="{ backgroundColor: taskStatusColor() }" -->
          <div class="task-div-content" >
    <div v-if="!isShowNormalTracking" class="task-list-div" >
      <operationTaskPane
        ref="operateTaskDiv" :style="{ backgroundColor: taskStatusColor() }"
      <operationTaskPane
        ref="operateTaskDiv"
        :workstationId="dutyForm.workstationId"
        :productSn="operateTaskForm.SN"
        :orderNumber="operateTaskForm.orderNumber"
@@ -544,7 +545,7 @@
    </div>
    <div v-if="isShowNormalTracking" class="task-list-div" >
      <operationTaskTable
        ref="operateTaskTableDiv" :style="{ backgroundColor: taskStatusColor() }"
        ref="operateTaskTableDiv"
        :workstationId="dutyForm.workstationId"
        :productSn="operateTaskForm.SN"
        :orderNumber="operateTaskForm.orderNumber"
@@ -1438,7 +1439,6 @@
  box-sizing: border-box;
  overflow-y: auto;
  margin-bottom: 10px;
}
.task-list-div {
@@ -1673,8 +1673,8 @@
    }
  },
  methods: {
    changeCurrOperateTask() {},
    refreshWorkReportPageData() {},
    // changeCurrOperateTask() {},
    // refreshWorkReportPageData() {},
    refreshOperateTasksByConditions() {
      this.$nextTick(() => {
        this.refreshOperateTasks()
@@ -2519,23 +2519,25 @@
  },
  computed: {
    ...mapGetters(['userInfo', 'tagWel', 'permissions']),
// åŠä¸ªæœˆä¹‹å‰æ˜¯é»„色 å½“天和三天之内就是红色 ä¸‰å¤©ä¹‹åŽå°±æ˜¯è“è‰²
// taskStatusColor() {
//     return function(date) {
//         const now = new Date();
//         const halfMonthAgo = new Date(now - 15 * 24 * 60 * 60 * 1000);
//         const threeDaysAgo = new Date(now - 3 * 24 * 60 * 60 * 1000);
//         const oneDayAgo = new Date(now - 24 * 60 * 60 * 1000);
//         const today = new Date(now);
    taskStatusColor() {
    return function() {
      const now = new Date();
      const threeDaysAgo = new Date(now - 3 * 24 * 60 * 60 * 1000);
      const oneDayAgo = new Date(now - 24 * 60 * 60 * 1000);
      const today = new Date(now);
//         if (halfMonthAgo <= date && date <= threeDaysAgo) {
//             return 'yellow';
//         } else if (today <= date && date <= threeDaysAgo) {
//             return 'red';
//         } else  {
//             return 'blue';
//         }
//     };
// }
      if (threeDaysAgo <= today && today <= oneDayAgo) {
        return 'yellow';
      } else if (today <= threeDaysAgo) {
        return 'blue';
      } else {
        return 'red';
      }
    };
  }
  },
  created() {
    document.title = '工作台——MES'
src/views/product/workbench/operation-task-pane.vue
@@ -1,6 +1,6 @@
<template>
  <div>
    <el-alert
    <el-alert
      v-if="!operationTasks || operationTasks.length == 0"
      title="还没有工单下发到此机台!"
      type="warning"
@@ -8,63 +8,88 @@
    >
    </el-alert>
    <el-card
  v-for="(item, index) in operationTasks"
    @click.native="setCheckFlag(item)"
  @click.native="setCheckFlag(item)"
  shadow="hover"
  :key="index"
  :class="['task-item', item.checkFlag ? 'card-checked' : 'card-unchecked']"
  :style="{ backgroundColor: getBackgroundColor(item.planFinishDay) }"
>
  <!-- <img class="selectedImg" /> -->
  <div class="header" >
    <div>工单号:{{ item.taskNo }}</div>
    <!-- <div>计划号:{{ item.mpsNo }}</div> -->
    <div
      :class="[
        'status-change-div',
        item.checkFlag ? 'card-checked-status' : 'card-status'
      ]"
    >
      <el-select
        v-if="permissions.product_operationTask_state"
        v-model="item.statusAction"
        placeholder="功能菜单"
        @change="
          changeTaskState(item.statusAction, item.status, item.id, item)
        "
      >
        <el-option
          v-for="ele in statusActions"
          :key="ele.value"
          :label="ele.label"
          :value="ele.value"
          :disabled="ele.disabled"
        >
        </el-option>
      </el-select>
    </div>
  </div>
  <div class="body">
    <div class="row">
      <div class="l">零件名称:</div>
      <div class="r">{{ item.partName }}</div>
    </div>
    <div class="row">
      <div class="l">零件号:</div>
      <div class="r">{{ item.partNo }}</div>
    </div>
    <!-- <div class="row">
      <div class="l">成品:</div>
      <div class="r">{{ item.productName }}</div>
    </div> -->
    <div class="row">
      <div class="l">计划完成时间:</div>
      <div class="r" >{{ item.planFinishDay }}</div>
    </div>
  </div>
</el-card>
>
      <img class="selectedImg" src="/img/workbench/icon_selected.png" />
      <div class="header">
        <div>工单号:{{ item.taskNo }}</div>
        <!-- <div class="tag" :style="{ backgroundColor: getTagColor(item.planFinishDay) }">
          {{ getTagText(item.planFinishDay) }}
        </div> -->
        <el-alert
          center
          style="width: 80px;height:30px;line-height: 30px;"
          :title="getTagText(item.planFinishDay)"
          :type="getTagColor(item.planFinishDay)"
          effect="dark"
          :closable="false">
        </el-alert>
        <!-- <div>计划号:{{ item.mpsNo }}</div> -->
        <div
          :class="[
            'status-change-div',
            item.checkFlag ? 'card-checked-status' : 'card-status'
          ]"
        >
          <el-select
            v-if="permissions.product_operationTask_state"
            v-model="item.statusAction"
            placeholder="功能菜单"
            @change="
              changeTaskState(item.statusAction, item.status, item.id, item)
            "
          >
            <el-option
              v-for="ele in statusActions"
              :key="ele.value"
              :label="ele.label"
              :value="ele.value"
              :disabled="ele.disabled"
            >
            </el-option>
          </el-select>
        </div>
      </div>
      <div class="body">
        <div class="row">
          <div class="l">零件名称:</div>
          <div class="r">{{ item.partName }}</div>
        </div>
        <div class="row">
          <div class="l">零件号:</div>
          <div class="r">{{ item.partNo }}</div>
        </div>
        <!-- <div class="row">
          <div class="l">成品:</div>
          <div class="r">{{ item.productName }}</div>
        </div> -->
        <div class="row">
          <div class="l">计划完成时间:</div>
          <div class="r">{{ item.planFinishDay }}</div>
        </div>
      </div>
      <el-progress
        class="task-progress"
        :text-inside="true"
        :stroke-width="20"
        :percentage="
          Number((item.completedQuantity / item.plannedQuantity).toFixed(2)) *
            100 >
          100
            ? 100
            : Number(
                (item.completedQuantity / item.plannedQuantity).toFixed(2)
              ) * 100
        "
        :format="formatPercentage(item.completedQuantity, item.plannedQuantity)"
      ></el-progress>
    </el-card>
  </div>
</template>
<style lang="scss" scoped>
@@ -78,42 +103,52 @@
  flex-direction: column;
  align-items: center;
}
.tag{
width: 80px;
height: 30px;
line-height: 30px;
border-radius:15% ;
text-align: center;
font-size:8px;
color:white;
align-content: 30px;
}
.task-item {
  width: 100%;
  border-radius: 12px;
  cursor: pointer;
  position: relative;
background:none;
  box-shadow: 1px 2px 24px 1px rgba(4, 0, 0, 0.14);
  & + .task-item {
    margin-top: 10px;
  }
  &.card-checked {
    // color: white;
    // background-image: -webkit-linear-gradient(
    //     90deg,
    //     rgba(12, 149, 255, 0.7) 0%,
    //     rgba(38, 176, 254, 0.8) 34%,
    //     rgba(12, 149, 255, 0.8) 100%
    //   ),
    //   -webkit-linear-gradient(#5a97fa, #5a97fa);
    // background-image: -moz-linear-gradient(
    //     90deg,
    //     rgba(12, 149, 255, 0.7) 0%,
    //     rgba(38, 176, 254, 0.8) 34%,
    //     rgba(12, 149, 255, 0.8) 100%
    //   ),
    //   -moz-linear-gradient(#5a97fa, #5a97fa);
    // background-image: linear-gradient(
    //     90deg,
    //     rgba(12, 149, 255, 0.7) 0%,
    //     rgba(38, 176, 254, 0.8) 34%,
    //     rgba(12, 149, 255, 0.8) 100%
    //   ),
    //   linear-gradient(#5a97fa, #5a97fa);
    // background-blend-mode: normal, normal;
    background-image: -webkit-linear-gradient(
        90deg,
        rgba(12, 149, 255, 0.7) 0%,
        rgba(38, 176, 254, 0.8) 34%,
        rgba(12, 149, 255, 0.8) 100%
      ),
      -webkit-linear-gradient(#5a97fa, #5a97fa);
    background-image: -moz-linear-gradient(
        90deg,
        rgba(12, 149, 255, 0.7) 0%,
        rgba(38, 176, 254, 0.8) 34%,
        rgba(12, 149, 255, 0.8) 100%
      ),
      -moz-linear-gradient(#5a97fa, #5a97fa);
    background-image: linear-gradient(
        90deg,
        rgba(12, 149, 255, 0.7) 0%,
        rgba(38, 176, 254, 0.8) 34%,
        rgba(12, 149, 255, 0.8) 100%
      ),
      linear-gradient(#5a97fa, #5a97fa);
    background-blend-mode: normal, normal;
  }
  .selectedImg {
    position: absolute;
@@ -314,7 +349,7 @@
    }
  },
  computed: {
    ...mapGetters(['permissions'])
    ...mapGetters(['permissions']),
  },
  created() {
    if (!this.defaultOperationId) {
@@ -334,32 +369,57 @@
    }
  },
  methods: {
    getBackgroundColor(planFinishDay) {
    const currentDate = new Date();
    currentDate.setHours(0, 0, 0, 0); // è®¾ç½®æ—¶é—´ä¸ºå½“天的开始,忽略时分秒毫秒
    const planFinishDayObj = new Date(planFinishDay);
    planFinishDayObj.setHours(0, 0, 0, 0); // åŒæ ·è®¾ç½®æ—¶é—´ä¸ºè®¡åˆ’完成日的开始
    if (planFinishDayObj < currentDate) {
      // å¦‚果计划完成日在当前日之前,返回'blue'表示过期
      return 'red';
//     getBackgroundColor(planFinishDay) {
//   const today = new Date();
//   const planDate = new Date(planFinishDay);
//   if (planDate < today) {
//     return 'rgba( 255,0,0,1)'; // è¶…期为红色
//   } else {
//     const timeDiff = planDate.getTime() - today.getTime();
//     const daysDiff = Math.ceil(timeDiff / (1000 * 3600 * 24));
//     if (daysDiff <= 3) {
//       return 'rgba(255,204,62, 1)';  // ä¸´æœŸä¸ºé»„色
//     } else {
//       return 'rgba(86,219, 25,1)';  // æ­£å¸¸ä¸ºç»¿è‰²
//     }
//   }
// },
getTagColor(planFinishDay) {
  const today = new Date();
  const planDate = new Date(planFinishDay);
  if (planDate < today) {
    //return 'rgba( 255,0,0,1)'; // è¶…期为红色
    return 'error'; // è¶…期为红色
  } else {
    const timeDiff = planDate.getTime() - today.getTime();
    const daysDiff = Math.ceil(timeDiff / (1000 * 3600 * 24));
    if (daysDiff <= 3) {
      //return 'rgba(255,204,62, 1)';  // ä¸´æœŸä¸ºé»„色
      return 'warning';  // ä¸´æœŸä¸ºé»„色
    } else {
      const timeDifference = currentDate - planFinishDayObj;
      const daysDifference = Math.ceil(timeDifference / (1000 * 60 * 60 * 24));
      if (daysDifference < 0) {
        // å¦‚果计划完成日在未来,计算它是否在10天内
        const daysUntilDue = Math.abs(daysDifference);
        if (daysUntilDue <= 10) {
          // å¦‚果在10天内,返回'yellow'表示即将到期
          return 'yellow';
        }
      }
      //return 'rgba(86,219, 25,1)';  // æ­£å¸¸ä¸ºç»¿è‰²
      return 'success';  // æ­£å¸¸ä¸ºç»¿è‰²
    }
    // å¦‚果不是即将到期或已过期,返回'red'表示已到期
    return 'blue';
  }
},
getTagText(planFinishDay) {
  const today = new Date();
  const planDate = new Date(planFinishDay);
  if (planDate < today) {
    return '超期';
  } else {
    const timeDiff = planDate.getTime() - today.getTime();
    const daysDiff = Math.ceil(timeDiff / (1000 * 3600 * 24));
    if (daysDiff <= 3) {
      return '临期';
    } else {
      return '正常';
    }
  }
},
    // ç‚¹å‡»å·¥å•,选中工单
    setCheckFlag(item) {
      if (item.checkFlag) {
@@ -668,7 +728,7 @@
                      break
                    }
                  }
                  console.log(this.operationTasks)
                  // console.log(this.operationTasks)
                  // è‹¥å½“前工单在工单列表未被找到且当前工单状态为已完成或已取消时,则将当前工单重置为空并抛出事件,否则不管
                  if (isResetCurrOpertionTaskFlag) {
                    getOperationTaskById(taskId).then((res) => {
src/views/product/workbench/productInDialog.vue
@@ -25,14 +25,14 @@
      >
      </el-table-column>
      <el-table-column
        label="IFS批次号"
        label="批次号"
        prop="ifsBatchNo"
        align="center"
        :show-overflow-tooltip="true"
      >
      </el-table-column>
      <el-table-column label="零件批号" prop="partBatchNo" align="center">
      </el-table-column>
      <!-- <el-table-column label="零件批号" prop="partBatchNo" align="center">
      </el-table-column> -->
      <el-table-column label="规格型号" prop="specs" align="center">
      </el-table-column>
      <el-table-column
@@ -45,6 +45,14 @@
      </el-table-column>
      <el-table-column label="单位" prop="unit" align="center">
      </el-table-column>
      <el-table-column label="是否工序库存" prop="operationStockStatus" align="center">
        <template slot-scope="scope">
              <span v-if="scope.row.operationStockStatus">是</span>
              <span v-else>否</span>
            </template>
      </el-table-column>
      <el-table-column label="所属工序" prop="name" align="center">
      </el-table-column>
    </el-table>
    <div slot="footer" class="dialog-footer">
src/views/product/workbench/productoutput-list.vue
@@ -130,7 +130,7 @@
            isSearch: true,
            searchInfoType: 'text'
          },
          {
          /* {
            minWidth: '100',
            prop: 'checkStatus',
            label: '检测状态',
@@ -152,8 +152,8 @@
            optList: () => {
              return this.checkStatusOptions
            }
          },
          {
          }, */
         /*  {
            minWidth: '140',
            prop: 'isQualified',
            label: '检测是否合格',
@@ -198,7 +198,7 @@
            optList: () => {
              return this.booleanOptions
            }
          },
          }, */
          {
            minWidth: '140',
            prop: 'remark',
src/views/product/workbench/productoutput-table.vue
@@ -438,6 +438,15 @@
            searchInfoType: 'text'
          },
          {
            minWidth: '100',
            prop: 'scrapQty',
            label: '报废数量',
            sort: true,
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
          },
          {
            minWidth: '80',
            prop: 'unit',
            label: '单位',
@@ -446,7 +455,7 @@
            isSearch: true,
            searchInfoType: 'text'
          },
          {
          /* {
            minWidth: '100',
            prop: 'checkStatus',
            label: '检测状态',
@@ -537,7 +546,7 @@
            optList: () => {
              return this.booleanOptions
            }
          },
          }, */
          {
            minWidth: '140',
            prop: 'remark',
src/views/product/workbench/workReportCard.vue
@@ -13,9 +13,9 @@
        <div class="product-out-header-left">
          <div style="height:28px;line-height:28px;">
            <el-divider class="pane-divider" direction="vertical"></el-divider><span
              style="font-size:14px;font-weight:bold">产出</span>
              style="font-size:14px;font-weight:bold;">产出 </span>
            <el-tooltip effect="dark" content="刷新列表" placement="top">
              <el-button class="step-refresh-btn" icon="el-icon-refresh" type="info" circle
              <el-button size="small" class="step-refresh-btn" icon="el-icon-refresh" type="info" circle
                @click="getBatchReport(5)"></el-button>
            </el-tooltip>
          </div>
@@ -126,7 +126,7 @@
          <!-- <el-button class="tracking-out-revoke-btn" type="primary" icon="tracking-btn-out"
          :disabled="currProductMainDisable || currentDutyRecord.isConfirm" v-if="!editShow" >交班
        </el-button> -->
          <el-button class="submit-out-btn" type="primary"
        <el-button class="submit-out-btn" type="primary"
            :disabled="currProductMainDisable || currentDutyRecord.isConfirm" v-if="!editShow" @click="submitList()"
            :loading="submitLoading">提交
          </el-button>
@@ -256,7 +256,7 @@
            }}</template>
          </template>
        </el-table-column>
        <el-table-column label="WDR号" prop="wdr" align="center" width="100">
        <!-- <el-table-column label="WDR号" prop="wdr" align="center" width="100">
          <template slot-scope="scope">
            <el-input :id="'idReport_' + +scope.$index" :ref="'reference_' + scope.$index" v-if="scope.row.isEdit"
              v-model="scope.row.wdr" placeholder="WDR号"></el-input>
@@ -264,7 +264,7 @@
              scope.row.wdr
            }}</template>
          </template>
        </el-table-column>
        </el-table-column> -->
        <!-- <el-table-column label="分段描述" prop="segmentDesc" align="center">
          <template slot-scope="scope">
            <el-input
@@ -288,8 +288,8 @@
            }}</template>
          </template>
        </el-table-column>
        <el-table-column label="IFS批次号" prop="ifsBatchNo" align="center" width="120">
          <!-- <template slot="header" slot-scope="scope">
        <!-- <el-table-column label="IFS批次号" prop="ifsBatchNo" align="center" width="120">
          <template slot="header" slot-scope="scope">
            <div style="line-height: 14px;">IFS批次号</div>
            <div class="th" @click.stop>
              <template>
@@ -305,8 +305,8 @@
            <template v-if="!scope.row.isIfsBatchNoEdit">{{
              scope.row.ifsBatchNo
            }}</template>
          </template> -->
        </el-table-column>
          </template>
        </el-table-column> -->
        <el-table-column label="备注" prop="remark" align="center">
          <template slot-scope="scope">
            <el-input :id="'idReport_' + +scope.$index" :ref="'reference_' + scope.$index" v-if="scope.row.isEdit"
@@ -3246,7 +3246,7 @@
        // åˆ·æ–°äº§å‡ºè®°å½•
        // this.$emit('refreshProductOutput')
      } else if (refreshType === 5) {
        // æäº¤æŠ¥å‘ŠåŽï¼Œåˆ·æ–°
        // æäº¤æŠ¥å‘ŠåŽï¼Œåˆ·
        // åˆ·æ–°å·¥å•列表
        this.$emit('refreshOperateTasks')
        // åˆ·æ–°äº§å‡ºè®°å½•
@@ -3270,7 +3270,9 @@
            this.options = res.data.data
            if (this.options.length > 1) {
              this.dialogVisible = true
            } else {
            // } else if(this.options.length == 0){
                        //     this.$message.error('工作站未绑定合格库位')
                        } else {
              this.locationIdValue = this.options[0].id
              this.submitListApi()
            }
src/views/quality/Packaging_ledger/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,441 @@
<template>
    <div class="mod-config">
        <basic-container>
        <el-row>
            <el-col :span="11">
            <ttable
            :table="table"
            :isShowHide="true"
            :prelang="prelang"
            :ajaxFun="ajaxFun"
            :options="options"
            @handleSelectionChange="handleSelectionChange"
            ref="processconfiguration"
            >
              <template #toolbar></template>
            </ttable>
            </el-col>
            <el-col :span="13" style="padding-left: 10px">
                <el-card>
                <div slot="header">
                <el-row>
                    <el-col :span="8">
                    <span>装箱明细</span>
                    </el-col>
                    <el-col :span="8" :offset="4">
                    <!-- <el-button
                        style="float: right; padding: 3px 0"
                        type="text"
                        @click="beginItemLayOut"
                    >
                        å¸ƒå±€
                    </el-button> -->
                    </el-col>
                    <el-col :span="2">
                    <el-button
                        style="float: right; padding: 3px 0"
                        type="text"
                        @click="addpreserve"
                        >保存
                    </el-button>
                    </el-col>
                    <el-col :span="2">
                    <el-button
                        v-if="!isCheck"
                        style="float: right; padding: 3px 0"
                        type="text"
                        @click="relateOperationParam()"
                        >添加
                    </el-button>
                    </el-col>
                </el-row>
                </div>
                <el-table
              :data="testStandardParams"
              id="testStandardParamTable"
              ref="testStandardParam"
              highlight-current-row
              height="700"
              style="width: 100%"
              class="l-mes-table"
              border
              stripe
            >
              <el-table-column
                type ="index"
                label="序号"
                align="center"
                width="50"
              />
              <el-table-column
                label="产品"
                prop="product"
                align="center"
              />
              <el-table-column
                label="产品编号"
                prop="productNo"
                align="center"
              >
              </el-table-column>
              <el-table-column
                label="规格型号"
                prop="specs"
                align="center"
              >
              </el-table-column>
              <el-table-column
                label="单位"
                prop="unit"
                align="center"
              >
              </el-table-column>
              <el-table-column
                label="数量"
                prop="number"
                align="center"
                width="80"
              >
                <template slot-scope="scope">
                  <el-input v-model="scope.row.number"></el-input>
                </template>
              </el-table-column>
              <el-table-column
                fixed="right"
                label="操作"
                align="center"
                width="80">
                <template slot-scope="scope">
                  <el-button @click="deleteadd(scope.row)"  size="small">删除</el-button>
                </template>
              </el-table-column>
            </el-table>
                </el-card>
            </el-col>
        </el-row>
        <!-- æ–°å¢ž -->
        <packfrom
        :currshowlist.sync="addOrUpdateVisible"
        @refreshDataList="getData">
        </packfrom>
        <packfromadd
        :currshowlist.sync="increase"
        :packageBoxIddata ="packageBoxId"
        @handleSelectionChange = "preserve"
        >
        </packfromadd>
      </basic-container>
      <el-dialog title="标签列表" top="5vh" :visible.sync="diaPrintTab" width="500px">
        <div id="qrCard" class="dia_body" style="height: 400px;overflow-y: auto;padding: 0 10px;">
          <el-card class="box-card" v-for="(item, i) in qrData" :key="i" style="margin-bottom: 15px;">
            <el-row>
              <el-col :span="10" :offset="3">序号:</el-col>
              <el-col :span="10" style="font-weight: bold;">{{ i + 1 }}</el-col>
            </el-row>
            <el-row>
              <el-col :span="10" :offset="3">包装编号:</el-col>
              <el-col :span="10" style="font-weight: bold;">{{ item.packageNo }}</el-col>
            </el-row>
            <el-row>
              <el-col :span="10" :offset="3">二维码:</el-col>
              <el-col :span="10">
                <vueQr :text="JSON.stringify(item)" :size="120" :margin="1"></vueQr>
              </el-col>
            </el-row>
          </el-card>
        </div>
        <span slot="footer" class="dialog-footer">
          <el-button @click="diaPrintTab = false">取 æ¶ˆ</el-button>
          <el-button type="primary" @click="printFun">打 å°</el-button>
        </span>
      </el-dialog>
    </div>
</template>
<script>
import { pagedata,dropById,list,saveList,deledata,sAuditstatus} from '@/api/quality/Packaging_ledger'
import ttable from '@/views/common/ztt-table.vue'
import packfrom from './pack-from.vue'
import packfromadd from './pack-fromadd.vue'
import vueQr from 'vue-qr'
import PrintJS from 'print-js'
export default {
    data(){
        return {
          qrData:[],
          diaPrintTab: false,
          multipleSelection: [],
          isCheck: false,
          dataway:{},
          goid:'',
          testStandardParams: [],
          packageBoxId:{},
            prelang: 'operation',
            dataListLoading: false,
            ajaxFun: pagedata,
            increase:false,
            addOrUpdateVisible:false,
            options: {
                height: 300, // é»˜è®¤é«˜åº¦-为了表头固定
                stripe: true, // æ˜¯å¦ä¸ºæ–‘马纹 table
                highlightCurrentRow: false, // æ˜¯å¦è¦é«˜äº®å½“前行
                border: true, // æ˜¯å¦æœ‰çºµå‘边框
                lazy: false, // æ˜¯å¦éœ€è¦æ‡’加载
                fit: true, // åˆ—的宽度是否自撑开
                multiSelect: true, //
                isEdit:false,
                seqNo: true,
                isShowHide: true, // æ˜¯å¦æ˜¾ç¤ºæ˜¾å½±æŒ‰é’®
                isRefresh: true, // æ˜¯å¦æ˜¾ç¤ºåˆ·æ–°æŒ‰é’®
                isSearch: true, // é«˜çº§æŸ¥è¯¢æŒ‰é’®
                defaultOrderBy: { column: 'createTime', direction: 'desc' }
            },
            table: {
                total: 0,
                currentPage: 1,
                pageSize: 20,
                data: [],
                // æ ‡é¢˜
                column: [
                {
                  minWidth: 'code',
                  prop: 'state',
                  label: '状态',
                  sort: true,
                  isTrue: true,
                  isSearch: true,
                  searchInfoType: 'text'
                },
                  {
                    minWidth: '140',
                    prop: 'packageNo',
                    label: '包装编号',
                    isTrue: true,
                    isSearch: true,
                    searchInfoType: 'text',
                  },{
                    minWidth: '140',
                    prop: 'createUser',
                    label: '创建人',
                    isTrue: true,
                    isSearch: true,
                    searchInfoType: 'text',
                  },{
                    minWidth: '140',
                    prop: 'contractNo',
                    label: '合同号',
                    isTrue: true,
                    isSearch: true,
                    searchInfoType: 'text',
                  },
                  {
                    minWidth: '140',
                    prop: 'updateUser',
                    label: '更新人',
                    isTrue: true,
                    isSearch: true,
                    searchInfoType: 'text',
                  },
                  {
                    minWidth: '130',
                    width: '150',
                    prop: 'updateTime',
                    label: '更新日期',
                    sort: true,
                    isTrue: true,
                    isSearch: true,
                    searchInfoType: 'datetimerange',
                },
                {
                    minWidth: '130',
                    width: '150',
                    prop: 'createTime',
                    label: '创建日期',
                    sort: true,
                    isTrue: true,
                    isSearch: true,
                    searchInfoType: 'datetimerange',
                },
                ],
                toolbar: [
                    {
                      text: '新增',
                      type: 'primary',
                      fun: this.addOrUpdateHandle
                    },
                    {
                      text: '标签打印',
                      type: 'primary',
                      fun: this.printLabel
                    },
                ],
                operator: [
                    {
                      text: '检验',
                      icon: 'el-icon-position',
                      type: 'text',
                      size: 'small',
                      fun: this.check
                    },{
                      text: '删除',
                      icon: 'el-icon-delete',
                      type: 'text',
                      size: 'small',
                      fun: this.deleteHandle
                    }
                  ],
                  operatorConfig: {
                    fixed: 'right',
                    label: '操作',
                    width: 120,
                    minWidth: 120
                  }
            },
       }
    },
    components: {
      ttable,
      packfrom,
      packfromadd,
      vueQr
    },
    watch: {
      diaPrintTab(newVal){
        if(!newVal){
          this.qrData = []
        }
      }
    },
    methods: {
      //打印按钮
      printFun() {
          this.diaPrintTab = false;
          PrintJS({
              printable: "qrCard",
              type: "html",
              // header: "原材料检测报告",
              targetStyles: ["*"],
              style: `@page {margin: 0mm 5mm;}
                      html {zoom:100%;}
                      @media print {
                        html,body{
                          width:60mm;
                          height:40mm;
                        }
                      }`,
              ignoreElements: ["no-ignore"],
              orientation: 'portrait'
          });
      },
      handleSelectionChange(val){
        this.multipleSelection = val
        let lastRow = val[val.length - 1]
        this.handleCurrentChange(lastRow)
      },
      printLabel(){
        if(this.multipleSelection.length==0){
          this.$message.warning('请选择一条数据')
          return
        }
        this.diaPrintTab = true
        console.log(this.multipleSelection);
        this.multipleSelection.forEach(item=>{
          let obj = {
            packageNo: item.packageNo,
            contractNo: item.contractNo,
            boxInfo: []
          }
          list({packageBoxId:item.id}).then((res) =>{
            res.data.data.forEach(ele=>{
              obj.boxInfo.push({
                product: ele.product,
                productNo: ele.productNo,
                specs: ele.specs,
                unit: ele.unit,
                number: ele.number
              })
            })
          })
          this.qrData.push(obj)
        })
      },
       // èŽ·å–æ•°æ®åˆ—è¡¨
      getData() {
        this.$refs.processconfiguration.refreshData()
      },
      wayRenovate(){
        this.getData()
      },
      //add
      addOrUpdateHandle(){
        this.addOrUpdateVisible = true
      },
      //删除
      deleteHandle(row){
        dropById({id:row.id}).then((res) =>{
          this.getData()
          this.$message.success('删除成功')
        })
      },
      handleCurrentChange(row){
        if(row.state=='已报检'){
          this.isCheck = true
        }
        this.dataway = row
        this.packageBoxId = {
          packageBoxId:row.id
        }
        this.goid = row.id
        this.rightquery()
      },
      rightquery(){
        list({packageBoxId:this.goid}).then((res) =>{
          this.testStandardParams = res.data.data
        })
      },
      //详情添加
      relateOperationParam(){
        if (this.dataway.state == "未报检") {
            this.increase = true
        }else{
          this.$message.error('请先选择包装项目')
        }
      },
      preserve(datalist){
        this.testStandardParams = datalist
      },
      //右边保存
      addpreserve(){
         this.testStandardParams.forEach(el => {
              el.packageBoxId =this.goid
         });
        saveList(this.testStandardParams).then((res) =>{
          this.$message.success('保存成功')
          this.rightquery()
        })
      },
      //删除
      deleteadd(row){
          deledata({id:row.id}).then((res)=>{
          this.$message.success('删除成功')
          this.rightquery()
          })
      },
      //审核
      check(row){
        let packageBox = {
                id:row.id,
                packageNo:row.packageNo,
                contractNo:row.contractNo,
                customerId:row.customerId,
        }
        sAuditstatus(packageBox).then((res) =>{
          this.getData()
          this.$message.success('检验成功')
        })
      },
    },
}
</script>
src/views/quality/Packaging_ledger/pack-from.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,174 @@
<template>
    <el-dialog
      width="60%"
      title="新增"
      top="5vh"
      :visible.sync="innerVisible"
      :show="currshowlist"
      @close="$emit('update:currshowlist', false)"
      append-to-body
      class="part-dialog"
    >
      <ttable
        :table="table"
        @currentChange="Getdata"
        :prelang="prelang"
        :options="options"
        :ajaxFun="ajaxFun"
        :bottomOffset="350"
        ref="paramTable"
      >
        <template #toolbar></template>
      </ttable>
      <div slot="footer" class="dialog-footer">
        <el-button @click="innerVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="saveSelectRow">ç¡® å®š</el-button>
      </div>
    </el-dialog>
  </template>
  <script>
import { customerpage,pagedataadd } from '@/api/quality/Packaging_ledger'
import ttable from '@/views/common/ztt-table.vue'
  export default {
    props:{
        currshowlist: {
            type: Boolean,
            default: false
        },
    },
    data() {
      return {
        datalistid:{},
        ajaxFun: customerpage,
        currentRow: false,
        typeOptions: [],
        innerVisible: false,
        listLoading: true,
        multipleSelection: [],
        isShowQuery: false,
        uploadInfo: {
          // æ˜¯å¦å±•示上传EXCEL以及对应的url
          isShow: false,
          url: ''
        },
        prelang: 'operation',
        options: {
          height: 300, // é»˜è®¤é«˜åº¦-为了表头固定
          stripe: true, // æ˜¯å¦ä¸ºæ–‘马纹 table
          highlightCurrentRow: false, // æ˜¯å¦è¦é«˜äº®å½“前行
          border: true, // æ˜¯å¦æœ‰çºµå‘边框
          lazy: false, // æ˜¯å¦éœ€è¦æ‡’加载
          fit: true, // åˆ—的宽度是否自撑开
          multiSelect: false, //
          isEdit:false,
          seqNo: true,
          isShowHide: true, // æ˜¯å¦æ˜¾ç¤ºæ˜¾å½±æŒ‰é’®
          isSearch: true, // é«˜çº§æŸ¥è¯¢æŒ‰é’®
          defaultOrderBy: { column: 'createTime', direction: 'desc' }
        },
        table: {
          total: 0,
          currentPage: 1,
          pageSize: 20,
          data: [],
          // æ ‡é¢˜
          column: [
            {
              minWidth: 'code',
              prop: 'contractNo',
              label: '合同号',
              sort: true,
              isTrue: true,
              isSearch: true,
              searchInfoType: 'text'
            },
            {
              minWidth: '120',
              prop: 'customerName',
              label: '客户名称',
              sort: true,
              isTrue: true,
              isSearch: true,
              searchInfoType: 'text'
            },
            {
              minWidth: '140',
              prop: 'customerNo',
              label: '客户编码',
              sort: true,
              isTrue: true,
              isSearch: true,
              searchInfoType: 'text',
            },
            {
              minWidth: '120',
              prop: 'deliveryDate',
              label: '交货日期',
              sort: true,
              isTrue: true,
              isSearch: true,
              searchInfoType: 'datetimerange'
            },
            {
              minWidth: '120',
              prop: 'entityName',
              label: '工程名称',
              sort: true,
              isTrue: true,
              isSearch: true,
              searchInfoType: 'text'
            },
          ],
        },
        addOrUpdateVisible: false
      }
    },
    components: {
      ttable
    },
    watch: {
      currshowlist() {
        console.log(22211);
        this.innerVisible = this.currshowlist
        if (this.currshowlist) {
          this.$nextTick(() => {
            this.getData()
          })
        }
      }
    },
    computed: {
    //   ...mapGetters(['permissions'])
    },
    created() {
      this.getParamType()
    },
    methods: {
         // èŽ·å–æ•°æ®åˆ—è¡¨
        // getData() {
        // this.$refs.paramTable.getDataList()
        // },
        Getdata(val){
            console.log(val);
            this.datalistid = val
        },
      saveSelectRow() {
        let packageBox = {
            customerId:this.datalistid.id,
            contractNo:this.datalistid.contractNo
        }
        pagedataadd (packageBox).then((res =>{
            if (res.status === 200) {
                this.$message.success('新增成功')
                this.$emit('refreshDataList')
            }else{
                this.$message.error('创建失败')
            }
        }))
        this.innerVisible = false
          this.$emit('wayapi',this.innerVisible )
      },
    }
  }
  </script>
src/views/quality/Packaging_ledger/pack-fromadd.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,171 @@
<template>
    <el-dialog
      width="60%"
      title="参数"
      top="5vh"
      :visible.sync="innerVisible"
      :show="currshowlist"
      @close="$emit('update:currshowlist', false)"
      append-to-body
      class="part-dialog"
    >
      <ttable
        :table="table"
        @handleSelectionChange="handleSelectionChange"
        :prelang="prelang"
        :options="options"
        :ajaxFun="ajaxFun"
        :paramObj="packageBoxIddata"
        :bottomOffset="350"
        ref="paramTable"
      >
        <template #toolbar></template>
      </ttable>
      <div slot="footer" class="dialog-footer">
        <el-button @click="innerVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="saveSelectRow">ç¡® å®š</el-button>
      </div>
    </el-dialog>
  </template>
  <script>
import { dataadd,saveList } from '@/api/quality/Packaging_ledger'
import ttable from '@/views/common/ztt-table.vue'
  export default {
    props:{
        currshowlist: {
            type: Boolean,
            default: false
        },
        packageBoxIddata:{
            type: Object
        },
    },
    data() {
      return {
        datalist:[],
        datalistid:"",
        ajaxFun: dataadd,
        currentRow: false,
        typeOptions: [],
        innerVisible: false,
        listLoading: true,
        multipleSelection: [],
        isShowQuery: false,
        uploadInfo: {
          // æ˜¯å¦å±•示上传EXCEL以及对应的url
          isShow: false,
          url: ''
        },
        prelang: 'operation',
        options: {
          height: 300, // é»˜è®¤é«˜åº¦-为了表头固定
          stripe: true, // æ˜¯å¦ä¸ºæ–‘马纹 table
          highlightCurrentRow: false, // æ˜¯å¦è¦é«˜äº®å½“前行
          border: true, // æ˜¯å¦æœ‰çºµå‘边框
          lazy: false, // æ˜¯å¦éœ€è¦æ‡’加载
          fit: true, // åˆ—的宽度是否自撑开
          multiSelect: true, //
          seqNo: true,
          isShowHide: true, // æ˜¯å¦æ˜¾ç¤ºæ˜¾å½±æŒ‰é’®
          isSearch: true, // é«˜çº§æŸ¥è¯¢æŒ‰é’®
          defaultOrderBy: { column: 'createTime', direction: 'desc' }
        },
        table: {
          total: 0,
          currentPage: 1,
          pageSize: 20,
          data: [],
          // æ ‡é¢˜
          column: [
            {
              minWidth: 'code',
              prop: 'product',
              label: '产品',
              sort: true,
              isTrue: true,
              isSearch: true,
              searchInfoType: 'text'
            },
            {
              minWidth: '120',
              prop: 'productNo',
              label: '产品编号',
              sort: true,
              isTrue: true,
              isSearch: true,
              searchInfoType: 'text'
            },
            {
              minWidth: '140',
              prop: 'specs',
              label: '规格型号',
              sort: true,
              isTrue: true,
              isSearch: true,
              searchInfoType: 'text',
            },
            {
              minWidth: '120',
              prop: 'unit',
              label: '单位',
              sort: true,
              isTrue: true,
              isSearch: true,
              searchInfoType: 'datetimerange'
            },
          ],
        },
        addOrUpdateVisible: false
      }
    },
    components: {
      ttable
    },
    watch: {
      currshowlist() {
        console.log(22211);
        this.innerVisible = this.currshowlist
      }
    },
    computed: {
    //   ...mapGetters(['permissions'])
    },
    created() {
      this.getParamType()
    },
    methods: {
         // èŽ·å–æ•°æ®åˆ—è¡¨
        getData() {
        this.$refs.paramTable.getDataList()
        },
        handleSelectionChange(val){
            let data = val
            data.forEach(el => {
                this.datalistid = el
            });
        },
      saveSelectRow() {
        console.log(this.packageBoxIddata,"123");
        // saveList ({customerId:this.datalistid.id,contractNo:this.datalistid.contractNo}).then((res =>{
        //     console.log(res);
        //     if (res.status === 200) {
        //         this.$message.success('新增成功')
        //     }else{
        //         this.$message.error('创建失败')
        //     }
        // }))
        this.innerVisible = false
        //   this.$emit('handleSelectionChange',this.innerVisible )
      },
      handleSelectionChange(val){
        this.datalist = val
        console.log(this.datalist,"数据");
      },
      saveSelectRow(){
        this.$emit('handleSelectionChange',this.datalist )
        this.innerVisible = false
      }
    }
  }
  </script>
src/views/quality/exception/exception.vue
@@ -31,8 +31,8 @@
            action="/mes/exception/upload"
            :headers="headers"
            :before-upload="submitUpload"
            :on-preview="handlePreview"
            :on-remove="handleRemove"
            :on-preview="handlePreview"
            :on-success="uploadSuccess"
            :data="paramData"
            :file-list="fileList"
@@ -41,7 +41,7 @@
          >
            <el-button size="small" type="primary">点击上传</el-button>
            <div slot="tip" class="el-upload__tip">
              åªèƒ½ä¸Šä¼ jpg图片,且不超过2MB
              åªèƒ½ä¸Šä¼ jpg/png图片,且不超过5MB
            </div>
          </el-upload>
        </el-col>
@@ -53,6 +53,9 @@
        @refreshDataList="getData"
      ></table-form>
    </div>
    <el-dialog title="图片预览" width="60%" :visible.sync="previewVisible" top="5vh">
        <img style="width:100%;height: 70vh" :src="dialogImageUrl" alt="">
    </el-dialog>
  </div>
</template>
<style lang="scss" scoped>
@@ -111,6 +114,8 @@
  },
  data() {
    return {
      previewVisible: false,
      dialogImageUrl: null,
      fileList: [],
      headers: {
        Authorization: 'Bearer ' + getStore({ name: 'access_token' })
@@ -293,7 +298,7 @@
      }
    },
    handlePreview(file) {
      window.open(file.url)
      this.previewVisible = true
    },
    uploadSuccess(response, file, fileList) {
      this.getFileList()
@@ -312,6 +317,7 @@
              fileEl = {}
              fileEl.name = attachment.original
              fileEl.url = attachment.url
              this.dialogImageUrl = attachment.url
              fileEl.id = attachment.id
              fileEl.fileName = attachment.fileName
              this.fileList.push(fileEl)
@@ -320,10 +326,22 @@
        })
      }
    },
    submitUpload() {
    submitUpload(file) {
      console.info(this.currentRow && this.currentRow.id)
      console.log(file);
      if (this.currentRow && this.currentRow.id) {
        const maxSize = 5 * 1024 *1024
        let jpgType = 'image/jpeg'
        let pngType = 'image/png'
        if(file.type != jpgType && file.type != pngType){
          this.$message.error('只能上传.jpg/.png类型的图片')
          return false
        }
        if(file.szie > maxSize){
          this.$message.error('图片大小不能超过5MB')
        }
        this.paramData.exceptionId = this.currentRow.id
      } else {
        this.$message.error('请先选择生产异常记录')
        return false
src/views/quality/finishedProductInspection/finishedProduct-form.vue
@@ -14,9 +14,15 @@
    <div class="page-main">
        <div class="finishedProduct-basic">
            <el-form :model="processInspectVo" ref="addInspectionform" class="l-mes"
            label-position="right" label-width="120px" style="width: 100%" size="small">
            label-position="right" label-width="120px" style="width: 100%"  size="small">
                <div class="formwrapper">
                    <el-row>
                        <el-col :span="6">
                            <el-form-item label="产品检验编号:">
                                <el-input @blur="selectInfoByOrderId" disabled
                                v-model="processInspectVo.finInsNo" autocomplete="off" />
                            </el-form-item>
                        </el-col>
                        <el-col :span="6">
                            <el-form-item label="订单号:">
                                <el-input @blur="selectInfoByOrderId" :disabled="processInspectVo.id != null"
@@ -35,6 +41,8 @@
                                    placeholder="请输入工程名称" autocomplete="off" />
                            </el-form-item>
                        </el-col>
                    </el-row>
                    <el-row>
                        <el-col :span="6">
                            <el-form-item label="产品名称:">
                                <el-select style="width: 100%" @change="changeOptionsSamplename" :disabled="processInspectVo.id != null"
@@ -45,8 +53,6 @@
                                </el-select>
                            </el-form-item>
                        </el-col>
                    </el-row>
                    <el-row>
                        <el-col :span="6">
                            <el-form-item label="产品编码:">
                                <el-input disabled v-model="processInspectVo.mcode"
@@ -65,6 +71,8 @@
                                    placeholder="请输入单位" autocomplete="off" />
                            </el-form-item>
                        </el-col>
                    </el-row>
                    <el-row>
                        <el-col :span="6">
                            <el-form-item label="数量:">
                                <el-input v-model="processInspectVo.quantity" placeholder="请输入数量"
@@ -241,6 +249,7 @@
            empiricalValueAddMaxNumber: 0,
            processInspectVo: {
                id: null,
                finInsNo: null,
                material: null,
                mcode: null,
                prname: null,
@@ -250,7 +259,8 @@
                quantity: null,
                specificationsModel: null,
                unit: null,
                technologyId: null
                technologyId: null,
                documentId: null
            },
            inspectionItems: [], // æ–°å¢žæ£€éªŒé¡¹ç›®è¡¨æ ¼
            inspectionResultForm: [],
@@ -339,6 +349,7 @@
            if(id != null){
                queryById(id).then(res=>{
                    let result = res.data.data
                    this.processInspectVo.finInsNo = result.finInsNo
                    this.processInspectVo.orderNumber = result.orderNumber
                    this.processInspectVo.mcode = result.materialCode
                    this.processInspectVo.prname = result.customerName
@@ -347,6 +358,7 @@
                    this.processInspectVo.specificationsModel = result.specs
                    this.processInspectVo.unit = result.punit
                    this.processInspectVo.quantity = result.quantity
                    this.processInspectVo.documentId = result.documentId
                    let userList = []
                    result.children.forEach(item=>{
                        item.iid = Math.random()
@@ -424,6 +436,7 @@
            this.processInspectVo.material = sample.material
            this.processInspectVo.specificationsModel = sample.specs
            this.processInspectVo.unit = sample.unit
            this.processInspectVo.documentId = sample.documentId
        },
        changeState(row, index) {
            if (row.iid != null && row.iid != '') {
@@ -454,6 +467,7 @@
        addTestProject() {
            let val = this.processInspectVo
            let data = {
                finInsNo: val.finInsNo,
                customerName: val.prname,
                material: val.material,
                materialCode: val.mcode,
@@ -462,6 +476,7 @@
                quantity: val.quantity,
                specs: val.specificationsModel,
                unit: val.unit,
                documentId: val.documentId
            }
            addFinish(data).then(res=>{
                let id = res.data.data
@@ -506,6 +521,7 @@
                    this.processInspectVo.material = null
                    this.processInspectVo.specificationsModel = null
                    this.processInspectVo.unit = null
                    this.processInspectVo.documentId = null
                }
            })
        },
@@ -542,7 +558,7 @@
  flex-wrap: wrap;
}
.finishedProduct-result {
basic.finishedProduct-result {
  width: 100%;
  height: 150px;
  padding: 10px 20px;
@@ -556,7 +572,7 @@
.finishedProduct-basic {
  background-color: #fff;
  height: 120px;
  height: 155px;
  display: flex;
  flex-wrap: wrap;
  padding: 10px 20px;
src/views/quality/finishedProductInspection/finishedProducter-print.vue
@@ -1,157 +1,159 @@
<template>
    <div id="20230721_24921" align=center x:publishsource="Excel" style="margin-top: 65pt;margin-left: 15pt;">
        <table border=0 cellpadding=0 cellspacing=0 width=1194 style='border-collapse:collapse;table-layout:fixed;width:629pt;page-break-after: always;'>
            <tr class=xl6524921 height=20 style='mso-height-source:userset;height:30.0pt'>
                <td  colspan=3 rowspan=2 height=40 width=122 style='width:150pt;border: 1pt solid windowtext'>
                    <span style='mso-ignore:vglayout;margin-left:12px;margin-top:14px;width:104px;height:42px'>
                        <img width=174 height=58 src="../../../../public/img/image001.jpg">
                    </span>
<div  class="WordSection1"  align=center  style="word-wrap:break-word;text-justify-trim:punctuation">
        <div align="center" >
            <table  style="border-collapse:collapse;table-layout:fixed;page-break-after: always;margin-top: 0px;" width="629">
                <tr class="xl6524921" height=20 style='mso-height-source:userset;height:30.0pt'>
                    <td  colspan=3 rowspan=2  style='width:160pt;height: 60pt;border: 1pt solid windowtext'>
                        <span style='mso-ignore:vglayout;margin-left:12px;margin-top:14px;width:104px;height:42px'>
                            <img width=174 height=58 src="../../../../public/img/image001.jpg">
                        </span>
                    </td>
                    <td colspan=6 class="xl6624921"  style='border-right:.5pt solid black;border-left:none;width:380pt;height: 60pt'>记录名称:连接器及成品检验记录表</td>
                    <td colspan=3 class="xl6624921"   style='border-left:none;width: 160pt;height: 60pt'>保存期限:25å¹´</td>
                    <td rowspan=2 colspan=3 class="xl6824921"  style='width:136pt;height: 60pt' >版本号: A/0</td>
                </tr>
                <tr class="xl6524921" height=33 style='mso-height-source:userset;height:25.05pt'>
                    <td colspan=6 height=33 class=xl6624921 style='border-right:.5pt solid black;height:25.05pt;border-left:none'>
                        è®°å½•编号:{{ tableData.finInsNo }}
                    </td>
                    <td colspan=3  class=xl6624921 style='border-top:none;border-left:none'>
                        å½’档部门:质量保证部
                    </td>
                    <td colspan=2  class=xl6824921 style='border-top:none'></td>
                </tr>
                <tr class="xl6524921"  style='mso-height-source:userset;height:25.05pt'>
                    <td colspan=16  class=xl7424921 width=1194 style='height:25.05pt;  width:897pt'>
                        è¿žæŽ¥å™¨åŠæˆå“æ£€éªŒè®°å½•表
                    </td>
                </tr>
                <tr class="xl6524921" style='mso-height-source:userset;height:40.05pt'>
                    <td colspan=2 class="xl7624921" style='border-right:.5pt solid black;  height:40.05pt'>
                        é¡¹ç›®åç§°:
                    </td>
                    <td colspan=5 class="xl6624921" style='border-right:.5pt solid black;  border-left:none'> 
                        <p class="MsoNormal" align="center" style="text-align:center">
                            <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif" v-text="deviceStr"></span>
                        </p>
                </td>
                <td colspan=6 class=xl6624921 width=399 style='border-right:.5pt solid black;border-left:none;width:250pt'>记录名称:连接器及成品检验记录表</td>
                <td colspan=3 class=xl6624921 width=226 style='border-left:none;width: 150pt'>保存期限:25å¹´</td>
                <td rowspan=2 colspan=3 class=xl6824921 width=235 style='width:126pt' >版本号: A/0</td>
            </tr>
            <tr class=xl6524921 height=33 style='mso-height-source:userset;height:25.05pt'>
                <td colspan=6 height=33 class=xl6624921 style='border-right:.5pt solid black;height:25.05pt;border-left:none'>
                    è®°å½•编号:ZTT/QR-8.6-05(A/0)
                </td>
                <td colspan=3  class=xl6624921 style='border-top:none;border-left:none'>
                    å½’档部门:质量保证部
                </td>
                <td colspan=2  class=xl6824921 style='border-top:none'></td>
            </tr>
            <tr class=xl6524921 height=33 style='mso-height-source:userset;height:25.05pt'>
                <td colspan=16 height=33 class=xl7424921 width=1194 style='height:25.05pt;  width:897pt'>
                    è¿žæŽ¥å™¨åŠæˆå“æ£€éªŒè®°å½•表
                </td>
            </tr>
            <tr class=xl6524921 height=53 style='mso-height-source:userset;height:40.05pt'>
                <td colspan=2 height=53 class=xl7624921 style='border-right:.5pt solid black;  height:40.05pt'>
                    é¡¹ç›®åç§°:
                </td>
                <td colspan=5 class=xl6624921 style='border-right:.5pt solid black;  border-left:none'> 
                    <td   colspan=2  class="xl6924921" style='border-top:none;border-left:none'>检验依据:</td>
                    <td colspan=7 class="xl6624921" style='border-right:.5pt solid black;  border-left:none'>{{ tableData.dname }}
    ã€€             </td>
                </tr>
                <tr class="xl6524921" height=53 style='mso-height-source:userset;height:40.05pt'>
                    <td colspan=2 height=53 class=xl7624921 style='border-right:.5pt solid black;  height:40.05pt'>
                        äº§å“åç§°:
                    </td>
                    <td  colspan=4 class="xl6624921" style='border-right:.5pt solid black;  border-left:none'>
                        <p class="MsoNormal" align="center" style="text-align:center">
                            <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif" v-text="product"></span>
                        </p>
                    </td>
                    <td  colspan=2 class="xl6924921" style='border-top:none;border-left:none'>产品型号:</td>
                    <td colspan=3  class="xl6624921" style='border-right:.5pt solid black;  border-left:none'>
                    <p class="MsoNormal" align="center" style="text-align:center">
                        <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif" v-text="deviceStr"></span>
                        <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif" v-text="typedata"></span>
                    </p>
            </td>
                <td   colspan=2  class=xl6924921 style='border-top:none;border-left:none'>检验依据:</td>
                <td colspan=7 class=xl6624921 style='border-right:.5pt solid black;  border-left:none'>
              </td>
            </tr>
            <tr class=xl6524921 height=53 style='mso-height-source:userset;height:40.05pt'>
                <td colspan=2 height=53 class=xl7624921 style='border-right:.5pt solid black;  height:40.05pt'>
                    äº§å“åç§°:
                </td>
                <td  colspan=4 class=xl6624921 style='border-right:.5pt solid black;  border-left:none'>
                    <td  colspan=2 class="xl6924921" style='border-top:none;border-left:none'>产品数量:</td>
                    <td  colspan=3 class="xl6624921" style='border-right:.5pt solid black;  border-left:none'>
                    <p class="MsoNormal" align="center" style="text-align:center">
                        <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif" v-text="product"></span>
                        <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif" v-text="number"></span>
                    </p>
                </td>
                <td  colspan=2 class=xl6924921 style='border-top:none;border-left:none'>产品型号:</td>
                <td colspan=3  class=xl6624921 style='border-right:.5pt solid black;  border-left:none'>
                <p class="MsoNormal" align="center" style="text-align:center">
                    <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif" v-text="typedata"></span>
                </p>
            </td>
                <td  colspan=2 class=xl6924921 style='border-top:none;border-left:none'>产品数量:</td>
                <td  colspan=3 class=xl6624921 style='border-right:.5pt solid black;  border-left:none'>
                 <p class="MsoNormal" align="center" style="text-align:center">
                    <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif" v-text="number"></span>
                </p>
            </td>
            </tr>
                </tr>
            <tr class=xl6524921 height=53 style='mso-height-source:userset;height:40.05pt'>
                <td colspan=2 height=53 class=xl7624921 style='border-right:.5pt solid black;  height:40.05pt'>
                    æ£€éªŒå†…容:
                </td>
                <td  colspan=14 class=xl6624921 style='border-right:.5pt solid black;  border-left:none'>
                    æ£€éªŒç»“æžœ
                </td>
            </tr>
                <tr class="xl6524921" height=53 style='mso-height-source:userset;height:40.05pt'>
                    <td colspan=2 height=53 class=xl7624921 style='border-right:.5pt solid black;  height:40.05pt'>
                        æ£€éªŒå†…容:
                    </td>
                    <td  colspan=14 class=xl6624921 style='border-right:.5pt solid black;  border-left:none'>
                        æ£€éªŒç»“æžœ
                    </td>
                </tr>
            <tr class=xl6524921 height=53 style='mso-height-source:userset;height:40.05pt'>
                <td colspan=3 height=53 class=xl7624921 style='border-right:.5pt solid black;height:40.05pt'>
                    æ£€éªŒè¦æ±‚
                </td>
                <td  colspan=1 class=xl6624921 style='border-right:.5pt solid black;border-left:none'>
                    æ ‡å‡†å€¼
                </td>
                <td  colspan=1 v-for="a in columnLength" class=xl6624921 style='border-right:.5pt solid black; border-left:none'>
                    {{a>9?item:'0'+a}}
                </td>
                <td  colspan=2 class=xl6624921 style='border-right:.5pt solid black;border-left:none'>
                    åˆ¤å®š
                </td>
            </tr>
                <tr class="xl6524921" height=53 style='mso-height-source:userset;height:40.05pt'>
                    <td colspan=3 height=53 class=xl7624921 style='border-right:.5pt solid black;height:40.05pt'>
                        æ£€éªŒè¦æ±‚
                    </td>
                    <td  colspan=1 class=xl6624921 style='border-right:.5pt solid black;border-left:none'>
                        æ ‡å‡†å€¼
                    </td>
                    <td  colspan=1 v-for="a in columnLength" class=xl6624921 style='border-right:.5pt solid black; border-left:none'>
                        {{a>9?item:'0'+a}}
                    </td>
                    <td  colspan=2 class=xl6624921 style='border-right:.5pt solid black;border-left:none'>
                        åˆ¤å®š
                    </td>
                </tr>
            <tbody v-for="(item,index) in prjdata" :key="index">
            <tr  class=xl6524921 height=53 style='mso-height-source:userset;height:40.05pt'>
                <td  :rowspan="item.children.length" height=53 class=xl7624921 style='border-right:.5pt solid black; height:40.05pt'>
                    <p >
                        <span  style=" writing-mode: vertical-rl;font-size: 26pt;">{{item.father}}</span>
                    </p>
                </td>
                <td  colspan=2 class=xl6624921 style='border-right:.5pt solid black;border-left:none'>
                    <span style="font-family:宋体">{{item.children[0].iname}}</span>
                </td>
                <td  colspan=1 class=xl6624921 style='border-right:.5pt solid black;border-left:none'>
                    <span style="font-family:宋体">{{item.children[0].required}}</span>
                </td>
                <td  colspan=1 v-for="(val,index) in item.children[0].testValueList" class=xl6624921 style='border-right:.5pt solid black;border-left:none'>
                    <span style="font-family:宋体">{{val}}</span>
                </td>
                <tbody v-for="(item,index) in prjdata" :key="index">
                <tr  class="xl6524921" height=53 style='mso-height-source:userset;height:40.05pt'>
                    <td  :rowspan="item.children.length" height=53 class=xl7624921 style='border-right:.5pt solid black; height:40.05pt'>
                        <p >
                            <span  style=" writing-mode: vertical-rl;font-size: 26pt;">{{item.father}}</span>
                        </p>
                    </td>
                    <td  colspan=2 class=xl6624921 style='border-right:.5pt solid black;border-left:none'>
                        <span style="font-family:宋体">{{item.children[0].iname}}</span>
                    </td>
                    <td  colspan=1 class=xl6624921 style='border-right:.5pt solid black;border-left:none'>
                        <span style="font-family:宋体">{{item.children[0].required}}</span>
                    </td>
                    <td  colspan=1 v-for="(val,index) in item.children[0].testValueList" class=xl6624921 style='border-right:.5pt solid black;border-left:none'>
                        <span style="font-family:宋体">{{val}}</span>
                    </td>
                <td  colspan=2  class=xl6624921 style='border-right:.5pt solid black; border-left:none'>
                    <p v-if="item.children[0].iresult ==1" class="MsoNormal" align="center" style="text-align:center">
                        <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif">合格</span></p>
                    <p v-if="item.children[0].iresult ==0" class="MsoNormal" align="center" style="text-align:center">
                        <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif">不合格</span></p>
                </td>
            </tr>
            <tr class=xl6524921 height=53 v-for="(el,index) in (item.children.slice(1))" :key="index" style='mso-height-source:userset;height:40.05pt'>
                <td  colspan=2 class=xl6624921 style='border-right:.5pt solid black;border-left:none'>
                    <span style="font-family:宋体">{{el.iname}}</span>
                </td>
                <td  colspan=1 class=xl6624921 style='border-right:.5pt solid black;border-left:none'>
                    <span style="font-family:宋体">{{el.required}}</span>
                </td>
                <td  colspan=1  v-for="(testValue,index) in el.testValueList" class=xl6624921 style='border-right:.5pt solid black;border-left:none'>
                    <span style="font-family:宋体">{{testValue}}</span>
                </td>
                <td  colspan=2  class=xl6624921 style='border-right:.5pt solid black; border-left:none'>
                    <p  class="MsoNormal" align="center" style="text-align:center">
                        <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif">{{ el.iresult | formatState}}</span></p>
                    <td  colspan=2  class=xl6624921 style='border-right:.5pt solid black; border-left:none'>
                        <p v-if="item.children[0].iresult ==1" class="MsoNormal" align="center" style="text-align:center">
                            <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif">合格</span></p>
                        <p v-if="item.children[0].iresult ==0" class="MsoNormal" align="center" style="text-align:center">
                            <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif">不合格</span></p>
                    </td>
                </tr>
                <tr class="xl6524921" height=53 v-for="(el,index) in (item.children.slice(1))" :key="index" style='mso-height-source:userset;height:40.05pt'>
                    <td  colspan=2 class=xl6624921 style='border-right:.5pt solid black;border-left:none'>
                        <span style="font-family:宋体">{{el.iname}}</span>
                    </td>
                    <td  colspan=1 class=xl6624921 style='border-right:.5pt solid black;border-left:none'>
                        <span style="font-family:宋体">{{el.required}}</span>
                    </td>
                    <td  colspan=1  v-for="(testValue,index) in el.testValueList" class=xl6624921 style='border-right:.5pt solid black;border-left:none'>
                        <span style="font-family:宋体">{{testValue}}</span>
                    </td>
                    <td  colspan=2  class=xl6624921 style='border-right:.5pt solid black; border-left:none'>
                        <p  class="MsoNormal" align="center" style="text-align:center">
                            <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif">{{ el.iresult | formatState}}</span></p>
                </td>
            </tr>
            </tbody>
            <tr  class=xl6524921 height=53 style='mso-height-source:userset;height:40.05pt'>
            <td colspan=8  height=53 class=xl7624921 style='border-right:.5pt solid black;
  height:40.05pt;text-align: left;'><p>&nbsp;检验/时间:</p></td>
            <td colspan=8  height=53 class=xl7624921 style='border-right:.5pt solid black;
  height:40.05pt;text-align: left;'><p> &nbsp;审批:</p></td>
            </tr>
                    </td>
                </tr>
                </tbody>
                <tr  class="xl6524921" height=53 style='mso-height-source:userset;height:40.05pt'>
                <td colspan=8  height=53 class=xl7624921 style='border-right:.5pt solid black;height:40.05pt;text-align: left;'>
                    <p>&nbsp;检验/时间:<span>{{tableData.updateTime}}</span></p></td>
                <td colspan=8  height=53 class=xl7624921 style='border-right:.5pt solid black; height:40.05pt;text-align: left;'>
                    <p> &nbsp;审批:<span>{{username}}</span></p></td>
                </tr>
            <tr height=0 style='display:none'>
                <td width=64 style='width:48pt'></td>
                <td width=58 style='width:44pt'></td>
                <td width=137 style='width:103pt'></td>
                <td width=262 style='width:197pt'></td>
                <td width=212 style='width:159pt'></td>
                <td width=226 style='width:170pt'></td>
                <td width=235 style='width:176pt'></td>
            </tr>
        </table>
    <!-- <div v-for="items in prjdata">
        <div v-for="aa in items.length"> -->
                <tr height=0 style='display:none'>
                    <td width=64 style='width:48pt'></td>
                    <td width=58 style='width:44pt'></td>
                    <td width=137 style='width:103pt'></td>
                    <td width=262 style='width:197pt'></td>
                    <td width=212 style='width:159pt'></td>
                    <td width=226 style='width:170pt'></td>
                    <td width=235 style='width:176pt'></td>
                </tr>
            </table>
        </div>
        <div v-for="pel in prjdata">
        <template>
            <div style="page-break-after: always;">
            <div>
                <div class="head" id="head">
            <div  align="center" style="page-break-after: always;border-collapse:collapse;table-layout:fixed;page-break-after: always;" width="629">
            <div >
                <div class="head">
                    <div class="head-1">
                        <img width=174 height=58 src="../../../../public/img/image002.png">
                    </div>
@@ -164,18 +166,19 @@
                    <div class="bodycs">
                        <p class=x1111111><span>检 æµ‹ æŠ¥ å‘Š<br>
                            <span class=x1111112 >Test  &nbsp; Report</span><br>
                            <p style=" border-top: 1px solid black;width: 96%;margin-top: -1px;"></p>
                            <p style=" border-top: 1px solid black;width: 900pt;margin-top: -1px;"></p>
                        </span></p>
                    </div>
                    <div class="bodycs-1">
                        <p  style="margin-left: 40px;"><span style="font-size:12pt;font-family:黑体">报告编号:(No):ZTMS01-<br>Report No.:</span></p>
                        <p style="margin-left: 350px;"><span style="font-size:12pt;font-family:黑体">报告日期<br> Report Date</span></p>
                        <p style="margin-left: 180px;"><span style="font-size:12pt;font-family:黑体">页次:1/8<br> Page</span></p>
                            <div style="margin-left:40pt">
                                <div class="bodycs-1">
                        <p  ><span style="font-size:12pt;font-family:黑体">报告编号:{{ tableData.finInsNo }}<br>Report No.:</span></p>
                        <p style="margin-left: 200px;"><span style="font-size:12pt;font-family:黑体">报告日期:{{ tableData.updateTime }}<br> Report Date</span></p>
                        <p style="margin-left: 200px;"><span style="font-size:12pt;font-family:黑体">页次:1/8<br> Page</span></p>
                    </div>
                    <div>
                    <div class="bodycs-2">
                        <p ><span class=x1111112  style='margin-left: 40px;'>检验项目:<br>&nbsp;Test Item</span></p> 
                        <p v-for="pel in prjdata"><span class="ziti">{{pel.father}}</span><br><span style="display: block;height: 2px; width: 500px; background: rgb(20, 20, 22);margin-left: 80px;"></span></span></p>
                        <p ><span class="ziti">{{pel.father}}</span><br><span style="display: block;height: 2px; width: 500px; background: rgb(20, 20, 22);margin-left: 80px;"></span></span></p>
                    </div>
                    <div class="bodycs-3">
                        <p ><span class=x1111112 style='margin-left: 36px;'>样品名称:<br>Description</span></p> 
@@ -187,38 +190,51 @@
                    </div>
                    <div class="bodycs-3">
                        <p ><span class=x1111112 style='margin-left: 36px;'>样品数量:<br>Quantity</span></p> 
                        <p v-for="pel in prjdata"><span class="ziti">{{quantity}}</span><br><span style="display: block;height: 2px; width: 500px; background: rgb(20, 20, 22);margin-left: 75px;"></span></span></p>
                        <p ><span class="ziti">{{quantity}}</span><br><span style="display: block;height: 2px; width: 500px; background: rgb(20, 20, 22);margin-left: 75px;"></span></span></p>
                    </div>
                    <div class="bodycs-3">
                        <p ><span class=x1111112 style='margin-left: 36px;'>检验类别:<br>Type of Test</span></p> 
                        <p v-for="pel in prjdata"><span class="ziti">产品检验</span><br><span style="display: block;height: 2px; width: 500px; background: rgb(20, 20, 22);margin-left: 75px;"></span></span></p>
                        <p ><span class="ziti">产品检验</span><br><span style="display: block;height: 2px; width: 500px; background: rgb(20, 20, 22);margin-left: 75px;"></span></span></p>
                    </div>
                    <div>
                        <br>
                        <br>
                        <span
                            style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                        </div>
                    <div>
                        <div class="chilen">
                        <p ><span class="x1111113">批  å‡†:<br>&nbsp;&nbsp;Approved by</span></p> 
                        <p v-for="pel in prjdata"><span class="time"></span><br><span style="display: block;height: 2px; width: 300px; background: rgb(20, 20, 22);margin-left: 75px;"></span></span></p>
                        <p ><span class="time"></span><br><span style="display: block;height: 2px; width: 300px; background: rgb(20, 20, 22);margin-left: 75px;"></span></span></p>
                        </div>
                        <div class="chilen">
                        <p ><span class="x1111113">核验员:<br>&nbsp;&nbsp;Inspected by</span></p> 
                        <p v-for="pel in prjdata"><span class="time"></span><br><span style="display: block;height: 2px; width: 300px; background: rgb(20, 20, 22);margin-left: 75px;"></span></span></p>
                        <p ><span class="time"></span><br><span style="display: block;height: 2px; width: 300px; background: rgb(20, 20, 22);margin-left: 75px;"></span></span></p>
                        </div>
                        <div style="display: flex;margin-left: 280px;">
                        <p ><span class="x1111113">检验员:<br>&nbsp;Tested by</span></p> 
                        <p ><span  class="time">{{username}}</span><br><span style="display: block;height: 2px; width: 300px; background: rgb(20, 20, 22);margin-left: 75px;"></span></span></p> 
                        </div>
                        <div>
                        <br>
                        <br>
                        <span
                            style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                        </div>
                        <div class="cldata">
                        <p ><span class="x1111113">送样日期:<br>Delivery Date</span></p> 
                        <p v-for="pel in prjdata"><span class="time">{{tableData.updateTime}}</span><br><span style="display: block;height: 2px; width: 300px; background: rgb(20, 20, 22);margin-left: 75px;"></span></span></p>
                        <p ><span class="time">{{tableData.updateTime}}</span><br><span style="display: block;height: 2px; width: 300px; background: rgb(20, 20, 22);margin-left: 75px;"></span></span></p>
                        </div>
                        <div class="cldata">
                        <p ><span class="x1111113">测试日期:<br>Testing Date</span></p> 
                        <p v-for="pel in prjdata"><span class="time">{{tableData.createTime}}</span><br><span style="display: block;height: 2px; width: 300px; background: rgb(20, 20, 22);margin-left: 75px;"></span></span></p>
                        <p ><span class="time">{{tableData.createTime}}</span><br><span style="display: block;height: 2px; width: 300px; background: rgb(20, 20, 22);margin-left: 75px;"></span></span></p>
                        </div>
                            </div>
                    </div>
                </div>
                </div>
                <div class="pagefooting">
                    <p><span style="font-size:8pt;font-family:宋体;color: cornflowerblue;">
                    <p><span style="font-size:14pt;font-family:宋体;color: cornflowerblue;">
                        åœ°å€:江苏省南通市经济技术开发区新开南路1号(226010)  ç”µè¯:051389191125  ä¼ çœŸ:051389191123
                    <br>Add: No 1 Xinkainan Road, NETDZ Nantong, Jiangsu, China (226010); TEL: 051389191125 ; Fax:051389191123
                    </span></p>      
@@ -245,7 +261,7 @@
                            <span class=x1111112 >Test  &nbsp; Report</span><br>
                        </span></p>
                        <div  class="bodycs-1">
                            <p  style="margin-left: 40px;"><span style="font-size:12pt;font-family:黑体">报告编号:(No):ZTMS01-<br>Report No.:</span></p>
                            <p  style="margin-left: 40px;"><span style="font-size:12pt;font-family:黑体">报告编号:{{ tableData.finInsNo }}<br>Report No.:</span></p>
                            <p style="margin-left: 620px;"><span style="font-size:12pt;font-family:黑体">页次:2/8<br> Page</span></p>
                        </div>
                    </div>
@@ -266,8 +282,16 @@
                    </div>
                </div>
                </div>
                <div>
                        <br>
                        <br>
                        <br>
                        <br><br><br>
                        <span
                            style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                        </div>
                <div class="pagefooting">
                    <p><span style="font-size:8pt;font-family:宋体;color: cornflowerblue;">
                    <p><span style="font-size:14pt;font-family:宋体;color: cornflowerblue;">
                        åœ°å€:江苏省南通市经济技术开发区新开南路1号(226010)  ç”µè¯:051389191125  ä¼ çœŸ:051389191123
                    <br>Add: No 1 Xinkainan Road, NETDZ Nantong, Jiangsu, China (226010); TEL: 051389191125 ; Fax:051389191123
                    </span></p>            
@@ -291,47 +315,64 @@
                    <div class="bodycs">
                        <p class=x1111111><span>检 æµ‹ æŠ¥ å‘Š<br>
                            <span class=x1111112 >Test  &nbsp; Report</span><br>
                            <p style=" border-top: 1px solid black;width: 900pt;margin-top: -1px;"></p>
                        </span></p>
                        <div  class="bodycs-1">
                            <p  style="margin-left: 40px;"><span style="font-size:12pt;font-family:黑体">报告编号:(No):ZTMS01-<br>Report No.:</span></p>
                            <p  style="margin-left: 40px;"><span style="font-size:12pt;font-family:黑体">报告编号:{{ tableData.finInsNo }}<br>Report No.:</span></p>
                            <p style="margin-left: 620px;"><span style="font-size:12pt;font-family:黑体">页次:3/8<br> Page</span></p>
                        </div>
                    </div>
                    <div>
                        <p style=" border-top: 1px solid black;width: 96%;margin-top: -1px;"></p>
                        <p class="x1111113" ><span style="display: flex;margin-top: 40px;margin-left: 40px;">报告正文:</span></p>
                    <div>
                        <p class=x1111112 style="display: flex;margin-left: 40px;">1.测试设备</p>
                        <div class="bodycs" style="margin-top: 80px;" v-if='ela.iname !== "" ' v-for="ela in pel.children">
                                <div  class="bodycs-1" style="margin-top: 10px;">
                                    <p style="margin-left: 40px;font-size:12pt;font-family:黑体">检验项目:<span style="width: 60px;">&nbsp;{{ela.iname}}<br><span>设备名称:{{ ela.ename }}</span><br>Name of Equipment</span></p>
                                    <p style="padding-left: 100px;"><span style="font-size:12pt;font-family:黑体">&nbsp;<br>设备型号:{{ ela.specifications }}<br>&nbsp;Model</span></p>
                                    <p style="padding-left: 100px;"><span style="font-size:12pt;font-family:黑体">&nbsp;<br>设备编号:{{ ela.code}}<br>Serial No.</span></p>
                                    <p style="margin-left: 110px;"><span style="font-size:12pt;font-family:黑体">&nbsp;<br>校准有效期:{{ ela.date }}<br>Calibration Due Date</span></p>
                                </div>
                        </div>
                        <!-- <div>
                            <p style=" border-top: 1px solid black;width: 96%;margin-top: 20px;"></p>
                        </div> -->
                    </div>
                    <div class="bodycs" style="margin-top: 30px;">
                        <p class=x1111112><span>{{iname}}<br>
                    <div style="display: flex;margin-top: 60px;">
                        <p ><span><span class=x1111112 style="margin-left: 40px;">2.参考标准Reference standards</span>
                            <!-- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                            <br>本次检测所依据的技术文件(代号、名称):<br>Reference documents for this testing&nbsp;&nbsp;&nbsp;&nbsp; -->
                        </span></p>
                        <div  class="bodycs-1" style="margin-top: 10px;">
                            <p  style="margin-left: 40px;"><span style="font-size:12pt;font-family:黑体">1.测试设备<br>&nbsp;设备名称<br>Name of Equipment</span></p>
                            <p style="margin-left: 150px;"><span style="font-size:12pt;font-family:黑体">&nbsp;<br>设备型号<br>&nbsp;Model</span></p>
                            <p style="margin-left: 150px;"><span style="font-size:12pt;font-family:黑体">&nbsp;<br>设备编号<br>Serial No.</span></p>
                            <p style="margin-left: 150px;"><span style="font-size:12pt;font-family:黑体">&nbsp;<br>校准有效期<br>Calibration Due Date</span></p>
                        </div>
                        <div>
                        <p style=" border-top: 1px solid black;width: 96%;margin-top: 20px;"></p>
                        </div>
                    </div>
                    <div style="margin-top: 50px;display: flex;">
                        <p  style="margin-left: 40px;"><span style="font-size:12pt;font-family:黑体">2.参考标准Reference standards&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>本次检测所依据的技术文件(代号、名称):<br>Reference documents for this testing&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
                    </div>
                            <br>
                            <br>
                    <p style="font-size:18pt;font-family:宋体">本次检验参考的技术文件是:<span>{{tableData.dname}},编号:{{tableData.dnumber }}</span></p>
                    <div>   
                            <p style=" border-top: 1px solid black;width: 96%;margin-top: 1px;"></p>
                    </div>
                    <div style="margin-top: 50px;display: flex;">
                        <p  class=x1111112 style="margin-left: 40px;"><span style="font-size:12pt;font-family:黑体">3.环境条件Environmental conditions:</span></p>
                    <div style="margin-top: 80px;display: flex;">
                        <p  class=x1111112 style="margin-left: 40px;"><span >3.环境条件Environmental conditions:</span></p>
                    </div>
                    <div style="display: flex;">
                        <p style="margin-left: 50px;"><span >温度(Temperature):℃ </span></p>
                        <p style="margin-left: 450px;"><span >相对湿度(R.H.):%</span></p>
                    </div>
                    <div style="margin-top: 50px;display: flex;">
                        <p  class=x1111112 style="margin-left: 40px;"><span style="font-size:12pt;font-family:黑体">4.测试目的Test purpose:</span></p>
                        <p  class=x1111112 style="margin-left: 40px;"><span>4.测试目的Test purpose:</span></p>
                    </div>
                    <div style="margin-top: 50px;display: flex;">
                        <p  class=x1111112 style="margin-left: 40px;"><span style="font-size:12pt;font-family:黑体">5.测试方法Test method:</span></p>
                    <div v-for="ela in pel.children" v-if='ela.iname !== "" ' style="display: flex;margin-left: 40px;">
                        <p>检验项目:{{ ela.iname }},测试目的是:{{ ela.method }}</p>
                    </div>
                    <div style="margin-top: 80px;display: flex;">
                        <p  class=x1111112 style="margin-left: 40px;"><span>5.测试方法Test method:</span></p>
                    </div>
                    <div v-for="ela in pel.children" v-if='ela.iname !== "" ' style="display: flex;margin-left: 40px;">
                        <p>检验项目:{{ ela.iname }},测试目的是:{{ ela.purpose }}</p>
                    </div>
                    <div>
                        <br>
@@ -343,7 +384,7 @@
                </div>
                </div>
                <div class="pagefooting">
                    <p><span style="font-size:8pt;font-family:宋体;color: cornflowerblue;">
                    <p><span style="font-size:14pt;font-family:宋体;color: cornflowerblue;">
                        åœ°å€:江苏省南通市经济技术开发区新开南路1号(226010)  ç”µè¯:051389191125  ä¼ çœŸ:051389191123
                    <br>Add: No 1 Xinkainan Road, NETDZ Nantong, Jiangsu, China (226010); TEL: 051389191125 ; Fax:051389191123
                    </span></p>            
@@ -369,7 +410,7 @@
                            <span class=x1111112 >Test  &nbsp; Report</span><br>
                        </span></p>
                        <div  class="bodycs-1">
                            <p  style="margin-left: 40px;"><span style="font-size:12pt;font-family:黑体">报告编号:(No):ZTMS01-<br>Report No.:</span></p>
                            <p  style="margin-left: 40px;"><span style="font-size:12pt;font-family:黑体">报告编号:{{ tableData.finInsNo }}<br>Report No.:</span></p>
                            <p style="margin-left: 620px;"><span style="font-size:12pt;font-family:黑体">页次:4/8<br> Page</span></p>
                        </div>
                    </div>
@@ -378,20 +419,20 @@
                        <p class="x1111113" ><span style="font-size 40pt;display: flex;margin-top: 40px;margin-left: 40px;;font-family:黑体">6.测试结果Test result:</span></p>
                    </div>
                    <div>
                        <table border="2px" style="width: 800px;height: 100px;margin-top: 10px;">
                        <table border="2px" style="width: 800px;height: 100px;margin-top: 10px;" >
                            <tr style="height: 80px;">
                                <td class="x1111113"><span style="font-size 40pt;margin-left: 80px;font-family:黑体">测试项目</span></td>
                                <td class="x1111113"><span style="font-size 40pt;margin-left: 80px;font-family:黑体">样品数量</span></td>
                                <td class="x1111113"><span style="font-size 40pt;margin-left: 80px;font-family:黑体">测试结果</span></td>
                            </tr>
                            <tr style="height: 100px;">
                                <td></td>
                                <td></td>
                            <tr style="height: 100px;" v-if='ela.iname !== "" ' v-for="ela in pel.children">
                                <td class="x1111113"  style="text-align: center;">{{ ela.iname }}</td>
                                <td class="x1111113" style="text-align: center;">{{ tableData.quantity }}</td>
                                <td></td>
                            </tr>
                            <tr style="height: 80px;">
                            <!-- <tr style="height: 80px;">
                                <td colspan=3></td>
                            </tr>
                            </tr> -->
                        </table>
                    </div>
                    <div>   
@@ -411,10 +452,17 @@
                    <span
                        style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                    </div>
                    <div>
                        <br>
                    <br>
                    <br>
                    <span
                        style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                    </div>
                </div>
                </div>
                <div class="pagefooting">
                    <p><span style="font-size:8pt;font-family:宋体;color: cornflowerblue;">
                    <p><span style="font-size:14pt;font-family:宋体;color: cornflowerblue;">
                        åœ°å€:江苏省南通市经济技术开发区新开南路1号(226010)  ç”µè¯:051389191125  ä¼ çœŸ:051389191123
                    <br>Add: No 1 Xinkainan Road, NETDZ Nantong, Jiangsu, China (226010); TEL: 051389191125 ; Fax:051389191123
                    </span></p>            
@@ -440,7 +488,7 @@
                            <span class=x1111112 >Test  &nbsp; Report</span><br>
                        </span></p>
                        <div  class="bodycs-1">
                            <p  style="margin-left: 40px;"><span style="font-size:12pt;font-family:黑体">报告编号:(No):ZTMS01-<br>Report No.:</span></p>
                            <p  style="margin-left: 40px;"><span style="font-size:12pt;font-family:黑体">报告编号:{{ tableData.finInsNo }}<br>Report No.:</span></p>
                            <p style="margin-left: 620px;"><span style="font-size:12pt;font-family:黑体">页次:5/8<br> Page</span></p>
                        </div>
                    </div>
@@ -457,6 +505,13 @@
                        <br>
                        <br>
                        <span>&nbsp;</span>
                    </div>
                    <div>
                        <br>
                    <br>
                    <br>
                    <span
                        style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                    </div>
                    <div>   
                        <p class="x1111113" ><span style="font-size 40pt;display: flex;margin-top: 40px;margin-left: 40px;;font-family:黑体">9.测试后检查Posttest check:</span></p>
@@ -477,16 +532,22 @@
                    </div>
                </div>
                </div>
                <div>
                        <br>
                    <br>
                    <br>
                    <span
                        style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                    </div>
                <div class="pagefooting">
                    <p><span style="font-size:8pt;font-family:宋体;color: cornflowerblue;">
                    <p><span style="font-size:14pt;font-family:宋体;color: cornflowerblue;">
                        åœ°å€:江苏省南通市经济技术开发区新开南路1号(226010)  ç”µè¯:051389191125  ä¼ çœŸ:051389191123
                    <br>Add: No 1 Xinkainan Road, NETDZ Nantong, Jiangsu, China (226010); TEL: 051389191125 ; Fax:051389191123
                    </span></p>            
            </div>
            </div>
        </template>
        <!-- </div>
    </div>  -->
        </div>
</div>
</template>
@@ -580,12 +641,12 @@
                            itype: '',
                            testValueList: new Array(this.columnLength)
                        }
                        let rowNum = 15
                        let rowNum = 20
                        let columnNum = this.columnLength
            if(list && list.length<2){
                list.forEach(item=>{
                    if(item.children && item.children.length < rowNum){
                        rowNum = 15 - item.children.length
                        rowNum = 20 - item.children.length
                        for(let j=0;j<item.children.length;j++){
                            let arr = []
                            if(item.children[j].inspectionValue){
@@ -621,7 +682,7 @@
                                    }
                                }
                            }else{
                                obj.testValueList = new Array(12)
                                obj.testValueList = new Array(20)
                            }
                        })
                    }
@@ -650,12 +711,9 @@
}
</script>
<style lang="scss">
table{
    mso-displayed-decimal-separator: "\.";
    mso-displayed-thousand-separator: "\,";
}
<style lang="scss" >
.xl6524921 {
    padding: 0px;
    mso-ignore: padding;
@@ -1763,6 +1821,7 @@
.head{
    display: flex;
    width: 900pt;
    .head-1{
        padding: 40px;
    }
@@ -1774,7 +1833,7 @@
    }
}
.bodycss{
        // margin-left: 85px;
        margin-left: 85px;
}
.bodycs{
    // margin-left: 135px;
@@ -1904,4 +1963,5 @@
    mso-pattern: auto;
    white-space: nowrap;
}
</style>
src/views/quality/finishedProductInspection/index.vue
@@ -37,6 +37,7 @@
    import { transform } from '@/util/fileTransform'
    import printTemplate from './finishedProducter-print.vue'
    import PrintJS from 'print-js'
import { title } from 'process'
    export default {
        components: {
            finishedProductInspectionAdd,
@@ -72,14 +73,22 @@
                    data: [],
                    // æ ‡é¢˜
                    column: [
                         {
                            minWidth: '120',
                            prop: 'finInsNo',
                            label: '产品检验编号',
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'text',
                            render: { fun: this.addOrUpdateHandle }
                        },
                        {
                            minWidth: '120',
                            prop: 'orderNumber',
                            label: '订单号',
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'text',
                            render: { fun: this.addOrUpdateHandle }
                            searchInfoType: 'text'
                        },
                        {
                            minWidth: '120',
@@ -211,28 +220,18 @@
        }
    },
        methods: {
            closedown(){
                // this.printFormData = []
                this.printDialogVisible = false;
            },
            //打印按钮
            printFun() {
                const printSettings = {
                        paper: {
                        width: 827, // A4纸的宽度(单位:像素)
                        height: 595, // A4纸的高度(单位:像素)
                        orientation: 'portrait', // ç«–向打印
                        }}
                const style = '@page {margin: 10mm 5mm; margin-bottom: 0;margin-top:0;} ' +'@media print {.title{font-size:30pt;font-weight: 400;font-family: é»‘体;!important;}' ;
                PrintJS({
                    printable: "printRaw",
                    type: "html",
                    header:"",
                    maxWidth: 1000,
                    printSettings,
                    style: '@page {margin: 2.0mm 2.0mm;size:A4;}',
                    scanStyles: false,
                    maxWidth: 1200,
                    header: "产品检测报告",
                    style:style,
                    css:'./title.css',
                    targetStyles: ["*"],
                    fontSize: '30px',
                    ignoreElements: ["no-ignore"],
                    orientation: 'portrait'
                });
src/views/quality/package/index.vue
@@ -1,13 +1,171 @@
<template>
  <div>包装检验</div>
  <div class="mod-config">
      <basic-container>
      <ttable
      :table="table"
      :isShowHide="true"
      :prelang="prelang"
      :options="options"
      ref="processconfiguration"
      >
      <template #toolbar></template>
      </ttable>
      </basic-container>
  </div>
</template>
<script>
import ttable from '@/views/common/ztt-table.vue'
export default {
  data(){
      return {
          prelang: 'operation',
          dataListLoading: false,
          options: {
              height: 300, // é»˜è®¤é«˜åº¦-为了表头固定
              stripe: true, // æ˜¯å¦ä¸ºæ–‘马纹 table
              highlightCurrentRow: false, // æ˜¯å¦è¦é«˜äº®å½“前行
              border: true, // æ˜¯å¦æœ‰çºµå‘边框
              lazy: false, // æ˜¯å¦éœ€è¦æ‡’加载
              fit: true, // åˆ—的宽度是否自撑开
              multiSelect: true, //
              seqNo: true,
              isShowHide: true, // æ˜¯å¦æ˜¾ç¤ºæ˜¾å½±æŒ‰é’®
              isRefresh: true, // æ˜¯å¦æ˜¾ç¤ºåˆ·æ–°æŒ‰é’®
              isSearch: true, // é«˜çº§æŸ¥è¯¢æŒ‰é’®
              defaultOrderBy: { column: 'createTime', direction: 'desc' }
          },
          table: {
              total: 0,
              currentPage: 1,
              pageSize: 20,
              data: [],
              // æ ‡é¢˜
              column: [
                {
                  minWidth: '140',
                  prop: 'material',
                  label: '订单编码',
                  isTrue: true,
                  isSearch: true,
                  searchInfoType: 'text',
                },
                {
                  minWidth: '140',
                  prop: 'type',
                  label: '产品名称',
                  isTrue: true,
                  isSearch: true,
                  searchInfoType: 'text',
                },{
                  minWidth: '140',
                  prop: 'oo',
                  label: '产品型号',
                  isTrue: true,
                  isSearch: true,
                  searchInfoType: 'text',
                },{
                  minWidth: '140',
                  prop: 'materhhooial',
                  label: '质量追溯号',
                  isTrue: true,
                  isSearch: true,
                  searchInfoType: 'text',
                },
                {
                  minWidth: '140',
                  prop: 'mateuurial',
                  label: '客户名称',
                  isTrue: true,
                  isSearch: true,
                  searchInfoType: 'text',
                },
                {
                  minWidth: '140',
                  prop: 'materoiial',
                  label: '工艺文件编号',
                  isTrue: true,
                  isSearch: true,
                  searchInfoType: 'text',
                },
                {
                  minWidth: '140',
                  prop: 'matperoial',
                  label: '库位号',
                  isTrue: true,
                  isSearch: true,
                  searchInfoType: 'text',
                },
                {
                  minWidth: '140',
                  prop: 'materpial',
                  label: '产品名称',
                  isTrue: true,
                  isSearch: true,
                  searchInfoType: 'text',
                },
                {
                  minWidth: '130',
                  width: '150',
                  prop: 'dealTime',
                  label: '审核时间',
                  sort: true,
                  isTrue: true,
                  isSearch: true,
                  searchInfoType: 'datetimerange',
                  // formatter: this.formatDateTime,
              },
              {
                  minWidth: '140',
                  prop: 'maial',
                  label: '数量',
                  isTrue: true,
                  isSearch: true,
                  searchInfoType: 'text',
                },
              ],
              operator: [{
                        text: '打印',
                        type: 'text',
                        size: 'small',
                        fun: this.showPrint,
                        show: {
                            val: [
                                '1',
                                '0'
                            ],
                            key: 'result'
                        }
                    },{
                        text: '作废',
                        type: 'text',
                        size: 'small',
                        fun: this.deleteHandle
                    }],
                    operatorConfig: {
                    fixed: 'right',
                    label: '操作',
                    width: 100,
                    minWidth: 100
                    },
              toolbar: [
                {
                  text: '获取IFS成品库',
                  type: 'primary',
                  // fun: this.addOrUpdateHandle
                },
              ],
              // operator: [],
              // operatorConfig: {}
          },
     }
  },
  medthods: {},
//     computed: {
//     ...mapGetters(['permissions'])
//   },
  components: {
  ttable
  },
}
</script>
<style>
</style>
</script>
src/views/quality/packageinspect/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,231 @@
<!--
  -    Copyright (c) 2018-2025, ztt All rights reserved.
  -
  - Redistribution and use in source and binary forms, with or without
  - modification, are permitted provided that the following conditions are met:
  -
  - Redistributions of source code must retain the above copyright notice,
  - this list of conditions and the following disclaimer.
  - Redistributions in binary form must reproduce the above copyright
  - notice, this list of conditions and the following disclaimer in the
  - documentation and/or other materials provided with the distribution.
  - Neither the name of the pig4cloud.com developer nor the names of its
  - contributors may be used to endorse or promote products derived from
  - this software without specific prior written permission.
  - Author: ztt
  -->
  <template>
    <div class="mod-config">
        <basic-container>
            <ttable
            :table="table"
            :resultData="resultData"
            @handleSelectionChange="handleSelectionChange"
            :prelang="prelang"
            :options="options"
            :ajaxFun="ajaxFun"
            ref="packageInspectTable">
            <template #toolbar>
            </template>
            </ttable>
        </basic-container>
        <!-- å¼¹çª—, æ–°å¢ž / ä¿®æ”¹ -->
        <!-- <RawMaterialForm
            v-if="addOrUpdateVisible"
            ref="addOrUpdate"
            @refreshDataList="getData"
        ></RawMaterialForm> -->
    </div>
</template>
<script>
import ttable from '@/views/common/ztt-table.vue'
import { fetchList,deleteById } from '@/api/quality/packageInspect'
// import RawMaterialForm from './rawMaterial-form'
import * as fecha from 'element-ui/lib/utils/date'
import { mapGetters } from 'vuex'
  export default {
    data() {
        return {
            resultData:[],
            addOrUpdateVisible: false,
            type: [1],
            multipleSelection: [],
            prelang: 'packageInspect',
            ajaxFun: fetchList,
            options: {
                height: 300, // é»˜è®¤é«˜åº¦-为了表头固定
                stripe: true, // æ˜¯å¦ä¸ºæ–‘马纹 table
                highlightCurrentRow: false, // æ˜¯å¦è¦é«˜äº®å½“前行
                border: true, // æ˜¯å¦æœ‰çºµå‘边框
                lazy: false, // æ˜¯å¦éœ€è¦æ‡’加载
                fit: true, // åˆ—的宽度是否自撑开
                multiSelect: true, //
                seqNo: true,
                isRefresh: true, // æ˜¯å¦æ˜¾ç¤ºåˆ·æ–°æŒ‰é’®
                isShowHide: true, // æ˜¯å¦æ˜¾ç¤ºæ˜¾å½±æŒ‰é’®H
                isSearch: true, // é«˜çº§æŸ¥è¯¢æŒ‰é’®
                defaultOrderBy: { column: 'createTime', direction: 'desc' },
            },
            table: {
                total: 0,
                currentPage: 1,
                pageSize: 20,
                data: [],
                // æ ‡é¢˜
                column: [
                    {
                        minWidth: '180',
                        prop: 'packInsNo',
                        label: '包装检验编号',
                        isTrue: true,
                        isSearch: true,
                        searchInfoType: 'text',
                        render: { fun: this.addOrUpdateHandle }
                    },
                    {
                        minWidth: '180',
                        prop: 'packageNo',
                        label: '包装编码',
                        isTrue: true,
                        isSearch: true,
                        searchInfoType: 'text'
                    },
                    {
                        minWidth: '180',
                        prop: 'contractNo',
                        label: '合同号',
                        isTrue: true,
                        isSearch: true,
                        searchInfoType: 'text'
                    },
                    {
                        minWidth: '180',
                        prop: 'projectName',
                        label: '项目名称',
                        isTrue: true,
                        isSearch: true,
                        searchInfoType: 'text'
                    },
                    {
                        minWidth: '180',
                        prop: 'customerName',
                        label: '客户名称',
                        isTrue: true,
                        isSearch: true,
                        searchInfoType: 'text'
                    },
                    {
                        minWidth: '180',
                        prop: 'createTime',
                        label: '报检日期',
                        isTrue: true,
                        sort: true,
                        isSearch: true,
                        searchInfoType: 'text',
                        formatter: this.formatDateTime,
                    },
                    {
                        minWidth: '180',
                        prop: 'createUser',
                        label: '报检人',
                        isTrue: true,
                        isSearch: true,
                        searchInfoType: 'text'
                    },
                    {
                        minWidth: '200',
                        prop: 'result',
                        label: '结论',
                        isTrue: true,
                        isSearch: true,
                        searchInfoType: 'text'
                    },
                ],
                toolbar: [
                    // {
                    //     text: '新增',
                    //     type: 'primary',
                    //     fun: this.addOrUpdateHandle
                    // },
                ],
                operator: [
                {
                    text: '作废',
                    type: 'text',
                    size: 'small',
                    fun: this.deleteHandle
                }],
                operatorConfig: {
                fixed: 'right',
                label: '操作',
                width: 100,
                minWidth: 100
                },
            },
        }
    },
    components: {
        ttable,
    },
    created() { },
    computed: {
        ...mapGetters(['permissions'])
    },
    watch:{
    },
    methods:{
        // åˆ é™¤
        deleteHandle(row) {
            const _than = this
            this.$confirm('是否确认删除包装编号【' + row.packInsNo+'】的数据?' , '提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                closeOnClickModal: false,
                type: 'warning'
            }).then(function() {
                deleteById(row.id).then((response)=>{
                    var data = response.data
                    if (data.code == 0) {
                        _than.$message.success('删除成功')
                    } else {
                        _than.$message.error('删除失败')
                    }
                    _than.getData()
                })
            }).catch((error) => {
                console.log(error);
            })
        },
        // æ–°å¢ž / ä¿®æ”¹
        addOrUpdateHandle(row) {
            this.$router.push({
                name: 'packageInspectForm',
                query: {
                    id: row == null ? null : row.id
                 },
                 params:{resultVal : row.result=='' ? null : row.result}
            })
        },
        formatResult(row, column, cellValue){
            if(cellValue != undefined || cellValue != null){
                if(cellValue == '不合格'){
                    return "<span style='color:#E84738;'>不合格</span>"
                }
                return "<span style='color:#34BD66;'>合格</span>"
            }
        },
        formatDateTime(row, column, cellValue) {
            return cellValue ? fecha.format(new Date(cellValue), 'yyyy-MM-dd') : ''
        },
        getData() {
            this.$refs.packageInspectTable.getDataList()
        },
        // table自带事件
        handleSelectionChange(val) {
            this.multipleSelection = val
        },
    }
  }
  </script>
src/views/quality/packageinspect/packageInspect-form.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,602 @@
<template>
    <div style="height: 100%">
    <div class="page-header">
      <div class="header-left">
        <a @click="$router.go(-1)"><i class="icon-btn-back"></i></a>
        <h2 v-if="resultVal=='' || resultVal==null">编辑-包装检验</h2>
        <h2 v-else>查看-包装检验</h2>
      </div>
      <div class="btn-group header-right">
      </div>
    </div>
    <div class="page-main">
      <div class="packageInspect-basic">
        <el-form
        :model="dataForm"
        :rules="dataRule"
        ref="dataForm"
        style="width: 100%"
        class="l-mes"
        label-width="110px">
            <el-row>
              <el-col :span="6">
                <el-form-item label="包装检验编号" prop="packInsNo">
                <el-input v-model="dataForm.packInsNo" disabled>
                </el-input>
                </el-form-item>
            </el-col>
              <el-col :span="6">
                <el-form-item label="包装编号" prop="packageNo">
                <el-input v-model="dataForm.packageNo" disabled></el-input>
                </el-form-item>
            </el-col>
            <el-col :span="6">
                <el-form-item  prop="projectName" label="项目名称" >
                  <el-tooltip :disabled="dataForm.projectName==null" :content="dataForm.projectName">
                    <el-input v-model="dataForm.projectName" disabled ></el-input>
                  </el-tooltip>
                </el-form-item>
            </el-col>
            <el-col :span="6">
                <el-form-item label="客户名称" prop="customerName">
                    <el-input v-model="dataForm.customerName" disabled />
                </el-form-item>
            </el-col>
            </el-row>
            <el-row>
              <el-col :span="6">
                <el-form-item label="合同号" prop="contractNo">
                <el-input v-model="dataForm.contractNo" disabled></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="6">
                  <el-form-item label="报检日期" prop="createTime">
                      <el-input v-model="dataForm.createTime" disabled />
                  </el-form-item>
              </el-col>
              <el-col :span="6">
                <el-form-item label="报检人" prop="createUser">
                      <el-input v-model="dataForm.createUser" disabled />
                </el-form-item>
              </el-col>
            </el-row>
        </el-form>
      </div>
      <div class="packageInspect-detail">
        <el-row :gutter="10" style="width:100%;z-index: 10;height:50px;">
            <el-col :span="20">检验项目</el-col>
            <el-col :span="2">
              <el-button v-if="resultVal=='' || resultVal==null" style="width:100%" size="small" @click="clickAddLine()">添加检验项目</el-button>
            </el-col>
            <el-col :span="2">
              <el-button v-if="resultVal=='' || resultVal==null" style="width:100%" type="primary"  size="small"
              @click="savePackIns()">保存</el-button>
            </el-col>
        </el-row>
        <el-row style="width:100%;">
            <el-col :span="24">
                <el-table
                :header-cell-style="{textAlign:'center',color:'black',backgroundColor:'#fafafa'}"
                :cell-style="{textAlign:'center'}"
                ref="table"
                :data="list"
                border
                style="width: 100%;"
                height="400"
                row-key="randomId" class="l-mes"
                default-expand-all
                :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
                  <el-table-column type="index" label="序号" width="60">
                  </el-table-column>
                  <el-table-column prop="name" label="项目" width="260">
                    <template slot-scope="scope">
                        <el-input :readonly="resultVal!=null" v-if="scope.row.children" class="inline-input" style="width:90%;" v-model="scope.row.name"
                          placeholder="请输入项目名称"></el-input>
                    </template>
                  </el-table-column>
                  <el-table-column prop="required" label="要求" width="260">
                    <template slot-scope="scope">
                      <div v-if="!scope.row.children">
                      <el-input :readonly="resultVal!=null" v-model="scope.row.required"
                        placeholder="请输入要求"></el-input>
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="note" label="检验描述" width="260" >
                    <template slot-scope="scope">
                      <div v-if="!scope.row.children">
                        <el-input :readonly="resultVal!=null" v-model="scope.row.note" placeholder="检验描述"></el-input>
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="testState" label="结论" min-width="150">
                    <template slot-scope="scope">
                        <el-select style="width:100%" :disabled="resultVal!=null" @change="changeResult" v-model="scope.row.result" v-if="!scope.row.children">
                            <el-option label="合格" value="合格"></el-option>
                            <el-option label="不合格" value="不合格"></el-option>
                        </el-select>
                    </template>
                  </el-table-column>
                  <el-table-column v-if="resultVal=='' || resultVal==null" fixed="right" style="background-color: white;" label="操作" width="200">
                    <template slot-scope="scope">
                      <el-button v-if="scope.row.children" icon="el-icon-circle-plus-outline" type="text" @click="clickAddChildren(scope.row,scope.$index)">添加行</el-button>
                      <el-button v-if="!scope.row.children" icon="el-icon-circle-close" type="text"
                      @click="clickDelLine(scope.row,scope.$index,scope.row.children!=null)">取消</el-button>
                      <el-button v-if="scope.row.children" icon="el-icon-circle-close" type="text"
                      @click="clickDelLine(scope.row,scope.$index,scope.row.children!=null)">删除项目</el-button>
                    </template>
                  </el-table-column>
                </el-table>
            </el-col>
        </el-row>
      </div>
      <div class="packageInspect-result">
        <el-row>
          <el-col :span="24">检验结论</el-col>
        </el-row>
        <el-row style="width:100%">
          <el-col :span="24">
            <el-table class="l-mes" border height="90" :data="conclusionTable" ref="conclusion" v-model="conclusion"
            :header-cell-style="{textAlign:'center',color:'black',backgroundColor:'#fafafa'}"
            :cell-style="{textAlign:'center'}">
                <el-table-column prop="packageNo" label="包装编号"></el-table-column>
                <el-table-column prop="userName" label="检验员"></el-table-column>
                <el-table-column prop="result" label="检验结论">
                  <template slot-scope="scope">
                    <el-select :disabled="resultVal!=null" style="width:100%" v-model="scope.row.result">
                        <el-option label="合格" value="合格"></el-option>
                        <el-option label="不合格" value="不合格"></el-option>
                    </el-select>
                  </template>
                </el-table-column>
                <el-table-column  label="操作">
                    <template>
                        <el-button type="text" :disabled="resultVal!=null" @click="submitSave()" size="small">上报</el-button>
                    </template>
                </el-table-column>
            </el-table>
          </el-col>
        </el-row>
      </div>
    </div>
  </div>
</template>
<script>
import {
  fetchListById,
  updatePackageInsProduct,
  updatePackageInspectById,
} from '@/api/quality/packageInspect'
export default {
    computed:{},
    components:{
    },
    data(){
        return{
            loading: false,
            resultVal: null,
            dataForm:{
                id: null,
                packInsNo: null,
                packageNo: '',
                contractNo: '',
                projectName: '',
                customerName: '',
                packageInsProductS: [{
                  deviceId: 0,
                  father:'',
                  name: '',
                  required: '',
                  testValue: '',
                  unit: '',
                  testValueList: []
                }]
            },
            form: null,
            list:[],
            conclusion: null,
            conclusionTable: [{
              packageNo: '',
              userName: '',
              result: ''
            }],
            dataRule: {},
        }
    },
    beforeUpdate(){
      this.$nextTick(()=>{
        this.$refs.table.doLayout();
      })
    },
    created(){
      this.dataForm.id = this.$route.query.id
      this.resultVal = this.$route.params.resultVal
      if(!this.resultVal){
        let val = sessionStorage.getItem("packIns-resultVal-"+this.dataForm.id)
        if(val){
          this.resultVal=val
        }
      }
      this.init()
    },
    watch:{
    },
    methods:{
      changeResult(){
        let result = ''
        let data = this.list
        if(data){
          result='合格'
          data.forEach(item=>{
            if(item.children){
              item.children.forEach(ele=>{
                if(ele.result=='不合格'){
                  result='不合格'
                }
              })
            }
          })
        }
        this.conclusionTable[0].result = result
      },
      //上报
      submitSave(){
        const _than = this
        this.$confirm('上报前,请确认检验项目是否已保存!', '提示', {
          confirmButtonText: '确认上报',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          let data = {
          id: _than.dataForm.id,
          result: _than.conclusionTable[0].result,
        }
        updatePackageInspectById(data).then(res => {
          if(res.data.code === 0){
            _than.resultVal = res.data.data
            sessionStorage.setItem("packIns-resultVal-"+_than.dataForm.id,res.data.data)
            _than.$message.success("上报成功");
          }else{
            _than.$message.error("上报失败",res.data.data);
          }
        })
        }).catch(() => {})
      },
      // æ·»åŠ è¡Œ
      clickAddLine() {
          this.list.push({
            name: '',
            randomId: Math.random(),
            children: [{
              name: '',
              note: '',
              required: '',
              result: '',
              randomId: Math.random(),
            }]
          })
      },
      //添加子级
      clickAddChildren(row,index){
        row.children.push({
            name: row.name,
            note: '',
            required: '',
            result: '',
            randomId: Math.random(),
        })
      },
      // åˆ é™¤è¡Œ
      clickDelLine(row,index,isParent) {
        if(isParent){
          let parentIndex = this.list.findIndex(el =>{
            return el.randomId == row.randomId
          })
          this.list.splice(parentIndex,1)
        }else{
          let i = this.list.findIndex(el =>{
            return el.children.find(ele => ele.randomId == row.randomId)
          })
          let childrenIndex = this.list[i].children.findIndex(el =>{
            return el.randomId == row.randomId
          })
          this.list[i].children.splice(childrenIndex,1)
        }
      },
      //保存检查项
      savePackIns(){
        if(this.list.length==0){
          this.$message.error("检验项目为空!")
          return
        }else{
          let dataList = []
          this.list.forEach(item=>{
            if(item.children){
              item.children.forEach(ele=>{
                let obj = {
                  id: ele.pid || null,
                  name: item.name,
                  note: ele.note,
                  packageInspectId: this.dataForm.id,
                  required: ele.required,
                  result: ele.result,
                }
                dataList.push(obj)
              })
            }
          })
          updatePackageInsProduct(dataList).then(res=>{
            if(res.status===200){
              this.$message.success("保存成功")
            }
          }).catch(error=>{
            console.log(error);
            this.$message.error("保存失败")
          })
        }
      },
      init(){
        if(this.dataForm.id){
          fetchListById(this.dataForm.id).then(res=>{
            let data = res.data.data
            this.dataForm.packInsNo = data.packInsNo
            this.dataForm.packageNo = data.packageNo
            this.dataForm.contractNo = data.contractNo
            this.dataForm.customerName = data.customerName
            this.dataForm.projectName = data.projectName
            this.dataForm.createTime = data.createTime
            this.dataForm.createUser = data.createUser
            this.list = []
            let userNameList = []
            data.packageInsProductS.forEach(item => {
              if (item.children) {
                    let ele = {
                      randomId: Math.random(),
                      name: null,
                      children: []
                    }
                    ele.name = item.name
                    item.children.forEach(obj => {
                      if(obj.userName){
                        userNameList.push(obj.userName)
                      }
                      let o = {
                        name: item.name,
                        randomId: Math.random(),
                        required: obj.required,
                        pid: obj.pid,
                        note: obj.note?obj.note:'',
                        result: obj.presult
                      }
                      ele.children.push(o)
                    })
                    this.list.push(ele)
                }
              })
              this.conclusionTable = [{
                packageNo: data.packageNo,
                userName: Array.from(new Set(userNameList)).join(','),
                result: null
              }]
              this.$nextTick(()=>{
                if(this.list.length>0){
                  this.changeResult()
                }
              })
          }).catch(error=>{
            this.$message.error("获取失败",error)
          })
        }else{
          this.conclusionTable = []
        }
      },
    },
}
</script>
<style>
.packageInspect-detail {
  width: 100%;
  height: 490px;
  padding: 10px 20px;
  display: flex;
  border: 1px solid #ddd;
  background-color: #fff;
  margin-top: 10px;
  box-sizing: border-box;
  flex-wrap: wrap;
}
.packageInspect-result {
  width: 100%;
  height: 150px;
  padding: 10px 20px;
  display: flex;
  border: 1px solid #ddd;
  background-color: #fff;
  margin-top: 10px;
  box-sizing: border-box;
  flex-wrap: wrap;
}
.packageInspect-basic {
  background-color: #fff;
  height: 120px;
  display: flex;
  flex-wrap: wrap;
  padding: 10px 20px;
  border: 1px solid #ddd;
  box-sizing: border-box;
}
.packageInspect-related-stock-part {
  background-color: #fff;
  width: 100%;
  height: 220px;
  border: 1px solid #ddd;
  padding: 10px 20px 0px 20px;
  box-sizing: border-box;
}
.packageInspect-bom {
  background-color: #fff;
  width: 100%;
  height: 499px;
  border: 1px solid #ddd;
  padding: 10px 20px;
  box-sizing: border-box;
}
.packageInspect-bom .el-card__header {
  padding: 1px 20px;
  border-bottom: 0px solid #ebeef5;
}
.packageInspect-bom .el-card__body {
  height: calc(100% - 22px);
}
.packageInspect-bom .el-card__body .el-collapse {
  height: 100%;
  overflow: auto;
}
.packageInspect-technology-params {
  background-color: #fff;
  width: calc(52% - 20px);
  float: left;
  height: 719px;
  border: 1px solid #ddd;
  padding: 10px 20px;
  margin-left: 20px;
}
.packageInspect-structure {
  background-color: #fff;
  width: 35%;
  float: left;
  height: 719px;
  border: 1px solid #ddd;
  padding: 10px 20px;
  box-sizing: border-box;
}
.packageInspect-flow {
  background-color: #fff;
  width: calc(65% - 20px);
  float: left;
  height: 719px;
  border: 1px solid #ddd;
  padding: 10px 20px;
  margin-left: 20px;
  box-sizing: border-box;
}
/*自定义disabled状态下checkbox的样式*/
.completeproductstructure-checkout
  .el-checkbox__input.is-disabled.is-checked
  .el-checkbox__inner {
  background-color: #006eff;
  border-color: #006eff;
}
.completeproductstructure-checkout
  .el-checkbox__input.is-disabled.is-checked
  + span.el-checkbox__label {
  color: #006eff;
  border-color: #006eff;
}
.completeproductstructure-checkout
  .el-checkbox__input.is-disabled
  .el-checkbox__inner {
  background-color: #ffffff;
  cursor: pointer;
}
.completeproductstructure-checkout
  .el-checkbox__input.is-disabled
  + span.el-checkbox__label {
  color: #606266;
  cursor: pointer;
}
.completeproductstructure-checkout .el-checkbox__inner::after {
  border: 1px solid #fff !important;
  border-left: 0 !important;
  border-top: 0 !important;
  cursor: pointer !important;
}
.packageInspect-bom-div {
  width: 100%;
  margin-bottom: 5px;
}
.packageInspect-technology-div {
  width: 100%;
  margin-bottom: 5px;
  margin-right: 10px;
}
.packageInspect-technology-div .el-collapse {
  border-top: 0px;
  border-bottom: 0px;
}
.structure-detail-table th.gutter {
  display: table-cell !important;
  width: 10px !important;
}
.structure-detail-table colgroup.gutter {
  display: table-cell !important;
  width: 10px !important;
}
.final-product-checkout .el-card__header {
  padding: 0px 20px;
  border-bottom: 0px;
}
.final-product-checkout .el-card__body {
  padding: 0px 20px 20px;
}
.orimaterial-quantity .el-card__header {
  padding: 0px 20px;
  border-bottom: 0px;
}
.orimaterial-quantity .el-card__body {
  padding: 0px 20px 20px;
}
.packageInspect-materialcost-table th.gutter {
  display: table-cell !important;
  width: 10px !important;
}
.packageInspect-materialcost-table colgroup.gutter {
  display: table-cell !important;
  width: 10px !important;
}
.GooFlow .ico .ico_start:before {
  color: red;
}
.highlight-tab-class {
  color: #006eff;
  background: #e4e7ed;
  border-top: 1px solid #006eff;
}
.unhighlight-tab-class {
  border: 1px solid #e4e7ed;
  border-bottom: none;
}
.avue-crud__menu{
  min-height: 0px;
}
</style>
src/views/quality/processInspect/index.vue
@@ -56,8 +56,8 @@
                    column: [
                        {
                            minWidth: '120',
                            prop: 'orderNumber',
                            label: '订单编号',
                            prop: 'proInsNo',
                            label: '过程检验编号',
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'text',
@@ -65,6 +65,14 @@
                        },
                        {
                            minWidth: '120',
                            prop: 'orderNumber',
                            label: '订单编号',
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'text'
                        },
                        {
                            minWidth: '120',
                            prop: 'material',
                            label: '产品名称',
                            isTrue: true,
src/views/quality/processInspect/processInspect-form.vue
@@ -18,6 +18,12 @@
                    <div class="formwrapper">
                        <el-row>
                            <el-col :span="6">
                                <el-form-item label="过程检验编号:">
                                    <el-input @blur="selectInfoByOrderId" disabled
                                    v-model="processInspectVo.proInsNo"  autocomplete="off" />
                                </el-form-item>
                            </el-col>
                            <el-col :span="6">
                                <el-form-item label="订单号:">
                                    <el-input @blur="selectInfoByOrderId" :disabled="processInspectVo.id != null"
                                        v-model="processInspectVo.orderNumber" placeholder="请输入订单号" autocomplete="off" />
@@ -40,14 +46,15 @@
                                        autocomplete="off" />
                                </el-form-item>
                            </el-col>
                        </el-row>
                        <el-row>
                            <el-col :span="6">
                                <el-form-item label="规格型号:">
                                    <el-input disabled v-model="processInspectVo.specs" placeholder="请输入规格型号"
                                        autocomplete="off" />
                                </el-form-item>
                            </el-col>
                        </el-row>
                        <el-row>
                            <el-col :span="6">
                                <el-form-item label="工序名称">
                                    <el-select style="width: 100%" :disabled="processInspectVo.id != null"
@@ -64,8 +71,6 @@
                                        autocomplete="off" />
                                </el-form-item>
                            </el-col>
                        </el-row>
                        <el-row>
                            <el-col :span="6">
                                <el-form-item label="数量:">
                                    <el-input v-model="processInspectVo.quantity" placeholder="请输入数量" autocomplete="off"
@@ -249,6 +254,7 @@
            empiricalValueAddMaxNumber: 0,
            processInspectVo: {
                id: null,
                proInsNo: null,
                material: null,
                materialCode: null,
                orderNumber: "ZTTIC20230001",
@@ -352,6 +358,7 @@
            if (id != null) {
                queryById(id).then(res => {
                    let result = res.data.data
                    this.processInspectVo.proInsNo = result.proInsNo
                    this.processInspectVo.orderNumber = result.orderNumber
                    this.processInspectVo.materialCode = result.materialCode
                    this.processInspectVo.material = result.material
src/views/quality/processconfiguration/index.vue
@@ -299,7 +299,7 @@
          minWidth: 100
        }
      },
      materialType: [{label:'原材料检验',value:'原材料检验'},{label:'过程检验',value:'过程检验'},{label:'产品检验',value:'产品检验'}],
      materialType: [{label:'原材料检验',value:'原材料检验'},{label:'过程检验',value:'过程检验'},{label:'产品检验',value:'产品检验'},{label:'包装检验',value:'包装检验'}],
      StateList: [{label:'全部',value:''},{label:'已提交审核',value:'1'},{label:'待处理',value:'0'},{label:'已处理',value:'2'}],
      insStateList: [{label:'其他',value:''},{label:'瑕疵',value:'1'}],
    }
src/views/quality/rawMaterial/QrcodeReader.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,77 @@
<template>
    <div class="qrcode">
      <div class="code">
        <!-- decode是扫描结果的函数,torch用于是否需要打开手电筒,init用于检查该设备是否能够调用摄像头的权限,camera可用于打开前面或者后面摄像头  -->
        <qrcode-drop-zone @decode="onDecode">
          <qrcode-stream @decode="onDecode" :torch="torchActive" @init="onInit" :camera="camera" />
        </qrcode-drop-zone>
        <div class="code-button">
          <button @click="switchCamera">相机反转</button>
          <button @click="ClickFlash">打开手电筒</button>
          <button @click="turnCameraOff">关闭相机</button>
        </div>
      </div>
    </div>
  </template>
  <script>
  // å¼•用vue-qrcode-reader插件
  import { QrcodeStream, QrcodeDropZone, QrcodeCapture } from 'vue-qrcode-reader'
  export default {
    name: 'Approve',
    props: {
      camera: {
        type: String,
        default: 'rear',
      },
      torchActive: {
        type: Boolean,
        default: false,
      },
      qrcode: {
        type: Boolean,
        default: false,
      },
      noStreamApiSupport: {
        type: Boolean,
        default: false,
      },
    },
    data() {
      return {}
    },
    created() {
      console.log(222222222222224564646);
    },
    components: {
      // æ³¨å†Œç»„ä»¶
      QrcodeStream,
      QrcodeDropZone,
      QrcodeCapture,
    },
    methods: {
      // æ‰«ç ç»“果回调
      onDecode(result) {
        this.$emit('onDecode', result)
      },
      // ç›¸æœºåè½¬
      switchCamera() {
        this.$emit('switchCamera')
      },
      // å…³é—­ç›¸æœºï¼Ÿï¼Ÿï¼Ÿï¼Ÿï¼Ÿï¼Ÿ
      turnCameraOff() {
        this.$emit('turnCameraOff')
      },
      // æ‰“开手电筒
      ClickFlash() {
        this.$emit('ClickFlash')
      },
      // æ£€æŸ¥æ˜¯å¦è°ƒç”¨æ‘„像头
      onInit(promise) {
        this.$emit('onInit', promise)
      },
    },
  }
  </script>
src/views/quality/rawMaterial/index.vue
@@ -38,11 +38,11 @@
            @refreshDataList="getData"
        ></RawMaterialForm>
        <el-dialog
        top="10vh"
        top="7vh"
        title="打印预览"
        :visible.sync="printDialogVisible"
        width="60%">
        <div style="width:100%;height: 60vh;overflow-y: scroll;">
        width="70%">
        <div style="width:90%;margin-left:5%;height: 60vh;overflow-y: scroll;">
            <printTemplate id="printRaw" :formData="printFormData"></printTemplate>
        </div>
        <span slot="footer" class="dialog-footer">
@@ -54,11 +54,12 @@
</template>
<script>
import ttable from '@/views/common/ztt-table.vue'
import { getRawInspectList,delObj,exportRawMaterial,getObj } from '@/api/quality/rawMaterial'
import { getRawInspectList,delObj,exportRawMaterial,getObj,downloadReport } from '@/api/quality/rawMaterial'
import RawMaterialForm from './rawMaterial-form'
import * as fecha from 'element-ui/lib/utils/date'
import { mapGetters } from 'vuex'
import PrintJS from 'print-js'
import { transformZip } from '@/util/fileTransform'
import printTemplate from './rawMaterial-print.vue'
  export default {
    data() {
@@ -69,6 +70,7 @@
            resultData:[],
            addOrUpdateVisible: false,
            type: [1],
            multipleSelection: [],
            prelang: 'rawMaterial',
            ajaxFun: getRawInspectList,
            options: {
@@ -94,12 +96,20 @@
                column: [
                    {
                        minWidth: '120',
                        prop: 'code',
                        label: '原材料编码',
                        prop: 'rawInsNo',
                        label: '原材料检验编号',
                        isTrue: true,
                        isSearch: true,
                        searchInfoType: 'text',
                        render: { fun: this.addOrUpdateHandle }
                    },
                    {
                        minWidth: '120',
                        prop: 'code',
                        label: '原材料编码',
                        isTrue: true,
                        isSearch: true,
                        searchInfoType: 'text'
                    },
                    {
                        minWidth: '120',
@@ -205,24 +215,31 @@
                    },
                ],
                toolbar: [
                {
                    text: '新增',
                    type: 'primary',
                    fun: this.addOrUpdateHandle
                }],
                operator: [{
                    text: '打印',
                    type: 'text',
                    size: 'small',
                    fun: this.previewFun,
                    show: {
                        val: [
                            '1',
                            '0'
                        ],
                        key: 'judgeState'
                    {
                        text: '新增',
                        type: 'primary',
                        fun: this.addOrUpdateHandle
                    },
                    {
                        text: '下载检验报告',
                        type: 'primary',
                        fun: this.downloadReport
                    }
                },
                ],
                operator: [
                //     {
                //     text: '打印',
                //     type: 'text',
                //     size: 'small',
                //     fun: this.previewFun,
                //     show: {
                //         val: [
                //             '1',
                //             '0'
                //         ],
                //         key: 'judgeState'
                //     }
                // },
                {
                    text: '作废',
                    type: 'text',
@@ -245,9 +262,7 @@
        RawMaterialForm,
        printTemplate,
    },
    created() {
    },
    created() { },
    computed: {
        ...mapGetters(['permissions'])
    },
@@ -259,6 +274,30 @@
        }
    },
    methods:{
        downloadReport(){
            let selection = this.multipleSelection
            if(!selection || selection.length < 1){
                this.$message.error("请先选择检验数据")
                return
            }else{
                let arr = selection.filter(s=>{
                    return s.judgeState==null || s.judgeState==''
                })
                if(arr.length > 0){
                    this.$message.error("只能选择已检测的数据")
                    return
                }
                let ids = []
                selection.forEach(ele=>{
                    ids.push(ele.id)
                })
                downloadReport({ids : ids}).then(res=>{
                    transformZip(res)
                }).catch(error=>{
                    console.log(error)
                })
            }
        },
        //查看报告按钮
        previewFun(row){
            getObj(row.id).then(res=>{
@@ -274,10 +313,16 @@
            PrintJS({
                printable: "printRaw",
                type: "html",
                maxWidth: 880,
                // header: "原材料检测报告",
                style: '@page {margin: 10mm 5mm;}',
                targetStyles: ["*"],
                style: `@page {margin: 0mm 5mm;size: A4;}
                    html {zoom:100%;}
                    @media print {
                      html,body{
                        width:200mm;
                        height:297mm;
                      }
                    }`,
                ignoreElements: ["no-ignore"],
                orientation: 'portrait'
            });
@@ -331,7 +376,6 @@
        },
        // æ–°å¢ž / ä¿®æ”¹
        addOrUpdateHandle(row) {
            console.log(row);
            this.$router.push({
                name: 'rawMaterialForm',
                query: { 
@@ -361,37 +405,36 @@
        },
        getData() {
            this.$refs.rawMaterialTable.getDataList()
        },
        // table自带事件
        handleSelectionChange(val) {
            this.multipleSelection = val
            // æ ¹æ®çŠ¶æ€ï¼Œç¦ç”¨è¡¨å¤´æŒ‰é’®
            // ç­›é€‰å‡ºé€‰ä¸­è®°å½•的状态
            var stateArr = val.map(function(value, index) {
                return value.coState
            })
            // var stateArr = val.map(function(value, index) {
            //     return value.coState
            // })
            // é€‰ä¸­çŠ¶æ€æ•°ç»„å…ƒç´ åŽ»é‡
            var uniqueStateArr = []
            for (var i = 0; i < stateArr.length; i++) {
                if (uniqueStateArr.indexOf(stateArr[i]) == -1) {
                uniqueStateArr.push(stateArr[i])
                }
            }
            // var uniqueStateArr = []
            // for (var i = 0; i < stateArr.length; i++) {
            //     if (uniqueStateArr.indexOf(stateArr[i]) == -1) {
            //     uniqueStateArr.push(stateArr[i])
            //     }
            // }
            // å¾ªçŽ¯è‡ªå®šä¹‰æŒ‰é’®ï¼Œåˆ¤æ–­æ¯ä¸ªæŒ‰é’®çš„permitArr是否完全包含选中状态,若完全包含,则按钮亮,否则按钮灰
            for (var i = 0; i < this.stateTagArr.length; i++) {
                if (
                uniqueStateArr.every((val) =>
                    this.stateTagArr[i].permitArr.length <= 0
                    ? true
                    : this.stateTagArr[i].permitArr.includes(val)
                )
                ) {
                this.stateTagArr[i].disabled = false
                } else {
                this.stateTagArr[i].disabled = true
                }
            }
            this.multipleSelection = val
            // for (var i = 0; i < this.stateTagArr.length; i++) {
            //     if (
            //     uniqueStateArr.every((val) =>
            //         this.stateTagArr[i].permitArr.length <= 0
            //         ? true
            //         : this.stateTagArr[i].permitArr.includes(val)
            //     )
            //     ) {
            //     this.stateTagArr[i].disabled = false
            //     } else {
            //     this.stateTagArr[i].disabled = true
            //     }
            // }
        },
    }
  }
src/views/quality/rawMaterial/rawMaterial-form.vue
@@ -21,6 +21,12 @@
        label-width="110px">
            <el-row>
              <el-col :span="6">
                <el-form-item label="原材料检验编号" prop="rawInsNo">
                <el-input v-model="dataForm.rawInsNo" disabled>
                </el-input>
                </el-form-item>
            </el-col>
              <el-col :span="6">
                <el-form-item label="零件号" prop="code">
                <el-input v-model="dataForm.code" :disabled="resultVal!=null && dataForm.id!=null">
                  <el-button
@@ -28,6 +34,11 @@
                    icon="el-icon-search"
                    :disabled="resultVal!=null && dataForm.id!=null"
                    @click="queryCode()"></el-button>
                    <!-- <el-button
                    slot="append"
                    icon="el-icon-full-screen"
                    :disabled="resultVal!=null && dataForm.id!=null"
                    @click="Turnonthecamera"></el-button> -->
                </el-input>
                </el-form-item>
            </el-col>
@@ -45,17 +56,16 @@
                    type="datetime"
                    value-format="yyyy-MM-dd HH:mm:ss"
                    disabled>
                </el-date-picker>
                </el-form-item>
            </el-col>
            <el-col :span="6">
                <el-form-item label="规格型号" prop="specs">
                <el-input v-model="dataForm.specs" disabled></el-input>
                </el-form-item>
            </el-col>
            </el-row>
            <el-row>
              <el-col :span="6">
                <el-form-item label="规格型号" prop="specs">
                <el-input v-model="dataForm.specs" disabled></el-input>
                </el-form-item>
              </el-col>
                <el-col :span="6">
                    <el-form-item prop="unit" label="单位">
                        <el-input
@@ -74,15 +84,15 @@
                      <el-input v-model="dataForm.number" :disabled="resultVal!=null" />
                  </el-form-item>
                </el-col>
            </el-row>
            <el-row>
                <el-col :span="6">
                  <el-form-item  prop="projectName" label="项目名称">
                  <el-form-item  prop="projectName" label="项目名称" v-if="dataForm.id!=null">
                    <el-tooltip :disabled="dataForm.projectName==null" :content="dataForm.projectName">
                      <el-input v-model="dataForm.projectName" disabled ></el-input>
                    </el-tooltip>
                  </el-form-item>
              </el-col>
            </el-row>
            <el-row>
              <el-col :span="6">
                  <el-form-item label="报检日期" prop="createTime" v-if="dataForm.id!=null">
                      <el-input v-model="dataForm.createTime" disabled />
@@ -160,7 +170,7 @@
                    <template slot-scope="scope">
                      <div v-if="!scope.row.children">
                      <el-tooltip :disabled="scope.row.deviceId != null" class="item" effect="dark" content="请先选择设备!" placement="top-start">
                          <el-select   @blur="changeState(scope.row, index)" style="width:100%" allow-create filterable default-first-option
                          <el-select @blur="changeState(scope.row, index)" style="width:100%" allow-create filterable default-first-option
                          :disabled="scope.row.deviceId == null ||  (dataForm.id!=null&&resultVal!=null)"
                          v-model="scope.row.testValueList[index]"
                          placeholder="请输入或选择检测值" @change="updateTestValue(scope.row,scope.$index)">
@@ -171,10 +181,6 @@
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="deviceName" label="试验设备" min-width="260">
                    <template slot-scope="scope">
                      <div v-if="!scope.row.children">
@@ -189,7 +195,7 @@
                  <el-table-column prop="note" label="检验描述" width="260" >
                    <template slot-scope="scope">
                      <div v-if="!scope.row.children">
                        <el-input    @blur="changeState(scope.row, note)"  :disabled="scope.row.deviceId == null ||  (dataForm.id!=null&&resultVal!=null)" v-model="scope.row.note" placeholder="检验描述"></el-input>
                        <el-input @blur="changeState(scope.row, scope.$index)" :disabled="scope.row.deviceId == null ||  (dataForm.id!=null&&resultVal!=null)" v-model="scope.row.note" placeholder="检验描述"></el-input>
                      </div>
                    </template>
                  </el-table-column>
@@ -215,8 +221,6 @@
            </el-col>
        </el-row>
      </div>
      <div class="rawMaterial-result">
        <el-row>
          <el-col :span="24">检验结论</el-col>
@@ -261,6 +265,7 @@
        <el-button type="primary" @click="submitSave()">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <!-- <qrcode :qrcode="qrcode" v-show="qrcode" :camera="camera" /> -->
  </div>
</template>
@@ -273,13 +278,19 @@
  updateRawInspectsById,
  updateDeviceById, } from '@/api/quality/rawMaterial'
  import rawMaterialPartDialog from '@/views/common/rawMaterial-part'
  // import qrcode from './QrcodeReader.vue'
export default {
    computed:{},
    components:{
      rawMaterialPartDialog
      rawMaterialPartDialog,
      // qrcode
      // qrcode: () => import('./QrcodeReader.vue'),
    },
    data(){
        return{
            qrcode: false,
            torchActive: false,
            camera: 'off',
            userdata:[],
            currentRow:[],
            userlist:[],
@@ -334,7 +345,7 @@
        this.$refs.table.doLayout();
      })
    },
    mounted(){
    created(){
      this.dataForm.id = this.$route.query.id
      this.resultVal = this.$route.query.resultVal
      if(this.resultVal == null){
@@ -352,17 +363,77 @@
      },
    },
    methods:{
      changeName(index,row){
        this.projectList.forEach(item=>{
          if(row.name == item.name){
            this.list[index].unit = item.unit
            this.list[index].required = item.required
          }
        })
      },
       // æ‰“开相机
      Turnonthecamera() {
      this.qrcode = true
      this.camera = 'rear'
      console.log(2222222);
    },
    // æ‰«ç ç»“果回调
    // onDecode(result) {
    //   console.log(result)
    //   this.turnCameraOff()
    // },
    // ç›¸æœºåè½¬
    // switchCamera() {
    //   switch (this.camera) {
    //     case 'front':
    //       this.camera = 'rear'
    //       break
    //     case 'rear':
    //       this.camera = 'front'
    //       break
    //     default:
    //       this.$toast('错误')
    //   }
    // },
    // å…³é—­ç›¸æœº
    // turnCameraOff() {
    //   this.camera = 'off'
    //   this.qrcode = false
    // },
    // æ‰“开手电筒
    // ClickFlash() {
    //   switch (this.torchActive) {
    //     case true:
    //       this.torchActive = false
    //       break
    //     case false:
    //       this.torchActive = true
    //       break
    //     default:
    //       this.$toast('错误')
    //   }
    // },
    // æ£€æŸ¥æ˜¯å¦è°ƒç”¨æ‘„像头
    // async onInit(promise) {
    //   try {
    //     await promise
    //   } catch (error) {
    //     if (error.name === 'StreamApiNotSupportedError') {
    //     } else if (error.name === 'NotAllowedError') {
    //       this.errorMessage = 'Hey! I need access to your camera'
    //     } else if (error.name === 'NotFoundError') {
    //       this.errorMessage = 'Do you even have a camera on your device?'
    //     } else if (error.name === 'NotSupportedError') {
    //       this.errorMessage =
    //         'Seems like this page is served in non-secure context (HTTPS, localhost or file://)'
    //     } else if (error.name === 'NotReadableError') {
    //       this.errorMessage =
    //         "Couldn't access your camera. Is it already in use?"
    //     } else if (error.name === 'OverconstrainedError') {
    //       this.errorMessage =
    //         "Constraints don't match any installed camera. Did you asked for the front camera although there is none?"
    //     } else {
    //       this.errorMessage = 'UNKNOWN ERROR: ' + error.message
    //     }
    //   }
    // },
      // ç¡®è®¤å›žè°ƒ
      selectPart(param, nodePart, index) {
        if (typeof param !== 'undefined') {
          this.dataForm.rawInsNo = param.rawInsNo
          this.dataForm.code = param.code
          this.dataForm.name = param.name
          this.dataForm.formTime = param.formTime
@@ -385,47 +456,25 @@
        }
        this.showPart = true
      },
      updateDevice(row, index) {
            let rowId=JSON.stringify(row.rpId)
            updateDeviceById({ deviceId: row.deviceId, rpId: row.rpId }).then(res => {
                this.list.forEach(obj => {
                    obj.children.forEach(c=>{
                        if(c.rpId==rowId){
                        c.testValue = ''
                        c.testState = null
                        c.testValueList = []
                        c.note=''
                        }
                    })
                })
            }).catch(error => {
                console.log(error)
            })
        },
      // updateDevice(row,index){
      //   if(this.dataForm.id != null){
      //     updateDeviceById({deviceId:row.deviceId,rpId:row.rpId}).then(res=>{
      //       this.inspectionItems.forEach(obj => {
      //       this.list[index-1].testValue = ''
      //       this.list[index-1].testState = null
      //       this.list[index-1].testValueList = []
      //       this.list[index-1].note = ''
      //     })
      //     }).catch(error=>{
      //       console.log(error)
      //     })
      //   }
      // },
          updateDeviceById({ deviceId: row.deviceId, rpId: row.rpId }).then(res => {
            row.testValue = null
            row.testState = null
            row.testValueList = []
            row.note = null
          }).catch(error => {
              console.log(error)
          })
      },
      checkTestState(){
          let resultVal = '1'
          this.list.forEach(item=>{
              if(item.children){
                if(obj.testState == 0){
                    resultVal = '0'
                }
                item.children.forEach(ele=>{
                  if(ele.testState == 0){
                      resultVal = '0'
                  }
                })
              }
          })
          this.resultVal = resultVal
@@ -455,13 +504,15 @@
          number: this.unqualifiedNum,
        }
        updateRawInspectsById(data).then(res => {
          if(res.data.code == 0){
          if(res.data.code == 0 && (res.data.data=='1'|| res.data.data=='0')){
            sessionStorage.setItem("raw-resultVal-"+this.dataForm.id,res.data.data)
            this.$message.success("上报成功");
            this.dialogVisible = false
          }else{
            this.$message.error("上报失败,",res.data.data);
          }
          this.dialogVisible = false
          this.checkTestState()
        });
        this.checkTestState()
      },
      addTeatValueColumn(){
        this.empiricalValueAdd = this.empiricalValueAdd + 1;
@@ -496,8 +547,8 @@
              if (arr.length > this.empiricalValueAdd) {
                  this.empiricalValueAdd = arr.length
              }
            })
            this.list.push(ele)
          })
        }else{
          ele.children.push({
              deviceId: null,
@@ -510,7 +561,7 @@
              userName: null,
              testValue: '',
              testValueList: [],
              note: '',
              note: null,
              testState: ''
            })
          this.list.push(ele)
@@ -518,7 +569,7 @@
      },
      delTeatValueColumn(){
        if (this.empiricalValueAdd - 1 === 0) { } else {
        if (this.empiricalValueAdd - 1 > 0) {
          if (this.empiricalValueAddMaxNumber != this.empiricalValueAdd - 1) {
            this.empiricalValueAdd = this.empiricalValueAdd - 1;
            this.list.forEach(i => {
@@ -527,12 +578,8 @@
          }
        }
      },
      updateTestValue(row,index){
        console.log(row);
        if(row.rpId == null){
          return
        }
        let val = row.testValueList.join(",");
@@ -553,12 +600,11 @@
          this.$message.error(error)
        })
      },
      init(){
        if(this.dataForm.id){
          getObj(this.dataForm.id).then(res=>{
            let data = res.data.data
            this.dataForm.rawInsNo = data.rawInsNo
            this.dataForm.name = data.name
            this.dataForm.formTime = data.formTime
            this.dataForm.code = data.code
@@ -586,13 +632,12 @@
                      if(obj.userName){
                        userNameList.push(obj.userName)
                      }
                      if(obj.testValue){
                        arr = obj.testValue.split(",")
                      }
                      if (arr.length > this.empiricalValueAdd) {
                                    this.empiricalValueAdd = arr.length
                                }
                          this.empiricalValueAdd = arr.length
                      }
                      let o = {
                        deviceId: obj.deviceId,
                        deviceName: obj.deviceName,
@@ -626,44 +671,27 @@
        }
      },
      changeState(row, index) {
            console.log(row)
            if (row.rpId != null && row.rpId != '') {
              let val = ""
                row.testValueList.forEach(e => {
                  val += e + ","
                })
                // if (note === undefined || note === '' || note === null) {
                //     return
                // }
                console.log(val)
                val = val.slice(0, -1);
                if (val === undefined || val === '' || val === null) {
                    return
                }
                let obj = {
                  deviceId: row.deviceId,
                rpId: row.rpId,
                testValue: val,
                note: row.note
                }
                console.log(obj)
                updateRawInsProduct(obj).then(res => {
                    if (res.data.code == 0) {
                        this.$message.success("更新成功")
                    } else {
                        this.$message.error("更新失败")
                    }
                    this.init()
                })
          if (row.rpId != null && row.rpId != '') {
            let val = row.testValueList.join(",")
            if (val === undefined || val === '' || val === null) {
                return
            }
        },
            let obj = {
              deviceId: row.deviceId,
              rpId: row.rpId,
              testValue: val,
              note: row.note
            }
            updateRawInsProduct(obj).then(res => {
                if (res.data.code == 0) {
                    this.$message.success("更新成功")
                } else {
                    this.$message.error("更新失败")
                }
                this.init()
            })
          }
      },
      // åˆ é™¤å­é¡¹ç›®
      delChildren(row,index,isParent) {
        if(isParent){
@@ -683,7 +711,6 @@
      },
      //添加子项目
      addChildren(row){
        console.log(row);
        let obj = {
          deviceId: null,
          deviceName: null,
@@ -701,19 +728,10 @@
        row.children.push(obj)
      },
      save(){
        let data = this.dataForm
        console.log('--------',data);
        console.log("-----",this.list);
        this.list.forEach(item=>{
          item.children.forEach(c=>{
            let arr=c.testValueList
            let val=''
            arr.forEach(a=>{
              val+=a+","
            })
            let end=val.substring(0,val.length-1)
            c.testValue=end
            c.testValue=c.testValueList.join(",")
          })
        })
        data.rawInsProducts = this.list
src/views/quality/rawMaterial/rawMaterial-print.vue
@@ -1,326 +1,334 @@
<template>
<div style="word-wrap:break-word;text-justify-trim:punctuation">
    <div class="WordSection1" style="layout-grid:15.6pt;">
        <div align="center">
            <table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" width="629"
                style="width:620pt;border-collapse:collapse;border:1pt solid windowtext">
                <tbody>
                    <tr>
                        <td width="199" rowspan="2" style="width:149.45pt;border:solid windowtext 1.0pt;
                            padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-size:12.0pt;font-family:&quot;Arial&quot;,sans-serif"><img width="174"
                                        height="58" id="logo" src="../../../../public/img/image001.jpg"
                                        alt="IMG_256"></span></p>
                        </td>
                        <td width="226" style="width:169.65pt;border:solid windowtext 1.0pt;border-left:
                            1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt">
<div>
    <div class="page" style="word-wrap:break-word;text-justify-trim:punctuation" :key="i" v-for="(project,i) in projectList">
        <div style="width:100%;height:10pt"></div>
        <div class="WordSection1" style="layout-grid:15.6pt;">
            <div align="center">
                <table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" width="629"
                    style="width:620pt;border-collapse:collapse;border:1pt solid windowtext">
                    <tbody>
                        <tr>
                            <td width="199" rowspan="2" style="width:149.45pt;border:solid windowtext 1.0pt;
                                padding:0.2cm 5.4pt 0.2cm 5.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-size:12.0pt;font-family:&quot;Arial&quot;,sans-serif"><img width="174"
                                            height="58" id="logo" src="../../../../public/img/image001.jpg"
                                            alt="IMG_256"></span></p>
                            </td>
                            <td width="226" style="width:169.65pt;border:solid windowtext 1.0pt;border-left:
                                1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span
                                        style="font-size:10.0pt;font-family:宋体">记录名称:检验记录表</span></p>
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">Table: Inspection
                                        Record</span></p>
                            </td>
                            <td width="204" style="width:152.8pt;border:solid windowtext 1.0pt;border-left:
                                1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span
                                        style="font-size:10.0pt;font-family:宋体">保存期限:</span><span lang="EN-US"
                                        style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">25</span><span
                                        style="font-size:10.0pt;font-family:宋体">å¹´</span></p>
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">Storage Life: 25
                                        years</span></p>
                            </td>
                        </tr>
                        <tr>
                            <td width="226" style="width:169.65pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;
                                border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
                                padding:0.2cm 5.4pt 0.2cm 5.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span
                                        style="font-size:10.0pt;font-family:宋体">记录编号:</span><a name="OLE_LINK1"><span
                                            lang="EN-US"
                                            style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">ZTT/QR-8.6-07</span></a><span
                                        style="font-size:10.0pt;font-family:宋体">(</span><span lang="EN-US"
                                        style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">A/0</span><span
                                        style="font-size:10.0pt;font-family:宋体">)</span></p>
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">Record No.:
                                        ZTT/QR-8.6-07</span></p>
                            </td>
                            <td width="204" style="width:152.8pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;
                            border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span
                                        style="font-size:10.0pt;font-family:宋体">归档部门:质量保证部</span></p>
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">Department: QC</span>
                                </p>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </div>
            <p class="MsoNormal" align="center" style="margin-top:7.8pt;margin-bottom:3pt;text-align:center">
                <span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                <span style="font-size:10.0pt;font-family:宋体">检验记录表</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">-</span>
                <span style="font-size:10.0pt;font-family:宋体">机加工件</span><span style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif"> </span><span style="font-size:10.0pt;font-family:宋体">(</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">Inpection Record-machining </span>
                <span style="font-size:10.0pt;font-family:宋体">)</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                <span style="font-size:10.0pt;font-family:宋体">页码(</span>
                    <span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif"> Page No.</span>
                        <span style="font-size:10.0pt;font-family:宋体">):</span>
                        <span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">
                            {{i+1}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                        </span>
            </p>
            <div align="center">
                <table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" width="628"
                    style="width:620pt;border-collapse:collapse;border:1pt solid windowtext">
                    <tbody>
                        <tr>
                            <td width="121" colspan="2" style="width:120pt;height:50pt;border:solid windowtext 1.0pt;padding:1pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span
                                        style="font-size:9.0pt;font-family:宋体">零件名称</span></p>
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Part Description</span>
                                </p>
                            </td>
                            <td width="127" colspan="5" style="width:95.5pt;border:solid windowtext 1.0pt;border-left:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center">
                                    <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif" v-text="project.name"></span>
                                </p>
                            </td>
                            <td width="113" colspan="3" style="width:84.95pt;border:solid windowtext 1.0pt;border-left:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span
                                        style="font-size:9.0pt;font-family:宋体">型</span><span lang="EN-US"
                                        style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">&nbsp;&nbsp;&nbsp;
                                    </span><span style="font-size:9.0pt;font-family:宋体">号</span></p>
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Model</span></p>
                            </td>
                            <td width="86" colspan="4" style="width:64.65pt;border:solid windowtext 1.0pt;border-left:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-family:&quot;Arial&quot;,sans-serif" v-text="project.specs"></span></p>
                            </td>
                            <td width="72" colspan="2" style="width:54.35pt;border:solid windowtext 1.0pt;border-left:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span
                                        style="font-size:9.0pt;font-family:宋体">加工单号</span></p>
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Order No.</span></p>
                            </td>
                            <td width="128" colspan="3" style="width:96.0pt;border:solid windowtext 1.0pt;border-left:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-family:&quot;Arial&quot;,sans-serif" v-text="project.rmessage.split(',')[0]"></span></p>
                            </td>
                        </tr>
                        <tr>
                            <td width="101" colspan="2" style="width:110pt;height:50pt;border:solid windowtext 1.0pt;border-top:1pt solid windowtext;padding:0.2cm 1.4pt 0.2cm 1.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span
                                        style="font-size:9.0pt;font-family:宋体">检验仪器</span></p>
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Inspection
                                        instrument</span></p>
                            </td>
                            <td width="127" colspan="5" style="width:95.5pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-family:&quot;Arial&quot;,sans-serif" v-text="deviceStr"></span></p>
                            </td>
                            <td width="113" colspan="3" style="width:84.95pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span
                                        style="font-size:9.0pt;font-family:宋体">检验数量</span></p>
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Quantity to
                                        check</span></p>
                            </td>
                            <td width="86" colspan="4" style="width:64.65pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-family:&quot;Arial&quot;,sans-serif" v-text="project.number"></span></p>
                            </td>
                            <td width="72" colspan="2" style="width:54.35pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span
                                        style="font-size:9.0pt;font-family:宋体">供货单位</span></p>
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Supplier</span></p>
                            </td>
                            <td width="128" colspan="3" style="width:96.0pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-family:&quot;Arial&quot;,sans-serif" v-text="project.supplier"></span></p>
                            </td>
                        </tr>
                        <tr>
                            <td width="145" colspan="3" style="width:109.1pt;border:solid windowtext 1.0pt;border-top:1pt solid windowtext;padding:0.2cm 0.4pt 0.2cm 0.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span
                                        style="font-size:9.0pt;font-family:宋体">检验项目</span></p>
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Inspection Item</span>
                                </p>
                            </td>
                            <td width="408" colspan="14" style="width:306.35pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span
                                        style="font-size:9.0pt;font-family:宋体">检验结果(实测值)</span></p>
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Test result (Measured
                                        value)</span></p>
                            </td>
                            <td width="74" rowspan="2" colspan="2" style="width:55.8pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 3.4pt 0.2cm 3.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span
                                        style="font-size:9.0pt;font-family:宋体">判定</span></p>
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Conclusion</span></p>
                            </td>
                        </tr>
                        <tr>
                            <td width="145" colspan="5" style="width:109.1pt;height:40pt;border:solid windowtext 1.0pt;border-top:1pt solid windowtext;padding:0.4cm 5.4pt 0.4cm 5.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span
                                        style="font-size:9.0pt;font-family:宋体">技术要求</span></p>
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Technical
                                        Requirement</span></p>
                            </td>
                            <td width="59" colspan="4" style="width:44.4pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 4.4pt 0.2cm 4.4pt">
                                <div class="MsoNormal" align="center" style="text-align:center">
                                    <span style="font-size:9.0pt;font-family:宋体">公差</span>
                                    <p lang="EN-US" style="font-size:9.0pt;text-align: center;font-family:&quot;Arial&quot;,sans-serif">TOL</p>
                                </div>
                            </td>
                            <td width="43" v-for="(item,index) in columnLength" :key="index" colspan="1" style="width:32.2pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">{{(item+(i*columnLength)) | formateNum}}</span></p>
                            </td>
                        </tr>
                    </tbody>
                    <tbody v-for="(item,index) in project.children" :key="index">
                        <tr style="height:19.85pt">
                            <td width="85" colspan="2" :rowspan="item.children.length" style="width:63.95pt;border:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt;height:19.85pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span
                                        style="font-family:宋体" v-text="item.rpFather"></span></p>
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-family:&quot;Arial&quot;,sans-serif"></span></p>
                            </td>
                            <td width="60" colspan="3" style="width:65.15pt;border:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt;height:19.85pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-family:&quot;Arial&quot;,sans-serif" v-text="item.children[0].rpName"></span></p>
                            </td>
                            <td width="59" colspan="4" style="width:44.4pt;border:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt;height:19.85pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-family:&quot;Arial&quot;,sans-serif"  v-text="item.children[0].required"></span></p>
                            </td>
                            <td width="43" v-for="(val,index) in item.children[0].testValList" :key="index" colspan="1" style="width:32.2pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt;height:19.85pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-family:&quot;Arial&quot;,sans-serif">{{val}}</span></p>
                            </td>
                            <td width="74" colspan="2" style="width:70pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.1cm 2.4pt 0.1cm 2.4pt;height:19.85pt">
                                <p v-if="item.children[0].testState=='1'" class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-family:&quot;Arial&quot;,sans-serif">合格</span></p>
                                <p v-if="item.children[0].testState=='0'" class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-family:&quot;Arial&quot;,sans-serif">不合格</span></p>
                                <p v-else class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-family:&quot;Arial&quot;,sans-serif"></span></p>
                            </td>
                        </tr>
                        <tr class="pageTr" style="height:19.85pt" v-for="(j,index) in (item.children.slice(1))" :key="index">
                            <td width="60" colspan="3" style="width:45.15pt;border:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt;height:19.85pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-family:&quot;Arial&quot;,sans-serif">{{j.rpName}}</span></p>
                            </td>
                            <td width="59" colspan="4" style="width:44.4pt;border:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt;height:19.85pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-family:&quot;Arial&quot;,sans-serif">{{j.required}}</span></p>
                            </td>
                            <td width="59" v-for="(testValue,index) in j.testValList" :key="index" style="width:44.4pt;border:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt;height:19.85pt">
                                <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                        style="font-family:&quot;Arial&quot;,sans-serif">{{testValue}}</span></p>
                            </td>
                            <td width="43" colspan="2" style="width:70pt;border:1pt solid windowtext;padding:0.1cm 2.4pt 0.1cm 2.4pt;height:19.85pt">
                                <p class="MsoNormal" align="center" style="text-align:center">
                                    <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif">
                                        {{ j.testState | formatState}}
                                    </span>
                                </p>
                            </td>
                        </tr>
                    </tbody>
                        <!-- bottom -->
                    <tr style="height:40.95pt" class="pageTr">
                        <td width="145" colspan="3" style="width:109.1pt;border:solid windowtext 1.0pt;
                        border-top:1pt solid windowtext;padding:0cm 5.4pt 0cm 5.4pt;height:40.95pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span
                                    style="font-size:10.0pt;font-family:宋体">记录名称:检验记录表</span></p>
                                    style="font-family:宋体">备</span><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif">&nbsp;
                                </span><span style="font-family:宋体">注</span></p>
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">Table: Inspection
                                    Record</span></p>
                                    style="font-family:&quot;Arial&quot;,sans-serif">Remark</span></p>
                        </td>
                        <td width="204" style="width:152.8pt;border:solid windowtext 1.0pt;border-left:
                            1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span
                                    style="font-size:10.0pt;font-family:宋体">保存期限:</span><span lang="EN-US"
                                    style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">25</span><span
                                    style="font-size:10.0pt;font-family:宋体">å¹´</span></p>
                        <td width="483" colspan="16" style="width:362.15pt;border-top:1pt solid windowtext;border-left:
                        1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
                        padding:0.2cm 5.4pt 0.2cm 5.4pt;height:40.95pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">Storage Life: 25
                                    years</span></p>
                                    style="font-family:&quot;Arial&quot;,sans-serif">&nbsp;</span></p>
                        </td>
                    </tr>
                    <tr>
                        <td width="226" style="width:169.65pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;
                            border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
                            padding:0.2cm 5.4pt 0.2cm 5.4pt">
                        <td width="145" colspan="3" style="width:109.1pt;border:none;
                        border-top:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span
                                    style="font-size:10.0pt;font-family:宋体">记录编号:</span><a name="OLE_LINK1"><span
                                        lang="EN-US"
                                        style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">ZTT/QR-8.6-07</span></a><span
                                    style="font-size:10.0pt;font-family:宋体">(</span><span lang="EN-US"
                                    style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">A/0</span><span
                                    style="font-size:10.0pt;font-family:宋体">)</span></p>
                                    style="font-family:宋体">检验员</span></p>
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">Record No.:
                                    ZTT/QR-8.6-07</span></p>
                                    style="font-family:&quot;Arial&quot;,sans-serif">Inspector</span></p>
                        </td>
                        <td width="204" style="width:152.8pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;
                        border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span
                                    style="font-size:10.0pt;font-family:宋体">归档部门:质量保证部</span></p>
                        <td width="120" colspan="4" style="width:90.25pt;border-top:1pt solid windowtext;border-left:
                        1pt solid windowtext;border-bottom:none;border-right:solid windowtext 1.0pt;
                        padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">Department: QC</span>
                                    style="font-family:&quot;Arial&quot;,sans-serif" v-text="tableData.createUser"></span></p>
                        </td>
                        <td width="82" colspan="4" style="width:61.35pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;
                        border-bottom:none;border-right:solid windowtext 1.0pt;
                        padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span
                                    style="font-family:宋体">日</span><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif">&nbsp;
                                </span><span style="font-family:宋体">期</span></p>
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif">Date</span></p>
                        </td>
                        <td width="80" colspan="3" style="width:60.2pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;
                        border-bottom:none;border-right:solid windowtext 1.0pt;
                        padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif" v-text="tableData.creatTime.split(' ')[0]"></span></p>
                        </td>
                        <td width="83" dis colspan="3" style="width:62.25pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:none;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center">
                                <span style="font-family:宋体">审</span>
                                <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif">&nbsp;</span>
                                <span style="font-family:宋体">æ ¸</span>
                            </p>
                            <p class="MsoNormal" align="center" style="text-align:center">
                                <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif">Audit</span>
                            </p>
                        </td>
                        <td width="117" colspan="2" style="width:88.1pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:none;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center">
                                <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif">&nbsp;</span>
                            </p>
                        </td>
                    </tr>
                </tbody>
                    <tr height="0">
                        <td width="85" style="border:none"></td>
                        <td width="16" style="border:none"></td>
                        <td width="44" style="border:none"></td>
                        <td width="59" style="border:none"></td>
                        <td width="23" style="border:none"></td>
                        <td width="19" style="border:none"></td>
                        <td width="18" style="border:none"></td>
                        <td width="27" style="border:none"></td>
                        <td width="43" style="border:none"></td>
                        <td width="6" style="border:none"></td>
                        <td width="6" style="border:none"></td>
                        <td width="32" style="border:none"></td>
                        <td width="43" style="border:none"></td>
                        <td width="6" style="border:none"></td>
                        <td width="40" style="border:none"></td>
                        <td width="32" style="border:none"></td>
                        <td width="11" style="border:none"></td>
                        <td width="43" style="border:none"></td>
                        <td width="74" style="border:none"></td>
                    </tr>
            </table>
        </div>
        <p class="MsoNormal" align="center" style="margin-top:7.8pt;margin-bottom:3pt;text-align:center">
            <span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
            <span style="font-size:10.0pt;font-family:宋体">检验记录表</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">-</span>
            <span style="font-size:10.0pt;font-family:宋体">机加工件</span><span style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif"> </span><span style="font-size:10.0pt;font-family:宋体">(</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">Inpection Record-machining </span>
            <span style="font-size:10.0pt;font-family:宋体">)</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
            <span style="font-size:10.0pt;font-family:宋体">页码(</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif"> Page No.</span><span style="font-size:10.0pt;font-family:宋体">):</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Arial&quot;,sans-serif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
        </p>
        <div align="center">
            <table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" width="628"
                style="width:620pt;border-collapse:collapse;border:1pt solid windowtext">
                <tbody>
                    <tr>
                        <td width="121" colspan="2" style="width:120pt;height:50pt;border:solid windowtext 1.0pt;padding:1pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span
                                    style="font-size:9.0pt;font-family:宋体">零件名称</span></p>
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Part Description</span>
                            </p>
                        </td>
                        <td width="127" colspan="5" style="width:95.5pt;border:solid windowtext 1.0pt;border-left:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center">
                                <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif" v-text="tableData.name"></span>
                            </p>
                        </td>
                        <td width="113" colspan="3" style="width:84.95pt;border:solid windowtext 1.0pt;border-left:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span
                                    style="font-size:9.0pt;font-family:宋体">型</span><span lang="EN-US"
                                    style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">&nbsp;&nbsp;&nbsp;
                                </span><span style="font-size:9.0pt;font-family:宋体">号</span></p>
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Model</span></p>
                        </td>
                        <td width="86" colspan="4" style="width:64.65pt;border:solid windowtext 1.0pt;border-left:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif" v-text="tableData.specs"></span></p>
                        </td>
                        <td width="72" colspan="2" style="width:54.35pt;border:solid windowtext 1.0pt;border-left:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span
                                    style="font-size:9.0pt;font-family:宋体">加工单号</span></p>
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Order No.</span></p>
                        </td>
                        <td width="128" colspan="3" style="width:96.0pt;border:solid windowtext 1.0pt;border-left:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif" v-text="tableData.rmessage.split(',')[0]"></span></p>
                        </td>
                    </tr>
                    <tr>
                        <td width="101" colspan="2" style="width:110pt;height:50pt;border:solid windowtext 1.0pt;border-top:1pt solid windowtext;padding:0.2cm 1.4pt 0.2cm 1.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span
                                    style="font-size:9.0pt;font-family:宋体">检验仪器</span></p>
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Inspection
                                    instrument</span></p>
                        </td>
                        <td width="127" colspan="5" style="width:95.5pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif" v-text="deviceStr"></span></p>
                        </td>
                        <td width="113" colspan="3" style="width:84.95pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span
                                    style="font-size:9.0pt;font-family:宋体">检验数量</span></p>
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Quantity to
                                    check</span></p>
                        </td>
                        <td width="86" colspan="4" style="width:64.65pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif" v-text="tableData.number"></span></p>
                        </td>
                        <td width="72" colspan="2" style="width:54.35pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span
                                    style="font-size:9.0pt;font-family:宋体">供货单位</span></p>
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Supplier</span></p>
                        </td>
                        <td width="128" colspan="3" style="width:96.0pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif" v-text="tableData.supplier"></span></p>
                        </td>
                    </tr>
                    <tr>
                        <td width="145" colspan="3" style="width:109.1pt;border:solid windowtext 1.0pt;border-top:1pt solid windowtext;padding:0.2cm 0.4pt 0.2cm 0.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span
                                    style="font-size:9.0pt;font-family:宋体">检验项目</span></p>
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Inspection Item</span>
                            </p>
                        </td>
                        <td width="408" colspan="15" style="width:306.35pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span
                                    style="font-size:9.0pt;font-family:宋体">检验结果(实测值)</span></p>
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Test result (Measured
                                    value)</span></p>
                        </td>
                        <td width="74" rowspan="2" style="width:55.8pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 3.4pt 0.2cm 3.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span
                                    style="font-size:9.0pt;font-family:宋体">判定</span></p>
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Conclusion</span></p>
                        </td>
                    </tr>
                    <tr>
                        <td width="145" colspan="3" style="width:109.1pt;height:40pt;border:solid windowtext 1.0pt;border-top:1pt solid windowtext;padding:0.4cm 5.4pt 0.4cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span
                                    style="font-size:9.0pt;font-family:宋体">技术要求</span></p>
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">Technical
                                    Requirement</span></p>
                        </td>
                        <td width="59" colspan="3" style="width:44.4pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 4.4pt 0.2cm 4.4pt">
                            <div class="MsoNormal" align="center" style="text-align:center">
                                <span style="font-size:9.0pt;font-family:宋体">公差</span>
                                <p lang="EN-US" style="font-size:9.0pt;text-align: center;font-family:&quot;Arial&quot;,sans-serif">TOL</p>
                            </div>
                        </td>
                        <td width="43" v-for="(item,index) in columnLength" :key="index" colspan="1" style="width:32.2pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-size:9.0pt;font-family:&quot;Arial&quot;,sans-serif">{{item>9?item:'0'+item}}</span></p>
                        </td>
                    </tr>
                </tbody>
                <tbody v-for="(item,index) in projectList" :key="index">
                    <tr style="height:19.85pt">
                        <td width="85" :rowspan="item.children.length" style="width:63.95pt;border:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt;height:19.85pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span
                                    style="font-family:宋体" v-text="item.rpFather"></span></p>
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif"></span></p>
                        </td>
                        <td width="60" colspan="2" style="width:65.15pt;border:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt;height:19.85pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif" v-text="item.children[0].rpName"></span></p>
                        </td>
                        <td width="59" colspan="3" style="width:44.4pt;border:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt;height:19.85pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif"  v-text="item.children[0].required"></span></p>
                        </td>
                        <td width="43" v-for="(val,index) in item.children[0].testValueList" :key="index" colspan="1" style="width:32.2pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt;height:19.85pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif">{{val}}</span></p>
                        </td>
                        <td width="74" style="width:70pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0.1cm 2.4pt 0.1cm 2.4pt;height:19.85pt">
                            <p v-if="item.children[0].testState=='1'" class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif">合格</span></p>
                            <p v-if="item.children[0].testState=='0'" class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif">不合格</span></p>
                            <p v-else class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif"></span></p>
                        </td>
                    </tr>
                    <tr class="pageTr" style="height:19.85pt" v-for="(j,index) in (item.children.slice(1))" :key="index">
                        <td width="60" colspan="2" style="width:45.15pt;border:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt;height:19.85pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif">{{j.rpName}}</span></p>
                        </td>
                        <td width="59" colspan="3" style="width:44.4pt;border:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt;height:19.85pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif">{{j.required}}</span></p>
                        </td>
                        <td width="59" v-for="(testValue,index) in j.testValueList" :key="index" style="width:44.4pt;border:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt;height:19.85pt">
                            <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                    style="font-family:&quot;Arial&quot;,sans-serif">{{testValue}}</span></p>
                        </td>
                        <td width="43" colspan="1" style="width:70pt;border:1pt solid windowtext;padding:0.1cm 2.4pt 0.1cm 2.4pt;height:19.85pt">
                            <p class="MsoNormal" align="center" style="text-align:center">
                                <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif">
                                    {{ j.testState | formatState}}
                                </span>
                            </p>
                        </td>
                    </tr>
                </tbody>
                    <!-- bottom -->
                <tr style="height:40.95pt" class="pageTr">
                    <td width="145" colspan="3" style="width:109.1pt;border:solid windowtext 1.0pt;
  border-top:1pt solid windowtext;padding:0cm 5.4pt 0cm 5.4pt;height:40.95pt">
                        <p class="MsoNormal" align="center" style="text-align:center"><span
                                style="font-family:宋体">备</span><span lang="EN-US"
                                style="font-family:&quot;Arial&quot;,sans-serif">&nbsp;
                            </span><span style="font-family:宋体">注</span></p>
                        <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                style="font-family:&quot;Arial&quot;,sans-serif">Remark</span></p>
                    </td>
                    <td width="483" colspan="16" style="width:362.15pt;border-top:1pt solid windowtext;border-left:
  1pt solid windowtext;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  padding:0.2cm 5.4pt 0.2cm 5.4pt;height:40.95pt">
                        <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                style="font-family:&quot;Arial&quot;,sans-serif">&nbsp;</span></p>
                    </td>
                </tr>
                <tr>
                    <td width="145" colspan="3" style="width:109.1pt;border:none;
  border-top:1pt solid windowtext;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                        <p class="MsoNormal" align="center" style="text-align:center"><span
                                style="font-family:宋体">检验员</span></p>
                        <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                style="font-family:&quot;Arial&quot;,sans-serif">Inspector</span></p>
                    </td>
                    <td width="120" colspan="4" style="width:90.25pt;border-top:1pt solid windowtext;border-left:
  1pt solid windowtext;border-bottom:none;border-right:solid windowtext 1.0pt;
  padding:0.2cm 5.4pt 0.2cm 5.4pt">
                        <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                style="font-family:&quot;Arial&quot;,sans-serif" v-text="tableData.createUser"></span></p>
                    </td>
                    <td width="82" colspan="4" style="width:61.35pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;
  border-bottom:none;border-right:solid windowtext 1.0pt;
  padding:0.2cm 5.4pt 0.2cm 5.4pt">
                        <p class="MsoNormal" align="center" style="text-align:center"><span
                                style="font-family:宋体">日</span><span lang="EN-US"
                                style="font-family:&quot;Arial&quot;,sans-serif">&nbsp;
                            </span><span style="font-family:宋体">期</span></p>
                        <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                style="font-family:&quot;Arial&quot;,sans-serif">Date</span></p>
                    </td>
                    <td width="80" colspan="3" style="width:60.2pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;
  border-bottom:none;border-right:solid windowtext 1.0pt;
  padding:0.2cm 5.4pt 0.2cm 5.4pt">
                        <p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US"
                                style="font-family:&quot;Arial&quot;,sans-serif" v-text="tableData.creatTime.split(' ')[0]"></span></p>
                    </td>
                    <td width="83" colspan="3" style="width:62.25pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:none;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                        <p class="MsoNormal" align="center" style="text-align:center">
                            <span style="font-family:宋体">审</span>
                            <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif">&nbsp;</span>
                            <span style="font-family:宋体">æ ¸</span>
                        </p>
                        <p class="MsoNormal" align="center" style="text-align:center">
                            <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif">Audit</span>
                        </p>
                    </td>
                    <td width="117" colspan="2" style="width:88.1pt;border-top:1pt solid windowtext;border-left:1pt solid windowtext;border-bottom:none;border-right:solid windowtext 1.0pt;padding:0.2cm 5.4pt 0.2cm 5.4pt">
                        <p class="MsoNormal" align="center" style="text-align:center">
                            <span lang="EN-US" style="font-family:&quot;Arial&quot;,sans-serif">&nbsp;</span>
                        </p>
                    </td>
                </tr>
                <tr height="0">
                    <td width="85" style="border:none"></td>
                    <td width="16" style="border:none"></td>
                    <td width="44" style="border:none"></td>
                    <td width="59" style="border:none"></td>
                    <td width="23" style="border:none"></td>
                    <td width="19" style="border:none"></td>
                    <td width="18" style="border:none"></td>
                    <td width="27" style="border:none"></td>
                    <td width="43" style="border:none"></td>
                    <td width="6" style="border:none"></td>
                    <td width="6" style="border:none"></td>
                    <td width="32" style="border:none"></td>
                    <td width="43" style="border:none"></td>
                    <td width="6" style="border:none"></td>
                    <td width="40" style="border:none"></td>
                    <td width="32" style="border:none"></td>
                    <td width="11" style="border:none"></td>
                    <td width="43" style="border:none"></td>
                    <td width="74" style="border:none"></td>
                </tr>
        </table>
    </div>
    <p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
        <p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
        </div>
    </div>
</div>
</template>
@@ -335,13 +343,26 @@
            }
        }
    },
    created(){
        this.tableData = this.formData
        this.initData()
    },
    watch:{
        formData(newVal){
            if(newVal){
                this.projectList = []
                this.tableData = newVal
                this.initData()
            }
        }
    },
    data(){
        return{
            tableData: null,
            projectList: [],
            deviceStr: null,
            childrenData: [],
            columnLength: 12,
            columnLength: 8,
        }
    },
    filters:{
@@ -356,26 +377,82 @@
                return null
            }
            return null
        },
        formateNum(val){
            if(val!=null && val < 10){
                return '0'+val
            }
            return val
        }
    },
    methods:{
        initData(){
            let deviceNameList = []
            let maxLen = 0
            let pageSize = 0
            if(this.tableData.children){
                this.tableData.children.forEach(e => {
                    this.projectList.push(e)
                    if(e.children){
                        e.children.forEach(o =>{
                            if(o.testValue){
                               let testValList = o.testValue.split(",")
                                if( testValList.length > maxLen){
                                    maxLen = testValList.length
                                }
                            }
                            if(o.deviceName){
                                deviceNameList.push(o.deviceName)
                            }
                        })
                    }
                });
                })
                pageSize = Math.ceil(Number(maxLen)/Number(this.columnLength))
                this.tableData.children.forEach(ele=>{
                    if(ele.children){
                        ele.children.forEach(obj =>{
                            let testValList = []
                            if(obj.testValue){
                                testValList = obj.testValue.split(",")
                            }
                            let size = (this.columnLength*pageSize) - (testValList.length)
                            obj.testValList = testValList
                            for(var i=0;i<size;i++){
                                obj.testValList.push('')
                            }
                        })
                    }
                })
            }
            this.pageDataFun(pageSize,this.tableData)
            this.deviceStr = Array.from(new Set(deviceNameList)).join(",")
        },
        initProjectList(list){
        //获取每页的检验项目
        pageDataFun(pageSize,data){
            let tabData = []
            if(pageSize>0 && data){
                for(var i=0;i<pageSize;i++){
                    let obj = JSON.parse(JSON.stringify(data))
                    if(obj.children){
                        obj.children.forEach(o=>{
                            if(o.children){
                                o.children.forEach(e=>{
                                    if(e.testValList){
                                        let colLen = this.columnLength
                                        let start = colLen*i
                                        let end = ((1+i)*colLen)
                                        e.testValList = e.testValList.slice(start,end)
                                        tabData.push(obj)
                                    }
                                })
                            }
                        })
                        this.initRow(obj.children)
                    }
                }
            }
            this.projectList = tabData
        },
        initRow(list){
            const data = {
                            deviceId: '',
                            deviceName: '',
@@ -384,27 +461,13 @@
                            rpUnit: '',
                            testState: null,
                            userName: '',
                            testValueList: new Array(this.columnLength)
                            testValList: new Array(this.columnLength)
                        }
            let rowNum = 15
            let columnNum = this.columnLength
            if(list && list.length<2){
                list.forEach(item=>{
                    if(item.children && item.children.length < rowNum){
                        rowNum-=item.children.length
                        for(let j=0;j<item.children.length;j++){
                            let arr = []
                            if(item.children[j].testValue){
                                arr = item.children[j].testValue.split(",")
                            }
                            item.children[j].testValueList = arr
                            if(item.children[0].testValueList.length< columnNum ){
                                let num = columnNum - item.children[j].testValueList.length
                                for(let i=0;i<num;i++){
                                    item.children[j].testValueList.push("")
                                }
                            }
                        }
                        for(let i=0;i< rowNum;i++){
                            item.children.push(data)
                        }
@@ -415,20 +478,6 @@
                list.forEach(item=>{
                    if(item.children){
                        size+=item.children.length
                        item.children.forEach(obj=>{
                            if(obj.testValue){
                                let testValueList = obj.testValue.split(",")
                                obj.testValueList = testValueList
                                if(testValueList.length < columnNum){
                                    let len = columnNum-testValueList.length
                                    for(var i=0;i<len;i++){
                                        obj.testValueList.push("")
                                    }
                                }
                            }else{
                                obj.testValueList = new Array(12)
                            }
                        })
                    }
                })
                if(size < rowNum){
@@ -438,24 +487,8 @@
                    }
                }
            }
            this.projectList = list
        }
        },
    },
    created(){
        this.tableData = this.formData
        this.initData()
        this.initProjectList(this.projectList)
    },
    watch:{
        formData(newVal){
            if(newVal){
                this.projectList = []
                this.tableData = newVal
                this.initData()
                this.initProjectList(this.projectList)
            }
        }
    }
}
</script>
@@ -493,6 +526,9 @@
.pageTr{
    page-break-inside: avoid;
}
.page{
    page-break-inside: avoid;
}
div.WordSection1{
    page : WordSection1;
}
src/views/quality/teststandard/index.vue
@@ -78,7 +78,7 @@
                align="center"
                width="50"
              />
              <el-table-column
              <!-- <el-table-column
                label="是否引用工艺参数"
                prop="isReference"
                align="center"
@@ -125,7 +125,7 @@
                <template slot-scope="scope">
                  <el-input v-model="scope.row.wireCore"></el-input>
                </template>
              </el-table-column>
              </el-table-column> -->
              <el-table-column label="参数编号" prop="code" align="center" />
              <el-table-column
                label="参数项"
@@ -188,8 +188,28 @@
                <template slot-scope="scope">
                  <el-input v-model="scope.row.parameterFormat"></el-input>
                </template>
              </el-table-column><el-table-column
                label="测试方法"
                prop="purpose"
                align="center"
                width="80"
              >
                <template slot-scope="scope">
                  <el-input v-model="scope.row.purpose"></el-input>
                </template>
              </el-table-column>
              <el-table-column
                label="测试目的"
                prop="method"
                align="center"
                width="80"
              >
                <template slot-scope="scope">
                  <el-input v-model="scope.row.method"></el-input>
                </template>
              </el-table-column>
              <!-- <el-table-column
                label="通道"
                prop="aisle"
                align="center"
@@ -208,7 +228,7 @@
                <template slot-scope="scope">
                  <el-input v-model="scope.row.position"></el-input>
                </template>
              </el-table-column>
              </el-table-column> -->
              <el-table-column label="单位" prop="unit" align="center" />
              <!--<el-table-column label="参数类型" prop="type" align="center" :formatter="getParam"/>-->
              <el-table-column label="操作" align="center">
@@ -220,13 +240,13 @@
                    v-if="editable"
                    >插入
                  </el-button>
                  <el-button
                  <!-- <el-button
                    type="text"
                    size="mini"
                    @click.stop="editTestStandardParam(scope.row)"
                    v-if="editable && scope.row.id != null"
                    >公式
                  </el-button>
                  </el-button> -->
                  <el-button
                    type="text"
                    size="mini"
src/views/quality/teststandard/standard-form.vue
@@ -155,6 +155,23 @@
    ZttMonacoEditor,
    operationDialog
  },
  watch:{
    visible(newVal){
      if(!newVal){
        this.dataForm = {
          id: 0,
          standardName: '',
          standardNo: '',
          remark: '',
          judgeFormula: '',
          inspectionType: null,
          operationId: null,
          operationNo: null,
          operationName: null,
        }
      }
    }
  },
  created() {
    this.funcs = funcForStandard()
    this.constants = constantForStandard()
@@ -197,11 +214,11 @@
        if (this.dataForm.id) {
          getTestStandard(this.dataForm.id).then((response) => {
            this.dataForm = response.data.data
            this.$refs.templateJudgmentCondition.setVal(
              this.dataForm.judgeFormula == null
                ? ''
                : this.dataForm.judgeFormula
            )
            // this.$refs.templateJudgmentCondition.setVal(
            //   this.dataForm.judgeFormula == null
            //     ? ''
            //     : this.dataForm.judgeFormula
            // )
          })
          this.params = []
          getTestStandardParams(
@@ -237,162 +254,163 @@
    // è¡¨å•提交
    dataFormSubmit() {
      this.isSubmit = true
      // æ ¡éªŒåˆ¤å®šå…¬å¼
      let judgeFormula = this.$refs.templateJudgmentCondition.getVal()
      // æ›¿æ¢å…¬å¼ä¸­çš„pi常量为3.14
      if (judgeFormula.length > 0) {
        const piExistIndex = judgeFormula.indexOf('pi')
        if (piExistIndex >= 0) {
          judgeFormula = judgeFormula.replace(/pi/g, '3.14')
        }
      }
      // æ›¿æ¢å…¬å¼ä¸­çš„passAll()函数为true
      if (judgeFormula.length > 0) {
        const piExistIndex = judgeFormula.indexOf('passAll()')
        if (piExistIndex >= 0) {
          judgeFormula = judgeFormula.replace(/passAll[(][)]/g, 'true')
        }
      }
      // å…ˆåˆ¤å®šå…¬å¼ä¸­å‡½æ•°æ ¼å¼æ˜¯å¦æ­£ç¡®ï¼Œå†ç”¨é»˜è®¤å€¼è®¡ç®—出函数值,替换进公式,最后将公式中剩余的参数进行默认值替换,利用js eval函数进行公式校验
      let flag = true
      let funcEl
      for (let j = 0; j < this.funcs.length; j++) {
        funcEl = this.funcs[j]
        // è®¡ç®—函数关键在公式中出现的次数
        const num = this.getNumCharInStr(judgeFormula, funcEl.name, 0)
        // for循环次数校验替换
        for (let k = 0; k < num; k++) {
          const existIndex = judgeFormula.indexOf(funcEl.name)
          if (existIndex >= 0) {
            // å‡½æ•°å…³é”®å­—在公式中存在
            const prefixStr = judgeFormula.substring(0, existIndex)
            const startToEndStr = judgeFormula.substring(
              existIndex + funcEl.name.length
            )
            if (startToEndStr.length > 0) {
              const paramStartIndex = startToEndStr.indexOf('(')
              const paramEndIndex = startToEndStr.indexOf(')')
              if (paramStartIndex === 0 && paramEndIndex > 0) {
                const suffixStr = startToEndStr.substring(paramEndIndex + 1)
                const paramStr = startToEndStr.substring(
                  paramStartIndex + 1,
                  paramEndIndex
                )
                if (paramStr.trim() !== '') {
                  const paramArr = paramStr.split(',')
                  if (paramArr.length > 0) {
                    if (
                      (funcEl.singleParam && paramArr.length === 1) ||
                      !funcEl.singleParam
                    ) {
                      let paramFlag = true
                      for (let i = 0; i < paramArr.length; i++) {
                        const param = this.params.find(
                          (item) =>
                            paramArr[i].trim() === 'V[' + item.code + ']'
                        )
                        if (param !== undefined) {
                        } else {
                          flag = false
                          paramFlag = false
                          this.$message.error('函数参数不存在')
                        }
                      }
                      if (paramFlag) {
                        if (funcEl.returnType === 'number') {
                          judgeFormula = prefixStr + '1' + suffixStr
                        } else {
                          judgeFormula = prefixStr + 'true' + suffixStr
                        }
                      } else {
                        break
                      }
                    } else {
                      flag = false
                      this.$message.error('函数参数个数不正确')
                      break
                    }
                  } else {
                    break
                  }
                } else {
                  flag = false
                  this.$message.error('函数必须要有参数')
                  break
                }
              } else {
                flag = false
                this.$message.error(
                  '函数需包含左右小括号,且左侧小括号需紧邻函数'
                )
                break
              }
            } else {
              flag = false
              this.$message.error('函数需包含左右小括号')
              break
            }
          }
        }
      }
      if (flag) {
        // å°†å…¬å¼ä¸­å‰©ä½™çš„参数进行默认值替换
        let param
        for (let x = 0; x < this.params.length; x++) {
          param = this.params[x]
          // è®¡ç®—参数在公式中出现的次数
          const num = this.getNumCharInStr(
            judgeFormula,
            'V[' + param.code + ']',
            0
          )
          // for循环次数校验替换
          for (let y = 0; y < num; y++) {
            const existIndex = judgeFormula.indexOf('V[' + param.code + ']')
            if (existIndex >= 0) {
              const prefixStr = judgeFormula.substring(0, existIndex)
              const suffixStr = judgeFormula.substring(
                existIndex + ('V[' + param.code + ']').length
              )
              judgeFormula = prefixStr + this.getRandom() + suffixStr
            }
          }
        }
        try {
          eval(judgeFormula)
        } catch (exception) {
          flag = false
        }
        if (flag) {
          this.dataForm.judgeFormula = this.$refs.templateJudgmentCondition.getVal()
          this.$refs.dataForm.validate((valid) => {
            if (valid) {
              if (this.dataForm.id) {
                putTestStandard(this.dataForm).then((data) => {
                  this.$message.success('修改成功')
                  this.visible = false
                  this.isSubmit = false
                  this.$emit('refreshDataList')
                })
              } else {
                addTestStandard(this.dataForm).then((data) => {
                  this.$message.success('添加成功')
                  this.visible = false
                  this.isSubmit = false
                  this.$emit('refreshDataList')
                })
              }
            } else {
      this.$refs.dataForm.validate((valid) => {
        if (valid) {
          if (this.dataForm.id) {
            putTestStandard(this.dataForm).then((data) => {
              this.$message.success('修改成功')
              this.visible = false
              this.isSubmit = false
            }
          })
              this.$emit('refreshDataList')
            })
          } else {
            addTestStandard(this.dataForm).then((data) => {
              this.$message.success('添加成功')
              this.visible = false
              this.isSubmit = false
              this.$emit('refreshDataList')
            })
          }
        } else {
          this.isSubmit = false
          this.$message.error('公式格式错误,请仔细检查')
        }
      } else {
        this.isSubmit = false
      }
      })
      // æ ¡éªŒåˆ¤å®šå…¬å¼
      // let judgeFormula = this.$refs.templateJudgmentCondition.getVal()
      // // æ›¿æ¢å…¬å¼ä¸­çš„pi常量为3.14
      // if (judgeFormula.length > 0) {
      //   const piExistIndex = judgeFormula.indexOf('pi')
      //   if (piExistIndex >= 0) {
      //     judgeFormula = judgeFormula.replace(/pi/g, '3.14')
      //   }
      // }
      // // æ›¿æ¢å…¬å¼ä¸­çš„passAll()函数为true
      // if (judgeFormula.length > 0) {
      //   const piExistIndex = judgeFormula.indexOf('passAll()')
      //   if (piExistIndex >= 0) {
      //     judgeFormula = judgeFormula.replace(/passAll[(][)]/g, 'true')
      //   }
      // }
      // // å…ˆåˆ¤å®šå…¬å¼ä¸­å‡½æ•°æ ¼å¼æ˜¯å¦æ­£ç¡®ï¼Œå†ç”¨é»˜è®¤å€¼è®¡ç®—出函数值,替换进公式,最后将公式中剩余的参数进行默认值替换,利用js eval函数进行公式校验
      // let flag = true
      // let funcEl
      // for (let j = 0; j < this.funcs.length; j++) {
      //   funcEl = this.funcs[j]
      //   // è®¡ç®—函数关键在公式中出现的次数
      //   const num = this.getNumCharInStr(judgeFormula, funcEl.name, 0)
      //   // for循环次数校验替换
      //   for (let k = 0; k < num; k++) {
      //     const existIndex = judgeFormula.indexOf(funcEl.name)
      //     if (existIndex >= 0) {
      //       // å‡½æ•°å…³é”®å­—在公式中存在
      //       const prefixStr = judgeFormula.substring(0, existIndex)
      //       const startToEndStr = judgeFormula.substring(
      //         existIndex + funcEl.name.length
      //       )
      //       if (startToEndStr.length > 0) {
      //         const paramStartIndex = startToEndStr.indexOf('(')
      //         const paramEndIndex = startToEndStr.indexOf(')')
      //         if (paramStartIndex === 0 && paramEndIndex > 0) {
      //           const suffixStr = startToEndStr.substring(paramEndIndex + 1)
      //           const paramStr = startToEndStr.substring(
      //             paramStartIndex + 1,
      //             paramEndIndex
      //           )
      //           if (paramStr.trim() !== '') {
      //             const paramArr = paramStr.split(',')
      //             if (paramArr.length > 0) {
      //               if (
      //                 (funcEl.singleParam && paramArr.length === 1) ||
      //                 !funcEl.singleParam
      //               ) {
      //                 let paramFlag = true
      //                 for (let i = 0; i < paramArr.length; i++) {
      //                   const param = this.params.find(
      //                     (item) =>
      //                       paramArr[i].trim() === 'V[' + item.code + ']'
      //                   )
      //                   if (param !== undefined) {
      //                   } else {
      //                     flag = false
      //                     paramFlag = false
      //                     this.$message.error('函数参数不存在')
      //                   }
      //                 }
      //                 if (paramFlag) {
      //                   if (funcEl.returnType === 'number') {
      //                     judgeFormula = prefixStr + '1' + suffixStr
      //                   } else {
      //                     judgeFormula = prefixStr + 'true' + suffixStr
      //                   }
      //                 } else {
      //                   break
      //                 }
      //               } else {
      //                 flag = false
      //                 this.$message.error('函数参数个数不正确')
      //                 break
      //               }
      //             } else {
      //               break
      //             }
      //           } else {
      //             flag = false
      //             this.$message.error('函数必须要有参数')
      //             break
      //           }
      //         } else {
      //           flag = false
      //           this.$message.error(
      //             '函数需包含左右小括号,且左侧小括号需紧邻函数'
      //           )
      //           break
      //         }
      //       } else {
      //         flag = false
      //         this.$message.error('函数需包含左右小括号')
      //         break
      //       }
      //     }
      //   }
      // }
      // if (flag) {
      //   // å°†å…¬å¼ä¸­å‰©ä½™çš„参数进行默认值替换
      //   let param
      //   for (let x = 0; x < this.params.length; x++) {
      //     param = this.params[x]
      //     // è®¡ç®—参数在公式中出现的次数
      //     const num = this.getNumCharInStr(
      //       judgeFormula,
      //       'V[' + param.code + ']',
      //       0
      //     )
      //     // for循环次数校验替换
      //     for (let y = 0; y < num; y++) {
      //       const existIndex = judgeFormula.indexOf('V[' + param.code + ']')
      //       if (existIndex >= 0) {
      //         const prefixStr = judgeFormula.substring(0, existIndex)
      //         const suffixStr = judgeFormula.substring(
      //           existIndex + ('V[' + param.code + ']').length
      //         )
      //         judgeFormula = prefixStr + this.getRandom() + suffixStr
      //       }
      //     }
      //   }
      //   try {
      //     eval(judgeFormula)
      //   } catch (exception) {
      //     flag = false
      //   }
      //   if (flag) {
      //     this.dataForm.judgeFormula = this.$refs.templateJudgmentCondition.getVal()
      //   } else {
      //     this.isSubmit = false
      //     this.$message.error('公式格式错误,请仔细检查')
      //   }
      // } else {
      //   this.isSubmit = false
      // }
    },
    openOperationDialog() {
      this.showOperate = true
src/views/technology/completeproductstructure/completeproductstructure-form.vue
@@ -75,32 +75,26 @@
                </el-input>
              </el-form-item>
              <el-form-item label="替代号" prop="alternativeNo">
              <!-- <el-form-item label="替代号" prop="alternativeNo">
                <el-input
                  v-model="treeForm.alternativeNo"
                  placeholder="替代号"
                  disabled
                >
                </el-input>
              </el-form-item>
              </el-form-item> -->
              <el-form-item label="替代描述" prop="alternativeDesc">
              <!-- <el-form-item label="替代描述" prop="alternativeDesc">
                <el-input
                  v-model="treeForm.alternativeDesc"
                  placeholder="替代描述"
                  disabled
                >
                </el-input>
              </el-form-item>
              </el-form-item> -->
              <el-form-item label="绝缘颜色">
                <el-input
                  v-model="treeForm.insulationColor"
                  placeholder="绝缘颜色"
                >
                </el-input>
              </el-form-item>
              <el-form-item label="护套颜色">
              <!--   -->
              <!-- <el-form-item label="护套颜色">
                <el-input v-model="treeForm.sheathColor" placeholder="护套颜色">
                </el-input>
              </el-form-item>
@@ -110,7 +104,7 @@
                  placeholder="特性1"
                >
                </el-input>
              </el-form-item>
              </el-form-item> -->
            </el-col>
          </el-row>
        </el-form>
@@ -134,7 +128,7 @@
            <el-table-column label="零件名称" prop="partName"></el-table-column>
            <el-table-column label="单位" prop="unit"></el-table-column>
            <el-table-column label="数量" prop="qpa"></el-table-column>
            <el-table-column label="盘数" prop="discNum"></el-table-column>
            <!-- <el-table-column label="盘数" prop="discNum"></el-table-column> -->
          </el-table>
          <!-- <el-table
            class="tree-select-table"
src/views/technology/completeproductstructure/index.vue
@@ -20,12 +20,13 @@
import {
  fetchList,
  delObj,
  addByStructure
  addByStructure,
} from '@/api/technology/completeproductstructure'
import ttable from '@/views/common/ztt-table.vue'
import { mapGetters } from 'vuex'
import { changeState } from '../../../api/technology/completeproductstructure'
import { remote } from '@/api/admin/dict'
export default {
  data() {
    return {
@@ -34,7 +35,7 @@
      uploadInfo: {
        // æ˜¯å¦å±•示上传EXCEL以及对应的url
        isShow: true,
        url: 'mes/bom/uploadExcel'
        url: 'mes/bom/uploadExcel',
      },
      prelang: 'completeProductStructure',
      options: {
@@ -49,7 +50,7 @@
        isRefresh: true, // æ˜¯å¦æ˜¾ç¤ºåˆ·æ–°æŒ‰é’®
        isShowHide: true, // æ˜¯å¦æ˜¾ç¤ºæ˜¾å½±æŒ‰é’®
        isSearch: false, // é«˜çº§æŸ¥è¯¢æŒ‰é’®
        defaultOrderBy: { column: 'id', direction: 'desc' }
        defaultOrderBy: { column: 'id', direction: 'desc' },
      },
      table: {
        total: 0,
@@ -67,7 +68,7 @@
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text',
            render: { fun: this.addOrUpdateHandle }
            render: { fun: this.addOrUpdateHandle },
          },
          // é›¶ä»¶åç§°
          {
@@ -77,7 +78,7 @@
            sort: true,
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
            searchInfoType: 'text',
          },
          // é›¶ä»¶å·
          {
@@ -87,7 +88,7 @@
            sort: true,
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
            searchInfoType: 'text',
          },
          // çŠ¶æ€
@@ -112,7 +113,7 @@
                formatVal = '已取消'
              }
              return formatVal
            }
            },
          },
          // ç±»åž‹
@@ -127,7 +128,7 @@
            formatter: this.formatBomTypeDbType,
            optList: () => {
              return this.bomTypeDbOptions
            }
            },
          },
          // ç‰ˆæœ¬å·
          {
@@ -137,61 +138,61 @@
            sort: true,
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
            searchInfoType: 'text',
          },
          // æ›¿ä»£å·
          {
            minWidth: '120',
            prop: 'alternativeNo',
            label: '替代号',
            sort: true,
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
          },
          // {
          //   minWidth: '120',
          //   prop: 'alternativeNo',
          //   label: '替代号',
          //   sort: true,
          //   isTrue: true,
          //   isSearch: true,
          //   searchInfoType: 'text',
          // },
          // æ›¿ä»£æè¿°
          {
            minWidth: '120',
            prop: 'alternativeDesc',
            label: '替代描述',
            sort: true,
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
          },
          // {
          //   minWidth: '120',
          //   prop: 'alternativeDesc',
          //   label: '替代描述',
          //   sort: true,
          //   isTrue: true,
          //   isSearch: true,
          //   searchInfoType: 'text',
          // },
          // ç»ç¼˜é¢œè‰²
          {
            minWidth: '120',
            prop: 'insulationColor',
            label: '绝缘颜色',
            sort: true,
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
          },
          // {
          //   minWidth: '120',
          //   prop: 'insulationColor',
          //   label: '绝缘颜色',
          //   sort: true,
          //   isTrue: true,
          //   isSearch: true,
          //   searchInfoType: 'text',
          // },
          // æŠ¤å¥—颜色
          {
            minWidth: '120',
            prop: 'sheathColor',
            label: '护套颜色',
            sort: true,
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
          },
          // {
          //   minWidth: '120',
          //   prop: 'sheathColor',
          //   label: '护套颜色',
          //   sort: true,
          //   isTrue: true,
          //   isSearch: true,
          //   searchInfoType: 'text',
          // },
          // ç‰¹æ€§1
          {
            minWidth: '120',
            prop: 'characteristicOne',
            label: '特性1',
            sort: true,
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
          },
          // {
          //   minWidth: '120',
          //   prop: 'characteristicOne',
          //   label: '特性1',
          //   sort: true,
          //   isTrue: true,
          //   isSearch: true,
          //   searchInfoType: 'text',
          // },
          // åˆ›å»ºäºº
          {
            minWidth: '120',
@@ -200,7 +201,7 @@
            sort: true,
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
            searchInfoType: 'text',
          },
          // åˆ›å»ºæ—¶é—´
          {
@@ -210,8 +211,8 @@
            sort: true,
            isTrue: true,
            isSearch: true,
            searchInfoType: 'datetimerange'
          }
            searchInfoType: 'datetimerange',
          },
        ],
        toolbar: [
          // {
@@ -226,7 +227,7 @@
            text: '产品结构生成BOM',
            fun: this.addByStructureHandle,
            disabled: false,
            permitArr: []
            permitArr: [],
          },
          {
            text: '批准',
@@ -234,7 +235,7 @@
              this.approveHandle('ACCEPT')
            },
            disabled: false,
            permitArr: ['01draft']
            permitArr: ['01draft'],
          },
          {
            text: '撤回',
@@ -242,7 +243,7 @@
              this.approveHandle('REVOKE')
            },
            disabled: false,
            permitArr: ['02accepted']
            permitArr: ['02accepted'],
          },
          {
            text: '拒绝',
@@ -250,7 +251,7 @@
              this.approveHandle('CANCEL')
            },
            disabled: false,
            permitArr: ['02accepted']
            permitArr: ['02accepted'],
          },
          {
            text: '删除',
@@ -258,46 +259,46 @@
              this.deleteAll()
            },
            disabled: false,
            permitArr: []
          }
            permitArr: [],
          },
        ],
        operator: [
          {
            text: '删除',
            type: 'text',
            size: 'small',
            fun: this.deleteHandle
          }
            fun: this.deleteHandle,
          },
        ],
        operatorConfig: {
          fixed: 'right',
          label: '操作',
          width: 100,
          minWidth: 100
        }
          minWidth: 100,
        },
      },
      stateOptionList: [
        {
          value: '01draft',
          label: '草稿'
          label: '草稿',
        },
        {
          value: '02accepted',
          label: '已接受'
          label: '已接受',
        },
        {
          value: '03cancelled',
          label: '已取消'
        }
          label: '已取消',
        },
      ],
      bomTypeDbOptions: []
      bomTypeDbOptions: [],
    }
  },
  components: {
    ttable
    ttable,
  },
  computed: {
    ...mapGetters(['permissions'])
    ...mapGetters(['permissions']),
  },
  activated() {
    this.getData()
@@ -334,16 +335,20 @@
    addOrUpdateHandle(row) {
      this.$router.push({
        name: 'completeProductStructure',
        params: { id: row == null ? null : row.id }
        params: { id: row == null ? null : row.id },
      })
    },
    // æŒ‰äº§å“ç»“构生成BOM
    addByStructureHandle() {
      addByStructure()
      this.$message({
        message: '已在后台生成BOM,请执行结束后刷新页面',
        type: 'success'
      addByStructure().then((res) => {
        let result = Array.from(new Set(res.data.data))
        this.$message.success(result.join(','))
        this.getData()
      })
      // this.$message({
      //   message: '已在后台生成BOM,请执行结束后刷新页面',
      //   type: 'success',
      // })
    },
    // åˆ é™¤
    deleteHandle(row) {
@@ -351,9 +356,9 @@
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
        closeOnClickModal: false
        closeOnClickModal: false,
      })
        .then(function() {
        .then(function () {
          const ids = []
          ids.push(row.id)
          return delObj(ids)
@@ -375,9 +380,9 @@
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning',
          closeOnClickModal: false
          closeOnClickModal: false,
        })
          .then(function() {
          .then(function () {
            const ids = that.multipleSelection.map((item) => {
              return item.id
            })
@@ -428,7 +433,7 @@
    handleSelectionChange(val) {
      // æ ¹æ®çŠ¶æ€ï¼Œç¦ç”¨è¡¨å¤´æŒ‰é’®
      // ç­›é€‰å‡ºé€‰ä¸­è®°å½•的状态
      var stateArr = val.map(function(value, index) {
      var stateArr = val.map(function (value, index) {
        return value.state
      })
      // é€‰ä¸­çŠ¶æ€æ•°ç»„å…ƒç´ åŽ»é‡
@@ -458,7 +463,7 @@
    },
    getStateOptionList() {
      return this.stateOptionList
    }
  }
    },
  },
}
</script>
src/views/technology/operation/index.vue
@@ -35,7 +35,7 @@
      multipleSelection: [],
      uploadInfo: {
        // æ˜¯å¦å±•示上传EXCEL以及对应的url
        isShow: true,
        isShow: false,
        url: '/mes/operation/excel/upload'
      },
      prelang: 'operation',
@@ -186,19 +186,19 @@
          //   isSearch: true,
          //   searchInfoType: 'text'
          // },
          {
            minWidth: '120',
            prop: 'outsideOpItem',
            label: '外部工序项目',
            sort: true,
            isTrue: true,
            isSearch: true,
            searchInfoType: 'select',
            formatter: this.formatOutsideOpItem,
            optList: () => {
              return this.outsideOpItemOptions
            }
          },
          // {
          //   minWidth: '120',
          //   prop: 'outsideOpItem',
          //   label: '外部工序项目',
          //   sort: true,
          //   isTrue: true,
          //   isSearch: true,
          //   searchInfoType: 'select',
          //   formatter: this.formatOutsideOpItem,
          //   optList: () => {
          //     return this.outsideOpItemOptions
          //   }
          // },
          // å¤‡æ³¨
          {
            minWidth: '120',
src/views/technology/operation/operation-form.vue
@@ -120,12 +120,12 @@
                  />
                </el-select>
              </el-form-item> -->
              <!-- <el-form-item label="班组人员" prop="crewSize">
              <el-form-item label="班组人员" prop="crewSize">
                <el-input
                  v-model="dataForm.crewSize"
                  placeholder="班组人员"
                ></el-input>
              </el-form-item> -->
              </el-form-item>
              <!-- <el-form-item label="外部工序项目" prop="outsideOpItem">
                <el-select
                  v-model="dataForm.outsideOpItem"
@@ -150,7 +150,7 @@
              </el-form-item>
            </el-col>
          </el-row>
          <el-row style="padding-top: 10px">
          <!-- <el-row style="padding-top: 10px">
            <el-col :span="24">
              <el-form-item label="配置项">
                <el-checkbox-group
@@ -182,7 +182,7 @@
                </el-checkbox-group>
              </el-form-item>
            </el-col>
          </el-row>
          </el-row> -->
        </el-form>
      </div>
src/views/technology/routing/edit-routing-operation.vue
@@ -35,7 +35,7 @@
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
        <!-- <el-col :span="12">
          <el-form-item label="因素单位" prop="runTimeCodeDb" :rules="disabled ?  [{required: false}] : dataRule.runTimeCodeDb">
            <el-select
              v-model="dataForm.runTimeCodeDb"
@@ -51,9 +51,9 @@
              />
            </el-select>
          </el-form-item>
        </el-col>
        </el-col> -->
      </el-row>
      <el-row>
      <!-- <el-row>
        <el-col :span="12">
          <el-form-item label="机器运转因素" prop="machRunFactor" :rules="disabled ?  [{required: false}] : dataRule.machRunFactor">
            <el-input
@@ -92,7 +92,7 @@
            ></el-input>
          </el-form-item>
        </el-col>
      </el-row>
      </el-row> -->
      <el-row>
        <el-col :span="12">
          <el-form-item label="人工类别" prop="laborClassNo">
@@ -124,7 +124,7 @@
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="12">
        <!-- <el-col :span="12">
          <el-form-item label="外部工序项目" prop="outsideOpItem">
            <el-select
              v-model="dataForm.outsideOpItem"
@@ -141,7 +141,7 @@
              />
            </el-select>
          </el-form-item>
        </el-col>
        </el-col> -->
        <el-col :span="12"> </el-col>
      </el-row>
    </el-form>
src/views/technology/routing/index.vue
@@ -196,7 +196,7 @@
            noShowTip: false
          },
          // æ˜¯å¦ä¸ºä¸»å·¥è‰º
          {
          /* {
            minWidth: '120',
            prop: 'master',
            label: '主工艺',
@@ -210,7 +210,7 @@
            formatter: (row, column, cellValue) => {
              return cellValue == true ? '是' : '否'
            }
          },
          }, */
          // çŠ¶æ€
          {
            minWidth: '120',
@@ -300,7 +300,7 @@
            searchInfoType: 'datetimerange'
          },
          // æ›¿ä»£
          {
          /* {
            minWidth: '120',
            prop: 'alternativeNo',
            label: '替代',
@@ -308,9 +308,9 @@
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
          },
          }, */
          // æ›¿ä»£æè¿°
          {
         /*  {
            minWidth: '120',
            prop: 'alternativeDesc',
            label: '替代描述',
@@ -318,7 +318,7 @@
            isTrue: true,
            isSearch: true,
            searchInfoType: 'text'
          },
          }, */
          // æ˜¯å¦å·²åŒæ­¥è‡³IFS
          // {
          //   minWidth: '120',
src/views/technology/routing/routing-form.vue
@@ -58,13 +58,13 @@
                  style="width: 280px"
                ></el-input>
              </el-form-item>
              <el-form-item prop="wireCore" label="线芯">
              <!-- <el-form-item prop="wireCore" label="线芯">
                <el-input
                  v-model="dataForm.wireCore"
                  placeholder="线芯"
                  style="width: 60px"
                ></el-input>
              </el-form-item>
              </el-form-item> -->
              <el-form-item label="BOM" prop="bomId">
                <el-select :disabled="dataForm.id != null" v-model="dataForm.bomId" placeholder="" filterable>
                  <el-option
@@ -133,9 +133,9 @@
                  >{{ dataForm.ifsSync ? '是' : '否' }}</span
                >
              </el-form-item> -->
              <el-form-item label="主工艺" prop="master">
              <!-- <el-form-item label="主工艺" prop="master">
                <el-switch v-model="dataForm.master"> </el-switch>
              </el-form-item>
              </el-form-item> -->
            </el-col>
          </el-row>
        </el-form>
@@ -277,13 +277,13 @@
                <span v-if="!editable">{{ scope.row.operationName }}</span>
              </template>
            </el-table-column>
            <el-table-column
            <!-- <el-table-column
              prop="outsideOpItem"
              label="外部工序项目"
              align="center"
              show-overflow-tooltip
            >
            </el-table-column>
            </el-table-column> -->
            <el-table-column
              prop="partName"
              label="零件"
@@ -310,7 +310,7 @@
                }}</span>
              </template>
            </el-table-column>
            <el-table-column
            <!-- <el-table-column
              prop="runTimeCodeDb"
              label="因素单位"
              align="center"
@@ -350,7 +350,7 @@
              label="劳力设置时间"
              align="center"
            >
            </el-table-column>
            </el-table-column> -->
            <el-table-column
              prop="laborClassNo"
              label="人工类别"
@@ -428,7 +428,7 @@
                </el-input>
              </div>
              <el-divider content-position="left">配置项</el-divider>
              <!-- <el-divider content-position="left">配置项</el-divider>
              <div class="node-content-config">
                <el-checkbox-group
@@ -462,7 +462,7 @@
                    >工单预留</el-checkbox-button
                  >
                </el-checkbox-group>
              </div>
              </div> -->
              <!-- <el-divider content-position="left">能力</el-divider>
              <div class="node-content">
src/views/technology/structure/index.vue
@@ -235,7 +235,7 @@
            }
          },
          // æ˜¯å¦ä¸ºé»˜è®¤ç»“æž„
          {
          /* {
            minWidth: '120',
            prop: 'master',
            label: '默认结构',
@@ -249,7 +249,7 @@
            formatter: (row, column, cellValue) => {
              return cellValue == true ? '是' : '否'
            }
          },
          }, */
          // æè¿°
          {
            minWidth: '120',
src/views/technology/structure/single-structure-form.vue
@@ -88,9 +88,9 @@
                  >{{ dataForm.ifsSync ? '是' : '否' }}</span
                >
              </el-form-item> -->
              <el-form-item label="默认结构" prop="master">
              <!-- <el-form-item label="默认结构" prop="master">
                <el-checkbox v-model="dataForm.master"></el-checkbox>
              </el-form-item>
              </el-form-item> -->
            </el-col>
          </el-row>
        </el-form>
@@ -196,7 +196,7 @@
            <el-table-column label="单位" prop="unit" align="center">
            </el-table-column>
            <el-table-column label="盘数(盘)" prop="discNum" align="center">
            <!-- <el-table-column label="盘数(盘)" prop="discNum" align="center">
              <template slot-scope="scope">
                <el-input
                  size="small"
@@ -208,7 +208,7 @@
                  scope.row.discNum
                }}</span>
              </template>
            </el-table-column>
            </el-table-column> -->
            <!-- <el-table-column label="图号" prop="drawingNumber" align="center">
            </el-table-column> -->
            <el-table-column align="center" label="操作" width="85px">
src/views/warehouse/pallettransports/detail-ifslocation-form.vue
@@ -23,7 +23,7 @@
      </div>
      <div style="display:flex;align-items:center;margin-left:10px;">
        <div>
          <span>库位描述:</span>
          <span>库位名称:</span>
        </div>
        <div>
          <el-input
@@ -56,25 +56,32 @@
        </template>
      </el-table-column>
      <el-table-column type="index" width="50" label="序号"> </el-table-column>
      <el-table-column prop="locationNo" label="库位号" align="center">
      <el-table-column prop="locNo" label="库位号" align="center">
      </el-table-column>
      <el-table-column
        prop="locationDesc"
        label="库位描述"
        prop="locName"
        label="库位名称"
        align="center"
        show-overflow-tooltip
      >
      </el-table-column>
      <el-table-column
        prop="locationGroupDesc"
        label="库位组描述"
        prop="locType"
        label="库位类型"
        align="center"
        show-overflow-tooltip
      >
      </el-table-column>
      <el-table-column
        prop="locationTypeDesc"
        label="库位类型描述"
        prop="ifsLocation"
        label="ifs库位"
        align="center"
        show-overflow-tooltip
      >
      </el-table-column>
      <el-table-column
        prop="ifsLocationGroup"
        label="ifs库位组"
        align="center"
        show-overflow-tooltip
      >
@@ -92,7 +99,7 @@
  </el-dialog>
</template>
<script>
import { getIfsLocationByGroup } from '@/api/warehouse/location'
import { getIfsLocationByGroupCopyAll } from '@/api/warehouse/location'
import { updateBatchPalletTransportsDetail } from '@/api/warehouse/pallettransports'
export default {
  components: {},
@@ -124,19 +131,20 @@
    // æŸ¥è¯¢ifs库位列表
    queryLocation() {
      this.ifsLocationData = []
      getIfsLocationByGroup({
      getIfsLocationByGroupCopyAll({
        locationNo: this.dataForm.locationNo,
        locationDesc: this.dataForm.locationDesc
      }).then((response) => {
        if (response.data.code === 0) {
        if (response.data.code == 0) {
          const _data = response.data.data
          this.ifsLocationData = _data.map((item, index) => {
            return {
              id: index + 1,
              locationNo: item.LOCATION_NO,
              locationDesc: item.LOCATION_DESC,
              locationGroupDesc: item.LOCATION_GROUP_DESC,
              locationTypeDesc: item.LOCATION_TYPE_DESC,
              locNo: item.locNo,
              locName: item.locName,
              locType: item.locType,
              ifsLocation: item.ifsLocation,
              ifsLocationGroup: item.ifsLocationGroup,
              commonChecked: false
            }
          })
@@ -168,8 +176,8 @@
      this.detailList.forEach((item) => {
        transportsDetails.push({
          id: item.id,
          toIfsLocationName: this.currLocationRow.locationDesc,
          toIfsLocationNo: this.currLocationRow.locationNo
          toIfsLocationName: this.currLocationRow.locName,
          toIfsLocationNo: this.currLocationRow.locNo
        })
      })
      updateBatchPalletTransportsDetail(transportsDetails)
src/views/warehouse/pallettransports/ifslocation-form.vue
@@ -23,7 +23,7 @@
      </div>
      <div style="display:flex;align-items:center;margin-left:10px;">
        <div>
          <span>库位描述:</span>
          <span>库位名称:</span>
        </div>
        <div>
          <el-input
@@ -56,29 +56,39 @@
        </template>
      </el-table-column>
      <el-table-column type="index" width="50" label="序号"> </el-table-column>
      <el-table-column prop="locationNo" label="库位号" align="center">
      <el-table-column prop="locNo" label="库位号" align="center">
      </el-table-column>
      <el-table-column
        prop="locationDesc"
        label="库位描述"
        prop="locName"
        label="库位名称"
        align="center"
        show-overflow-tooltip
      >
      </el-table-column>
      <el-table-column
        prop="locationGroupDesc"
        label="库位组描述"
        prop="locType"
        label="库位类型"
        align="center"
        show-overflow-tooltip
      >
      <template scope="scope">
        {{formatLocType(scope.row.locType)}}
      </template>
      </el-table-column>
     <!--  <el-table-column
        prop="ifsLocation"
        label="ifs库位"
        align="center"
        show-overflow-tooltip
      >
      </el-table-column>
      <el-table-column
        prop="locationTypeDesc"
        label="库位类型描述"
        prop="ifsLocationGroup"
        label="ifs库位组"
        align="center"
        show-overflow-tooltip
      >
      </el-table-column>
      </el-table-column> -->
    </el-table>
    <div slot="footer" class="dialog-footer">
      <el-button @click="innerVisible = false">取 æ¶ˆ</el-button>
@@ -92,10 +102,12 @@
  </el-dialog>
</template>
<script>
import { getIfsLocationByGroup } from '@/api/warehouse/location'
import { getIfsLocationByGroupCopyAll } from '@/api/warehouse/location'
import { updateBatchPalletTransportsMaterial } from '@/api/warehouse/pallettransports'
import Template from '../../quality/parts/template.vue'
import { remote } from '../../../api/admin/dict'
export default {
  components: {},
  components: {Template},
  props: {
    currshowlist: {
      type: Boolean,
@@ -108,39 +120,66 @@
      }
    }
  },
  filters:{
  },
  data() {
    return {
      innerVisible: false,
      locTypeOption: [],
      isSubmit: false,
      dataForm: {
        locationNo: null,
        locationDesc: null
        locationNo: '',
        locationDesc: ''
      },
      ifsLocationData: [],
      currLocationRow: null
    }
  },
  created() {
    this.getLoc()
  },
  methods: {
    formatLocType(val){
      let list = this.locTypeOption
      let index = list.findIndex(ele=>{
        return ele.value == val
      })
      if(index!=null){
        return list[index].label
      }
      return null
    },
    // æŸ¥è¯¢ifs库位列表
    queryLocation() {
      this.ifsLocationData = []
      getIfsLocationByGroup({
      getIfsLocationByGroupCopyAll({
        locationNo: this.dataForm.locationNo,
        locationDesc: this.dataForm.locationDesc
      }).then((response) => {
        if (response.data.code === 0) {
        if (response.data.code == 0) {
          const _data = response.data.data
          this.ifsLocationData = _data.map((item, index) => {
            return {
              id: index + 1,
              locationNo: item.LOCATION_NO,
              locationDesc: item.LOCATION_DESC,
              locationGroupDesc: item.LOCATION_GROUP_DESC,
              locationTypeDesc: item.LOCATION_TYPE_DESC,
              locNo: item.locNo,
              locName: item.locName,
              locType: item.locType,
              ifsLocation: item.ifsLocation,
              ifsLocationGroup: item.ifsLocationGroup,
              commonChecked: false
            }
          })
        }
      })
    },
    // èŽ·å–åº“ä½ç±»åž‹çš„æ•°æ®å­—å…¸
    getLoc() {
      remote('warehouse_type').then((response) => {
        if (response.data.code === 0) {
          this.locTypeOption = response.data.data
        }
        console.log(response);
      })
    },
    // å•行选中
@@ -165,11 +204,12 @@
    saveSelectRow() {
      this.isSubmit = true
      const transportsMaterials = []
      console.log(`output->this.transportsList`,this.transportsList)
      this.transportsList.forEach((item) => {
        transportsMaterials.push({
          id: item.id,
          toIfsLocationName: this.currLocationRow.locationDesc,
          toIfsLocationNo: this.currLocationRow.locationNo
          toIfsLocationName: this.currLocationRow.locName,
          toIfsLocationNo: this.currLocationRow.locNo
        })
      })
      updateBatchPalletTransportsMaterial(transportsMaterials)
src/views/warehouse/pallettransports/ifsstock-form.vue
@@ -1,93 +1,34 @@
<template>
  <el-dialog
    width="65%"
    title="IFS库存物料"
    top="5vh"
    :visible.sync="innerVisible"
    append-to-body
    @close="$emit('update:currshowlist', false)"
    :show="currshowlist"
    class="part-dialog"
  >
  <el-dialog width="65%" title="IFS库存物料" top="5vh" :visible.sync="innerVisible" append-to-body
    @close="$emit('update:currshowlist', false)" :show="currshowlist" class="part-dialog">
    <div>
      <span>需求数量:</span
      ><span style="color:Red;">{{
      <span>需求数量:</span><span style="color:Red;">{{
        materialRow == null
          ? ''
          : materialRow.surplusQuantity - totalPlanMoveQuality
        ? ''
        : materialRow.surplusQuantity - totalPlanMoveQuality
      }}</span>
    </div>
    <el-table
      class="ifs-stock-table"
      :data="ifsStockData"
      style="width: 100%;"
      height="450px"
      border
      @selection-change="ifsStockSelectionChange"
      stripe
      ref="ifsStockTable"
    >
    <el-table class="ifs-stock-table" :data="ifsStockData" style="width: 100%;" height="450px" border
      @selection-change="ifsStockSelectionChange" stripe ref="ifsStockTables">
      <el-table-column type="selection" width="55"> </el-table-column>
      <el-table-column type="index" width="50" label="序号"> </el-table-column>
      <el-table-column
        prop="partNo"
        label="零件号"
        align="center"
        show-overflow-tooltip
      >
      <el-table-column prop="partNo" label="零件号" align="center" show-overflow-tooltip>
      </el-table-column>
      <el-table-column
        prop="partDesc"
        label="零件描述"
        align="center"
        show-overflow-tooltip
      >
      <el-table-column prop="partDesc" label="零件描述" align="center" show-overflow-tooltip>
      </el-table-column>
      <el-table-column
        prop="locationDesc"
        label="库位"
        align="center"
        show-overflow-tooltip
      >
      <el-table-column prop="locationDesc" label="库位" align="center" show-overflow-tooltip>
      </el-table-column>
      <el-table-column
        prop="batchNo"
        label="批次号"
        align="center"
        show-overflow-tooltip
      >
      <el-table-column prop="batchNo" label="批次号" align="center" show-overflow-tooltip>
      </el-table-column>
      <el-table-column
        prop="wdr"
        label="WDR"
        align="center"
        show-overflow-tooltip
      >
      <el-table-column prop="wdr" label="WDR" align="center" show-overflow-tooltip>
      </el-table-column>
      <el-table-column
        prop="optaskNo"
        label="工单"
        align="center"
        show-overflow-tooltip
      >
      <el-table-column prop="optaskNo" label="工单" align="center" show-overflow-tooltip>
      </el-table-column>
      <el-table-column
        prop="available"
        label="可用库存数量"
        align="center"
        show-overflow-tooltip
      >
      <el-table-column prop="available" label="可用库存数量" align="center" show-overflow-tooltip>
      </el-table-column>
      <el-table-column
        prop="planMoveQuality"
        label="计划移库数量"
        align="center"
      >
      <el-table-column prop="planMoveQuality" label="计划移库数量" align="center">
        <template slot-scope="scope">
          <el-input
            v-model="scope.row.planMoveQuality"
            @blur="blurChangeCallback(scope.row)"
          ></el-input>
          <el-input v-model="scope.row.planMoveQuality" @blur="blurChangeCallback(scope.row)"></el-input>
        </template>
      </el-table-column>
      <el-table-column prop="unit" label="单位" align="center">
@@ -97,12 +38,7 @@
    </el-table>
    <div slot="footer" class="dialog-footer">
      <el-button @click="innerVisible = false">取 æ¶ˆ</el-button>
      <el-button
        type="primary"
        :disabled="isSubmit"
        v-thinclick="`saveSelectRow`"
        >ç¡® å®š</el-button
      >
      <el-button type="primary" v-thinclick="`saveSelectRow`">ç¡® å®š</el-button>
    </div>
  </el-dialog>
</template>
@@ -177,18 +113,18 @@
                flagMsg =
                  flagMsg + '第' + (i + 1) + '行,计划移库数量最多六位小数;'
              } else {
                console.log(
                  'this.ifsStockData[i].planMoveQuality',
                  this.ifsStockData[i].planMoveQuality
                )
                console.log(
                  'this.ifsStockData[i].available',
                  this.ifsStockData[i].available
                )
                console.log(
                  this.ifsStockData[i].planMoveQuality >
                    this.ifsStockData[i].available
                )
                // console.log(
                //   'this.ifsStockData[i].planMoveQuality',
                //   this.ifsStockData[i].planMoveQuality
                // )
                // console.log(
                //   'this.ifsStockData[i].available',
                //   this.ifsStockData[i].available
                // )
                // console.log(
                //   this.ifsStockData[i].planMoveQuality >
                //   this.ifsStockData[i].available
                // )
                if (
                  this.ifsStockData[i].planMoveQuality >
                  this.ifsStockData[i].available
@@ -262,9 +198,16 @@
            partDesc: item.partDesc,
            batchNo: item.batchNo,
            wdr: item.wdr,
            serialNo: item.serialNo,
            engChgLevel: item.engChgLevel,
            configurationId: item.configurationId,
            activitySeq: item.activitySeq,
            transferQuantity: item.planMoveQuality,
            fromIfsLocationNo: item.locationNo,
            transportsMaterialId: this.materialRow.id,
            toIfsLocationNo: this.materialRow.toIfsLocationNo,
            toIfsLocationName: this.materialRow.toIfsLocationName,
            partId: this.materialRow.partId,
            transportsId: this.transportsRow.id,
            operationTaskId: item.optaskId,
            operationTaskNo: item.optaskNo,
@@ -282,10 +225,10 @@
              } else {
                this.$message.error('添加移库明细失败')
              }
              this.isSubmit = false
              this.isSubmit = true
            })
            .catch(() => {
              this.isSubmit = false
              this.isSubmit = true
            })
        } else {
          this.$message.error('请选择IFS库存物料')
@@ -295,7 +238,7 @@
        this.isSubmit = false
      }
    },
    initData() {}
    initData() { }
  },
  watch: {
    currshowlist() {
@@ -318,14 +261,18 @@
                    id: index + 1,
                    partNo: item.PART_NO,
                    partDesc: item.PART_DESC,
                    locationDesc: item.LOCATION_DESC,
                    locationDesc: item.LOCATION_NO,
                    locationNo: item.LOCATION_NO,
                    batchNo: item.LOT_BATCH_NO,
                    wdr: item.WAIV_DEV_REJ_NO,
                    available: Number(item.QTY_AVAILABLE),
                    unit: item.UNIT_MEAS_DESC,
                    engChgLevel: item.ENG_CHG_LEVEL,
                    serialNo: item.SERIAL_NO,
                    configurationId: item.CONFIGURATION_ID,
                    activitySeq: item.ACTIVITY_SEQ,
                    planMoveQuality: Number(item.QTY_AVAILABLE),
                    partId: this.materialRow.partId,
                    optaskNo: this.optask != null ? this.optask.optaskNo : null,
                    optaskId: this.optask != null ? this.optask.id : null
                  })
@@ -333,6 +280,7 @@
              }
            }
          })
          console.log(`output->this.ifsStockData`,this.ifsStockData)
        })
      }
    }
@@ -343,9 +291,11 @@
.part-dialog .el-dialog__header {
  padding: 10px 20px 10px;
}
.part-dialog .el-dialog__header .el-dialog__headerbtn {
  top: 10px;
}
.part-dialog .el-dialog__body {
  padding: 5px 20px;
}
src/views/warehouse/pallettransports/index.vue
@@ -3,321 +3,149 @@
    <basic-container>
      <el-row>
        <el-col :span="9">
          <ttable
            :table="table"
            @currentChange="palletTransportsChange"
            :uploadInfo="uploadInfo"
            :prelang="prelang"
            :options="options"
            :ajaxFun="ajaxFun"
            :fixedHeight="palletTransportsFixedHeight"
            ref="pallettransportsTable"
          >
          <ttable :table="table" @currentChange="palletTransportsChange" :uploadInfo="uploadInfo" :prelang="prelang"
            :options="options" :ajaxFun="ajaxFun" :fixedHeight="palletTransportsFixedHeight" ref="pallettransportsTable">
            <template #toolbar>
              <el-button
                v-if="permissions.warehouse_pallettransports_add"
                type="primary"
                @click="addOrUpdateHandle()"
                >新增</el-button
              >
              <el-button v-if="permissions.warehouse_pallettransports_add" type="primary"
                @click="addOrUpdateHandle()">新增</el-button>
            </template>
          </ttable>
          <div
            style="margin:0px 20px 0px;display:flex;height:36px;justify-content: space-between;align-items:center;"
          >
          <div style="margin:0px 20px 0px;display:flex;height:36px;justify-content: space-between;align-items:center;">
            <div>
              <span style="font-weight:bold;">对应工单</span>
            </div>
            <div></div>
          </div>
          <div style="padding:0px 20px 0px;">
            <el-table
              class="pallet-transports-optask-table"
              :data="palletTransportsOptaskData"
              style="width: 100%;"
              v-adaptive="{ bottomOffset: 20, fixedHeight: 0 }"
              height="100px"
              border
              highlight-current-row
              @row-click="optaskRowClick"
              stripe
              ref="palletTransportsOptaskTable"
            >
            <el-table class="pallet-transports-optask-table" :data="palletTransportsOptaskData"
            style="width: 100%;"
              v-adaptive="{ bottomOffset: 20, fixedHeight: 0 }" height="100px" border highlight-current-row
              @row-click="optaskRowClick" stripe ref="palletTransportsOptaskTable">
              <el-table-column align="center" width="55" label="单选">
                <template slot-scope="scope">
                  <el-checkbox
                    class="optask-table-single-checkbox"
                    v-model="scope.row.commonChecked"
                    disabled
                  ></el-checkbox>
                  <el-checkbox class="optask-table-single-checkbox" v-model="scope.row.commonChecked"
                    disabled></el-checkbox>
                </template>
              </el-table-column>
              <el-table-column
                prop="optaskNo"
                label="工单号"
                align="center"
                show-overflow-tooltip
              >
              <el-table-column prop="optaskNo" label="工单号" align="center" show-overflow-tooltip>
              </el-table-column>
              <el-table-column
                prop="partName"
                label="零件"
                align="center"
                show-overflow-tooltip
              >
              <el-table-column prop="partName" label="零件" align="center" show-overflow-tooltip>
              </el-table-column>
              <el-table-column
                prop="workCenter"
                label="工作中心"
                align="center"
                show-overflow-tooltip
              >
              <el-table-column prop="workCenter" label="工作中心" align="center" show-overflow-tooltip>
              </el-table-column>
              <el-table-column
                prop="workstationName"
                label="工作站"
                align="center"
                show-overflow-tooltip
              >
              <el-table-column prop="workstationName" label="工作站" align="center" show-overflow-tooltip>
              </el-table-column>
              <el-table-column
                prop="plannedQuantity"
                label="计划数量"
                align="center"
                show-overflow-tooltip
              >
              <el-table-column prop="plannedQuantity" label="计划数量" align="center" show-overflow-tooltip>
              </el-table-column>
              <el-table-column
                prop="unit"
                label="单位"
                align="center"
                show-overflow-tooltip
              >
              <el-table-column prop="unit" label="单位" align="center" show-overflow-tooltip>
              </el-table-column>
            </el-table>
          </div>
        </el-col>
        <el-col :span="15" style="padding-left: 10px;padding-right: 10px">
          <div
            style="display:flex;height:36px;justify-content: space-between;align-items:center;"
          >
          <div style="display:flex;height:36px;justify-content: space-between;align-items:center;">
            <div><span style="font-weight:bold;">物料需求</span></div>
            <div>
              <el-button
                type="text"
                v-if="permissions.warehouse_pallettransports_demand_add"
                @click="openPartDialog"
                >新增</el-button
              ><el-button
                type="text"
                v-if="permissions.warehouse_pallettransports_ifs"
                @click="openLocationDialog"
                >IFS至库位</el-button
              >
              <el-button type="text" v-if="permissions.warehouse_pallettransports_demand_add"
                @click="openPartDialog">新增</el-button><el-button type="text"
                v-if="permissions.warehouse_pallettransports_ifs" @click="openLocationDialog">移至库位</el-button>
            </div>
          </div>
          <div>
            <el-table
              class="pallet-transports-material-table"
              :data="palletTransportsMaterialData"
              style="width: 100%;"
              height="350px"
              border
              @selection-change="palletTransportsMaterialSelectionChange"
              stripe
              ref="palletTransportsMaterialTable"
            >
              <el-table-column type="selection" width="55"> </el-table-column>
              <el-table-column
                prop="partNo"
                label="零件号"
                align="center"
                show-overflow-tooltip
              >
            <el-table class="pallet-transports-material-table" @current-change="handleCurrentChange"  :data="palletTransportsMaterialData" style="width: 100%;"
              height="350px" border  stripe
              ref="palletTransportsMaterialTable">
                              <!--单选框 @selection-change="palletTransportsMaterialSelectionChange"-->
                      <el-table-column align="center"  width="55" label="单选">
                            <template slot-scope="scope">
                                <el-checkbox v-model="scope.row.commonChecked" @change="handleCurrentChange(scope.row)" ></el-checkbox>
                            </template>
                      </el-table-column>
              <el-table-column prop="partNo" label="零件号" align="center" show-overflow-tooltip>
              </el-table-column>
              <el-table-column
                prop="partDesc"
                label="零件描述"
                align="center"
                show-overflow-tooltip
              >
              <el-table-column prop="partDesc" label="零件描述" align="center" show-overflow-tooltip>
              </el-table-column>
              <el-table-column
                prop="demandQuantity"
                label="需求数量"
                align="center"
              >
              <el-table-column prop="demandQuantity" label="需求数量" align="center">
                <template slot-scope="scope">
                  <el-input
                    v-show="scope.row.canEdit"
                    v-model="scope.row.demandQuantity"
                  ></el-input>
                  <el-input v-show="scope.row.canEdit" v-model="scope.row.demandQuantity"></el-input>
                  <span v-show="!scope.row.canEdit">{{
                    scope.row.demandQuantity
                  }}</span>
                </template>
              </el-table-column>
              <el-table-column
                prop="transferQuantity"
                label="移库数量"
                align="center"
              >
              <el-table-column prop="transferQuantity" label="移库数量" align="center">
              </el-table-column>
              <el-table-column
                prop="surplusQuantity"
                label="剩余数量"
                align="center"
              >
              <el-table-column prop="surplusQuantity" label="剩余数量" align="center">
              </el-table-column>
              <el-table-column prop="unit" label="计量单位" align="center">
              </el-table-column>
              <el-table-column
                prop="toIfsLocationNo"
                label="IFS至库位"
                align="center"
              >
              <el-table-column prop="toIfsLocationNo" label="移至库位" align="center">
              </el-table-column>
              <el-table-column label="操作" align="center" width="100">
                <template slot-scope="scope">
                  <el-button
                    v-show="!scope.row.canEdit"
                    type="text"
                    :disabled="scope.row.detailExistState"
                    @click="scope.row.canEdit = true"
                    >编辑</el-button
                  >
                  <el-button
                    v-show="scope.row.canEdit"
                    type="text"
                    :disabled="scope.row.detailExistState"
                    @click="updateMaterial(scope.row)"
                    >保存</el-button
                  >
                  <el-button
                    type="text"
                    :disabled="scope.row.detailExistState"
                    @click="delMaterial(scope.row)"
                    >删除</el-button
                  >
                  <!-- <el-button v-show="!scope.row.canEdit" type="text" :disabled="scope.row.detailExistState"
                    @click="scope.row.canEdit = true">编辑</el-button> -->
                  <!-- <el-button v-show="scope.row.canEdit" type="text" :disabled="scope.row.detailExistState"
                    @click="updateMaterial(scope.row)">保存</el-button> -->
                  <el-button type="text" :disabled="scope.row.detailExistState"
                    @click="delMaterial(scope.row)">删除</el-button>
                </template>
              </el-table-column>
            </el-table>
          </div>
          <div
            style="margin-top:10px;display:flex;height:36px;justify-content: space-between;align-items:center;"
          >
          <div style="margin-top:10px;display:flex;height:36px;justify-content: space-between;align-items:center;">
            <div>
              <span style="font-weight:bold;">移库明细</span
              ><span style="color:red;"
                >({{
                  palletTransportsMaterialMultipleSelection.length > 0
                    ? palletTransportsMaterialMultipleSelection[
                        palletTransportsMaterialMultipleSelection.length - 1
                      ].partDesc
                    : ''
                }})</span
              >
              <span style="font-weight:bold;">移库明细</span>
              <span style="color:red;">({{
                palletTransportsMaterialMultipleSelection.length > 0
                ? palletTransportsMaterialMultipleSelection[
                  palletTransportsMaterialMultipleSelection.length - 1
                ].partDesc
                : ''
              }})</span>
            </div>
            <div>
              <el-button
                type="primary"
                v-if="permissions.warehouse_pallettransports_detail_add"
                round
                @click="openStockDialog"
                >添加明细</el-button
              >
              <el-button
                type="warning"
                v-if="permissions.warehouse_pallettransports_detail_library"
                round
                @click="openDetailLocationDialog"
                >一键至库位</el-button
              >
              <el-button
                type="success"
                v-if="permissions.warehouse_pallettransports_detail_execute"
                round
                @click="executeMove"
                >执 è¡Œ</el-button
              >
              <el-button type="primary" v-if="permissions.warehouse_pallettransports_detail_add" round
                @click="getPalletTransportsDetailData">添加明细</el-button>
              <!-- <el-button type="warning" v-if="permissions.warehouse_pallettransports_detail_library" round
                @click="openDetailLocationDialog">一键至库位</el-button> -->
              <el-button type="success" v-if="permissions.warehouse_pallettransports_detail_execute" round
                @click="executeMove">执 è¡Œ</el-button>
            </div>
          </div>
          <div>
            <el-table
              class="pallet-transports-detail-table"
              :data="palletTransportsDetailData"
              style="width: 100%;"
              v-adaptive="{ bottomOffset: 20, fixedHeight: 0 }"
              height="100px"
              border
              @selection-change="palletTransportsDetailSelectionChange"
              stripe
              ref="palletTransportsDetailTable"
            >
            <el-table class="pallet-transports-detail-table" :data="palletTransportsDetailData" style="width: 100%;"
              v-adaptive="{ bottomOffset: 20, fixedHeight: 0 }" height="100px" border
              @selection-change="palletTransportsDetailSelectionChange" stripe ref="palletTransportsDetailTable">
              <el-table-column type="selection" width="55"> </el-table-column>
              <el-table-column
                prop="partNo"
                label="零件号"
                align="center"
                show-overflow-tooltip
              >
              <el-table-column prop="part_no" label="零件号" align="center" show-overflow-tooltip>
              </el-table-column>
              <el-table-column
                prop="partDesc"
                label="零件描述"
                align="center"
                show-overflow-tooltip
              >
              <el-table-column prop="part_desc" label="零件描述" align="center" show-overflow-tooltip>
              </el-table-column>
              <el-table-column
                prop="batchNo"
                label="批次号"
                align="center"
                show-overflow-tooltip
              >
              <!-- <el-table-column prop="batchNo" label="批次号" align="center" show-overflow-tooltip>
              </el-table-column>
              <el-table-column prop="wdr" label="WDR" align="center">
              </el-table-column> -->
              <el-table-column prop="operation_task_no" label="工单" align="center" show-overflow-tooltip>
              </el-table-column>
              <el-table-column
                prop="operationTaskNo"
                label="工单"
                align="center"
                show-overflow-tooltip
              >
              </el-table-column>
              <el-table-column
                prop="transferQuantity"
                label="移库数量"
                align="center"
              >
              <el-table-column prop="transfer_quantity" label="移库数量" align="center">
              </el-table-column>
              <el-table-column prop="unit" label="单位" align="center">
              </el-table-column>
              <el-table-column
                prop="fromIfsLocationNo"
                label="IFS从库位"
                align="center"
              >
              </el-table-column>
              <el-table-column
                prop="toIfsLocationNo"
                label="IFS至库位"
                align="center"
              >
                <template slot-scope="scope">
                  <el-link
                    type="primary"
                    @click="openSingleLocationDialog(scope.row)"
                    >{{ scope.row.toIfsLocationNo }}</el-link
                  >
                </template>
              <!-- <el-table-column prop="fromIfsLocationNo" label="IFS从库位" align="center">
              </el-table-column> -->
              <el-table-column prop="to_ifs_location_no" label="移至库位" align="center">
                <!-- <template slot-scope="scope">
                  <el-link type="primary" @click="openSingleLocationDialog(scope.row)">{{ scope.row.toIfsLocationNo
                  }}</el-link>
                </template> -->
              </el-table-column>
              <el-table-column prop="state" label="状态" align="center">
                <template slot-scope="scope">
                  <span>{{
                    scope.row.state == null
                      ? ''
                      : scope.row.state === '01initial'
                    ? ''
                    : scope.row.state === '01initial'
                      ? '已创建'
                      : '已执行'
                  }}</span>
@@ -325,18 +153,10 @@
              </el-table-column>
              <el-table-column label="操作" align="center" width="85">
                <template slot-scope="scope">
                  <el-button
                    type="text"
                    @click="openEditStockDialog(scope.row)"
                    :disabled="scope.row.state === '01initial' ? false : true"
                    >编辑</el-button
                  >
                  <el-button
                    type="text"
                    @click="delDetail(scope.row)"
                    :disabled="scope.row.state === '01initial' ? false : true"
                    >删除</el-button
                  >
                  <!-- <el-button type="text" @click="openEditStockDialog(scope.row)"
                    :disabled="scope.row.state === '01initial' ? false : true">编辑</el-button> -->
                  <el-button type="text" @click="delDetail(scope.row)"
                    :disabled="scope.row.state === '01initial' ? false : true">删除</el-button>
                </template>
              </el-table-column>
            </el-table>
@@ -344,44 +164,22 @@
        </el-col>
      </el-row>
      <!-- å¼¹çª—, æ–°å¢ž / ä¿®æ”¹ -->
      <pallettransportsFormDialog
        :currshowlist.sync="showPallettransportsForm"
        :palletTransportsId="palletTransportsId"
        @refreshPalletTransports="getPallettransportsData"
      />
      <pallettransportsFormDialog :currshowlist.sync="showPallettransportsForm" :palletTransportsId="palletTransportsId"
        @refreshPalletTransports="getPallettransportsData" />
      <!-- å¼¹çª—, é›¶ä»¶åˆ—表 -->
      <partDialog
        :currshowlist.sync="showPart"
        @listenToPartEvent="selectPartCallback"
      />
      <partDialog :currshowlist.sync="showPart" @listenToPartEvent="selectPartCallback" />
      <!-- å¼¹çª—, IFS库位列表 -->
      <ifsLocationDialog
        :currshowlist.sync="showLocation"
        :transportsList="palletTransportsMaterialMultipleSelection"
        @refreshDataList="selectLocationCallback"
      />
      <ifsLocationDialog :currshowlist.sync="showLocation" :transportsList="palletTransportsMaterialMultipleSelection"
        @refreshDataList="selectLocationCallback" />
      <!-- å¼¹çª—, IFS库存列表 -->
      <ifsStockDialog
        :currshowlist.sync="showStock"
        :materialRow="materialRow"
        :transportsRow="currPalletTransportsRow"
        :optask="currOptask"
        @refreshDataList="addIfsStockCallback"
      />
      <ifsStockDialog :currshowlist.sync="showStock" :materialRow="materialRow" :transportsRow="currPalletTransportsRow"
        :optask="currOptask" @refreshDataList="addIfsStockCallback" />
      <!-- å¼¹çª—, ç¼–辑IFS库存列表 -->
      <detailIfsStockDialog
        :currshowlist.sync="showDetailStock"
        :materialRow="materialRow"
        :transportsRow="currPalletTransportsRow"
        :detailRow="currDetailRow"
        @refreshDataList="addIfsStockCallback"
      />
      <detailIfsStockDialog :currshowlist.sync="showDetailStock" :materialRow="materialRow"
        :transportsRow="currPalletTransportsRow" :detailRow="currDetailRow" @refreshDataList="addIfsStockCallback" />
      <!-- å¼¹çª—, æ˜Žç»†çš„IFS库位列表 -->
      <detailIfsLocationDialog
        :currshowlist.sync="showDetailLocation"
        :detailList="detailList"
        @refreshDataList="selectDetailLocationCallback"
      />
      <detailIfsLocationDialog :currshowlist.sync="showDetailLocation" :detailList="detailList"
        @refreshDataList="selectDetailLocationCallback" />
    </basic-container>
  </div>
</template>
@@ -395,7 +193,8 @@
  delPalletTransportsMaterialObj,
  palletTransportsDetailFetchList,
  delPalletTransportsDetailObj,
  executeMoveLocation
  executeMoveLocation,
  selectAll,
} from '@/api/warehouse/pallettransports'
import { getByPalletTransId } from '@/api/plan/operationtask'
import ttable from '@/views/common/ztt-table.vue'
@@ -407,10 +206,11 @@
import detailIfsLocationDialog from './detail-ifslocation-form'
import adaptive from '@/util/adaptive'
import { mapGetters } from 'vuex'
import { saveBatchPalletTransportsDetail } from '@/api/warehouse/pallettransports'
export default {
  data() {
    return {
      partDesc: null,
      ajaxFun: palletTransportsFetchList,
      currPalletTransportsRow: null,
      palletTransportsMaterialMultipleSelection: [],
@@ -420,6 +220,8 @@
        isShow: false,
        url: ''
      },
      WorkOrder:{},
      datalistAPI:'',
      prelang: 'pallettransports',
      options: {
        height: 300, // é»˜è®¤é«˜åº¦-为了表头固定
@@ -552,8 +354,30 @@
  computed: {
    ...mapGetters(['permissions'])
  },
  created() {},
  watch:{
    palletTransportsMaterialMultipleSelection(newVal){
      if(newVal.length>0){
        this.palletTransportsMaterialSelectionChange(newVal)
      }else{
        this.palletTransportsDetailData = []
      }
    }
  },
  created() { },
  methods: {
                // å•行选中
            handleCurrentChange(row) {
                    this.palletTransportsMaterialData.forEach((item) => {
                        // æŽ’ä»–,每次选择时把其他选项都清除
                        if (item.id !== row.id) {
                            item.commonChecked = false
                        }else{
              item.commonChecked = true
            }
                    })
          this.palletTransportsMaterialSelectionChange([row])
          console.log(row);
            },
    // å·¥è‰ºç±»åž‹ä¸­æ–‡æ ¼å¼åŒ–
    formatStateType(row, column, cellValue) {
      this.stateOptions.forEach((obj) => {
@@ -602,7 +426,8 @@
                unit: item.unit,
                transportsId: item.transportsId,
                detailExistState: item.detailExistState,
                canEdit: false
                canEdit: false,
                commonChecked: false
              }
              this.palletTransportsMaterialData.push(palletTransportsMaterial)
            })
@@ -624,31 +449,6 @@
        }
      })
    },
    // èŽ·å–ç§»åº“æ˜Žç»†æ•°æ®åˆ—è¡¨
    getPalletTransportsDetailData() {
      this.palletTransportsDetailData = []
      if (this.palletTransportsMaterialMultipleSelection.length > 0) {
        const currPalletTransportsMaterial = this
          .palletTransportsMaterialMultipleSelection[
          this.palletTransportsMaterialMultipleSelection.length - 1
        ]
        const queryParam = Object.assign(
          {
            current: 1,
            size: 200
          },
          {
            transportsMaterialId: currPalletTransportsMaterial.id
          }
        )
        palletTransportsDetailFetchList(queryParam).then((response) => {
          const resData = response.data
          if (resData.code === 0) {
            this.palletTransportsDetailData = resData.data.records
          }
        })
      }
    },
    // æ–°å¢ž / ä¿®æ”¹
    addOrUpdateHandle(row) {
      if (row != null) {
@@ -666,7 +466,7 @@
        closeOnClickModal: false,
        type: 'warning'
      })
        .then(function() {
        .then(function () {
          return delPalletTransportsObj(row.id)
        })
        .then((data) => {
@@ -675,7 +475,7 @@
          this.palletTransportsMaterialData = []
          this.palletTransportsDetailData = []
        })
        .catch(() => {})
        .catch(() => { })
    },
    // æ‰“开零件列表
    openPartDialog() {
@@ -776,22 +576,54 @@
        }
      })
    },
    // æ‰“å¼€ifs物料库存列表
    openStockDialog() {
      if (this.palletTransportsMaterialMultipleSelection.length > 0) {
        this.showStock = true
      } else {
        this.$message.error('请先选择物料需求')
      }
    // èŽ·å–ç§»åº“æ˜Žç»†æ•°æ®åˆ—è¡¨
    getPalletTransportsDetailData() {
      // console.log("对应工单",this.WorkOrder);
      // console.log("选中物料需求",this.palletTransportsMaterialMultipleSelection);
      let transportsDetails =[]
      transportsDetails = this.palletTransportsMaterialMultipleSelection.map(el =>{
        return{
          partNo:el.partNo,
          partDesc: el.partDesc,
          transferQuantity: el.surplusQuantity,
          toIfsLocationNo:el.toIfsLocationNo,
          toIfsLocationName: el.toIfsLocationName,
          transportsId: el.transportsId,
          transportsMaterialId:el.id,
          operationTaskNo:this.WorkOrder.optaskNo,
          operationTaskId:this.WorkOrder.id,
          unit: el.unit,
        }})
      // this.palletTransportsDetailData = transportsDetails
      if (transportsDetails.length > 0) {
        let selectionList = this.palletTransportsMaterialMultipleSelection
          saveBatchPalletTransportsDetail(transportsDetails)
            .then((response) => {
              const resData = response.data
              if (resData.code === 0) {
                this.innerVisible = false
                this.$message.success('添加移库明细成功')
                let materialRow = selectionList[selectionList.length - 1]
                console.log("materialRow-----",materialRow);
                this.palletTransportsMaterialData.forEach(ele=>{
                  if(ele.id==materialRow.id){
                    console.log("ele-------",ele);
                      ele.transferQuantity = materialRow.surplusQuantity
                      ele.surplusQuantity = 0
                  }
                })
              } else {
                this.$message.error('添加移库明细失败')
              }
              // this.getPalletTransportsMaterialData()
              this.palletTransportsMaterialSelectionChange(selectionList)
            })
            // .catch(() => {
            // })
        }
    },
    // æ·»åŠ ifs物料库存回调
    addIfsStockCallback() {
      // åˆ·æ–°ç‰©æ–™éœ€æ±‚、刷新移库明细
      // this.getPalletTransportsMaterialData()
      // åˆ·æ–°è´§ç›˜è¿è¾“任务列表
      // if (this.showStock) {
      // this.getPallettransportsData()
      // }
      const currRow = this.currPalletTransportsRow
      this.getPallettransportsData().then(() => {
        if (currRow) {
@@ -820,10 +652,11 @@
    },
    // æ‰“开单个明细批量更新库位弹框
    openSingleLocationDialog(row) {
      console.log(row);
      if (row.state === '01initial') {
        this.detailList = []
        this.detailList.push(row)
        this.showDetailLocation = true
        // this.showDetailLocation = true
      } else {
        this.$message.error('移库明细已执行')
      }
@@ -906,16 +739,26 @@
    },
    palletTransportsMaterialSelectionChange(val) {
      this.palletTransportsMaterialMultipleSelection = val
      if (this.palletTransportsMaterialMultipleSelection.length > 0) {
        const currPalletTransportsMaterial = this
          .palletTransportsMaterialMultipleSelection[
          this.palletTransportsMaterialMultipleSelection.length - 1
        ]
        this.materialRow = currPalletTransportsMaterial
      } else {
        this.materialRow = null
      console.log(this.palletTransportsMaterialMultipleSelection);
      if(val && val.length>0){
        let ids =[]
        this.palletTransportsMaterialMultipleSelection.forEach(el =>{ids.push(el.id)})
        let pId = ids[ids.length - 1];
        console.log(pId);
        if(pId!=null){
          selectAll({
              transportsId:this.currPalletTransportsRow.id,
              transportsMaterialId: pId
            }).then((res) =>{
              this.palletTransportsDetailData = []
              if(res.data.data){
                this.palletTransportsDetailData.push(res.data.data)
              }
              })
           }else{
            this.palletTransportsDetailData = []
           }
      }
      this.getPalletTransportsDetailData()
    },
    palletTransportsDetailSelectionChange(val) {
      this.palletTransportsDetailMultipleSelection = val
@@ -932,6 +775,7 @@
      })
    },
    optaskRowClick(row, column) {
      this.WorkOrder = row
      this.palletTransportsOptaskData.forEach((item) => {
        if (row.id !== item.id) {
          item.commonChecked = false
@@ -951,57 +795,59 @@
}
</script>
<style scoped>
.pallet-transports-material-table >>> .el-table__header th {
.pallet-transports-material-table>>>.el-table__header th {
  color: #666666;
}
.pallet-transports-material-table >>> th {
.pallet-transports-material-table>>>th {
  padding: 3px 0px;
  height: 31px;
}
.pallet-transports-material-table >>> td {
.pallet-transports-material-table>>>td {
  padding: 1px 0 0 0;
}
.pallet-transports-detail-table >>> .el-table__header th {
.pallet-transports-detail-table>>>.el-table__header th {
  color: #666666;
}
.pallet-transports-detail-table >>> th {
.pallet-transports-detail-table>>>th {
  padding: 3px 0px;
  height: 31px;
}
.pallet-transports-detail-table >>> td {
.pallet-transports-detail-table>>>td {
  padding: 1px 0 0 0;
}
.pallet-transports-optask-table >>> .el-table__header th {
.pallet-transports-optask-table>>>.el-table__header th {
  color: #666666;
}
.pallet-transports-optask-table >>> th {
.pallet-transports-optask-table>>>th {
  padding: 3px 0px;
  height: 31px;
}
.pallet-transports-optask-table >>> td {
.pallet-transports-optask-table>>>td {
  padding: 1px 0 0 0;
}
.optask-table-single-checkbox
  >>> .el-checkbox__input.is-disabled.is-checked
  .el-checkbox__inner {
.optask-table-single-checkbox>>>.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner {
  background-color: #006eff;
  border-color: #006eff;
}
.optask-table-single-checkbox
  >>> .el-checkbox__input.is-disabled
  .el-checkbox__inner {
.optask-table-single-checkbox>>>.el-checkbox__input.is-disabled .el-checkbox__inner {
  background-color: #ffffff;
  cursor: pointer;
}
.optask-table-single-checkbox >>> .el-checkbox__inner::after {
.optask-table-single-checkbox>>>.el-checkbox__inner::after {
  border: 1px solid #fff !important;
  border-left: 0 !important;
  border-top: 0 !important;
  cursor: pointer !important;
}
</style>
</style>
vue.config.js
@@ -2,10 +2,12 @@
 * é…ç½®å‚考:
 * https://cli.vuejs.org/zh/config/
 */
// const url = 'http://192.168.2.7:9999'
//const url = 'http://192.168.2.7:9999'
//const url = 'http://192.168.32.45:9999'
// const url = 'http://192.168.0.23:9999'
  // const url = 'http://192.168.0.60:9999'
  const url = 'http://localhost:9999'
 const url = 'http://localhost:9999'
// const url = 'http://ztt-gateway:9999'
const localUrl = 'http://localhost:8089'