XiaoRuby
2023-09-24 abba64c23543cd806ed8864a9a976408618a5f45
9-24 加班
已修改8个文件
已删除2个文件
5748 ■■■■ 文件已修改
package-lock.json 1017 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/api/controller.js 308 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/Processingproducts.vue 639 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/processInspection.vue 1455 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/raw-ins.vue 391 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/rawUnqualified/raw.vue 304 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/rawUnqualifiedBox.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/unqualifiedManagement.vue 458 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 128 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/view/index.vue 1034 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package-lock.json
@@ -88,15 +88,318 @@
        "npm": ">= 3.0.0"
      }
    },
    "node_modules/@babel/helper-module-imports": {
      "version": "7.21.4",
      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz",
      "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==",
    "node_modules/@ampproject/remapping": {
      "version": "2.2.1",
      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
      "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
      "peer": true,
      "dependencies": {
        "@babel/types": "^7.21.4"
        "@jridgewell/gen-mapping": "^0.3.0",
        "@jridgewell/trace-mapping": "^0.3.9"
      },
      "engines": {
        "node": ">=6.0.0"
      }
    },
    "node_modules/@babel/code-frame": {
      "version": "7.22.13",
      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
      "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
      "peer": true,
      "dependencies": {
        "@babel/highlight": "^7.22.13",
        "chalk": "^2.4.2"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/compat-data": {
      "version": "7.22.20",
      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz",
      "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==",
      "peer": true,
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/core": {
      "version": "7.22.20",
      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.20.tgz",
      "integrity": "sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==",
      "peer": true,
      "dependencies": {
        "@ampproject/remapping": "^2.2.0",
        "@babel/code-frame": "^7.22.13",
        "@babel/generator": "^7.22.15",
        "@babel/helper-compilation-targets": "^7.22.15",
        "@babel/helper-module-transforms": "^7.22.20",
        "@babel/helpers": "^7.22.15",
        "@babel/parser": "^7.22.16",
        "@babel/template": "^7.22.15",
        "@babel/traverse": "^7.22.20",
        "@babel/types": "^7.22.19",
        "convert-source-map": "^1.7.0",
        "debug": "^4.1.0",
        "gensync": "^1.0.0-beta.2",
        "json5": "^2.2.3",
        "semver": "^6.3.1"
      },
      "engines": {
        "node": ">=6.9.0"
      },
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/babel"
      }
    },
    "node_modules/@babel/core/node_modules/debug": {
      "version": "4.3.4",
      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
      "peer": true,
      "dependencies": {
        "ms": "2.1.2"
      },
      "engines": {
        "node": ">=6.0"
      },
      "peerDependenciesMeta": {
        "supports-color": {
          "optional": true
        }
      }
    },
    "node_modules/@babel/core/node_modules/json5": {
      "version": "2.2.3",
      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
      "peer": true,
      "bin": {
        "json5": "lib/cli.js"
      },
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/@babel/core/node_modules/ms": {
      "version": "2.1.2",
      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
      "peer": true
    },
    "node_modules/@babel/core/node_modules/semver": {
      "version": "6.3.1",
      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
      "peer": true,
      "bin": {
        "semver": "bin/semver.js"
      }
    },
    "node_modules/@babel/generator": {
      "version": "7.22.15",
      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz",
      "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==",
      "peer": true,
      "dependencies": {
        "@babel/types": "^7.22.15",
        "@jridgewell/gen-mapping": "^0.3.2",
        "@jridgewell/trace-mapping": "^0.3.17",
        "jsesc": "^2.5.1"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/generator/node_modules/jsesc": {
      "version": "2.5.2",
      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
      "peer": true,
      "bin": {
        "jsesc": "bin/jsesc"
      },
      "engines": {
        "node": ">=4"
      }
    },
    "node_modules/@babel/helper-compilation-targets": {
      "version": "7.22.15",
      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz",
      "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==",
      "peer": true,
      "dependencies": {
        "@babel/compat-data": "^7.22.9",
        "@babel/helper-validator-option": "^7.22.15",
        "browserslist": "^4.21.9",
        "lru-cache": "^5.1.1",
        "semver": "^6.3.1"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-compilation-targets/node_modules/browserslist": {
      "version": "4.21.11",
      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.11.tgz",
      "integrity": "sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==",
      "funding": [
        {
          "type": "opencollective",
          "url": "https://opencollective.com/browserslist"
        },
        {
          "type": "tidelift",
          "url": "https://tidelift.com/funding/github/npm/browserslist"
        },
        {
          "type": "github",
          "url": "https://github.com/sponsors/ai"
        }
      ],
      "peer": true,
      "dependencies": {
        "caniuse-lite": "^1.0.30001538",
        "electron-to-chromium": "^1.4.526",
        "node-releases": "^2.0.13",
        "update-browserslist-db": "^1.0.13"
      },
      "bin": {
        "browserslist": "cli.js"
      },
      "engines": {
        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
      }
    },
    "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
      "version": "5.1.1",
      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
      "peer": true,
      "dependencies": {
        "yallist": "^3.0.2"
      }
    },
    "node_modules/@babel/helper-compilation-targets/node_modules/node-releases": {
      "version": "2.0.13",
      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
      "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
      "peer": true
    },
    "node_modules/@babel/helper-compilation-targets/node_modules/picocolors": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
      "peer": true
    },
    "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
      "version": "6.3.1",
      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
      "peer": true,
      "bin": {
        "semver": "bin/semver.js"
      }
    },
    "node_modules/@babel/helper-compilation-targets/node_modules/update-browserslist-db": {
      "version": "1.0.13",
      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
      "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
      "funding": [
        {
          "type": "opencollective",
          "url": "https://opencollective.com/browserslist"
        },
        {
          "type": "tidelift",
          "url": "https://tidelift.com/funding/github/npm/browserslist"
        },
        {
          "type": "github",
          "url": "https://github.com/sponsors/ai"
        }
      ],
      "peer": true,
      "dependencies": {
        "escalade": "^3.1.1",
        "picocolors": "^1.0.0"
      },
      "bin": {
        "update-browserslist-db": "cli.js"
      },
      "peerDependencies": {
        "browserslist": ">= 4.21.0"
      }
    },
    "node_modules/@babel/helper-compilation-targets/node_modules/yallist": {
      "version": "3.1.1",
      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
      "peer": true
    },
    "node_modules/@babel/helper-environment-visitor": {
      "version": "7.22.20",
      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
      "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
      "peer": true,
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-function-name": {
      "version": "7.22.5",
      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz",
      "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==",
      "peer": true,
      "dependencies": {
        "@babel/template": "^7.22.5",
        "@babel/types": "^7.22.5"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-hoist-variables": {
      "version": "7.22.5",
      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
      "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
      "peer": true,
      "dependencies": {
        "@babel/types": "^7.22.5"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-module-imports": {
      "version": "7.22.15",
      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
      "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
      "dependencies": {
        "@babel/types": "^7.22.15"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-module-transforms": {
      "version": "7.22.20",
      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz",
      "integrity": "sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==",
      "peer": true,
      "dependencies": {
        "@babel/helper-environment-visitor": "^7.22.20",
        "@babel/helper-module-imports": "^7.22.15",
        "@babel/helper-simple-access": "^7.22.5",
        "@babel/helper-split-export-declaration": "^7.22.6",
        "@babel/helper-validator-identifier": "^7.22.20"
      },
      "engines": {
        "node": ">=6.9.0"
      },
      "peerDependencies": {
        "@babel/core": "^7.0.0"
      }
    },
    "node_modules/@babel/helper-plugin-utils": {
@@ -107,26 +410,93 @@
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-simple-access": {
      "version": "7.22.5",
      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
      "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
      "peer": true,
      "dependencies": {
        "@babel/types": "^7.22.5"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-split-export-declaration": {
      "version": "7.22.6",
      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
      "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
      "peer": true,
      "dependencies": {
        "@babel/types": "^7.22.5"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-string-parser": {
      "version": "7.19.4",
      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
      "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
      "version": "7.22.5",
      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
      "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-validator-identifier": {
      "version": "7.19.1",
      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
      "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
      "version": "7.22.20",
      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
      "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-validator-option": {
      "version": "7.22.15",
      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz",
      "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==",
      "peer": true,
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helpers": {
      "version": "7.22.15",
      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz",
      "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==",
      "peer": true,
      "dependencies": {
        "@babel/template": "^7.22.15",
        "@babel/traverse": "^7.22.15",
        "@babel/types": "^7.22.15"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/highlight": {
      "version": "7.22.20",
      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
      "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
      "peer": true,
      "dependencies": {
        "@babel/helper-validator-identifier": "^7.22.20",
        "chalk": "^2.4.2",
        "js-tokens": "^4.0.0"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/highlight/node_modules/js-tokens": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
      "peer": true
    },
    "node_modules/@babel/parser": {
      "version": "7.21.4",
      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz",
      "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==",
      "version": "7.22.16",
      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz",
      "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==",
      "bin": {
        "parser": "bin/babel-parser.js"
      },
@@ -181,13 +551,80 @@
      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
      "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew=="
    },
    "node_modules/@babel/types": {
      "version": "7.21.4",
      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz",
      "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==",
    "node_modules/@babel/template": {
      "version": "7.22.15",
      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
      "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
      "peer": true,
      "dependencies": {
        "@babel/helper-string-parser": "^7.19.4",
        "@babel/helper-validator-identifier": "^7.19.1",
        "@babel/code-frame": "^7.22.13",
        "@babel/parser": "^7.22.15",
        "@babel/types": "^7.22.15"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/traverse": {
      "version": "7.22.20",
      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.20.tgz",
      "integrity": "sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==",
      "peer": true,
      "dependencies": {
        "@babel/code-frame": "^7.22.13",
        "@babel/generator": "^7.22.15",
        "@babel/helper-environment-visitor": "^7.22.20",
        "@babel/helper-function-name": "^7.22.5",
        "@babel/helper-hoist-variables": "^7.22.5",
        "@babel/helper-split-export-declaration": "^7.22.6",
        "@babel/parser": "^7.22.16",
        "@babel/types": "^7.22.19",
        "debug": "^4.1.0",
        "globals": "^11.1.0"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/traverse/node_modules/debug": {
      "version": "4.3.4",
      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
      "peer": true,
      "dependencies": {
        "ms": "2.1.2"
      },
      "engines": {
        "node": ">=6.0"
      },
      "peerDependenciesMeta": {
        "supports-color": {
          "optional": true
        }
      }
    },
    "node_modules/@babel/traverse/node_modules/globals": {
      "version": "11.12.0",
      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
      "peer": true,
      "engines": {
        "node": ">=4"
      }
    },
    "node_modules/@babel/traverse/node_modules/ms": {
      "version": "2.1.2",
      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
      "peer": true
    },
    "node_modules/@babel/types": {
      "version": "7.22.19",
      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz",
      "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==",
      "dependencies": {
        "@babel/helper-string-parser": "^7.22.5",
        "@babel/helper-validator-identifier": "^7.22.19",
        "to-fast-properties": "^2.0.0"
      },
      "engines": {
@@ -200,6 +637,54 @@
      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
      "engines": {
        "node": ">=4"
      }
    },
    "node_modules/@jridgewell/gen-mapping": {
      "version": "0.3.3",
      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
      "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
      "peer": true,
      "dependencies": {
        "@jridgewell/set-array": "^1.0.1",
        "@jridgewell/sourcemap-codec": "^1.4.10",
        "@jridgewell/trace-mapping": "^0.3.9"
      },
      "engines": {
        "node": ">=6.0.0"
      }
    },
    "node_modules/@jridgewell/resolve-uri": {
      "version": "3.1.1",
      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
      "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
      "peer": true,
      "engines": {
        "node": ">=6.0.0"
      }
    },
    "node_modules/@jridgewell/set-array": {
      "version": "1.1.2",
      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
      "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
      "peer": true,
      "engines": {
        "node": ">=6.0.0"
      }
    },
    "node_modules/@jridgewell/sourcemap-codec": {
      "version": "1.4.15",
      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
      "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
      "peer": true
    },
    "node_modules/@jridgewell/trace-mapping": {
      "version": "0.3.19",
      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
      "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
      "peer": true,
      "dependencies": {
        "@jridgewell/resolve-uri": "^3.1.0",
        "@jridgewell/sourcemap-codec": "^1.4.14"
      }
    },
    "node_modules/@mapbox/node-pre-gyp": {
@@ -280,6 +765,16 @@
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
    },
    "node_modules/@popperjs/core": {
      "version": "2.11.8",
      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
      "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
      "peer": true,
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/popperjs"
      }
    },
    "node_modules/@transloadit/prettier-bytes": {
      "version": "0.0.7",
@@ -828,7 +1323,6 @@
      "version": "3.2.1",
      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
      "dev": true,
      "dependencies": {
        "color-convert": "^1.9.0"
      },
@@ -2561,10 +3055,23 @@
      "dev": true
    },
    "node_modules/caniuse-lite": {
      "version": "1.0.30001477",
      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001477.tgz",
      "integrity": "sha512-lZim4iUHhGcy5p+Ri/G7m84hJwncj+Kz7S5aD4hoQfslKZJgt0tHc/hafVbqHC5bbhHb+mrW2JOUHkI5KH7toQ==",
      "dev": true
      "version": "1.0.30001538",
      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz",
      "integrity": "sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==",
      "funding": [
        {
          "type": "opencollective",
          "url": "https://opencollective.com/browserslist"
        },
        {
          "type": "tidelift",
          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
        },
        {
          "type": "github",
          "url": "https://github.com/sponsors/ai"
        }
      ]
    },
    "node_modules/canvas": {
      "version": "2.9.0",
@@ -2617,7 +3124,6 @@
      "version": "2.4.2",
      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
      "dev": true,
      "dependencies": {
        "ansi-styles": "^3.2.1",
        "escape-string-regexp": "^1.0.5",
@@ -2886,7 +3392,6 @@
      "version": "1.9.3",
      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
      "dev": true,
      "dependencies": {
        "color-name": "1.1.3"
      }
@@ -2894,8 +3399,7 @@
    "node_modules/color-name": {
      "version": "1.1.3",
      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
      "dev": true
      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
    },
    "node_modules/color-string": {
      "version": "0.3.0",
@@ -3079,7 +3583,6 @@
      "version": "1.7.0",
      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
      "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
      "dev": true,
      "dependencies": {
        "safe-buffer": "~5.1.1"
      }
@@ -4190,10 +4693,9 @@
      }
    },
    "node_modules/electron-to-chromium": {
      "version": "1.4.356",
      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.356.tgz",
      "integrity": "sha512-nEftV1dRX3omlxAj42FwqRZT0i4xd2dIg39sog/CnCJeCcL1TRd2Uh0i9Oebgv8Ou0vzTPw++xc+Z20jzS2B6A==",
      "dev": true
      "version": "1.4.528",
      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.528.tgz",
      "integrity": "sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA=="
    },
    "node_modules/element-resize-detector": {
      "version": "1.2.2",
@@ -4451,7 +4953,6 @@
      "version": "3.1.1",
      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
      "dev": true,
      "engines": {
        "node": ">=6"
      }
@@ -4466,7 +4967,6 @@
      "version": "1.0.5",
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
      "dev": true,
      "engines": {
        "node": ">=0.8.0"
      }
@@ -5488,6 +5988,15 @@
        "node": ">=8"
      }
    },
    "node_modules/gensync": {
      "version": "1.0.0-beta.2",
      "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
      "peer": true,
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/get-caller-file": {
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
@@ -5658,7 +6167,6 @@
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
      "dev": true,
      "engines": {
        "node": ">=4"
      }
@@ -13720,7 +14228,6 @@
      "version": "5.5.0",
      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
      "dev": true,
      "dependencies": {
        "has-flag": "^3.0.0"
      },
@@ -16033,12 +16540,218 @@
    }
  },
  "dependencies": {
    "@babel/helper-module-imports": {
      "version": "7.21.4",
      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz",
      "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==",
    "@ampproject/remapping": {
      "version": "2.2.1",
      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
      "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
      "peer": true,
      "requires": {
        "@babel/types": "^7.21.4"
        "@jridgewell/gen-mapping": "^0.3.0",
        "@jridgewell/trace-mapping": "^0.3.9"
      }
    },
    "@babel/code-frame": {
      "version": "7.22.13",
      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
      "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
      "peer": true,
      "requires": {
        "@babel/highlight": "^7.22.13",
        "chalk": "^2.4.2"
      }
    },
    "@babel/compat-data": {
      "version": "7.22.20",
      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz",
      "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==",
      "peer": true
    },
    "@babel/core": {
      "version": "7.22.20",
      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.20.tgz",
      "integrity": "sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==",
      "peer": true,
      "requires": {
        "@ampproject/remapping": "^2.2.0",
        "@babel/code-frame": "^7.22.13",
        "@babel/generator": "^7.22.15",
        "@babel/helper-compilation-targets": "^7.22.15",
        "@babel/helper-module-transforms": "^7.22.20",
        "@babel/helpers": "^7.22.15",
        "@babel/parser": "^7.22.16",
        "@babel/template": "^7.22.15",
        "@babel/traverse": "^7.22.20",
        "@babel/types": "^7.22.19",
        "convert-source-map": "^1.7.0",
        "debug": "^4.1.0",
        "gensync": "^1.0.0-beta.2",
        "json5": "^2.2.3",
        "semver": "^6.3.1"
      },
      "dependencies": {
        "debug": {
          "version": "4.3.4",
          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
          "peer": true,
          "requires": {
            "ms": "2.1.2"
          }
        },
        "json5": {
          "version": "2.2.3",
          "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
          "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
          "peer": true
        },
        "ms": {
          "version": "2.1.2",
          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
          "peer": true
        },
        "semver": {
          "version": "6.3.1",
          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
          "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
          "peer": true
        }
      }
    },
    "@babel/generator": {
      "version": "7.22.15",
      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz",
      "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==",
      "peer": true,
      "requires": {
        "@babel/types": "^7.22.15",
        "@jridgewell/gen-mapping": "^0.3.2",
        "@jridgewell/trace-mapping": "^0.3.17",
        "jsesc": "^2.5.1"
      },
      "dependencies": {
        "jsesc": {
          "version": "2.5.2",
          "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
          "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
          "peer": true
        }
      }
    },
    "@babel/helper-compilation-targets": {
      "version": "7.22.15",
      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz",
      "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==",
      "peer": true,
      "requires": {
        "@babel/compat-data": "^7.22.9",
        "@babel/helper-validator-option": "^7.22.15",
        "browserslist": "^4.21.9",
        "lru-cache": "^5.1.1",
        "semver": "^6.3.1"
      },
      "dependencies": {
        "browserslist": {
          "version": "4.21.11",
          "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.11.tgz",
          "integrity": "sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==",
          "peer": true,
          "requires": {
            "caniuse-lite": "^1.0.30001538",
            "electron-to-chromium": "^1.4.526",
            "node-releases": "^2.0.13",
            "update-browserslist-db": "^1.0.13"
          }
        },
        "lru-cache": {
          "version": "5.1.1",
          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
          "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
          "peer": true,
          "requires": {
            "yallist": "^3.0.2"
          }
        },
        "node-releases": {
          "version": "2.0.13",
          "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
          "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
          "peer": true
        },
        "picocolors": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
          "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
          "peer": true
        },
        "semver": {
          "version": "6.3.1",
          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
          "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
          "peer": true
        },
        "update-browserslist-db": {
          "version": "1.0.13",
          "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
          "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
          "peer": true,
          "requires": {
            "escalade": "^3.1.1",
            "picocolors": "^1.0.0"
          }
        },
        "yallist": {
          "version": "3.1.1",
          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
          "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
          "peer": true
        }
      }
    },
    "@babel/helper-environment-visitor": {
      "version": "7.22.20",
      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
      "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
      "peer": true
    },
    "@babel/helper-function-name": {
      "version": "7.22.5",
      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz",
      "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==",
      "peer": true,
      "requires": {
        "@babel/template": "^7.22.5",
        "@babel/types": "^7.22.5"
      }
    },
    "@babel/helper-hoist-variables": {
      "version": "7.22.5",
      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
      "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
      "peer": true,
      "requires": {
        "@babel/types": "^7.22.5"
      }
    },
    "@babel/helper-module-imports": {
      "version": "7.22.15",
      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
      "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
      "requires": {
        "@babel/types": "^7.22.15"
      }
    },
    "@babel/helper-module-transforms": {
      "version": "7.22.20",
      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz",
      "integrity": "sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==",
      "peer": true,
      "requires": {
        "@babel/helper-environment-visitor": "^7.22.20",
        "@babel/helper-module-imports": "^7.22.15",
        "@babel/helper-simple-access": "^7.22.5",
        "@babel/helper-split-export-declaration": "^7.22.6",
        "@babel/helper-validator-identifier": "^7.22.20"
      }
    },
    "@babel/helper-plugin-utils": {
@@ -16046,20 +16759,74 @@
      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz",
      "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA=="
    },
    "@babel/helper-simple-access": {
      "version": "7.22.5",
      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
      "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
      "peer": true,
      "requires": {
        "@babel/types": "^7.22.5"
      }
    },
    "@babel/helper-split-export-declaration": {
      "version": "7.22.6",
      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
      "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
      "peer": true,
      "requires": {
        "@babel/types": "^7.22.5"
      }
    },
    "@babel/helper-string-parser": {
      "version": "7.19.4",
      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
      "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw=="
      "version": "7.22.5",
      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
      "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw=="
    },
    "@babel/helper-validator-identifier": {
      "version": "7.19.1",
      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
      "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w=="
      "version": "7.22.20",
      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
      "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A=="
    },
    "@babel/helper-validator-option": {
      "version": "7.22.15",
      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz",
      "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==",
      "peer": true
    },
    "@babel/helpers": {
      "version": "7.22.15",
      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz",
      "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==",
      "peer": true,
      "requires": {
        "@babel/template": "^7.22.15",
        "@babel/traverse": "^7.22.15",
        "@babel/types": "^7.22.15"
      }
    },
    "@babel/highlight": {
      "version": "7.22.20",
      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
      "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
      "peer": true,
      "requires": {
        "@babel/helper-validator-identifier": "^7.22.20",
        "chalk": "^2.4.2",
        "js-tokens": "^4.0.0"
      },
      "dependencies": {
        "js-tokens": {
          "version": "4.0.0",
          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
          "peer": true
        }
      }
    },
    "@babel/parser": {
      "version": "7.21.4",
      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz",
      "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw=="
      "version": "7.22.16",
      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz",
      "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA=="
    },
    "@babel/plugin-syntax-jsx": {
      "version": "7.16.7",
@@ -16100,13 +16867,65 @@
        }
      }
    },
    "@babel/types": {
      "version": "7.21.4",
      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz",
      "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==",
    "@babel/template": {
      "version": "7.22.15",
      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
      "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
      "peer": true,
      "requires": {
        "@babel/helper-string-parser": "^7.19.4",
        "@babel/helper-validator-identifier": "^7.19.1",
        "@babel/code-frame": "^7.22.13",
        "@babel/parser": "^7.22.15",
        "@babel/types": "^7.22.15"
      }
    },
    "@babel/traverse": {
      "version": "7.22.20",
      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.20.tgz",
      "integrity": "sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==",
      "peer": true,
      "requires": {
        "@babel/code-frame": "^7.22.13",
        "@babel/generator": "^7.22.15",
        "@babel/helper-environment-visitor": "^7.22.20",
        "@babel/helper-function-name": "^7.22.5",
        "@babel/helper-hoist-variables": "^7.22.5",
        "@babel/helper-split-export-declaration": "^7.22.6",
        "@babel/parser": "^7.22.16",
        "@babel/types": "^7.22.19",
        "debug": "^4.1.0",
        "globals": "^11.1.0"
      },
      "dependencies": {
        "debug": {
          "version": "4.3.4",
          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
          "peer": true,
          "requires": {
            "ms": "2.1.2"
          }
        },
        "globals": {
          "version": "11.12.0",
          "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
          "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
          "peer": true
        },
        "ms": {
          "version": "2.1.2",
          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
          "peer": true
        }
      }
    },
    "@babel/types": {
      "version": "7.22.19",
      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz",
      "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==",
      "requires": {
        "@babel/helper-string-parser": "^7.22.5",
        "@babel/helper-validator-identifier": "^7.22.19",
        "to-fast-properties": "^2.0.0"
      },
      "dependencies": {
@@ -16115,6 +16934,45 @@
          "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
          "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
        }
      }
    },
    "@jridgewell/gen-mapping": {
      "version": "0.3.3",
      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
      "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
      "peer": true,
      "requires": {
        "@jridgewell/set-array": "^1.0.1",
        "@jridgewell/sourcemap-codec": "^1.4.10",
        "@jridgewell/trace-mapping": "^0.3.9"
      }
    },
    "@jridgewell/resolve-uri": {
      "version": "3.1.1",
      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
      "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
      "peer": true
    },
    "@jridgewell/set-array": {
      "version": "1.1.2",
      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
      "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
      "peer": true
    },
    "@jridgewell/sourcemap-codec": {
      "version": "1.4.15",
      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
      "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
      "peer": true
    },
    "@jridgewell/trace-mapping": {
      "version": "0.3.19",
      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
      "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
      "peer": true,
      "requires": {
        "@jridgewell/resolve-uri": "^3.1.0",
        "@jridgewell/sourcemap-codec": "^1.4.14"
      }
    },
    "@mapbox/node-pre-gyp": {
@@ -16178,6 +17036,12 @@
          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
        }
      }
    },
    "@popperjs/core": {
      "version": "2.11.8",
      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
      "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
      "peer": true
    },
    "@transloadit/prettier-bytes": {
      "version": "0.0.7",
@@ -16590,7 +17454,6 @@
      "version": "3.2.1",
      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
      "dev": true,
      "requires": {
        "color-convert": "^1.9.0"
      }
@@ -18188,10 +19051,9 @@
      "dev": true
    },
    "caniuse-lite": {
      "version": "1.0.30001477",
      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001477.tgz",
      "integrity": "sha512-lZim4iUHhGcy5p+Ri/G7m84hJwncj+Kz7S5aD4hoQfslKZJgt0tHc/hafVbqHC5bbhHb+mrW2JOUHkI5KH7toQ==",
      "dev": true
      "version": "1.0.30001538",
      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz",
      "integrity": "sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw=="
    },
    "canvas": {
      "version": "2.9.0",
@@ -18233,7 +19095,6 @@
      "version": "2.4.2",
      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
      "dev": true,
      "requires": {
        "ansi-styles": "^3.2.1",
        "escape-string-regexp": "^1.0.5",
@@ -18451,7 +19312,6 @@
      "version": "1.9.3",
      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
      "dev": true,
      "requires": {
        "color-name": "1.1.3"
      }
@@ -18459,8 +19319,7 @@
    "color-name": {
      "version": "1.1.3",
      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
      "dev": true
      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
    },
    "color-string": {
      "version": "0.3.0",
@@ -18621,7 +19480,6 @@
      "version": "1.7.0",
      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
      "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
      "dev": true,
      "requires": {
        "safe-buffer": "~5.1.1"
      }
@@ -19569,10 +20427,9 @@
      "dev": true
    },
    "electron-to-chromium": {
      "version": "1.4.356",
      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.356.tgz",
      "integrity": "sha512-nEftV1dRX3omlxAj42FwqRZT0i4xd2dIg39sog/CnCJeCcL1TRd2Uh0i9Oebgv8Ou0vzTPw++xc+Z20jzS2B6A==",
      "dev": true
      "version": "1.4.528",
      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.528.tgz",
      "integrity": "sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA=="
    },
    "element-resize-detector": {
      "version": "1.2.2",
@@ -19812,8 +20669,7 @@
    "escalade": {
      "version": "3.1.1",
      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
      "dev": true
      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
    },
    "escape-html": {
      "version": "1.0.3",
@@ -19824,8 +20680,7 @@
    "escape-string-regexp": {
      "version": "1.0.5",
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
      "dev": true
      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
    },
    "escope": {
      "version": "3.6.0",
@@ -20632,6 +21487,12 @@
        }
      }
    },
    "gensync": {
      "version": "1.0.0-beta.2",
      "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
      "peer": true
    },
    "get-caller-file": {
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
@@ -20768,8 +21629,7 @@
    "has-flag": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
      "dev": true
      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
    },
    "has-symbols": {
      "version": "1.0.2",
@@ -27463,7 +28323,6 @@
      "version": "5.5.0",
      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
      "dev": true,
      "requires": {
        "has-flag": "^3.0.0"
      }
src/assets/api/controller.js
@@ -1,201 +1,195 @@
// æŠ€æœ¯ç®¡ç†-标准Bom
const standard = {
    // æŠ€æœ¯ç®¡ç†-标准Bom
    selectTreeByMaterial: "material/selectTreeByMaterial", //查询物料的树
    selectVersion: "/material/selectVersion", //右侧版本
    selectProductByMaterial: "product/selectTreeByMaterial", //根据物料查询项目表格
    selectTechnologyByMaterial: "technology/select",
    selectAll: "/material/selectAll", //右侧数据
    technologyWrite: "/technology/write", //工艺路线,移开保存生产定额
    writeDevice: "/technology/writeDevice", //工艺路线,选择设备组,移开保存
    productWrite: "/product/write", //技术指标,移开保存内控值和标准值
    chooseFather: "/technology/chooseFather", //获取工序列表
    chooseDevice: "/technology/chooseDevice", //获取设备组列表
    addTechnology: "/technology/add", //添加工艺路线
    leftAddOneTwo: "/material/add", //左侧新增1,2级
    leftAddThree: "/standard/add", //左侧三级新增
    leftAddFour: "/specifications/add", //左侧四级新增
    chooseTechByStandard: "/product/chooseTech", //右上角新增-->技术指标-->选择工序,工艺
    chooseFatherByStandard: "/product/chooseFather", //右上角新增-->技术指标-->选择项目父类
    addProductByStandard: "/product/add", //右上角新增-->技术指标
    addMBomByStandard: "/mbom/add", //右上角新增-->物料清单
    chooseTechByMBom: "/mbom/chooseTech", //右上角新增-->物料清单-->选择工序,工艺
    mBomWrite: "/mbom/write", //物料清单-->数量,移开保存
    chooseTechByProduct: "/technique/chooseTech", //右上角新增-->生产工艺-->选择工序,工艺
    addTechniqueByStandard: "/technique/add", //右上角新增-->生产工艺
    chooseProByProduct: "/technique/choosePro", //右上角新增-->生产工艺-->选择项目(父子),单位
    chooseDevByProduct: "/technique/chooseDev", //右上角新增-->生产工艺-->选择设备
    addVersion: "/material/addVersion", //添加同一个型号工艺路线,技术指标,物料清单,生产工艺的版本
    delAllByTechnology: "/technology/delAllTech", //工艺路线-批量删除
    delAllByTarget: "/product/delAllPro", //技术指标-批量删除
    delAllByMBom: "/mbom/delAllMbom", //物料清单-批量删除
    delAllByProduct: "/technique/delAllTeq", //生产工艺-批量删除
    // æŠ€æœ¯ç®¡ç†-技术文件
    selectAllOrder: "/orders/selectAllOrder", //查询所有订单列表
    selectOrderById: "/orders/selectOrderById", //根据订单id查询订单详情
    // æŠ€æœ¯ç®¡ç†-标准Bom
    selectTreeByMaterial: "material/selectTreeByMaterial", //查询物料的树
    selectVersion: "/material/selectVersion", //右侧版本
    selectProductByMaterial: "product/selectTreeByMaterial", //根据物料查询项目表格
    selectTechnologyByMaterial: "technology/select",
    selectAll: "/material/selectAll", //右侧数据
    technologyWrite: "/technology/write", //工艺路线,移开保存生产定额
    writeDevice: "/technology/writeDevice", //工艺路线,选择设备组,移开保存
    productWrite: "/product/write", //技术指标,移开保存内控值和标准值
    chooseFather: "/technology/chooseFather", //获取工序列表
    chooseDevice: "/technology/chooseDevice", //获取设备组列表
    addTechnology: "/technology/add", //添加工艺路线
    leftAddOneTwo: "/material/add", //左侧新增1,2级
    leftAddThree: "/standard/add", //左侧三级新增
    leftAddFour: "/specifications/add", //左侧四级新增
    chooseTechByStandard: "/product/chooseTech", //右上角新增-->技术指标-->选择工序,工艺
    chooseFatherByStandard: "/product/chooseFather", //右上角新增-->技术指标-->选择项目父类
    addProductByStandard: "/product/add", //右上角新增-->技术指标
    addMBomByStandard: "/mbom/add", //右上角新增-->物料清单
    chooseTechByMBom: "/mbom/chooseTech", //右上角新增-->物料清单-->选择工序,工艺
    mBomWrite: "/mbom/write", //物料清单-->数量,移开保存
    chooseTechByProduct: "/technique/chooseTech", //右上角新增-->生产工艺-->选择工序,工艺
    addTechniqueByStandard: "/technique/add", //右上角新增-->生产工艺
    chooseProByProduct: "/technique/choosePro", //右上角新增-->生产工艺-->选择项目(父子),单位
    chooseDevByProduct: "/technique/chooseDev", //右上角新增-->生产工艺-->选择设备
    addVersion: "/material/addVersion", //添加同一个型号工艺路线,技术指标,物料清单,生产工艺的版本
    delAllByTechnology: "/technology/delAllTech", //工艺路线-批量删除
    delAllByTarget: "/product/delAllPro", //技术指标-批量删除
    delAllByMBom: "/mbom/delAllMbom", //物料清单-批量删除
    delAllByProduct: "/technique/delAllTeq", //生产工艺-批量删除
    // æŠ€æœ¯ç®¡ç†-技术文件
    selectAllOrder: "/orders/selectAllOrder", //查询所有订单列表
    selectOrderById: "/orders/selectOrderById", //根据订单id查询订单详情
    //订单BOM
    delDevice: "/device/delDeviceById", //订单Bom
    compile: "/orders/compile", //编制
    //订单BOM
    delDevice: "/device/delDeviceById", //订单Bom
    compile: "/orders/compile", //编制
}
// åŽŸææ–™æ£€éªŒ
const raw = {
    selectRawInspectsList: "/rawInspect/selectRawInspectsList", //查询原材料检验单列表
    selectRawInspectsListById: "/rawInspect/selectRawInspectsListById/", //根据检验单id获取检验单详情
    updaterawInsProduct: '/rawInsProduct/updaterawInsProduct', //修改项目的检验值
    updateRawInspectsById: "/rawInspect/updateRawInspectsById/", //上报,
    rawSelectDevice: "/rawInsProduct/selectDevice", //查询设备信息
    addRawInspects: "/rawInspect/addRawInspects", // æ·»åŠ 
    updateDevByRpId: "/rawInsProduct/updateDevByRpId", // æ›´æ”¹è®¾å¤‡
    selectRawInspectsList: "/rawInspect/selectRawInspectsList", //查询原材料检验单列表
    selectRawInspectsListById: "/rawInspect/selectRawInspectsListById/", //根据检验单id获取检验单详情
    updaterawInsProduct: '/rawInsProduct/updaterawInsProduct', //修改项目的检验值
    updateRawInspectsById: "/rawInspect/updateRawInspectsById/", //上报,
    rawSelectDevice: "/rawInsProduct/selectDevice", //查询设备信息
    addRawInspects: "/rawInspect/addRawInspects", // æ·»åŠ 
    updateDevByRpId: "/rawInsProduct/updateDevByRpId", // æ›´æ”¹è®¾å¤‡
}
//不合格原材料
const unqualifiedaa = {
    selectUnRawInspectsList: "/inspectUnaccepted/selectURawMaterials", // æŸ¥è¯¢åŽŸææ–™ä¸åˆæ ¼å“æ£€éªŒå•åˆ—è¡¨
    evaluatePassOrNo: "/inspectUnaccepted/evaluatePassOrNo" // è¯„审
}
// æŸ¥è¯¢æˆå“ä¸åˆæ ¼å“ç®¡ç†
const unRawInspects = {
    inspectUnaccepted: "/inspectUnaccepted/selectUnRawInspectsList"
    inspectUnaccepted: "/inspectUnaccepted/selectUnRawInspectsList", // æŸ¥è¯¢ä¸åˆæ ¼å“ç®¡ç†æ£€éªŒå•列表
    evaluatePassOrNo: "/inspectUnaccepted/evaluatePassOrNo" // è¯„审
}
//不合格品处置
const dispose = {
    getTable: "/inspectUnaccepted/selectDisposal", // ä¸åˆæ ¼å“åˆ†é¡µåˆ—表
    descriptionUpdate: "/inspectUnaccepted/descriptionUpdate", // å¤±ç„¦æ›´æ–°çŽ°åƒæè¿°
    viewEditorial: "/inspectUnaccepted/viewEditorial", // æŸ¥çœ‹ç¼–辑意见
    clickEditing: "/inspectUnaccepted/clickEditing", // ç‚¹å‡»ç¼–辑意见触发查询
    addOpinion: "/inspectUnaccepted/addOpinion" // ç¼–辑意见-->确定按钮
    getTable: "/inspectUnaccepted/selectDisposal", // ä¸åˆæ ¼å“åˆ†é¡µåˆ—表
    descriptionUpdate: "/inspectUnaccepted/descriptionUpdate", // å¤±ç„¦æ›´æ–°çŽ°åƒæè¿°
    editDisposalOpinion: "/inspectUnaccepted/editDisposalOpinion", // ç¼–辑处置意见确定按钮
}
// æˆå“æ£€éªŒ
const finishedIns = {
    finishedInsListPage: "/finished-inspect/list_page", //获取成品检验列表
    // listMaterial:"/finished-inspect/list_material",//添加检验单时的项目列表
    finishedInspectUser: "/finished-inspect/page_user", //获取所有主机工
    projectListByfinishId: "/inspection-item/list_user", //根据id查询所有项目
    processInspectAddProcess: "/processInspect/addProcess", //新增检验
    inspectionItemListUser: "/inspection-item/list_user", //查询所有检验项目
    finishedInspectChooseMater: "/finished-inspect/chooseMater", //根据订单号得到信息
    finishedInspectAddFinish: "/finished-inspect/addFinish", //新增成品检验
    finishedInspectUpdateFinishInspectsById: "/finished-inspect/updateFinishInspectsById", //上报
    finishedInspectSelectFinishInspectsListById: "/finished-inspect/selectFinishInspectsListById"
    finishedInsListPage: "/finished-inspect/list_page", //获取成品检验列表
    // listMaterial:"/finished-inspect/list_material",//添加检验单时的项目列表
    finishedInspectUser: "/finished-inspect/page_user", //获取所有主机工
    projectListByfinishId: "/inspection-item/list_user", //根据id查询所有项目
    processInspectAddProcess: "/processInspect/addProcess", //新增检验
    inspectionItemListUser: "/inspection-item/list_user", //查询所有检验项目
    finishedInspectChooseMater: "/finished-inspect/chooseMater", //根据订单号得到信息
    finishedInspectAddFinish: "/finished-inspect/addFinish", //新增成品检验
    finishedInspectUpdateFinishInspectsById: "/finished-inspect/updateFinishInspectsById", //上报
    finishedInspectSelectFinishInspectsListById: "/finished-inspect/selectFinishInspectsListById"
}
// è¿‡ç¨‹æ£€éªŒ
const processInspection = {
    selectProcessInspectsList: "/processInspect/selectProcessInspectsList", // åˆ†é¡µæŸ¥è¯¢è¿‡ç¨‹æ£€éªŒå•列表
    chooseMaterProcessInspect: "/processInspect/chooseMater", //根据订单号选择产品和工艺
    inspectionItemUpdateDevByInsId: "/inspection-item/updateDevByInsId", //更改设备
    inspectionItemlose_focus_update: "/inspection-item/lose_focus_update", //检验值
    processInspectUpdateProcessInspectsById: "/processInspect/updateProcessInspectsById", //上报
    inspectionItemChooseDev: "/inspection-item/chooseDev",
    processInspectSelectProcessInspectsListById: "/processInspect/selectProcessInspectsListById"
    selectProcessInspectsList: "/processInspect/selectProcessInspectsList", // åˆ†é¡µæŸ¥è¯¢è¿‡ç¨‹æ£€éªŒå•列表
    chooseMaterProcessInspect: "/processInspect/chooseMater", //根据订单号选择产品和工艺
    inspectionItemUpdateDevByInsId: "/inspection-item/updateDevByInsId", //更改设备
    inspectionItemlose_focus_update: "/inspection-item/lose_focus_update", //检验值
    processInspectUpdateProcessInspectsById: "/processInspect/updateProcessInspectsById", //上报
    inspectionItemChooseDev: "/inspection-item/chooseDev",
    processInspectSelectProcessInspectsListById: "/processInspect/selectProcessInspectsListById"
}
// QMS实验室管理
const laboratory = {
    delDeviceById: "/device/delDeviceById", //删除
    addApi: "/device/add", //新增
    listgroup: "/device/list_group",
    selectDevice: "/device/selectDevice", //右边展示
    addDeviceInspectDownBox: "/device/listInspect", // æ–°å¢žä»ªå™¨è®¾å¤‡ï¼šæ£€éªŒé¡¹ç›®ä¸‹æ‹‰æ¡†
    selectDeviceInspectMessage: "/device/inspectId", // æ–°å¢žä»ªå™¨è®¾å¤‡ï¼šæ ¹æ®æ£€éªŒé¡¹ç›®ID查询数据
    addDeviceKeeper: "/device/list_user", // æ–°å¢žä»ªå™¨è®¾å¤‡ï¼šä¿ç®¡äººä¸‹æ‹‰æ¡†
    addDeviceParentClassification: "/device/parent_classification", // æ–°å¢žä»ªå™¨è®¾å¤‡ï¼šæŸ¥è¯¢çˆ¶çº§åˆ†ç±»
    addDeviceInstrument: "/device/add", // æ–°å¢žä»ªå™¨è®¾å¤‡
    towTree: "/device/two_tree", //二级树
    tableDeviceList: "/device/table_list", // å®žéªŒå®¤æ¨¡å—表格数据
    deleteDevice: "/device/delete", // åˆ é™¤å®žéªŒå®¤è®¾å¤‡
    deleteIdorFather: "/device/deleteIdorFather" // åˆ é™¤æ ‘模块数据
    delDeviceById: "/device/delDeviceById", //删除
    addApi: "/device/add", //新增
    listgroup: "/device/list_group",
    selectDevice: "/device/selectDevice", //右边展示
    addDeviceInspectDownBox: "/device/listInspect", // æ–°å¢žä»ªå™¨è®¾å¤‡ï¼šæ£€éªŒé¡¹ç›®ä¸‹æ‹‰æ¡†
    selectDeviceInspectMessage: "/device/inspectId", // æ–°å¢žä»ªå™¨è®¾å¤‡ï¼šæ ¹æ®æ£€éªŒé¡¹ç›®ID查询数据
    addDeviceKeeper: "/device/list_user", // æ–°å¢žä»ªå™¨è®¾å¤‡ï¼šä¿ç®¡äººä¸‹æ‹‰æ¡†
    addDeviceParentClassification: "/device/parent_classification", // æ–°å¢žä»ªå™¨è®¾å¤‡ï¼šæŸ¥è¯¢çˆ¶çº§åˆ†ç±»
    addDeviceInstrument: "/device/add", // æ–°å¢žä»ªå™¨è®¾å¤‡
    towTree: "/device/two_tree", //二级树
    tableDeviceList: "/device/table_list", // å®žéªŒå®¤æ¨¡å—表格数据
    deleteDevice: "/device/delete", // åˆ é™¤å®žéªŒå®¤è®¾å¤‡
    deleteIdorFather: "/device/deleteIdorFather" // åˆ é™¤æ ‘模块数据
}
//search_class:codeNameModel
// QMS计量管理
const measure = {
    measureLedgerPageTable: "/measureLedger/metering_table", // è®¡é‡é¢„测-->分页表格
    meteringPlanPageTable: "/meteringPlan/metering_table", // è®¡é‡è®¡åˆ’-->分页表格
    meteringPlanListRecord: "/meteringPlan/list_record", // è®¡é‡è®¡åˆ’<-->计量台账:查看计量履历
    meterPlanListDevice: "/meteringPlan/list_device", //新增计划设备下拉框
    createPerson: "/meteringPlan/list_user", //创建人下拉框
    meteringPlanDevicePlan: "/meteringPlan/add_plan", // è®¡é‡è®¡åˆ’-->新增按钮
    measureLedgerPageTable: "/measureLedger/metering_table", // è®¡é‡é¢„测-->分页表格
    meteringPlanPageTable: "/meteringPlan/metering_table", // è®¡é‡è®¡åˆ’-->分页表格
    meteringPlanListRecord: "/meteringPlan/list_record", // è®¡é‡è®¡åˆ’<-->计量台账:查看计量履历
    meterPlanListDevice: "/meteringPlan/list_device", //新增计划设备下拉框
    createPerson: "/meteringPlan/list_user", //创建人下拉框
    meteringPlanDevicePlan: "/meteringPlan/add_plan", // è®¡é‡è®¡åˆ’-->新增按钮
}
//基础数据
const Basicdata = {
    selectAllTechNam: "/technologyTemplate/selectAllTechNam", //工艺路线-->右边
    selectAllTechTem: "/technologyTemplate/selectAllTechTem", //工艺路线-->左边
    chooseDevGroup: "/technologyTemplate/chooseDevGroup", //新增工艺路线--》选择设备组
    chooseElement: "/technologyTemplate/chooseElement", //新增工艺路线-->选择元件
    addTechTemp: "/technologyTemplate/addTechTemp", //新增工艺路线==>新增
    chooseTech: "/technologyTemplate/chooseTech", //新增工艺路线--》选则工序
    writeTechById: "/technologyTemplate/writeTechById", //新增工艺路线-->编辑传参
    delTechById: "/technologyTemplate/delTechById", //新增工艺路线==>删除
    selecTechById: "/technologyTemplate/selecTechById", //新增工艺路线--》编辑
    delAllTech: "/technologyTemplate/delAllTech", //批量删除
    selectAllTechNam: "/technologyTemplate/selectAllTechNam", //工艺路线-->右边
    selectAllTechTem: "/technologyTemplate/selectAllTechTem", //工艺路线-->左边
    chooseDevGroup: "/technologyTemplate/chooseDevGroup", //新增工艺路线--》选择设备组
    chooseElement: "/technologyTemplate/chooseElement", //新增工艺路线-->选择元件
    addTechTemp: "/technologyTemplate/addTechTemp", //新增工艺路线==>新增
    chooseTech: "/technologyTemplate/chooseTech", //新增工艺路线--》选则工序
    writeTechById: "/technologyTemplate/writeTechById", //新增工艺路线-->编辑传参
    delTechById: "/technologyTemplate/delTechById", //新增工艺路线==>删除
    selecTechById: "/technologyTemplate/selecTechById", //新增工艺路线--》编辑
    delAllTech: "/technologyTemplate/delAllTech", //批量删除
    addTechMode: "/technicalModel/addTechMode", //技术指标---》新增
    delTechBy: "/technicalModel/delTechById", //技术--.删除
    delAllTechskill: "/technicalModel/delAllTech", //批量删除
    selectAllleft: "/technicalModel/selectAllTechTem", //技术指标-->左边
    selectAllright: "/technicalModel/selectAllTechNam", //技术指标--》右边
    chooseProFath: "/technicalModel/chooseProFath", //技术指标---》父类选择
    chooseTechFath: "/technicalModel/chooseTechFath", // æŠ€æœ¯--->工序工艺
    selecTech: "/technicalModel/selecTechById", //技术--->编辑
    writeTechByIdskill: "/technicalModel/writeTechById", //编辑传
    addTechMode: "/technicalModel/addTechMode", //技术指标---》新增
    delTechBy: "/technicalModel/delTechById", //技术--.删除
    delAllTechskill: "/technicalModel/delAllTech", //批量删除
    selectAllleft: "/technicalModel/selectAllTechTem", //技术指标-->左边
    selectAllright: "/technicalModel/selectAllTechNam", //技术指标--》右边
    chooseProFath: "/technicalModel/chooseProFath", //技术指标---》父类选择
    chooseTechFath: "/technicalModel/chooseTechFath", // æŠ€æœ¯--->工序工艺
    selecTech: "/technicalModel/selecTechById", //技术--->编辑
    writeTechByIdskill: "/technicalModel/writeTechById", //编辑传
    selectAllMbom: "/mbomModel/selectAllMbom", //物料维护--》右边
    addMbom: "/mbomModel/addMbom", //物料--->新增
    material: "/mbomModel/delMbomById", //物料清单删除
    delAllMbom: "/mbomModel/delAllMbom", //批量删除
    selectAllMbom: "/mbomModel/selectAllMbom", //物料维护--》右边
    addMbom: "/mbomModel/addMbom", //物料--->新增
    material: "/mbomModel/delMbomById", //物料清单删除
    delAllMbom: "/mbomModel/delAllMbom", //批量删除
    selectAllTeque: "/techniqueModel/selectAllTeque", //生产工艺维护---。右边
    selectAllTeque: "/techniqueModel/selectAllTeque", //生产工艺维护---。右边
    selectAllSelf: "/selfcheckModel/selectAllSelf", //自建维护-----》右边
    addSelfcheck: "/selfcheckModel/addSelfcheck", //自检  ------》新增
    delSelfcheck: "/selfcheckModel/delSelfcheckById", //自检----.删除
    delAll: "selfcheckModel/delAllTech", //批量删除---.自检
    selectAllSelf: "/selfcheckModel/selectAllSelf", //自建维护-----》右边
    addSelfcheck: "/selfcheckModel/addSelfcheck", //自检  ------》新增
    delSelfcheck: "/selfcheckModel/delSelfcheckById", //自检----.删除
    delAll: "selfcheckModel/delAllTech", //批量删除---.自检
    selectjilu: "/recordModel/selectAllRecord", //生产记录维护---》右边
    selecRecord: "/recordModel/selecRecordById", //生产记录----.新增
    writeRecordById: "/recordModel/writeRecordById", //编辑
    delQueByIdapi: "/recordModel/delQueById", //删除---.记录内容
    selectjilu: "/recordModel/selectAllRecord", //生产记录维护---》右边
    selecRecord: "/recordModel/selecRecordById", //生产记录----.新增
    writeRecordById: "/recordModel/writeRecordById", //编辑
    delQueByIdapi: "/recordModel/delQueById", //删除---.记录内容
    delAllRecord: "/recordModel/delAllRecord", //删除批量--->记录
    addRecord: "/recordModel/addRecord", //生产记录-------.新增
    delAllRecord: "/recordModel/delAllRecord", //删除批量--->记录
    addRecord: "/recordModel/addRecord", //生产记录-------.新增
    choosePro: "/techniqueModel/choosePro", //新增生产工艺维护---》选择父类
    chooseDeiv: "/techniqueModel/chooseDeiv", //新增----->设备
    addQeMode: "/techniqueModel/addQeMode", //新增----》传参
    delQueById: "/techniqueModel/delQueById", //删除
    delAllQue: "/techniqueModel/delAllQue", //批量删除
    selecQueById: "/techniqueModel/selecQueById", //编辑
    writeQueById: "/techniqueModel/writeQueById", //编辑传参
    choosePro: "/techniqueModel/choosePro", //新增生产工艺维护---》选择父类
    chooseDeiv: "/techniqueModel/chooseDeiv", //新增----->设备
    addQeMode: "/techniqueModel/addQeMode", //新增----》传参
    delQueById: "/techniqueModel/delQueById", //删除
    delAllQue: "/techniqueModel/delAllQue", //批量删除
    selecQueById: "/techniqueModel/selecQueById", //编辑
    writeQueById: "/techniqueModel/writeQueById", //编辑传参
}
const url = {
    enter: "user/enter", //登录
    ...standard,
    ...raw,
    ...laboratory,
    ...measure,
    ...finishedIns,
    ...unqualifiedaa,
    ...dispose,
    ...Basicdata,
    ...unRawInspects,
    ...processInspection,
    // ...gettable,
    selectSaleList: "sale/selectSaleList", //查询销售单列表
    selectSaleDatilById: "sale/selectSaleDatilById", //根据销售单id查看详情,
    addSale: "sale/addSale", //新增销售单
    saleCheck: "sale/check", //审核销售单
    synchronization: "sale/synchronization", //同步
    updateSaleById: "sale/updateSaleById", //根据销售单id修改详情信息
    delSale: "sale/delSale", //根据销售单id删除
    delAllSale: "sale/delAllSale", //批量删除销售单,
    chooseType: "technologyTemplate/chooseType", //查询类型
    enter: "user/enter", //登录
    ...standard,
    ...raw,
    ...laboratory,
    ...measure,
    ...finishedIns,
    ...dispose,
    ...Basicdata,
    ...unRawInspects,
    ...processInspection,
    // ...gettable,
    selectSaleList: "sale/selectSaleList", //查询销售单列表
    selectSaleDatilById: "sale/selectSaleDatilById", //根据销售单id查看详情,
    addSale: "sale/addSale", //新增销售单
    saleCheck: "sale/check", //审核销售单
    synchronization: "sale/synchronization", //同步
    updateSaleById: "sale/updateSaleById", //根据销售单id修改详情信息
    delSale: "sale/delSale", //根据销售单id删除
    delAllSale: "sale/delAllSale", //批量删除销售单,
    chooseType: "technologyTemplate/chooseType", //查询类型
}
export default function(Vue) {
    //添加全局API
    Vue.prototype.$api = {
        url
    }
export default function (Vue) {
    //添加全局API
    Vue.prototype.$api = {
        url
    }
}
src/components/view/Processingproducts.vue
@@ -1,410 +1,285 @@
<template>
  <div class="unqualifiedBox">
    <el-row>
      <el-col :span="12" style="line-height: 32px;">不合格品处置</el-col>
      <el-col :span="12" style="text-align: right;">
        <el-button icon="el-icon-download" size="mini" @click="() => {}"
          >导出</el-button
        >
      </el-col>
    </el-row>
    <div style="margin-top: 10px;">
      <el-card shadow="hover" class="margin-30" style="height: 80px;">
        <div class="choose">
          <span>产品名称:</span>
          <el-input
            size="small"
            v-model="search.productName"
            style="width: 13vw;margin-right: 5px;"
            placeholder="请输入"
            clearable
          ></el-input>
          <span>规格型号:</span>
          <el-input
            size="small"
            v-model="search.specificationModel"
            style="width: 13vw;margin-right: 5px;"
            placeholder="请输入"
            clearable
          ></el-input>
          <span>产品大类:</span>
          <el-select
            v-model="search.productCategories"
            size="small"
            placeholder="请选择"
            style="width: 13vw;margin-right: 5px;"
          >
            <el-option label="原材料" :value="0"></el-option>
            <el-option label="成品" :value="1"></el-option>
            <el-option label="半成品" :value="2"></el-option>
          </el-select>
          <span>状态:</span>
          <el-select
            v-model="search.state"
            size="small"
            placeholder="请选择"
            style="width: 13vw;margin-right: 5px;"
          >
            <el-option label="返修中" :value="1"></el-option>
            <el-option label="待处理" :value="0"></el-option>
          </el-select>
          <el-button size="mini" @click="clean()"><span>重 ç½®</span></el-button>
          <el-button
            size="mini"
            type="primary"
            style="background: #004EA2;"
            @click="
              unqualifiedTable = [];
              getDetailInfo();
            "
            ><span>查 è¯¢</span></el-button
          >
        </div>
      </el-card>
    </div>
    <div class="tableno" style="height:300px">
      <el-card shadow="hover" class="margin-30">
        <el-table
          :data="unqualifiedTable"
          border
          ref="multipleTable"
          tooltip-effect="dark"
          height="calc(100vh - 340px)"
          style="width: 100%"
        >
          <el-table-column type="selection" min-width="50"> </el-table-column>
          <el-table-column type="index" label="序号" width="60">
            <template slot-scope="scope">
              {{ (search.pageSize - 1) * search.countSize + scope.$index + 1 }}
            </template>
          </el-table-column>
          <el-table-column prop="dateArrival" label="产品大类">
            <template slot-scope="scope">
              <span v-if="scope.row.type == 0">原材料</span>
              <span v-if="scope.row.type == 1">成品</span>
              <span v-if="scope.row.type == 2">半成品</span>
            </template>
          </el-table-column>
          <el-table-column
            prop="productName"
            label="产品名称"
            min-width="90"
            show-overflow-tooltip
          >
          </el-table-column>
          <el-table-column prop="specifications" label="规格型号">
          </el-table-column>
          <el-table-column prop="number" label="不合格品数量">
          </el-table-column>
          <el-table-column label="现像描述" min-width="150">
            <template slot-scope="scope">
              <el-input
                size="small"
                v-model="scope.row.description"
                @blur="outOfFocusDescription(scope)"
              ></el-input>
            </template>
          </el-table-column>
          <el-table-column label="处置意见">
            <template slot-scope="scope">
              <el-button type="text" @click="showDisposalOpinions(scope)"
                >查看处置意见</el-button
              >
            </template>
          </el-table-column>
          <el-table-column prop="user_name" label="申请人"> </el-table-column>
          <el-table-column prop="date" label="日期"> </el-table-column>
          <el-table-column prop="deal_state" label="状态">
            <template slot-scope="scope">
              <span style="color:#34BD66;" v-if="scope.row.deal_state == 1"
                >已处理</span
              >
              <span style="color:#E84738;" v-else-if="scope.row.deal_state == 0"
                >待处理</span
              >
            </template>
          </el-table-column>
          <el-table-column label="操作" width="130">
            <template slot-scope="scope">
              <div style="display: flex;">
                <el-button type="text" siae="small" size="mini">附件</el-button>
                <el-button
                  type="text"
                  siae="small"
                  size="mini"
                  style=" color:87, 138, 193 ;"
                  @click="clickEditorialOpinion(scope)"
                  >编辑意见</el-button
                >
              </div>
            </template>
          </el-table-column>
        </el-table>
        <el-col
          style="height: 50px;display: flex;align-items: center;justify-content: right;"
        >
          <el-pagination
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            :current-page="search.pageSize"
            :page-sizes="[10, 15, 20, 30, 50]"
            :page-size="search.countSize"
            layout="total, sizes, prev, pager, next, jumper"
            :total="total"
          >
          </el-pagination>
        </el-col>
      </el-card>
    </div>
    <el-dialog title="提示" :visible.sync="dialogVisible" width="30%">
      <el-form label-width="130px" style="height: 500px; overflow: auto ;">
        <el-empty
          v-if="updateEditList.length == 0"
          :image-size="200"
        ></el-empty>
        <div v-for="item in updateEditList" :key="item.$index">
          <el-form-item
            :label="
              item.type == 0
                ? '技术部处置意见:'
                : item.type == 1
                ? '生产部处置意见:'
                : item.type == 2
                ? '质量部处置意见:'
                : '总经办处置意见:'
            "
          >
            <el-input
              type="textarea"
              :rows="2"
              placeholder="请输入内容"
              v-model="item.tell"
            >
            </el-input>
          </el-form-item>
          <el-row v-if="isShow == true">
            <el-col :span="12">
              <el-form-item label="填写人:" v-if="isShow == true">
                {{ item.name }}
              </el-form-item>
    <div class="unqualifiedBox">
        <el-row>
            <el-col :span="12" style="line-height: 32px;">不合格品处置</el-col>
            <el-col :span="12" style="text-align: right;">
                <el-button icon="el-icon-download" size="mini" @click="() => { }">导出</el-button>
            </el-col>
            <el-col :span="12">
              <el-form-item label="填写日期:" v-if="isShow == true">
                {{ item.fillDate }}
              </el-form-item>
            </el-col>
          </el-row>
          <el-form-item label="处置方式:">
            <el-radio-group v-model="item.way">
              <el-radio :label="0">返工</el-radio>
              <el-radio :label="1">返修</el-radio>
              <el-radio :label="2">让步接收</el-radio>
              <el-radio :label="3">拒收</el-radio>
              <el-radio :label="4">降级使用</el-radio>
              <el-radio :label="5">报废</el-radio>
            </el-radio-group>
          </el-form-item>
          <el-divider v-if="item.type != 3"></el-divider>
        </el-row>
        <div style="margin-top: 1em;">
            <el-card shadow="hover" style="height: 6em; display: flex;align-items: center;">
                <div class="choose">
                    <span>产品名称:</span>
                    <el-input size="small" v-model="search.productName" style="width: 13vw;margin-right: 5px;" placeholder="请输入" clearable></el-input>
                    <span>规格型号:</span>
                    <el-input size="small" v-model="search.specificationModel" style="width: 13vw;margin-right: 5px;" placeholder="请输入" clearable></el-input>
                    <span>产品大类:</span>
                    <el-select v-model="search.productCategories" size="small" placeholder="请选择" style="width: 13vw;margin-right: 5px;">
                        <el-option label="原材料" :value="0"></el-option>
                        <el-option label="半成品" :value="1"></el-option>
                        <el-option label="在制品" :value="2"></el-option>
                    </el-select>
                    <span>状态:</span>
                    <el-select v-model="search.state" size="small" placeholder="请选择" style="width: 13vw;margin-right: 5px;">
                        <el-option label="返修中" :value="1"></el-option>
                        <el-option label="待处理" :value="0"></el-option>
                    </el-select>
                    <el-button size="mini" @click="clean()"><span>重 ç½®</span></el-button>
                    <el-button size="mini" type="primary" style="background: #004EA2;" @click="unqualifiedTable = [];getDetailInfo();"><span>查 è¯¢</span></el-button>
                </div>
            </el-card>
        </div>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="updateEditDevided()">ç¡® å®š</el-button>
      </span>
    </el-dialog>
  </div>
        <div class="tableno" style="height:300px">
            <el-card shadow="hover">
                <el-table :data="unqualifiedTable" border tooltip-effect="dark" height="calc(100vh - 340px)" style="width: 100%" :header-cell-style="{height: '50px'}">
                    <el-table-column type="index" label="序号" width="60">
                        <template slot-scope="scope">
                            {{ (search.pageSize - 1) * search.countSize + scope.$index + 1 }}
                        </template>
                    </el-table-column>
                    <el-table-column prop="dateArrival" label="产品大类" min-width="100">
                        <template slot-scope="scope">
                            <span v-if="scope.row.type == 0">原材料</span>
                            <span v-if="scope.row.type == 1">半成品</span>
                            <span v-if="scope.row.type == 2">在制品</span>
                        </template>
                    </el-table-column>
                    <el-table-column prop="productName" label="产品名称" min-width="100" show-overflow-tooltip>
                    </el-table-column>
                    <el-table-column prop="specifications" label="规格型号" min-width="100">
                    </el-table-column>
                    <el-table-column prop="number" label="不合格品数量" min-width="150">
                    </el-table-column>
                    <el-table-column label="现像描述" min-width="150">
                        <template slot-scope="scope">
                            <el-input size="small" v-model="scope.row.description" @blur="outOfFocusDescription(scope)"></el-input>
                        </template>
                    </el-table-column>
                    <el-table-column label="处置意见" min-width="100">
                        1232
                    </el-table-column>
                    <el-table-column prop="user_name" label="申请人" min-width="80"> </el-table-column>
                    <el-table-column prop="date" label="日期" min-width="150"> </el-table-column>
                    <el-table-column prop="deal_state" label="状态">
                        <template slot-scope="scope">
                            <span style="color:#34BD66;" v-if="scope.row.deal_state == 1">已处理</span>
                            <span style="color:#E84738;" v-else-if="scope.row.deal_state == 0">待处理</span>
                        </template>
                    </el-table-column>
                    <el-table-column label="操作" min-width="130" fixed="right">
                        <template slot-scope="scope">
                            <div style="display: flex;">
                                <el-button type="text" siae="small" size="mini">附件</el-button>
                                <el-button type="text" siae="small" size="mini" style=" color:87, 138, 193 ;" @click="clickEditorialOpinion(scope)">编辑意见</el-button>
                            </div>
                        </template>
                    </el-table-column>
                </el-table>
                <el-col style="height: 50px;display: flex;align-items: center;justify-content: right;">
                    <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="search.pageSize" :page-sizes="[10, 15, 20, 30, 50]" :page-size="search.countSize" layout="total, sizes, prev, pager, next, jumper" :total="total">
                    </el-pagination>
                </el-col>
            </el-card>
        </div>
        <el-dialog title="最终处置意见" :visible.sync="dialogVisible" width="30%">
            <el-form label-width="120px">
                <div>
                    <el-form-item label="最终处置意见:">
                        <el-input type="textarea" :rows="3" placeholder="请输入内容" v-model="clickEditOpinion.opinion_tell" />
                    </el-form-item>
                    <el-form-item label="处置方式:">
                        <el-radio-group v-model="clickEditOpinion.way">
                            <el-radio :label="3">接收</el-radio>
                            <el-radio v-if="clickEditOpinion.type == 0" :label="2">让步接收</el-radio>
                            <el-radio v-if="clickEditOpinion.type !== 0" :label="4">降级使用</el-radio>
                            <el-radio v-if="clickEditOpinion.type == 0" :label="7">换货</el-radio>
                            <el-radio v-if="clickEditOpinion.type == 0" :label="6">退货</el-radio>
                            <el-radio :label="1">返工返修</el-radio>
                            <el-radio v-if="clickEditOpinion.type !== 0" :label="5">报废</el-radio>
                        </el-radio-group>
                    </el-form-item>
                </div>
            </el-form>
            <span slot="footer" class="dialog-footer">
                <el-button @click="dialogVisible = false">取 æ¶ˆ</el-button>
                <el-button type="primary" @click="updateEditDevided()">ç¡® å®š</el-button>
            </span>
        </el-dialog>
    </div>
</template>
<script>
import { watch } from "vue";
export default {
  data() {
    return {
      isShow: false,
      search: {
        countSize: 10, // æ¡æ•°/页
        pageSize: 1, // èµ·å§‹é¡µ
        productCategories: "", // äº§å“å¤§ç±»
        productName: "", // äº§å“åç§°
        specificationModel: "", // è§„格型号
        state: "" // çŠ¶æ€
      },
      unqualifiedTable: [], // é¡µé¢è¡¨æ ¼æ•°æ®
      total: 0, // æ€»æ¡æ•°
      dialogVisible: false, // æ˜¾ç¤ºå¼¹å‡ºæ¡†
      updateEditList: []
    };
  },
  mounted() {
    this.getDetailInfo();
  },
  methods: {
    // åˆ†é¡µ
    handleSizeChange(val) {
      this.search.countSize = val;
      this.getDetailInfo();
    data() {
        return {
            isShow: false,
            search: {
                countSize: 10, // æ¡æ•°/页
                pageSize: 1, // èµ·å§‹é¡µ
                productCategories: "", // äº§å“å¤§ç±»
                productName: "", // äº§å“åç§°
                specificationModel: "", // è§„格型号
                state: "", // çŠ¶æ€
            },
            unqualifiedTable: [], // é¡µé¢è¡¨æ ¼æ•°æ®
            total: 0, // æ€»æ¡æ•°
            dialogVisible: false, // æ˜¾ç¤ºå¼¹å‡ºæ¡†
            clickEditOpinion: "", // ç‚¹å‡»ç¼–辑意见临时存储该行数据
        };
    },
    // åˆ†é¡µ
    handleCurrentChange(val) {
      this.search.pageSize = val;
      this.getDetailInfo();
    mounted() {
        this.getDetailInfo();
    },
    // åˆ†é¡µè¡¨æ ¼æ•°æ®
    getDetailInfo() {
      this.axios
        .get(this.$api.url.getTable, {
          params: this.search
        })
        .then(res => {
          this.unqualifiedTable = res.data.row;
          this.total = res.data.total;
        });
    methods: {
        // åˆ†é¡µ
        handleSizeChange(val) {
            this.search.countSize = val;
            this.getDetailInfo();
        },
        // åˆ†é¡µ
        handleCurrentChange(val) {
            this.search.pageSize = val;
            this.getDetailInfo();
        },
        // åˆ†é¡µè¡¨æ ¼æ•°æ®
        getDetailInfo() {
            this.axios
                .get(this.$api.url.getTable, {
                    params: this.search,
                })
                .then((res) => {
                    this.unqualifiedTable = res.data.row;
                    this.total = res.data.total;
                });
        },
        // é‡ç½®æŒ‰é’®
        clean() {
            this.search = {
                countSize: 10, // æ¡æ•°/页
                pageSize: 1, // èµ·å§‹é¡µ
                productCategories: "", // äº§å“å¤§ç±»
                productName: "", // äº§å“åç§°
                specificationModel: "", // è§„格型号
                state: "", // çŠ¶æ€
            };
            this.getDetailInfo();
        },
        // ç‚¹å‡»ç¼–辑意见
        clickEditorialOpinion(scope) {
            this.dialogVisible = true;
            this.clickEditOpinion = scope.row;
        },
        // å¤±åŽ»çŽ°åƒæè¿°ç„¦ç‚¹è§¦å‘
        outOfFocusDescription(scope) {
            this.axios
                .get(this.$api.url.descriptionUpdate, {
                    params: {
                        rawUnacceptedId: scope.row.id,
                        tell: scope.row.description,
                    },
                })
                .then((res) => {
                    this.$message({
                        message: res.message,
                        type: "success",
                    });
                });
        },
        // ç‚¹å‡»ç¡®å®šæŒ‰é’®
        updateEditDevided() {
            console.log(`output->this.clickEditOpinion`, this.clickEditOpinion);
            this.axios
                .post(this.$api.url.editDisposalOpinion, {
                    opinionTell: this.clickEditOpinion.opinion_tell,
                    rawUnacceptedId: this.clickEditOpinion.id,
                    way: this.clickEditOpinion.way,
                    type: this.clickEditOpinion.type,
                })
                .then((res) => {
                    this.dialogVisible = false;
                    this.$message({
                        message: res.message,
                        type: "success",
                    });
                });
        },
    },
    // é‡ç½®æŒ‰é’®
    clean() {
      this.search = {
        countSize: 10, // æ¡æ•°/页
        pageSize: 1, // èµ·å§‹é¡µ
        productCategories: "", // äº§å“å¤§ç±»
        productName: "", // äº§å“åç§°
        specificationModel: "", // è§„格型号
        state: "" // çŠ¶æ€
      };
      this.getDetailInfo();
    watch: {
        dialogVisible: {
            handler(newVal, oldVal) {
                if (newVal == false) {
                    this.isShow = false;
                }
            },
        },
    },
    // ç‚¹å‡»æŸ¥çœ‹å¤„置意见
    showDisposalOpinions(scope) {
      this.isShow = true;
      this.dialogVisible = true;
      this.$axios
        .get(this.$api.url.viewEditorial, {
          params: {
            rawUnacceptedId: scope.row.id
          }
        })
        .then(res => {
          this.updateEditList = res.data;
          this.getDetailInfo();
        });
    },
    // ç‚¹å‡»ç¼–辑意见
    clickEditorialOpinion(scope) {
      this.dialogVisible = true;
      this.axios
        .get(this.$api.url.clickEditing, {
          params: { rawUnacceptedId: scope.row.id }
        })
        .then(res => {
          this.updateEditList = res.data;
        });
    },
    // å¤±åŽ»çŽ°åƒæè¿°ç„¦ç‚¹è§¦å‘
    outOfFocusDescription(scope) {
      this.axios
        .get(this.$api.url.descriptionUpdate, {
          params: {
            rawUnacceptedId: scope.row.id,
            tell: scope.row.description
          }
        })
        .then(res => {
          this.$message({
            message: res.message,
            type: "success"
          });
        });
    },
    // ç‚¹å‡»ç¡®å®šæŒ‰é’®
    updateEditDevided() {
      this.$axios
        .post(
          this.$api.url.addOpinion,
          { opinion: this.updateEditList },
          {
            headers: { "Content-Type": "application/json" }
          }
        )
        .then(res => {
          console.log(`output->res`, res);
          this.dialogVisible = false;
          this.getDetailInfo();
        });
    }
  },
  watch: {
    dialogVisible: {
      handler(newVal, oldVal) {
        if (newVal == false) {
          this.isShow = false;
        }
      }
    }
  }
};
</script>
<style scoped>
.main_div {
  padding-top: 15px;
}
.el-radio__label {
  font-size: 16px;
}
.el-radio {
  margin-right: 60px;
  margin-top: 10px;
}
.el-form-item {
  margin-bottom: 6px;
  font-size: 16px;
}
.unqualifiedBox {
  width: 100%;
  max-height: 100%;
  display: flex;
  flex-direction: column;
  /* overflow-y: scroll; */
}
.unqualifiedBox .title .el-button {
  height: 32px;
  border: 1px solid rgba(190, 190, 190, 0.44);
  box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
  padding: 0 12px;
}
/deep/ .el-table__cell {
  padding: 5px 0;
}
.unqualifiedBox .title {
  margin-bottom: 10px;
  padding: 0 20px;
}
<!-- /* æ¡ä»¶æŸ¥è¯¢å¤´éƒ¨æ ·å¼ */ -->
    .choose {
  padding: 21px 24px;
  display: flex;
  align-items: center;
  background-color: #fff;
  border-bottom: 3px solid rgb(245, 247, 251);
    padding-top: 15px;
}
.el-radio__label {
    font-size: 16px;
}
.el-radio {
    margin-right: 60px;
    margin-top: 10px;
}
.el-form-item {
    margin-bottom: 6px;
    font-size: 16px;
}
.unqualifiedBox {
    width: 100%;
    max-height: 100%;
    display: flex;
    flex-direction: column;
}
.unqualifiedBox .title .el-button {
    height: 32px;
    border: 1px solid rgba(190, 190, 190, 0.44);
    box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
    padding: 0 12px;
}
/deep/ .el-table__cell {
    padding: 5px 0;
}
.unqualifiedBox .title {
    margin-bottom: 10px;
    padding: 0 20px;
}
/* æ¡ä»¶æŸ¥è¯¢å¤´éƒ¨æ ·å¼ */
.choose {
  font-size: 14px;
    display: flex;
    align-items: center;
    background-color: #fff;
    border-bottom: 3px solid rgb(245, 247, 251);
    font-size: 14px;
}
.choose .el-button {
  height: 32px;
  border: 1px solid rgba(190, 190, 190, 0.44);
  box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
  padding: 0 12px;
    height: 32px;
    border: 1px solid rgba(190, 190, 190, 0.44);
    box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
    padding: 0 12px;
}
<!-- /* ä¸åˆæ ¼è¡¨æ ¼æ ·å¼ */
    .unqualifiedTable {
  flex: 1;
  background: #fff;
  margin-top: 11px;
  padding: 23px 21px;
.choose span {
    /* span内容强制不换行 */
    white-space: nowrap;
}
.tableno {
  margin-top: 10px;
    margin-top: 10px;
}
</style>
src/components/view/processInspection.vue
@@ -1,798 +1,823 @@
<template>
  <div class="content-main">
    <div v-if="!showAddPage && !showUp && !showLook" class="rawPage">
      <div class="title">
        <el-row>
          <el-col :span="12">过程检验</el-col>
          <el-col :span="12" style="text-align: right;">
            <el-button @click="handleAddNew" type="primary" size="mini" icon="el-icon-plus"
              style="background: #004EA2; ">新增</el-button>
            <el-button icon="el-icon-download" size="mini">导出</el-button>
          </el-col>
        </el-row>
      </div>
      <div class="nav">
        <span>检验状态:</span>
        <el-select size="small" v-model="search.result" placeholder="请选择检测状态" style="width: 224px;margin-right: 52px;">
          <el-option :value="''" label="全部"></el-option>
          <el-option :value="1" label="合格"></el-option>
          <el-option :value="0" label="不合格"></el-option>
        </el-select>
        <span>产品名称:</span>
        <el-input size="small" style="width: 224px;margin-right: 30px;" v-model="search.name"
          placeholder="请输入产品名称"></el-input>
        <span>工序:</span>
        <el-input size="small" style="width: 224px;margin-right: 30px;" v-model="search.techfather"
          placeholder="请输入工序"></el-input>
        <el-button size="mini"><span>重 ç½®</span></el-button>
        <el-button size="mini" @click="searchPro" type="primary" style="background: #004EA2;"><span>查 è¯¢</span></el-button>
      </div>
      <div class="content-body">
        <div class="inspectionTable">
          <el-table ref="inspectionTable" height="calc(100vh - 320px)" :cell-style="{ textAlign: 'center' }"
            :header-cell-style="{
              border: '0px',
              background: '#f5f7fa',
              color: '#606266',
              boxShadow: 'inset 0 1px 0 #ebeef5',
              textAlign: 'center'
            }" border :data="inspectionTable" style="width: 100%">
            <el-table-column type="selection" width="50"> </el-table-column>
            <el-table-column label="序号" type="index" width="60"></el-table-column>
            <el-table-column prop="order_number" label="订单编号" min-width="90" />
            <el-table-column prop="material" label="产品名称" min-width="80" />
            <el-table-column prop="specifications_model" label="规格型号" min-width="60" />
            <el-table-column prop="techfather" label="工序" min-width="70" />
            <el-table-column prop="techname" label="工艺名称" min-width="70" />
            <el-table-column prop="unit" label="单位" min-width="50" />
            <el-table-column prop="quantity" label="数量" min-width="50" />
            <el-table-column prop="createTime" label="报检日期" min-width="60" />
            <el-table-column prop="name" label="报检人" min-width="50" />
            <el-table-column prop="updateTime" label="检测日期" min-width="60" />
            <el-table-column prop="result" label="合格状态" min-width="80">
              <template slot-scope="scope">
                <span style="color: #34BD66;" v-if="scope.row.result == 1">合格</span>
                <span style="color: #E84738;" v-else-if="scope.row.result == 0">不合格</span>
              </template>
            </el-table-column>
            <el-table-column label="操作" min-width="80">
              <template slot-scope="scope">
                <el-button type="text" size="small" @click="handleClick(scope.row)" style="margin-left: 0;">详情</el-button>
                <el-button type="text" size="small">查看</el-button>
                <el-button v-if="scope.row.result == null" type="text" size="small" style="margin-left: 0;"
                  @click="updateInsInfo(scope.row)">编辑</el-button>
              </template>
            </el-table-column>
          </el-table>
    <div class="content-main">
        <div v-if="!showAddPage && !showUp && !showLook" class="rawPage">
            <div class="title">
                <el-row>
                    <el-col :span="12">过程检验</el-col>
                    <el-col :span="12" style="text-align: right;">
                        <el-button @click="handleAddNew" type="primary" size="mini" icon="el-icon-plus" style="background: #004EA2; ">新增</el-button>
                        <el-button icon="el-icon-download" size="mini">导出</el-button>
                    </el-col>
                </el-row>
            </div>
            <div class="nav">
                <span>检验状态:</span>
                <el-select size="small" v-model="search.result" placeholder="请选择检测状态" style="width: 224px;margin-right: 52px;">
                    <el-option :value="''" label="全部"></el-option>
                    <el-option :value="1" label="合格"></el-option>
                    <el-option :value="0" label="不合格"></el-option>
                </el-select>
                <span>产品名称:</span>
                <el-input size="small" style="width: 224px;margin-right: 30px;" v-model="search.name" placeholder="请输入产品名称"></el-input>
                <span>工序:</span>
                <el-input size="small" style="width: 224px;margin-right: 30px;" v-model="search.techfather" placeholder="请输入工序"></el-input>
                <el-button size="mini"><span>重 ç½®</span></el-button>
                <el-button size="mini" @click="searchPro" type="primary" style="background: #004EA2;"><span>查 è¯¢</span></el-button>
            </div>
            <div class="content-body">
                <div class="inspectionTable">
                    <el-table ref="inspectionTable" height="calc(100vh - 290px)" :cell-style="{ textAlign: 'center' }" :header-cell-style="{
                        border: '0px',
                        background: '#f5f7fa',
                        color: '#606266',
                        boxShadow: 'inset 0 1px 0 #ebeef5',
                        textAlign: 'center'
                        }" border :data="inspectionTable" style="width: 100%">
                        <el-table-column type="selection" width="50"> </el-table-column>
                        <el-table-column label="序号" type="index" width="60"></el-table-column>
                        <el-table-column prop="order_number" label="订单编号" min-width="100" />
                        <el-table-column prop="material" label="产品名称" min-width="100" />
                        <el-table-column prop="specifications_model" label="规格型号" min-width="100" />
                        <el-table-column prop="techfather" label="工序" min-width="60" />
                        <el-table-column prop="techname" label="工艺名称" min-width="100" />
                        <el-table-column prop="unit" label="单位" min-width="60" />
                        <el-table-column prop="quantity" label="数量" min-width="60" />
                        <el-table-column prop="createTime" label="报检日期" min-width="110" />
                        <el-table-column prop="name" label="报检人" min-width="80" />
                        <el-table-column prop="updateTime" label="检测日期" min-width="110" />
                        <el-table-column prop="result" label="合格状态" min-width="100">
                            <template slot-scope="scope">
                                <span style="color: #34BD66;" v-if="scope.row.result == 1">合格</span>
                                <span style="color: #E84738;" v-else-if="scope.row.result == 0">不合格</span>
                            </template>
                        </el-table-column>
                        <el-table-column label="操作" min-width="150" fixed="right">
                            <template slot-scope="scope">
                                <el-button type="text" size="small" @click="handleClick(scope.row)" style="margin-left: 0;">详情</el-button>
                                <el-button type="text" size="small">查看</el-button>
                                <el-button v-if="scope.row.result == null" type="text" size="small" style="margin-left: 0;" @click="updateInsInfo(scope.row)">编辑</el-button>
                            </template>
                        </el-table-column>
                    </el-table>
                </div>
                <!-- åˆ†é¡µå™¨ -->
                <div class="pagination">
                    <el-pagination :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="inspectionTableTotal" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
                </div>
            </div>
        </div>
        <!-- åˆ†é¡µå™¨ -->
        <div class="pagination">
          <el-pagination :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize"
            layout="total, sizes, prev, pager, next, jumper" :total="inspectionTableTotal" @size-change="handleSizeChange"
            @current-change="handleCurrentChange" />
        </div>
      </div>
    </div>
    <div class="newPage" v-if="showAddPage">
      <!-- æ–°å¢žé¡µé¢ -->
      <div class="addInspection">
        <el-row class="header">
          <el-col :span="12">新增过程检验单</el-col>
          <el-col :span="12" style="text-align: right;">
            <!-- ç‚¹å‡»è¿”回,当前页面值为false -->
            <!-- <el-button type="primary" size="mini" style="background: #004EA2; "
        <div class="newPage" v-if="showAddPage">
            <!-- æ–°å¢žé¡µé¢ -->
            <div class="addInspection">
                <el-row class="header">
                    <el-col :span="12">新增过程检验单</el-col>
                    <el-col :span="12" style="text-align: right;">
                        <!-- ç‚¹å‡»è¿”回,当前页面值为false -->
                        <!-- <el-button type="primary" size="mini" style="background: #004EA2; "
              icon="el-icon-circle-plus-outline">新增</el-button> -->
            <el-button @click="combackIndex" type="primary" size="mini" icon="el-icon-back"
              style="background: #004EA2; ">返回</el-button>
          </el-col>
        </el-row>
        <el-form :model="processInspectVo" ref="addInspectionform" class="addInspectionform" label-position="right"
          label-width="120px" size="small">
          <div class="formwrapper">
            <el-row :gutter="230">
              <el-col :span="7">
                <el-form-item label="订单号:">
                  <el-input @blur="selectInfoByOrderId" style="width: 210px;" size="small"
                    v-model="processInspectVo.orderNumber" placeholder="请输入订单号" />
                </el-form-item>
              </el-col>
              <el-col :span="7">
                <el-form-item label="产品名称:">
                  <el-select style="width: 210px;" size="small" @change="selectSample" v-model="processInspectVo.material"
                    placeholder="请选择产品">
                    <el-option v-for="item in optionsSamplename" :key="item.value" :label="item.name" :value="item.name">
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="7">
                <el-form-item label="产品编码:">
                  <el-input style="width: 210px;" size="small" disabled v-model="processInspectVo.materialCode"
                    placeholder="请输入产品编码" />
                </el-form-item>
              </el-col>
            </el-row>
            <el-row :gutter="230">
              <el-col :span="7">
                <el-form-item label="规格型号:">
                  <el-input style="width: 210px;" size="small" disabled v-model="processInspectVo.specificationsModel"
                    placeholder="请输入规格型号" />
                </el-form-item>
              </el-col>
              <el-col :span="7">
                <el-form-item label="工序名称:">
                  <el-select @change="changeOptionSoptionSprocesses" v-model="processInspectVo.techfather"
                    placeholder="请选择" style="width: 210px;" size="small">
                    <el-option v-for="item in optionSoptionSprocesses" :key="item.name" :label="item.name"
                      :value="item.name">
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="7">
                <el-form-item label="工艺名称:">
                  <el-select v-model="processInspectVo.techname" placeholder="请选择" style="width: 210px;" size="small">
                    <el-option v-for="item in optionTechnology" :key="item.id" :label="item.name"
                      :value="item.id + '-' + item.name">
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
            </el-row>
            <el-row :gutter="230">
              <el-col :span="7">
                <el-form-item label="单位:">
                  <el-input style="width: 210px;" size="small" disabled v-model="processInspectVo.unit"
                    placeholder="请输入单位" />
                </el-form-item>
              </el-col>
              <el-col :span="7">
                <el-form-item label="数量:">
                  <el-input style="width: 210px;" size="small" v-model="processInspectVo.quantity" placeholder="请输入数量" />
                </el-form-item>
              </el-col>
              <el-col :span="10" style="display: flex;justify-content: end;">
                <el-button type="primary" :disabled="isAddProject" @click="addTestProjevt">生成检验项目</el-button>
              </el-col>
            </el-row>
          </div>
        </el-form>
      </div>
      <div class="inspectionProject">
        <el-row>
          <el-col :span="12" class="inspectionProject_span">检验项目</el-col>
          <el-col :span="12" class="inspectionProject_span">
            <el-button size="mini" @click="clickDeleteInspectionColumn()">删除检验值列</el-button>
            <el-button style="margin-right: 30px;" size="mini" @click="clickAddInspectionColumn()">添加检验值列</el-button>
            <!-- <el-button
                        <el-button @click="combackIndex" type="primary" size="mini" icon="el-icon-back" style="background: #004EA2; ">返回</el-button>
                    </el-col>
                </el-row>
                <el-form :model="processInspectVo" ref="addInspectionform" class="addInspectionform" label-position="right" label-width="120px" size="small">
                    <div class="formwrapper">
                        <el-row :gutter="230">
                            <el-col :span="7">
                                <el-form-item label="订单号:">
                                    <el-input @blur="selectInfoByOrderId" style="width: 210px;" size="small" v-model="processInspectVo.orderNumber" placeholder="请输入订单号" />
                                </el-form-item>
                            </el-col>
                            <el-col :span="7">
                                <el-form-item label="产品名称:">
                                    <el-select style="width: 210px;" size="small" @change="selectSample" v-model="processInspectVo.material" placeholder="请选择产品">
                                        <el-option v-for="item in optionsSamplename" :key="item.value" :label="item.name" :value="item.name">
                                        </el-option>
                                    </el-select>
                                </el-form-item>
                            </el-col>
                            <el-col :span="7">
                                <el-form-item label="产品编码:">
                                    <el-input style="width: 210px;" size="small" disabled v-model="processInspectVo.materialCode" placeholder="请输入产品编码" />
                                </el-form-item>
                            </el-col>
                        </el-row>
                        <el-row :gutter="230">
                            <el-col :span="7">
                                <el-form-item label="规格型号:">
                                    <el-input style="width: 210px;" size="small" disabled v-model="processInspectVo.specificationsModel" placeholder="请输入规格型号" />
                                </el-form-item>
                            </el-col>
                            <el-col :span="7">
                                <el-form-item label="工序名称:">
                                    <el-select @change="changeOptionSoptionSprocesses" v-model="processInspectVo.techfather" placeholder="请选择" style="width: 210px;" size="small">
                                        <el-option v-for="item in optionSoptionSprocesses" :key="item.name" :label="item.name" :value="item.name">
                                        </el-option>
                                    </el-select>
                                </el-form-item>
                            </el-col>
                            <el-col :span="7">
                                <el-form-item label="工艺名称:">
                                    <el-select v-model="processInspectVo.techname" placeholder="请选择" style="width: 210px;" size="small">
                                        <el-option v-for="item in optionTechnology" :key="item.id" :label="item.name" :value="item.id + '-' + item.name">
                                        </el-option>
                                    </el-select>
                                </el-form-item>
                            </el-col>
                        </el-row>
                        <el-row :gutter="230">
                            <el-col :span="7">
                                <el-form-item label="单位:">
                                    <el-input style="width: 210px;" size="small" disabled v-model="processInspectVo.unit" placeholder="请输入单位" />
                                </el-form-item>
                            </el-col>
                            <el-col :span="7">
                                <el-form-item label="数量:">
                                    <el-input style="width: 210px;" size="small" v-model="processInspectVo.quantity" placeholder="请输入数量" />
                                </el-form-item>
                            </el-col>
                            <el-col :span="10" style="display: flex;justify-content: end;">
                                <el-button type="primary" :disabled="isAddProject" @click="addTestProjevt">生成检验项目</el-button>
                            </el-col>
                        </el-row>
                    </div>
                </el-form>
            </div>
            <div class="inspectionProject">
                <el-row>
                    <el-col :span="12" class="inspectionProject_span">检验项目</el-col>
                    <el-col :span="12" class="inspectionProject_span">
                        <el-button size="mini" @click="clickDeleteInspectionColumn()">删除检验值列</el-button>
                        <el-button style="margin-right: 30px;" size="mini" @click="clickAddInspectionColumn()">添加检验值列</el-button>
                        <!-- <el-button
              size="mini"
              style="margin-right: 30px;"
              @click="clickAddLine()"
              >添加检验行</el-button
            > -->
          </el-col>
        </el-row>
        <el-table border :data="inspectionItems" max-height="420" :span-method="handleSpanMethod"
          height="calc(100vh - 550px)" style="width: 100%">
          <el-table-column type="index" label="序号" width="60"></el-table-column>
          <el-table-column label="项目" prop="father"></el-table-column>
          <el-table-column prop="name" label="指标"></el-table-column>
          <el-table-column prop="unit" label="单位"></el-table-column>
          <el-table-column prop="required" label="标准值"></el-table-column>
          <el-table-column prop="internal" label="内测值"></el-table-column>
          <el-table-column prop="inspectionValue" v-for="(item, index) in empiricalValueAdd" :key="index" label="检测值"
            min-width="100" style="text-align: center;">
            <template slot-scope="scope">
              <el-tooltip :disabled="scope.row.dname != null" class="item" effect="dark" content="请先选择设备!"
                placement="top-start">
                <el-input :disabled="scope.row.dname === null" v-model="scope.row.empiricalValueAddss[index]"
                  @blur="changeState(scope.row, index)" placeholder="请输入检测值"></el-input>
              </el-tooltip>
            </template>
          </el-table-column>
          <el-table-column prop="dname" label="试验设备" min-width="100">
            <template slot-scope="scope">
              <el-button v-if="!scope.row.isSelectDevice" type="text" @click="clickTableSelect(scope)">{{
                    </el-col>
                </el-row>
                <el-table border :data="inspectionItems" max-height="420" :span-method="handleSpanMethod" height="calc(100vh - 550px)" style="width: 100%">
                    <el-table-column type="index" label="序号" width="60"></el-table-column>
                    <el-table-column label="项目" prop="father"></el-table-column>
                    <el-table-column prop="name" label="指标"></el-table-column>
                    <el-table-column prop="unit" label="单位"></el-table-column>
                    <el-table-column prop="required" label="标准值"></el-table-column>
                    <el-table-column prop="internal" label="内测值"></el-table-column>
                    <el-table-column prop="inspectionValue" v-for="(item, index) in empiricalValueAdd" :key="index" label="检测值" min-width="100" style="text-align: center;">
                        <template slot-scope="scope">
                            <el-tooltip :disabled="scope.row.dname != null" class="item" effect="dark" content="请先选择设备!" placement="top-start">
                                <el-input :disabled="scope.row.dname === null" v-model="scope.row.empiricalValueAddss[index]" @blur="changeState(scope.row, index)" placeholder="请输入检测值"></el-input>
                            </el-tooltip>
                        </template>
                    </el-table-column>
                    <el-table-column prop="dname" label="试验设备" min-width="100">
                        <template slot-scope="scope">
                            <el-button v-if="!scope.row.isSelectDevice" type="text" @click="clickTableSelect(scope)">{{
                scope.row.dname == null ? "请选择" : scope.row.dname
              }}</el-button>
              <el-select v-if="scope.row.isSelectDevice" style="width: 100%;" @change="clickNodeSure(scope.row)"
                v-model="filterText" placeholder="请选择">
                <el-option v-for="item in materialOptions" :key="item.id" :label="item.device" :value="item.id">
                </el-option>
              </el-select>
            </template>
          </el-table-column>
          <el-table-column label="结论">
            <template slot-scope="scope">
              <span style="color: #34BD66;" v-if="scope.row.result === 1">合格</span>
              <span style="color: #E84738;" v-else-if="scope.row.result === 0">不合格</span>
              <span v-show="scope.row.result === null">暂未结论</span>
            </template>
          </el-table-column>
          <!-- <el-table-column v-if="detailId == null" label="操作" width="100">
                            <el-select v-if="scope.row.isSelectDevice" style="width: 100%;" @change="clickNodeSure(scope.row)" v-model="filterText" placeholder="请选择">
                                <el-option v-for="item in materialOptions" :key="item.id" :label="item.device" :value="item.id">
                                </el-option>
                            </el-select>
                        </template>
                    </el-table-column>
                    <el-table-column label="结论">
                        <template slot-scope="scope">
                            <span style="color: #34BD66;" v-if="scope.row.result === 1">合格</span>
                            <span style="color: #E84738;" v-else-if="scope.row.result === 0">不合格</span>
                            <span v-show="scope.row.result === null">暂未结论</span>
                        </template>
                    </el-table-column>
                    <!-- <el-table-column v-if="detailId == null" label="操作" width="100">
            <template slot-scope="scope">
              <el-button type="text" @click="clickDeleteline(scope)">删除</el-button>
            </template>
          </el-table-column> -->
        </el-table>
      </div>
      <div class="inspectionResult">
        <span>检测结果</span>
        <el-table :data="inspectionResultForm">
          <el-table-column prop="id" label="物料编号"></el-table-column>
          <el-table-column prop="name" label="物料名称"></el-table-column>
          <el-table-column prop="inspecter" label="检验员"></el-table-column>
          <el-table-column prop="conclusion" label="检验结论"></el-table-column>
          <el-table-column prop="operation" label="上报"></el-table-column>
        </el-table>
      </div>
      <el-dialog title="请选择设备" :visible.sync="centerDialogVisible" width="20%">
        <div class="div_device_dialog">
          <el-select style="width: 100%;" @change="clickNodeSure()" v-model="filterText" placeholder="请选择">
            <el-option v-for="item in materialOptions" :key="item.id" :label="item.device" :value="item.id">
            </el-option>
          </el-select>
                </el-table>
            </div>
            <div class="inspectionResult">
                <span>检测结果</span>
                <el-table :data="inspectionResultForm">
                    <el-table-column prop="id" label="物料编号"></el-table-column>
                    <el-table-column prop="name" label="物料名称"></el-table-column>
                    <el-table-column prop="inspecter" label="检验员"></el-table-column>
                    <el-table-column prop="conclusion" label="检验结论"></el-table-column>
                    <el-table-column prop="operation" label="上报"></el-table-column>
                </el-table>
            </div>
            <el-dialog title="请选择设备" :visible.sync="centerDialogVisible" width="20%">
                <div class="div_device_dialog">
                    <el-select style="width: 100%;" @change="clickNodeSure()" v-model="filterText" placeholder="请选择">
                        <el-option v-for="item in materialOptions" :key="item.id" :label="item.device" :value="item.id">
                        </el-option>
                    </el-select>
                </div>
            </el-dialog>
        </div>
      </el-dialog>
        <div class="newPage" v-if="showUp">
            <processInspectionUpdate :rowInfo="rowInfp" />
        </div>
        <div class="newPage" v-if="showLook">
            <processInspectionLook :rowInfo="rowInfp" />
        </div>
    </div>
    <div class="newPage" v-if="showUp">
      <processInspectionUpdate :rowInfo="rowInfp" />
    </div>
    <div class="newPage" v-if="showLook">
      <processInspectionLook :rowInfo="rowInfp" />
    </div>
  </div>
</template>
<script>
import processInspectionUpdate from '../view/processInspectionUpdate.vue'
import processInspectionLook from '../view/processInspectionLook.vue'
import processInspectionUpdate from "../view/processInspectionUpdate.vue";
import processInspectionLook from "../view/processInspectionLook.vue";
export default {
  components: {
    processInspectionUpdate,
    processInspectionLook
  },
  data() {
    return {
      showUp: false,
      isAddProject: false,
      showLook: false,
      detailId: 28,
      rowInfp: {},
      search: {
        countSize: 10,
        pageSize: 1,
        result: "", // æ£€æµ‹çŠ¶æ€
        name: "", // äº§å“åç§°
        techfather: "" // å·¥åº
      },
      optionsSamplename: [],
      inspectionTable: [],
      tableColumn: [],
      optionSoptionSprocesses: [],
      optionTechnology: [],
      inspectionTableTotal: 0,
      pageSize: 10,
      currentPage: 1,
      treeProject: [],
      // æ·»åŠ åˆ—
      empiricalValueAdd: 1,
      // ç¼–辑时存储最长的列数字,做删除判断
      empiricalValueAddMaxNumber: 0,
      showAddPage: false,
      processInspectVo: {
        material: null,
        materialCode: null,
        orderNumber: "",
        quantity: null,
        specificationsModel: null,
        techfather: null,
        techname: null,
        technologyId: null,
        unit: null
      },
      InspectioniD: null,
      addInspectionform: [
        {
          number: "",
          username: "",
          projectname: "",
          tracenumber: "",
          code: "",
          class: "",
          specificationmodel: "",
          unit: "",
          quantity: "",
          group: "",
          worker: "",
          machine: ""
        }]
      ,
      inspectionItems: [], // æ–°å¢žæ£€éªŒé¡¹ç›®è¡¨æ ¼
      inspectionResultForm: [
        {
          id: "",
          name: "",
          inspecter: "",
          conclusion: "",
          operation: ""
        }
      ],
      options: [],
      value: "",
      rowList: [],
      spanArr: [],
      position: 0,
      // è®¾å¤‡é€‰æ‹©æ ‘显示
      centerDialogVisible: false,
      filterText: "",
      materialOptions: [],
      defaultProps: {
        // è®¾å¤‡æ ‘数据设置
        children: "children",
        label: "name"
      },
      nodeData: {
        id: 0,
        name: null
      }, // node点击保存当前点击数据
      clickSelectDevice: {
        index: null, // ç‚¹å‡»é€‰æ‹©å­˜å‚¨å½“前行索引
        rpId: null // ç‚¹å‡»é€‰æ‹©å­˜å‚¨å½“前行项目Id
      }
    };
  },
  watch: {
    // filterText(val) {
    //   this.$refs.tree.filter(val);
    // }
  },
  mounted() {
    // this.getTableData()
    // this.getOptions();
  },
  methods: {
    handleClick(row) {
      this.rowInfp = row
      this.showLook = true
    components: {
        processInspectionUpdate,
        processInspectionLook,
    },
    combackIndex() {
      this.showAddPage = false
      this.defaultInitializationTable()
    data() {
        return {
            showUp: false,
            isAddProject: false,
            showLook: false,
            detailId: 28,
            rowInfp: {},
            search: {
                countSize: 10,
                pageSize: 1,
                result: "", // æ£€æµ‹çŠ¶æ€
                name: "", // äº§å“åç§°
                techfather: "", // å·¥åº
            },
            optionsSamplename: [],
            inspectionTable: [],
            tableColumn: [],
            optionSoptionSprocesses: [],
            optionTechnology: [],
            inspectionTableTotal: 0,
            pageSize: 10,
            currentPage: 1,
            treeProject: [],
            // æ·»åŠ åˆ—
            empiricalValueAdd: 1,
            // ç¼–辑时存储最长的列数字,做删除判断
            empiricalValueAddMaxNumber: 0,
            showAddPage: false,
            processInspectVo: {
                material: null,
                materialCode: null,
                orderNumber: "",
                quantity: null,
                specificationsModel: null,
                techfather: null,
                techname: null,
                technologyId: null,
                unit: null,
            },
            InspectioniD: null,
            addInspectionform: [
                {
                    number: "",
                    username: "",
                    projectname: "",
                    tracenumber: "",
                    code: "",
                    class: "",
                    specificationmodel: "",
                    unit: "",
                    quantity: "",
                    group: "",
                    worker: "",
                    machine: "",
                },
            ],
            inspectionItems: [], // æ–°å¢žæ£€éªŒé¡¹ç›®è¡¨æ ¼
            inspectionResultForm: [
                {
                    id: "",
                    name: "",
                    inspecter: "",
                    conclusion: "",
                    operation: "",
                },
            ],
            options: [],
            value: "",
            rowList: [],
            spanArr: [],
            position: 0,
            // è®¾å¤‡é€‰æ‹©æ ‘显示
            centerDialogVisible: false,
            filterText: "",
            materialOptions: [],
            defaultProps: {
                // è®¾å¤‡æ ‘数据设置
                children: "children",
                label: "name",
            },
            nodeData: {
                id: 0,
                name: null,
            }, // node点击保存当前点击数据
            clickSelectDevice: {
                index: null, // ç‚¹å‡»é€‰æ‹©å­˜å‚¨å½“前行索引
                rpId: null, // ç‚¹å‡»é€‰æ‹©å­˜å‚¨å½“前行项目Id
            },
        };
    },
    updateInsInfo(row) {
      this.rowInfp = row
      this.showUp = true
    },
    combackMain(val) {
      this.showUp = false
      this.showLook = false
      this.defaultInitializationTable(); // åˆå§‹åŒ–表格数据
      if (val) {
        this.$parent.removeAllTab()
      }
    },
    searchPro() {
      this.search.countSize = this.pageSize
      this.search.pageSize = this.currentPage
      this.defaultInitializationTable()
    },
    // ç‚¹å‡»è®¾å¤‡æ ‘保存点击记录
    nodeClick(data) {
      if (data.id != undefined) this.nodeData = data;
    },
    // è®¾å¤‡æ ‘过滤搜索
    filterNode(value, data) {
      if (!value) return true;
      return data.name.indexOf(value) !== -1;
    },
    // èŽ·å–è®¾å¤‡æ ‘å†…å®¹
    getOptions(row) {
      this.$axios.get(this.$api.url.inspectionItemChooseDev, {
        params: {
          father: row.father,
          name: row.name,
          technologyId: this.processInspectVo.technologyId
        }
      }).then(res => {
        this.materialOptions = res.data;
        if (this.materialOptions.length === 1) {
          this.$message({
            message: '该项目下只有一个试验设备,无需选择!',
            type: 'warning'
          });
          return
        }
        row.isSelectDevice = true
        this.filterText = row.did
      });
    },
    // ç‚¹å‡»è¡¨æ ¼é€‰æ‹©è§¦å‘
    clickTableSelect(scope) {
      // this.centerDialogVisible = true;
      if (this.clickSelectDevice.index != null) {
        this.$set(this.inspectionItems[this.clickSelectDevice.index], 'isSelectDevice', false)
      }
      this.clickSelectDevice.index = scope.$index;
      this.clickSelectDevice.rpId = scope.row.id;
      this.getOptions(scope.row)
    },
    // ç‚¹å‡»æ ‘里面的确定
    clickNodeSure() {
      let select = this.materialOptions.filter(item => {
        return item.id === this.filterText
      })[0]
      this.nodeData.id = select.id
      this.nodeData.name = select.device
      if (this.detailId == null) {
        this.inspectionItems[
          this.clickSelectDevice.index
        ].did = this.nodeData.id;
        this.inspectionItems[
          this.clickSelectDevice.index
        ].dname = this.nodeData.name;
        this.centerDialogVisible = false;
      } else {
        this.$axios
          .post(this.$api.url.inspectionItemUpdateDevByInsId, {
            id: this.clickSelectDevice.rpId,
            type: 1,
            devId: this.nodeData.id
          })
          .then(res => {
            this.getTableData()
            this.centerDialogVisible = false;
          });
      }
    },
    changeState(row, index) {
      if (row.did != null && row.did != '') {
        // let val = row.empiricalValueAddss.filter(item => {
        //   return item != '' && item != null
        // })
        // let eq = val.filter(item => {
        //   return /^[^><=]/.test(item)
        // })
        // if (eq.length > 0) {
        //   this.$message({
        //     message: "检测值[" + eq + "]格式首位应包含>,<或者=",
        //     type: 'warning'
        //   });
        //   return
    watch: {
        // filterText(val) {
        //   this.$refs.tree.filter(val);
        // }
        let str = ""
        row.empiricalValueAddss.forEach(e => {
          str += e + ","
        })
        if (str.slice(0, -1) === '' || str.slice(0, -1) === null || str.slice(0, -1) === undefined) {
          return
        }
        this.$axios.post(this.$api.url.inspectionItemlose_focus_update, {
          deviceId: row.did,
          inspectionItemId: row.id,
          inspectionValue: str.slice(0, -1)
        }, {
          headers: { "Content-Type": "application/json" }
        }).then(res => {
          if (res.message === '内控值输入格式有问题!') {
            this.$message({
              message: res.message,
              type: 'warning'
            });
            return
          }
          row.result = res.data.result
          row.username = res.data.username
        })
      } else {
        this.$message({
          message: '请选择择设备!',
          type: 'warning'
        });
      }
    },
    // æ¯é¡µæ¡æ•°æ”¹å˜æ—¶è§¦å‘ é€‰æ‹©ä¸€é¡µæ˜¾ç¤ºå¤šå°‘行
    handleSizeChange(val) {
      this.search.countSize = val;
      this.defaultInitializationTable();
    mounted() {
        // this.getTableData()
        // this.getOptions();
    },
    handleSpanMethod({ row, column, rowIndex, columnIndex }) {
      if (columnIndex === 0) {
        const _row = this.spanArr[rowIndex];
        const _col = _row > 0 ? 1 : 0;
        return {
          rowspan: _row,
          colspan: _col
        }
      }
      if (columnIndex === 1) {
        const _row = this.spanArr[rowIndex];
        const _col = _row > 0 ? 1 : 0;
        return {
          rowspan: _row,
          colspan: _col
        }
      }
    },
    // åˆå¹¶è¡¨æ ¼
    mergeTable() {
      this.rowList = []
      this.spanArr = []
      this.position = 0
      this.inspectionItems.forEach((item, index) => {
        if (index === 0) {
          this.spanArr.push(1);
          this.position = 0;
        } else {
          if (this.inspectionItems[index].father === this.inspectionItems[index - 1].father) {
            this.spanArr[this.position] += 1;
            this.spanArr.push(0);
          } else {
            this.spanArr.push(1);
            this.position = index;
          }
        }
      })
    },
    changeOptionSoptionSprocesses() {
      this.optionTechnology = []
      let working = this.optionSoptionSprocesses.filter(item => {
        return item.name === this.processInspectVo.techfather
      })[0]
      this.optionTechnology = working.children
    },
    addTestProjevt() {
      let val = JSON.parse(JSON.stringify(this.processInspectVo))
      val.techname = this.processInspectVo.techname.split("-")[1]
      val.technologyId = this.processInspectVo.techname.split("-")[0]
      this.processInspectVo.technologyId = val.technologyId
      this.$axios.post(this.$api.url.processInspectAddProcess, {
        material: val.material,
        materialCode: val.materialCode,
        orderNumber: val.orderNumber,
        quantity: val.quantity,
        specificationsModel: val.specificationsModel,
        techfather: val.techfather,
        techname: val.techname,
        techId: Number(val.technologyId),
        mtId: Number(val.technologyId),
        unit: val.unit
      }, {
        headers: { "Content-Type": "application/json" }
      }).then(res => {
        if (res.code === 201) {
          this.$message({
            message: res.message,
            type: 'warning'
          });
          return
        }
        this.isAddProject = true
        this.detailId = res.data
        this.inspectionResultForm[0].id = val.materialCode
        this.inspectionResultForm[0].name = val.material
        this.getTableData()
      })
    },
    getTableData() {
      this.$axios.get(this.$api.url.inspectionItemListUser, {
        params: {
          id: this.detailId,
          type: 1
        }
      }).then(res => {
        this.inspectionItems = res.data
        let arr = []
        let val = JSON.parse(JSON.stringify(this.inspectionItems))
        const uName = []
        //转成一维数组
        val.forEach(l => {
          let father = l.father
          l.children.forEach(c => {
            c.father = father
            c.empiricalValueAddss = []
            if (c.inspectionValue != '' && c.inspectionValue != null) {
              c.empiricalValueAddss = c.inspectionValue.split(",");
            } else {
              c.empiricalValueAddss.push("")
    methods: {
        handleClick(row) {
            this.rowInfp = row;
            this.showLook = true;
        },
        combackIndex() {
            this.showAddPage = false;
            this.defaultInitializationTable();
        },
        updateInsInfo(row) {
            this.rowInfp = row;
            this.showUp = true;
        },
        combackMain(val) {
            this.showUp = false;
            this.showLook = false;
            this.defaultInitializationTable(); // åˆå§‹åŒ–表格数据
            if (val) {
                this.$parent.removeAllTab();
            }
            uName.push(c['username'])
            c.isSelectDevice = false
            arr.push(c)
          })
        })
        this.inspectionItems = arr
        let arrSort = JSON.parse(JSON.stringify(arr))
        //根据集合对象数组长度排序
        arrSort.sort((a, b) => {
          if (a.empiricalValueAddss.length < b.empiricalValueAddss.length) {
            return -1; // a排在b前面
          } else if (a.empiricalValueAddss.length > b.empiricalValueAddss.length) {
            return 1; // a排在b后面
          } else {
            return 0; // ä¿æŒç›¸å¯¹é¡ºåºä¸å˜
          }
        });
        // console.log(arrSort);
        console.log(uName);
        let name = [...new Set(uName)].filter(item => item !== null);
        let rname = ''
        name.forEach(m => {
          rname += m + ","
        })
        this.inspectionResultForm[0].inspecter = rname.slice(0, -1)
        this.empiricalValueAdd = arrSort[arrSort.length - 1].empiricalValueAddss.length
        this.mergeTable(arr)
      })
        },
        searchPro() {
            this.search.countSize = this.pageSize;
            this.search.pageSize = this.currentPage;
            this.defaultInitializationTable();
        },
        // ç‚¹å‡»è®¾å¤‡æ ‘保存点击记录
        nodeClick(data) {
            if (data.id != undefined) this.nodeData = data;
        },
        // è®¾å¤‡æ ‘过滤搜索
        filterNode(value, data) {
            if (!value) return true;
            return data.name.indexOf(value) !== -1;
        },
        // èŽ·å–è®¾å¤‡æ ‘å†…å®¹
        getOptions(row) {
            this.$axios
                .get(this.$api.url.inspectionItemChooseDev, {
                    params: {
                        father: row.father,
                        name: row.name,
                        technologyId: this.processInspectVo.technologyId,
                    },
                })
                .then((res) => {
                    this.materialOptions = res.data;
                    if (this.materialOptions.length === 1) {
                        this.$message({
                            message: "该项目下只有一个试验设备,无需选择!",
                            type: "warning",
                        });
                        return;
                    }
                    row.isSelectDevice = true;
                    this.filterText = row.did;
                });
        },
        // ç‚¹å‡»è¡¨æ ¼é€‰æ‹©è§¦å‘
        clickTableSelect(scope) {
            // this.centerDialogVisible = true;
            if (this.clickSelectDevice.index != null) {
                this.$set(
                    this.inspectionItems[this.clickSelectDevice.index],
                    "isSelectDevice",
                    false
                );
            }
            this.clickSelectDevice.index = scope.$index;
            this.clickSelectDevice.rpId = scope.row.id;
            this.getOptions(scope.row);
        },
        // ç‚¹å‡»æ ‘里面的确定
        clickNodeSure() {
            let select = this.materialOptions.filter((item) => {
                return item.id === this.filterText;
            })[0];
            this.nodeData.id = select.id;
            this.nodeData.name = select.device;
            if (this.detailId == null) {
                this.inspectionItems[this.clickSelectDevice.index].did =
                    this.nodeData.id;
                this.inspectionItems[this.clickSelectDevice.index].dname =
                    this.nodeData.name;
                this.centerDialogVisible = false;
            } else {
                this.$axios
                    .post(this.$api.url.inspectionItemUpdateDevByInsId, {
                        id: this.clickSelectDevice.rpId,
                        type: 1,
                        devId: this.nodeData.id,
                    })
                    .then((res) => {
                        this.getTableData();
                        this.centerDialogVisible = false;
                    });
            }
        },
        changeState(row, index) {
            if (row.did != null && row.did != "") {
                // let val = row.empiricalValueAddss.filter(item => {
                //   return item != '' && item != null
                // })
                // let eq = val.filter(item => {
                //   return /^[^><=]/.test(item)
                // })
                // if (eq.length > 0) {
                //   this.$message({
                //     message: "检测值[" + eq + "]格式首位应包含>,<或者=",
                //     type: 'warning'
                //   });
                //   return
                // }
                let str = "";
                row.empiricalValueAddss.forEach((e) => {
                    str += e + ",";
                });
                if (
                    str.slice(0, -1) === "" ||
                    str.slice(0, -1) === null ||
                    str.slice(0, -1) === undefined
                ) {
                    return;
                }
                this.$axios
                    .post(
                        this.$api.url.inspectionItemlose_focus_update,
                        {
                            deviceId: row.did,
                            inspectionItemId: row.id,
                            inspectionValue: str.slice(0, -1),
                        },
                        {
                            headers: { "Content-Type": "application/json" },
                        }
                    )
                    .then((res) => {
                        if (res.message === "内控值输入格式有问题!") {
                            this.$message({
                                message: res.message,
                                type: "warning",
                            });
                            return;
                        }
                        row.result = res.data.result;
                        row.username = res.data.username;
                    });
            } else {
                this.$message({
                    message: "请选择择设备!",
                    type: "warning",
                });
            }
        },
        // æ¯é¡µæ¡æ•°æ”¹å˜æ—¶è§¦å‘ é€‰æ‹©ä¸€é¡µæ˜¾ç¤ºå¤šå°‘行
        handleSizeChange(val) {
            this.search.countSize = val;
            this.defaultInitializationTable();
        },
        handleSpanMethod({ row, column, rowIndex, columnIndex }) {
            if (columnIndex === 0) {
                const _row = this.spanArr[rowIndex];
                const _col = _row > 0 ? 1 : 0;
                return {
                    rowspan: _row,
                    colspan: _col,
                };
            }
            if (columnIndex === 1) {
                const _row = this.spanArr[rowIndex];
                const _col = _row > 0 ? 1 : 0;
                return {
                    rowspan: _row,
                    colspan: _col,
                };
            }
        },
        // åˆå¹¶è¡¨æ ¼
        mergeTable() {
            this.rowList = [];
            this.spanArr = [];
            this.position = 0;
            this.inspectionItems.forEach((item, index) => {
                if (index === 0) {
                    this.spanArr.push(1);
                    this.position = 0;
                } else {
                    if (
                        this.inspectionItems[index].father ===
                        this.inspectionItems[index - 1].father
                    ) {
                        this.spanArr[this.position] += 1;
                        this.spanArr.push(0);
                    } else {
                        this.spanArr.push(1);
                        this.position = index;
                    }
                }
            });
        },
        changeOptionSoptionSprocesses() {
            this.optionTechnology = [];
            let working = this.optionSoptionSprocesses.filter((item) => {
                return item.name === this.processInspectVo.techfather;
            })[0];
            this.optionTechnology = working.children;
        },
        addTestProjevt() {
            let val = JSON.parse(JSON.stringify(this.processInspectVo));
            val.techname = this.processInspectVo.techname.split("-")[1];
            val.technologyId = this.processInspectVo.techname.split("-")[0];
            this.processInspectVo.technologyId = val.technologyId;
            this.$axios
                .post(
                    this.$api.url.processInspectAddProcess,
                    {
                        material: val.material,
                        materialCode: val.materialCode,
                        orderNumber: val.orderNumber,
                        quantity: val.quantity,
                        specificationsModel: val.specificationsModel,
                        techfather: val.techfather,
                        techname: val.techname,
                        techId: Number(val.technologyId),
                        mtId: Number(val.technologyId),
                        unit: val.unit,
                    },
                    {
                        headers: { "Content-Type": "application/json" },
                    }
                )
                .then((res) => {
                    if (res.code === 201) {
                        this.$message({
                            message: res.message,
                            type: "warning",
                        });
                        return;
                    }
                    this.isAddProject = true;
                    this.detailId = res.data;
                    this.inspectionResultForm[0].id = val.materialCode;
                    this.inspectionResultForm[0].name = val.material;
                    this.getTableData();
                });
        },
        getTableData() {
            this.$axios
                .get(this.$api.url.inspectionItemListUser, {
                    params: {
                        id: this.detailId,
                        type: 1,
                    },
                })
                .then((res) => {
                    this.inspectionItems = res.data;
                    let arr = [];
                    let val = JSON.parse(JSON.stringify(this.inspectionItems));
                    const uName = [];
                    //转成一维数组
                    val.forEach((l) => {
                        let father = l.father;
                        l.children.forEach((c) => {
                            c.father = father;
                            c.empiricalValueAddss = [];
                            if (
                                c.inspectionValue != "" &&
                                c.inspectionValue != null
                            ) {
                                c.empiricalValueAddss =
                                    c.inspectionValue.split(",");
                            } else {
                                c.empiricalValueAddss.push("");
                            }
                            uName.push(c["username"]);
                            c.isSelectDevice = false;
                            arr.push(c);
                        });
                    });
                    this.inspectionItems = arr;
                    let arrSort = JSON.parse(JSON.stringify(arr));
                    //根据集合对象数组长度排序
                    arrSort.sort((a, b) => {
                        if (
                            a.empiricalValueAddss.length <
                            b.empiricalValueAddss.length
                        ) {
                            return -1; // a排在b前面
                        } else if (
                            a.empiricalValueAddss.length >
                            b.empiricalValueAddss.length
                        ) {
                            return 1; // a排在b后面
                        } else {
                            return 0; // ä¿æŒç›¸å¯¹é¡ºåºä¸å˜
                        }
                    });
                    // console.log(arrSort);
                    console.log(uName);
                    let name = [...new Set(uName)].filter(
                        (item) => item !== null
                    );
                    let rname = "";
                    name.forEach((m) => {
                        rname += m + ",";
                    });
                    this.inspectionResultForm[0].inspecter = rname.slice(0, -1);
                    this.empiricalValueAdd =
                        arrSort[arrSort.length - 1].empiricalValueAddss.length;
                    this.mergeTable(arr);
                });
        },
        selectSample() {
            let sample = this.optionsSamplename.filter((item) => {
                return item.name === this.processInspectVo.material;
            })[0];
            this.processInspectVo.techfather = null;
            this.processInspectVo.techname = null;
            this.processInspectVo.materialCode = sample.code;
            this.processInspectVo.specificationsModel = sample.specifications;
            this.processInspectVo.unit = sample.unit;
            this.optionSoptionSprocesses = [];
            this.optionSoptionSprocesses = sample.children;
        },
        selectInfoByOrderId() {
            this.$axios
                .get(this.$api.url.chooseMaterProcessInspect, {
                    params: {
                        orderNumber: this.processInspectVo.orderNumber,
                    },
                })
                .then((res) => {
                    if (res.data.length > 0) {
                        console.log(res.data);
                        this.optionsSamplename = res.data;
                    } else {
                        this.$message({
                            message: "没有该订单号!",
                            type: "warning",
                        });
                    }
                });
        },
        // å½“前页改变时触发 è·³è½¬å…¶ä»–页
        handleCurrentChange(val) {
            this.search.pageSize = val;
            this.defaultInitializationTable();
        },
        // æ˜¾ç¤ºæ–°å¢žé¡µé¢
        handleAddNew() {
            this.showAddPage = true;
            // this.getTableData()
        },
        // è¡¨æ ¼åˆå§‹åŒ–接口
        defaultInitializationTable() {
            this.$axios
                .post(this.$api.url.selectProcessInspectsList, this.search)
                .then((res) => {
                    this.inspectionTableTotal = res.data.total;
                    this.inspectionTable = res.data.row;
                });
        },
        // æ·»åŠ è¡Œ
        clickAddLine() {
            let obj = {
                material: "",
                materialCode: "",
                orderNumber: "",
                quantity: 0,
                specificationsModel: "",
                techfather: "",
                techname: "",
                technologyId: 0,
                unit: "",
            };
            this.inspectionItems.push(obj);
        },
        // åˆ é™¤è¡Œ
        clickDeleteline(scope) {
            this.inspectionItems.splice(scope.$index, 1);
        },
        // åˆ é™¤æ£€éªŒå€¼åˆ—
        clickDeleteInspectionColumn() {
            if (this.empiricalValueAdd - 1 === 0) {
            } else {
                if (
                    this.empiricalValueAddMaxNumber !=
                    this.empiricalValueAdd - 1
                ) {
                    this.empiricalValueAdd = this.empiricalValueAdd - 1;
                    this.inspectionItems.forEach((i) => {
                        i.testValueList.splice(this.empiricalValueAdd, 1);
                    });
                }
            }
        },
        // æ·»åŠ æ£€éªŒå€¼åˆ—
        clickAddInspectionColumn() {
            this.empiricalValueAdd = this.empiricalValueAdd + 1;
        },
    },
    selectSample() {
      let sample = this.optionsSamplename.filter(item => {
        return item.name === this.processInspectVo.material
      })[0]
      this.processInspectVo.techfather = null
      this.processInspectVo.techname = null
      this.processInspectVo.materialCode = sample.code
      this.processInspectVo.specificationsModel = sample.specifications
      this.processInspectVo.unit = sample.unit
      this.optionSoptionSprocesses = []
      this.optionSoptionSprocesses = sample.children
    created() {
        this.defaultInitializationTable(); // åˆå§‹åŒ–表格数据
    },
    selectInfoByOrderId() {
      this.$axios.get(this.$api.url.chooseMaterProcessInspect, {
        params: {
          orderNumber: this.processInspectVo.orderNumber
        }
      }).then(res => {
        if (res.data.length > 0) {
          console.log(res.data);
          this.optionsSamplename = res.data
        } else {
          this.$message({
            message: '没有该订单号!',
            type: 'warning'
          });
        }
      })
    },
    // å½“前页改变时触发 è·³è½¬å…¶ä»–页
    handleCurrentChange(val) {
      this.search.pageSize = val;
      this.defaultInitializationTable();
    },
    // æ˜¾ç¤ºæ–°å¢žé¡µé¢
    handleAddNew() {
      this.showAddPage = true;
      // this.getTableData()
    },
    // è¡¨æ ¼åˆå§‹åŒ–接口
    defaultInitializationTable() {
      this.$axios
        .post(this.$api.url.selectProcessInspectsList, this.search)
        .then(res => {
          this.inspectionTableTotal = res.data.total;
          this.inspectionTable = res.data.row;
        });
    },
    // æ·»åŠ è¡Œ
    clickAddLine() {
      let obj = {
        material: "",
        materialCode: "",
        orderNumber: "",
        quantity: 0,
        specificationsModel: "",
        techfather: "",
        techname: "",
        technologyId: 0,
        unit: ""
      };
      this.inspectionItems.push(obj);
    },
    // åˆ é™¤è¡Œ
    clickDeleteline(scope) {
      this.inspectionItems.splice(scope.$index, 1);
    },
    // åˆ é™¤æ£€éªŒå€¼åˆ—
    clickDeleteInspectionColumn() {
      if (this.empiricalValueAdd - 1 === 0) {
      } else {
        if (this.empiricalValueAddMaxNumber != this.empiricalValueAdd - 1) {
          this.empiricalValueAdd = this.empiricalValueAdd - 1;
          this.inspectionItems.forEach(i => {
            i.testValueList.splice(this.empiricalValueAdd, 1);
          });
        }
      }
    },
    // æ·»åŠ æ£€éªŒå€¼åˆ—
    clickAddInspectionColumn() {
      this.empiricalValueAdd = this.empiricalValueAdd + 1;
    }
  },
  created() {
    this.defaultInitializationTable(); // åˆå§‹åŒ–表格数据
  }
};
</script>
<style>
.node_i {
  color: orange;
    color: orange;
}
.div_device_dialog {
  min-height: 400px;
  overflow: auto;
    min-height: 400px;
    overflow: auto;
}
.nav {
  display: flex;
  padding: 20px 20px;
  align-items: center;
  background-color: #fff;
    display: flex;
    padding: 20px 20px;
    align-items: center;
    background-color: #fff;
}
.table_header {
  height: calc(100vh - 550px);
    height: calc(100vh - 550px);
}
.nav * {
  font-size: 14px;
    font-size: 14px;
}
.content-body .rawPage {
  background-color: #fff;
  overflow: hidden;
    background-color: #fff;
    overflow: hidden;
}
.rawPage span {
    white-space: nowrap;
}
.inspectionTable {
  padding: 20px 20px;
    padding: 20px 20px;
}
.pagination {
  float: right;
  margin-right: 20px;
    float: right;
    margin-right: 20px;
}
.newPage {
  overflow: hidden;
    overflow: hidden;
}
.header {
  padding: 12px;
    padding: 12px;
}
.addInspectionform {
  background-color: #fff;
    background-color: #fff;
}
.addInspectionform .formwrapper {
  padding: 20px 0px;
  margin-left: 100px;
    padding: 20px 0px;
    margin-left: 100px;
}
.inspectionProject .el-table {
  background-color: #fff;
  padding: 10px 12px;
    background-color: #fff;
    padding: 10px 12px;
}
.inspectionResult span {
  display: block;
  padding: 5px 0px;
    display: block;
    padding: 5px 0px;
}
.inspectionResult .el-table {
  background-color: #fff;
  padding: 10px 12px;
    background-color: #fff;
    padding: 10px 12px;
}
.inspectionProject_span {
  line-height: 32px;
  padding: 10px 20px;
    line-height: 32px;
    padding: 10px 20px;
}
.inspectionProject_span .el-button {
  float: right;
  font-size: 13px !important;
    float: right;
    font-size: 13px !important;
}
</style>
src/components/view/raw-ins.vue
@@ -1,221 +1,214 @@
<style scoped>
    .raw_ins {
        height: 100%;
    }
.raw_ins {
    height: 100%;
}
    .raw_ins .title .el-button {
        height: 32px;
        border: 1px solid rgba(190, 190, 190, 0.44);
        box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
        padding: 0 12px;
    }
.raw_ins .title .el-button {
    height: 32px;
    border: 1px solid rgba(190, 190, 190, 0.44);
    box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
    padding: 0 12px;
}
    .raw_ins .title {
        margin-bottom: 10px;
        padding: 0 20px;
    }
.raw_ins .title {
    margin-bottom: 10px;
    padding: 0 20px;
}
    .choose {
        padding: 21px 24px;
        display: flex;
        align-items: center;
        background-color: #fff;
        border-bottom: 3px solid rgb(245, 247, 251);
    }
.choose {
    padding: 21px 24px;
    display: flex;
    align-items: center;
    background-color: #fff;
    border-bottom: 3px solid rgb(245, 247, 251);
}
    .choose * {
        font-size: 14px;
    }
.choose * {
    font-size: 14px;
}
    .choose .el-button {
        height: 32px;
        border: 1px solid rgba(190, 190, 190, 0.44);
        box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
        padding: 0 12px;
    }
.choose .el-button {
    height: 32px;
    border: 1px solid rgba(190, 190, 190, 0.44);
    box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
    padding: 0 12px;
}
    .thing {
        width: calc(100% - 44px);
        height: calc(100% - 42px - 82px - 66px);
        background-color: #fff;
        overflow: auto;
        padding: 33px 22px;
    }
.choose span {
    /* span内容强制不换行 */
    white-space: nowrap;
}
    .table_do {
        color: #004ea0;
        cursor: pointer;
    }
.thing {
    width: calc(100% - 44px);
    height: calc(100% - 42px - 82px - 66px);
    background-color: #fff;
    overflow: auto;
    padding: 33px 22px;
}
.table_do {
    color: #004ea0;
    cursor: pointer;
}
</style>
<style>
    .raw_ins .thing * {
        font-size: 14px;
    }
.raw_ins .thing * {
    font-size: 14px;
}
    .raw_ins .has-gutter .el-table__cell {
        background-color: #f0f1f5 !important;
        color: #333;
    }
.raw_ins .has-gutter .el-table__cell {
    background-color: #f0f1f5 !important;
    color: #333;
}
    .raw_ins .has-gutter .el-table__cell .cell {
        font-size: 16px;
        font-weight: 500;
    }
.raw_ins .has-gutter .el-table__cell .cell {
    font-size: 16px;
    font-weight: 500;
}
    .raw_ins .cell {
        color: #333;
        padding-left: 17px !important;
    }
.raw_ins .cell {
    color: #333;
    padding-left: 17px !important;
}
    .raw_ins .el-table__body-wrapper {
        height: 100%;
    }
.raw_ins .el-table__body-wrapper {
    height: 100%;
}
    .raw_ins .el-table__body {
        height: 100%;
    }
.raw_ins .el-table__body {
    height: 100%;
}
</style>
<template>
    <div class="raw_ins">
        <div class="title">
            <el-row>
                <el-col :span="12" style="line-height: 32px;">原材料检验</el-col>
                <el-col :span="12" style="text-align: right;">
                    <el-button type="primary" icon="el-icon-plus" style="background: #004EA2;"
                        @click="goDetail(null)">新增</el-button>
                    <el-button icon="el-icon-download">导出</el-button>
                </el-col>
            </el-row>
        </div>
        <div class="choose">
            <span>来料日期:</span>
            <el-date-picker v-model="search.formTime" size="small" placeholder="请输入" style="width: 13vw;margin-right: 5px;"
                clearable value-format="yyyy-MM-dd"></el-date-picker>
            <span>原材料编码:</span>
            <el-input v-model="search.code" placeholder="请输入" size="small" style="width: 13vw;margin-right: 5px;"
                clearable></el-input>
            <span>检测状态:</span>
            <el-select v-model="search.insState" size="small" placeholder="请选择" style="width: 13vw;margin-right: 5px;">
                <el-option label="全部" :value="2"></el-option>
                <el-option label="未检测" :value="0"></el-option>
                <el-option label="已检测" :value="1"></el-option>
            </el-select>
            <span>原材料名称:</span>
            <el-input v-model="search.name" size="small" placeholder="请输入" style="width: 13vw;margin-right: 5px;"
                clearable></el-input>
            <el-button size="mini" @click="clean()"><span>重 ç½®</span></el-button>
            <el-button size="mini" type="primary" style="background: #004EA2;" @click="selectRawInspectsList()"><span>查
                    è¯¢</span></el-button>
        </div>
        <div class="thing">
            <el-table :data="tableData" border style="width: 100%;overflow-y: auto;min-height: calc(100% - 50px)"
                max-height="calc(100% - 50px)" @selection-change="handleSelectionChange" default-expand-all
                :tree-props="{ children: 'children', hasChildren: 'hasChildren' }" row-key="id">
                <el-table-column type="selection" width="50"> </el-table-column>
                <el-table-column type="index" label="序号" width="70">
                </el-table-column>
                <el-table-column prop="formTime" label="来料日期"> </el-table-column>
                <el-table-column prop="code" label="原材料编码"> </el-table-column>
                <el-table-column prop="name" label="原材料名称"> </el-table-column>
                <el-table-column prop="specifications" label="规格型号">
                </el-table-column>
                <el-table-column prop="unit" label="单位"> </el-table-column>
                <el-table-column prop="number" label="数量"> </el-table-column>
                <el-table-column prop="createTime" label="报检日期"> </el-table-column>
                <el-table-column prop="user_name" label="报检人"> </el-table-column>
                <el-table-column prop="createTime" label="检验日期"> </el-table-column>
                <el-table-column prop="createTime" label="检测状态" width="100">
                    <template slot-scope="scope">
                        <span style="color: #34BD66;" v-if="scope.row.ins_state == 1">已检测</span>
                        <span style="color: #E84738;" v-else-if="scope.row.ins_state == 0">未检测</span>
                    </template>
                </el-table-column>
                <el-table-column prop="judge_state" label="合格状态" width="100">
                    <template slot-scope="scope">
                        <span style="color: #34BD66;" v-if="scope.row.judge_state == 1">合格</span>
                        <span style="color: #E84738;" v-else-if="scope.row.judge_state == 0">不合格</span>
                    </template>
                </el-table-column>
                <el-table-column label="操作" width="100">
                    <template slot-scope="scope">
                        <span class="table_do" @click="changeShowDetail(scope.row)">查看</span>
                        <span class="table_do">打印</span>
                    </template>
                </el-table-column>
            </el-table>
            <el-col style="height: 50px;display: flex;align-items: center;justify-content: right;">
                <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="1"
                    :page-sizes="[10, 15, 20, 30, 50]" :page-size="search.co" layout="total, sizes, prev, pager, next, jumper"
                    :total="total">
                </el-pagination>
            </el-col>
        </div>
    </div>
    <div class="raw_ins">
        <div class="title">
            <el-row>
                <el-col :span="12" style="line-height: 32px;">原材料检验</el-col>
                <el-col :span="12" style="text-align: right;">
                    <el-button type="primary" icon="el-icon-plus" style="background: #004EA2;" @click="goDetail(null)">新增</el-button>
                    <el-button icon="el-icon-download">导出</el-button>
                </el-col>
            </el-row>
        </div>
        <div class="choose">
            <span>来料日期:</span>
            <el-date-picker v-model="search.formTime" size="small" placeholder="请输入" style="width: 13vw;margin-right: 5px;" clearable value-format="yyyy-MM-dd"></el-date-picker>
            <span>原材料编码:</span>
            <el-input v-model="search.code" placeholder="请输入" size="small" style="width: 13vw;margin-right: 5px;" clearable></el-input>
            <span>检测状态:</span>
            <el-select v-model="search.insState" size="small" placeholder="请选择" style="width: 13vw;margin-right: 5px;">
                <el-option label="全部" :value="2"></el-option>
                <el-option label="未检测" :value="0"></el-option>
                <el-option label="已检测" :value="1"></el-option>
            </el-select>
            <span>原材料名称:</span>
            <el-input v-model="search.name" size="small" placeholder="请输入" style="width: 13vw;margin-right: 5px;" clearable></el-input>
            <el-button size="mini" @click="clean()"><span>重 ç½®</span></el-button>
            <el-button size="mini" type="primary" style="background: #004EA2;" @click="selectRawInspectsList()"><span>查 è¯¢</span></el-button>
        </div>
        <div class="thing">
            <el-table :data="tableData" border style="width: 100%;" height="calc(100% - 50px)" @selection-change="handleSelectionChange" default-expand-all :tree-props="{ children: 'children', hasChildren: 'hasChildren' }" row-key="id">
                <el-table-column type="index" label="序号" width="60">
                </el-table-column>
                <el-table-column prop="formTime" label="来料日期" min-width="110"> </el-table-column>
                <el-table-column prop="code" label="原材料编码" min-width="110"> </el-table-column>
                <el-table-column prop="name" label="原材料名称" min-width="110"> </el-table-column>
                <el-table-column prop="specifications" label="规格型号" min-width="100">
                </el-table-column>
                <el-table-column prop="unit" label="单位" min-width="60"> </el-table-column>
                <el-table-column prop="number" label="数量" min-width="60"> </el-table-column>
                <el-table-column prop="createTime" label="报检日期" min-width="110"> </el-table-column>
                <el-table-column prop="user_name" label="报检人" min-width="80"> </el-table-column>
                <el-table-column prop="createTime" label="检验日期" min-width="110"> </el-table-column>
                <el-table-column prop="createTime" label="检测状态" min-width="100">
                    <template slot-scope="scope">
                        <span style="color: #34BD66;" v-if="scope.row.ins_state == 1">已检测</span>
                        <span style="color: #E84738;" v-else-if="scope.row.ins_state == 0">未检测</span>
                    </template>
                </el-table-column>
                <el-table-column prop="judge_state" label="合格状态" min-width="100">
                    <template slot-scope="scope">
                        <span style="color: #34BD66;" v-if="scope.row.judge_state == 1">合格</span>
                        <span style="color: #E84738;" v-else-if="scope.row.judge_state == 0">不合格</span>
                    </template>
                </el-table-column>
                <el-table-column label="操作" min-width="100" fixed="right">
                    <template slot-scope="scope">
                        <span class="table_do" @click="changeShowDetail(scope.row)">查看</span>
                        <span class="table_do">打印</span>
                    </template>
                </el-table-column>
            </el-table>
            <el-col style="height: 50px;display: flex;align-items: center;justify-content: right;">
                <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="1" :page-sizes="[10, 15, 20, 30, 50]" :page-size="search.co" layout="total, sizes, prev, pager, next, jumper" :total="total">
                </el-pagination>
            </el-col>
        </div>
    </div>
</template>
<script>
    export default {
        data() {
            return {
                search: {
                    formTime: "", // æ¥æ–™æ—¶é—´
                    code: "", // åŽŸææ–™ç¼–ç 
                    insState: "", // æ£€æµ‹çŠ¶æ€
                    name: "", //
                    countSize: 10, // æ¡æ•°/页
                    pageSize: 1 // é¡µæ•°
                },
                total: 0,
                tableData: [],
                selects: []
            };
        },
        props: ["goDetail"],
        mounted() {
            this.selectRawInspectsList();
        },
        methods: {
            handleSelectionChange(val) {
                this.selects = val;
            },
            handleSizeChange(val) {
                this.search.countSize = val;
                this.selectRawInspectsList();
            },
            handleCurrentChange(val) {
                this.search.pageSize = val;
                this.selectRawInspectsList();
            },
            selectRawInspectsList() {
                this.$axios
                    .get(this.$api.url.selectRawInspectsList, {
                        params: this.search
                    })
                    .then(res => {
                        this.tableData = res.data.row;
                        this.total = res.data.total;
                    });
            },
            clean() {
                this.search = {
                    formTime: "", // æ¥æ–™æ—¶é—´
                    code: "", // åŽŸææ–™ç¼–ç 
                    insState: "", // æ£€æµ‹çŠ¶æ€
                    name: "", //
                    countSize: 10, // æ¡æ•°/页
                    pageSize: 1 // é¡µæ•°
                };
                this.selectRawInspectsList();
            },
            changeShowDetail({
                id
            }) {
                this.goDetail(id);
                // console.log(id)
                // const res = await this.$axios.post(this.$api.url.selectRawInspectsListById,{params:{id}})
                // console.log(res)
            }
        }
    };
export default {
    data() {
        return {
            search: {
                formTime: "", // æ¥æ–™æ—¶é—´
                code: "", // åŽŸææ–™ç¼–ç 
                insState: "", // æ£€æµ‹çŠ¶æ€
                name: "", //
                countSize: 10, // æ¡æ•°/页
                pageSize: 1, // é¡µæ•°
            },
            total: 0,
            tableData: [],
            selects: [],
        };
    },
    props: ["goDetail"],
    mounted() {
        this.selectRawInspectsList();
    },
    methods: {
        handleSelectionChange(val) {
            this.selects = val;
        },
        handleSizeChange(val) {
            this.search.countSize = val;
            this.selectRawInspectsList();
        },
        handleCurrentChange(val) {
            this.search.pageSize = val;
            this.selectRawInspectsList();
        },
        selectRawInspectsList() {
            this.$axios
                .get(this.$api.url.selectRawInspectsList, {
                    params: this.search,
                })
                .then((res) => {
                    this.tableData = res.data.row;
                    this.total = res.data.total;
                });
        },
        clean() {
            this.search = {
                formTime: "", // æ¥æ–™æ—¶é—´
                code: "", // åŽŸææ–™ç¼–ç 
                insState: "", // æ£€æµ‹çŠ¶æ€
                name: "", //
                countSize: 10, // æ¡æ•°/页
                pageSize: 1, // é¡µæ•°
            };
            this.selectRawInspectsList();
        },
        changeShowDetail({ id }) {
            this.goDetail(id);
            // console.log(id)
            // const res = await this.$axios.post(this.$api.url.selectRawInspectsListById,{params:{id}})
            // console.log(res)
        },
    },
};
</script>
src/components/view/rawUnqualified/raw.vue
ÎļþÒÑɾ³ý
src/components/view/rawUnqualifiedBox.vue
ÎļþÒÑɾ³ý
src/components/view/unqualifiedManagement.vue
@@ -1,300 +1,218 @@
<template>
  <div class="unqualifiedBox">
    <el-row>
      <el-col :span="12" style="line-height: 32px;">不合格管理</el-col>
      <el-col :span="12" style="text-align: right;">
        <el-button icon="el-icon-download" size="mini" @click="() => {}"
          >导出</el-button
        >
      </el-col>
    </el-row>
    <div style="margin-top: 10px;">
      <el-card shadow="hover" class="margin-30" style="height: 80px;">
        <div class="choose">
          <span>处理状态:</span>
          <el-select
            v-model="search.dealState"
            size="small"
            placeholder="请选择"
            style="width: 224px;margin-right: 30px;"
          >
            <el-option label="已处理" :value="1"></el-option>
            <el-option label="待处理" :value="0"></el-option>
          </el-select>
          <span>来料日期:</span>
          <el-date-picker
            v-model="search.formTime"
            size="small"
            placeholder="请输入"
            style="width: 224px;margin-right: 30px;"
            clearable
            value-format="yyyy-MM-dd"
          ></el-date-picker>
          <span>产品大类:</span>
          <el-select
            v-model="search.productCategories"
            size="small"
            placeholder="请选择"
            style="width: 224px;margin-right: 30px;"
          >
            <el-option label="全部" :value="''"></el-option>
            <el-option label="成品" :value="1"></el-option>
            <el-option label="半成品" :value="2"></el-option>
          </el-select>
          <el-button size="mini" @click="clean()"><span>重 ç½®</span></el-button>
          <el-button
            size="mini"
            type="primary"
            style="background: #004EA2;"
            @click="
              unqualifiedTable = [];
              getDetailInfo();
            "
            ><span>查 è¯¢</span></el-button
          >
    <div class="unqualifiedBox">
        <el-row>
            <el-col :span="12" style="line-height: 32px;">不合格管理</el-col>
            <el-col :span="12" style="text-align: right;">
                <el-button icon="el-icon-download" size="mini" @click="() => { }">导出</el-button>
            </el-col>
        </el-row>
        <div style="margin-top: 10px;">
            <el-card shadow="hover" style="height: 6em;display: flex;align-items: center;">
                <div class="choose">
                    <span>处理状态:</span>
                    <el-select v-model="search.dealState" size="small" placeholder="请选择" style="width: 13vw;margin-right: 30px;">
                        <el-option label="已处理" :value="1"></el-option>
                        <el-option label="待处理" :value="0"></el-option>
                    </el-select>
                    <span>来料日期:</span>
                    <el-date-picker v-model="search.formTime" size="small" placeholder="请输入" style="width: 13vw;margin-right: 30px;" clearable value-format="yyyy-MM-dd"></el-date-picker>
                    <span>产品大类:</span>
                    <el-select v-model="search.productCategories" size="small" placeholder="请选择" style="width: 13vw;margin-right: 30px;">
                        <el-option label="全部" :value="''"></el-option>
                        <el-option label="成品" :value="1"></el-option>
                        <el-option label="半成品" :value="2"></el-option>
                    </el-select>
                    <el-button size="mini" @click="clean()"><span>重 ç½®</span></el-button>
                    <el-button size="mini" type="primary" style="background: #004EA2;" @click="
                        unqualifiedTable = [];
                    getDetailInfo();
                    "><span>查 è¯¢</span></el-button>
                </div>
            </el-card>
        </div>
      </el-card>
        <div class="tableno" style="height:300px">
            <el-card shadow="hover">
                <el-table :data="unqualifiedTable" border ref="multipleTable" tooltip-effect="dark" height="calc(100vh - 340px)" style="width: 100%">
                    <el-table-column type="index" label="序号" width="60">
                        <template slot-scope="scope">
                            {{ (search.pageSize - 1) * search.countSize + scope.$index + 1 }}
                        </template>
                    </el-table-column>
                    <el-table-column prop="dateArrival" label="来料日期" min-width="110">
                    </el-table-column>
                    <el-table-column prop="reason" label="缺陷名称" min-width="100" show-overflow-tooltip>
                    </el-table-column>
                    <el-table-column prop="material_code" label="材料编码" min-width="150" show-overflow-tooltip>
                    </el-table-column>
                    <el-table-column prop="project_name" label="材料名称" min-width="150">
                    </el-table-column>
                    <el-table-column prop="specifications_model" label="规格型号" min-width="100">
                    </el-table-column>
                    <el-table-column prop="unit" label="单位" min-width="60"> </el-table-column>
                    <el-table-column prop="quantity" label="数量" min-width="60"> </el-table-column>
                    <el-table-column prop="inspectionDate" label="报检日期" min-width="110">
                    </el-table-column>
                    <el-table-column prop="name" label="报检人" min-width="80"> </el-table-column>
                    <el-table-column prop="processingDate" label="检验日期" min-width="110">
                    </el-table-column>
                    <el-table-column prop="deal_state" label="处理状态" min-width="100">
                        <template slot-scope="scope">
                            <span style="color:#34BD66;" v-if="scope.row.deal_state == 1">已处理</span>
                            <span style="color:#E84738;" v-else-if="scope.row.deal_state == 0">待处理</span>
                        </template>
                    </el-table-column>
                    <el-table-column prop="deal_reasult" label="评审结果" min-width="100">
                        <template slot-scope="scope">
                            <span style="color:#E84738;" v-if="scope.row.deal_reasult == 0">不通过</span>
                            <span style="color:#34BD66;" v-else-if="scope.row.deal_reasult == 1">通过</span>
                        </template>
                    </el-table-column>
                    <el-table-column label="操作" min-width="100" fixed="right">
                        <template slot-scope="scope">
                            <div style="display: flex;">
                                <el-popover placement="left" width="160" :ref="`popover-${scope.$index}`">
                                    <div style="padding: 6px">评审是否通过?</div>
                                    <div style="text-align: right; margin: 6px;">
                                        <el-button size="mini" type="text" style="color: #E84738;" @click="
                                            scope._self.$refs[`popover-${scope.$index}`].doClose();
                                        rawEvaluate(scope.row, 0);
                                        ">不通过</el-button>
                                        <el-button type="text" style="color: #34bd66;" size="mini" @click="
                                            scope._self.$refs[`popover-${scope.$index}`].doClose();
                                        rawEvaluate(scope.row, 1);
                                        ">通过</el-button>
                                    </div>
                                    <el-button slot="reference" type="text" siae="small" size="mini">评审</el-button>
                                </el-popover>
                                <el-button type="text" siae="small" size="mini" style=" color:87, 138, 193 ;margin-left: 10px;">查看</el-button>
                            </div>
                        </template>
                    </el-table-column>
                </el-table>
                <el-col style="height: 50px;display: flex;align-items: center;justify-content: right;">
                    <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="search.pageSize" :page-sizes="[10, 15, 20, 30, 50]" :page-size="search.countSize" layout="total, sizes, prev, pager, next, jumper" :total="total">
                    </el-pagination>
                </el-col>
            </el-card>
        </div>
    </div>
    <div class="tableno" style="height:300px">
      <el-card shadow="hover" class="margin-30">
        <el-table
          :data="unqualifiedTable"
          border
          ref="multipleTable"
          tooltip-effect="dark"
          height="calc(100vh - 340px)"
          style="width: 100%"
        >
          <el-table-column type="selection" width="50"> </el-table-column>
          <el-table-column type="index" label="序号" width="60">
            <template slot-scope="scope">
              {{ (search.pageSize - 1) * search.countSize + scope.$index + 1 }}
            </template>
          </el-table-column>
          <el-table-column prop="dateArrival" label="来料日期">
          </el-table-column>
          <el-table-column
            prop="reason"
            label="缺陷名称"
            min-width="120"
            show-overflow-tooltip
          >
          </el-table-column>
          <el-table-column prop="material_code" label="材料编码">
          </el-table-column>
          <el-table-column prop="project_name" label="材料名称">
          </el-table-column>
          <el-table-column
            prop="specifications_model"
            label="规格型号"
            min-width="120"
          >
          </el-table-column>
          <el-table-column prop="unit" label="单位"> </el-table-column>
          <el-table-column prop="quantity" label="数量"> </el-table-column>
          <el-table-column prop="inspectionDate" label="报检日期">
          </el-table-column>
          <el-table-column prop="name" label="报检人"> </el-table-column>
          <el-table-column prop="processingDate" label="检验日期">
          </el-table-column>
          <el-table-column prop="deal_state" label="处理状态" width="100">
            <template slot-scope="scope">
              <span style="color:#34BD66;" v-if="scope.row.deal_state == 1"
                >已处理</span
              >
              <span style="color:#E84738;" v-else-if="scope.row.deal_state == 0"
                >待处理</span
              >
            </template>
          </el-table-column>
          <el-table-column prop="deal_reasult" label="评审结果" width="100">
            <template slot-scope="scope">
              <span style="color:#E84738;" v-if="scope.row.deal_reasult == 0"
                >不通过</span
              >
              <span
                style="color:#34BD66;"
                v-else-if="scope.row.deal_reasult == 1"
                >通过</span
              >
            </template>
          </el-table-column>
          <el-table-column label="操作" width="100">
            <template slot-scope="scope">
              <div style="display: flex;">
                <el-popover
                  placement="left"
                  width="160"
                  :ref="`popover-${scope.$index}`"
                >
                  <div style="padding: 6px">评审是否通过?</div>
                  <div style="text-align: right; margin: 6px;">
                    <el-button
                      size="mini"
                      type="text"
                      style="color: #E84738;"
                      @click="
                        scope._self.$refs[`popover-${scope.$index}`].doClose();
                        rawEvaluate(scope.row, 0);
                      "
                      >不通过</el-button
                    >
                    <el-button
                      type="text"
                      style="color: #34bd66;"
                      size="mini"
                      @click="
                        scope._self.$refs[`popover-${scope.$index}`].doClose();
                        rawEvaluate(scope.row, 1);
                      "
                      >通过</el-button
                    >
                  </div>
                  <el-button
                    slot="reference"
                    type="text"
                    siae="small"
                    size="mini"
                    >评审</el-button
                  >
                </el-popover>
                <el-button
                  type="text"
                  siae="small"
                  size="mini"
                  style=" color:87, 138, 193 ;margin-left: 10px;"
                  >查看</el-button
                >
              </div>
            </template>
          </el-table-column>
        </el-table>
        <el-col
          style="height: 50px;display: flex;align-items: center;justify-content: right;"
        >
          <el-pagination
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            :current-page="search.pageSize"
            :page-sizes="[10, 15, 20, 30, 50]"
            :page-size="search.countSize"
            layout="total, sizes, prev, pager, next, jumper"
            :total="total"
          >
          </el-pagination>
        </el-col>
      </el-card>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      search: {
        countSize: 10, // æ¡æ•°/页
        pageSize: 1, // èµ·å§‹é¡µ
        formTime: "", // æ¥æ–™æ—¥æœŸ
        productCategories: "", // äº§å“å¤§ç±»
        dealState: "" // å¤„理状态
      },
      unqualifiedTable: [], // é¡µé¢è¡¨æ ¼æ•°æ®
      total: 0
    };
  },
  mounted() {
    this.getDetailInfo();
  },
  methods: {
    handleSizeChange(val) {
      this.search.countSize = val;
      this.getDetailInfo();
    data() {
        return {
            search: {
                countSize: 10, // æ¡æ•°/页
                pageSize: 1, // èµ·å§‹é¡µ
                formTime: "", // æ¥æ–™æ—¥æœŸ
                productCategories: "", // äº§å“å¤§ç±»
                dealState: "", // å¤„理状态
            },
            unqualifiedTable: [], // é¡µé¢è¡¨æ ¼æ•°æ®
            total: 0,
        };
    },
    handleCurrentChange(val) {
      this.search.pageSize = val;
      this.getDetailInfo();
    mounted() {
        this.getDetailInfo();
    },
    getDetailInfo() {
      this.axios
        .get(this.$api.url.inspectUnaccepted, {
          params: this.search
        })
        .then(res => {
          this.unqualifiedTable = res.data.row;
          this.total = res.data.total;
        });
    methods: {
        handleSizeChange(val) {
            this.search.countSize = val;
            this.getDetailInfo();
        },
        handleCurrentChange(val) {
            this.search.pageSize = val;
            this.getDetailInfo();
        },
        getDetailInfo() {
            this.axios
                .get(this.$api.url.inspectUnaccepted, {
                    params: this.search,
                })
                .then((res) => {
                    this.unqualifiedTable = res.data.row;
                    this.total = res.data.total;
                });
        },
        clean() {
            this.search = {
                countSize: 10, // æ¡æ•°/页
                pageSize: 1, // èµ·å§‹é¡µ
                formTime: "", // æ¥æ–™æ—¥æœŸ
                dealState: "", // å¤„理状态
            };
            this.getDetailInfo();
        },
        rawEvaluate(row, passOrNo) {
            this.$axios
                .post(this.$api.url.evaluatePassOrNo, {
                    rawId: row.id,
                    passOrNo: passOrNo,
                })
                .then((res) => {
                    this.unqualifiedTable = [];
                    this.getDetailInfo();
                    this.$parent.removeAllTab();
                });
        },
    },
    clean() {
      this.search = {
        countSize: 10, // æ¡æ•°/页
        pageSize: 1, // èµ·å§‹é¡µ
        formTime: "", // æ¥æ–™æ—¥æœŸ
        dealState: "" // å¤„理状态
      };
      this.getDetailInfo();
    },
    rawEvaluate(row, passOrNo) {
      this.$axios
        .post(this.$api.url.evaluatePassOrNo, {
          rawId: row.id,
          passOrNo: passOrNo
        })
        .then(res => {
          this.unqualifiedTable = [];
          this.getDetailInfo();
          this.$parent.removeAllTab()
        });
    }
  }
};
</script>
<style scoped>
.unqualifiedBox {
  width: 100%;
  max-height: 100%;
  display: flex;
  flex-direction: column;
  /* overflow-y: scroll; */
    width: 100%;
    max-height: 100%;
    display: flex;
    flex-direction: column;
    /* overflow-y: scroll; */
}
.unqualifiedBox .title .el-button {
  height: 32px;
  border: 1px solid rgba(190, 190, 190, 0.44);
  box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
  padding: 0 12px;
    height: 32px;
    border: 1px solid rgba(190, 190, 190, 0.44);
    box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
    padding: 0 12px;
}
.unqualifiedBox .title {
  margin-bottom: 10px;
  padding: 0 20px;
}
<!-- /* æ¡ä»¶æŸ¥è¯¢å¤´éƒ¨æ ·å¼ */ -->
  .choose {
  padding: 21px 24px;
  display: flex;
  align-items: center;
  background-color: #fff;
  border-bottom: 3px solid rgb(245, 247, 251);
    margin-bottom: 10px;
    padding: 0 20px;
}
.choose {
  font-size: 14px;
    display: flex;
    align-items: center;
    background-color: #fff;
    border-bottom: 3px solid rgb(245, 247, 251);
}
.choose {
    font-size: 14px;
}
.choose .el-button {
  height: 32px;
  border: 1px solid rgba(190, 190, 190, 0.44);
  box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
  padding: 0 12px;
    height: 32px;
    border: 1px solid rgba(190, 190, 190, 0.44);
    box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
    padding: 0 12px;
}
<!-- /* ä¸åˆæ ¼è¡¨æ ¼æ ·å¼ */
  .unqualifiedTable {
  flex: 1;
  background: #fff;
  margin-top: 11px;
  padding: 23px 21px;
.choose span {
    /* span内容强制不换行 */
    white-space: nowrap;
}
/* ä¸åˆæ ¼è¡¨æ ¼æ ·å¼ */
.unqualifiedTable {
    flex: 1;
    background: #fff;
    margin-top: 11px;
    padding: 23px 21px;
}
.tableno {
  margin-top: 10px;
    margin-top: 10px;
}
</style>
src/main.js
@@ -13,7 +13,7 @@
Vue.prototype.LOCATIONVUE = "http://127.0.0.1:80/"; //前端本地端口
Vue.prototype.HaveJson = (val) => {
    return JSON.parse(JSON.stringify(val))
    return JSON.parse(JSON.stringify(val))
}
Vue.use(VueAxios, axios)
@@ -23,9 +23,9 @@
Vue.use(qs);
Vue.use(api);
const javaApi = 'http://192.168.14.249:8001'
// const javaApi = 'http://192.168.14.249:8001'
// const javaApi = 'http://127.0.0.1:8001/'
const javaApi = 'http://127.0.0.1:8001/'
@@ -37,71 +37,71 @@
Vue.prototype.$axios = axios
import {
    Message
    Message
} from 'element-ui';
axios.interceptors.request.use(function(config) {
    let tk = sessionStorage.getItem("token")
    let token;
    if (tk != undefined && tk != '') {
        token = tk
    }
    if (token) {
        config.headers['token'] = "" + token
        // config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
        // config.headers['Content-Type'] = 'application/json'
    }
    // console.log(config)
    if (config.method === 'post' || config.method === 'put') {
axios.interceptors.request.use(function (config) {
    let tk = sessionStorage.getItem("token")
    let token;
    if (tk != undefined && tk != '') {
        token = tk
    }
    if (token) {
        config.headers['token'] = "" + token
        // config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
        // config.headers['Content-Type'] = 'application/json'
    }
    // console.log(config)
    if (config.method === 'post' || config.method === 'put') {
        config.data = qs.stringify(config.data)
    }
    if (config.headers['Content-Type'] == 'application/json') {
        config.data = qs.parse(config.data)
        // console.log(config.data)
    }
        config.data = qs.stringify(config.data)
    }
    if (config.headers['Content-Type'] == 'application/json') {
        config.data = qs.parse(config.data)
        // console.log(config.data)
    }
    return config
}, function(error) {
    return Promise.reject(error)
    return config
}, function (error) {
    return Promise.reject(error)
})
axios.interceptors.response.use(res => {
    return res.data
}, async function(err) {
    if (JSON.stringify(err).indexOf('timeout of') > -1) {
        Message.error('请求超时,请检查网络设置')
    } else if (JSON.stringify(err).indexOf('ERR_CONNECTION_RESET') > -1 || JSON.stringify(err).indexOf(
            'Network Error') > -1) {
        Message.error('网络连接错误')
    } else if (err.response.status == "503") {
        Message.error('服务未响应')
    } else if (err.response.status == "404") {
        Message.error('请求失败,链接地址不存在')
    } else if (err.response.status == "403") {
        Message.error('token不存在')
    } else if (err.response.status == "402") {
        Message.error('无效签名,请重新登录')
        localStorage.removeItem('autoenter')
        window.location.href = '/enter'
    } else if (err.response.status == "401") {
        await axios.post(javaApi + "user/refresh", {
            reToken: sessionStorage.getItem('reToken')
        }).then(res => {
            if (res.data.code == 201) {
                Message.error('认证失败,需要重新登录')
                localStorage.removeItem('autoenter')
                window.location.href = '/enter'
                return Promise.reject(err)
            }
            sessionStorage.setItem('token', res.data.token)
            sessionStorage.setItem('reToken', res.data.reToken)
        })
        return axios(err.config)
    } else if (err.response.status == "500") {
        Message.error('服务端出现错误')
    }
    return Promise.reject(err)
    return res.data
}, async function (err) {
    if (JSON.stringify(err).indexOf('timeout of') > -1) {
        Message.error('请求超时,请检查网络设置')
    } else if (JSON.stringify(err).indexOf('ERR_CONNECTION_RESET') > -1 || JSON.stringify(err).indexOf(
        'Network Error') > -1) {
        Message.error('网络连接错误')
    } else if (err.response.status == "503") {
        Message.error('服务未响应')
    } else if (err.response.status == "404") {
        Message.error('请求失败,链接地址不存在')
    } else if (err.response.status == "403") {
        Message.error('token不存在')
    } else if (err.response.status == "402") {
        Message.error('无效签名,请重新登录')
        localStorage.removeItem('autoenter')
        window.location.href = '/enter'
    } else if (err.response.status == "401") {
        await axios.post(javaApi + "user/refresh", {
            reToken: sessionStorage.getItem('reToken')
        }).then(res => {
            if (res.data.code == 201) {
                Message.error('认证失败,需要重新登录')
                localStorage.removeItem('autoenter')
                window.location.href = '/enter'
                return Promise.reject(err)
            }
            sessionStorage.setItem('token', res.data.token)
            sessionStorage.setItem('reToken', res.data.reToken)
        })
        return axios(err.config)
    } else if (err.response.status == "500") {
        Message.error('服务端出现错误')
    }
    return Promise.reject(err)
})
// è·¯ç”±æ‹¦æˆªå™¨
@@ -119,7 +119,7 @@
// });
new Vue({
    el: '#app',
    router,
    render: h => h(App)
    el: '#app',
    router,
    render: h => h(App)
});
src/view/index.vue
@@ -1,562 +1,556 @@
<style scoped>
    .all {
        width: 100vw;
        height: 100vh;
        background-size: 100% 100%;
        display: flex;
        flex-wrap: wrap;
    }
.all {
    width: 100vw;
    height: 100vh;
    background-size: 100% 100%;
    display: flex;
    flex-wrap: wrap;
}
    .title {
        width: 100%;
        height: 58px;
        display: flex;
        align-items: center;
        padding: 0 30px;
    }
.title {
    width: 100%;
    height: 58px;
    display: flex;
    align-items: center;
    padding: 0 30px;
}
    .logo {
        width: 130px;
    }
.logo {
    width: 130px;
}
    .logo img {
        width: 100%;
        height: 100%;
    }
.logo img {
    width: 100%;
    height: 100%;
}
    .title .label {
        font-size: 18px;
        text-align: center;
        width: calc(100% - 130px - 200px);
    }
.title .label {
    font-size: 18px;
    text-align: center;
    width: calc(100% - 130px - 200px);
}
    .user {
        width: 200px;
        height: 100%;
        display: flex;
        align-items: center;
        justify-content: right;
        color: #000;
    }
.user {
    width: 200px;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: right;
    color: #000;
}
    .user * {
        margin: 0 5px;
    }
.user * {
    margin: 0 5px;
}
    .user img {
        margin-left: 20px;
        cursor: pointer;
        width: 14px;
    }
.user img {
    margin-left: 20px;
    cursor: pointer;
    width: 14px;
}
    .user span {
        font-size: 14px;
    }
.user span {
    font-size: 14px;
}
    .left {
        height: calc(100vh - 58px - 40px);
        background-color: #004ea2;
        display: flex;
        align-items: center;
        flex-direction: column;
        padding: 20px 0;
        transition: 0.3s;
        overflow-y: auto;
    }
.left {
    height: calc(100vh - 58px - 40px);
    background-color: #004ea2;
    display: flex;
    align-items: center;
    flex-direction: column;
    padding: 20px 0;
    transition: 0.3s;
    overflow-y: auto;
}
    .left::-webkit-scrollbar {
        width: 0;
    }
.left::-webkit-scrollbar {
    width: 0;
}
    .left .box {
        color: #fff;
        width: 68px;
        height: 68px;
        margin: 8px 0;
        cursor: pointer;
        display: flex;
        align-items: center;
        justify-content: center;
        flex-direction: column;
        border-radius: 8px;
    }
.left .box {
    color: #fff;
    width: 68px;
    height: 68px;
    margin: 8px 0;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-direction: column;
    border-radius: 8px;
}
    .left .box:active {
        opacity: 0.8;
    }
.left .box:active {
    opacity: 0.8;
}
    .left .active_box {
        background-color: #fff;
        color: #004ea2;
    }
.left .active_box {
    background-color: #fff;
    color: #004ea2;
}
    .left .box i {
        font-size: 24px;
        margin-bottom: 8px;
    }
.left .box i {
    font-size: 24px;
    margin-bottom: 8px;
}
    .left .box div {
        font-size: 14px;
    }
.left .box div {
    font-size: 14px;
}
    .small_menu {
        color: #666;
    }
.small_menu {
    color: #666;
}
    .small_menu .active_p {
        color: #004ea2;
    }
.small_menu .active_p {
    color: #004ea2;
}
    .small_menu p {
        padding: 12px 15px;
        cursor: pointer;
    }
.small_menu p {
    padding: 12px 15px;
    cursor: pointer;
}
    .small_menu p:hover {
        background-color: rgba(0, 0, 0, 0.05);
    }
.small_menu p:hover {
    background-color: rgba(0, 0, 0, 0.05);
}
    .small_menu i {
        font-size: 16px;
    }
.small_menu i {
    font-size: 16px;
}
    .small_menu span {
        font-size: 14px;
    }
.small_menu span {
    font-size: 14px;
}
    .right {
        height: calc(100vh - 58px);
        transition: 0.3s;
    }
.right {
    height: calc(100vh - 58px);
    transition: 0.3s;
}
    .tag {
        width: 100%;
        height: 36px;
        background: rgb(255, 255, 255);
        opacity: 0.8;
        box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.1);
        display: flex;
        align-items: center;
        color: #999;
        font-size: 14px;
    }
.tag {
    width: 100%;
    height: 36px;
    background: rgb(255, 255, 255);
    opacity: 0.8;
    box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.1);
    display: flex;
    align-items: center;
    color: #999;
    font-size: 14px;
}
    .tag .el-icon-delete {
        display: none;
    }
.tag .el-icon-delete {
    display: none;
}
    .tag .el-icon-delete:hover {
        color: #F56C6C;
    }
.tag .el-icon-delete:hover {
    color: #F56C6C;
}
    .tag:hover .el-icon-delete {
        display: block;
    }
.tag:hover .el-icon-delete {
    display: block;
}
    .tag>.el-icon-s-unfold,
    .el-icon-s-fold,
    .el-icon-delete {
        font-size: 18px;
        cursor: pointer;
        margin: 0 8px;
    }
.tag>.el-icon-s-unfold,
.el-icon-s-fold,
.el-icon-delete {
    font-size: 18px;
    cursor: pointer;
    margin: 0 8px;
}
    .tabs {
        min-width: calc(100% - 68px);
        height: 100%;
        align-items: center;
        display: flex;
        overflow-x: auto;
    }
.tabs {
    min-width: calc(100% - 68px);
    height: 100%;
    align-items: center;
    display: flex;
    overflow-x: auto;
}
    .tab {
        cursor: pointer;
        font-size: 14px;
        margin: 0 8px;
        line-height: 32px;
        transition: 0.3s;
        border-top: 2px solid transparent;
        border-bottom: 2px solid transparent;
        user-select: none;
        flex-shrink: 0;
    }
.tab {
    cursor: pointer;
    font-size: 14px;
    margin: 0 8px;
    line-height: 32px;
    transition: 0.3s;
    border-top: 2px solid transparent;
    border-bottom: 2px solid transparent;
    user-select: none;
    flex-shrink: 0;
}
    .tab i {
        font-size: 12px;
        display: none;
    }
.tab i {
    font-size: 12px;
    display: none;
}
    .active_tab {
        border-bottom: 2px solid #004ea2;
        color: #004ea2;
    }
.active_tab {
    border-bottom: 2px solid #004ea2;
    color: #004ea2;
}
    .active_tab i {
        display: inline;
        color: #004ea2;
    }
.active_tab i {
    display: inline;
    color: #004ea2;
}
    .component_view {
        height: calc(100vh - 94px - 22px);
        width: calc(100% - 48px);
        padding: 11px 24px;
        background: rgb(245, 247, 251);
        overflow-y: auto;
    }
.component_view {
    height: calc(100vh - 94px - 22px);
    width: calc(100% - 48px);
    padding: 11px 24px;
    background: rgb(245, 247, 251);
    overflow-y: auto;
}
    .com_index {
        width: 100%;
        height: 100%;
    }
.com_index {
    width: 100%;
    height: 100%;
}
</style>
<template>
    <div class="all">
        <div class="title">
            <div class="logo">
                <img src="../../static/img/logo 1.png" />
            </div>
            <div class="label">中天海洋新一代mom系统</div>
            <div class="user">
                <el-avatar :size="24">{{ userName.substring(0, 1) }}</el-avatar>
                <span>{{ userName }}</span>
                <img src="../../static/img/退出.png" @click="out" />
            </div>
        </div>
        <div class="left" :style="`width: ${leftOpen ? '92' : '0'}px;`">
            <div :class="`box ${activeBox == 0 ? 'active_box' : ''}`" @click="addTab(menu[0].c[0])">
                <i class="font icon-shouye"></i>
                <div>首页</div>
            </div>
            <div :class="`box ${activeBox == 3 ? 'active_box' : ''}`" @click="addTab(menu[1].c[0])">
                <i class="font icon-jine"></i>
                <div>销售管理</div>
            </div>
            <el-popover placement="right-start" width="90" trigger="click" v-for="(a, ai) in menu" :key="ai"
                v-if="a.k != '0' && a.k != '3'">
                <div :class="`box ${activeBox == a.k ? 'active_box' : ''}`" @click="activeBox = a.k" slot="reference">
                    <i :class="a.i"></i>
                    <div>{{ a.v }}</div>
                </div>
                <div class="small_menu">
                    <p v-for="(b, bi) in a.c" :key="bi" :class="activeP == b.k ? 'active_p' : ''" @click="addTab(b)">
                        <i :class="b.i"></i>
                        <span>{{ b.v }}</span>
                    </p>
                </div>
            </el-popover>
        </div>
        <div class="right" :style="`width: calc(100% - ${leftOpen ? '92' : '0'}px);`">
            <div class="tag">
                <i :class="`${leftOpen ? 'el-icon-s-unfold' : 'el-icon-s-fold'}`" @click="leftOpen = !leftOpen"></i>
                <div class="tabs">
                    <div :class="`tab ${tabActive == a.k ? 'active_tab' : ''}`" v-for="(a, ai) in tabs" :key="ai"
                        @click="upTabActive(a.k)">
                        {{ a.v }}
                        <i class="el-icon-close" @click="removeTab(ai)" v-if="tabActive != 0"></i>
                    </div>
                </div>
                <i class="el-icon-delete" @click="allDel" title="删除所有标签页"></i>
            </div>
            <div class="component_view">
                <component class="com_index" v-for="(com, index) in tabs" :is="com.u" :key="upIndex + '|' + index"
                    v-show="com.k == tabActive" @removeAllTab="removeAllTab">
                </component>
            </div>
        </div>
    </div>
    <div class="all">
        <div class="title">
            <div class="logo">
                <img src="../../static/img/logo 1.png" />
            </div>
            <div class="label">中天海洋新一代mom系统</div>
            <div class="user">
                <el-avatar :size="24">{{ userName.substring(0, 1) }}</el-avatar>
                <span>{{ userName }}</span>
                <img src="../../static/img/退出.png" @click="out" />
            </div>
        </div>
        <div class="left" :style="`width: ${leftOpen ? '92' : '0'}px;`">
            <div :class="`box ${activeBox == 0 ? 'active_box' : ''}`" @click="addTab(menu[0].c[0])">
                <i class="font icon-shouye"></i>
                <div>首页</div>
            </div>
            <div :class="`box ${activeBox == 3 ? 'active_box' : ''}`" @click="addTab(menu[1].c[0])">
                <i class="font icon-jine"></i>
                <div>销售管理</div>
            </div>
            <el-popover placement="right-start" width="90" trigger="click" v-for="(a, ai) in menu" :key="ai"
                v-if="a.k != '0' && a.k != '3'">
                <div :class="`box ${activeBox == a.k ? 'active_box' : ''}`" @click="activeBox = a.k" slot="reference">
                    <i :class="a.i"></i>
                    <div>{{ a.v }}</div>
                </div>
                <div class="small_menu">
                    <p v-for="(b, bi) in a.c" :key="bi" :class="activeP == b.k ? 'active_p' : ''" @click="addTab(b)">
                        <i :class="b.i"></i>
                        <span>{{ b.v }}</span>
                    </p>
                </div>
            </el-popover>
        </div>
        <div class="right" :style="`width: calc(100% - ${leftOpen ? '92' : '0'}px);`">
            <div class="tag">
                <i :class="`${leftOpen ? 'el-icon-s-unfold' : 'el-icon-s-fold'}`" @click="leftOpen = !leftOpen"></i>
                <div class="tabs">
                    <div :class="`tab ${tabActive == a.k ? 'active_tab' : ''}`" v-for="(a, ai) in tabs" :key="ai"
                        @click="upTabActive(a.k)">
                        {{ a.v }}
                        <i class="el-icon-close" @click="removeTab(ai)" v-if="tabActive != 0"></i>
                    </div>
                </div>
                <i class="el-icon-delete" @click="allDel" title="删除所有标签页"></i>
            </div>
            <div class="component_view">
                <component class="com_index" v-for="(com, index) in tabs" :is="com.u" :key="upIndex + '|' + index"
                    v-show="com.k == tabActive" @removeAllTab="removeAllTab">
                </component>
            </div>
        </div>
    </div>
</template>
<script>
    const requireComponent = require.context("../components/view", false, /\.vue/);
    var comObj = {};
    requireComponent.keys().forEach(fileName => {
        var names = fileName
            .split("/")
            .pop()
            .replace(".vue", "");
        const componentConfig = requireComponent(fileName);
        comObj[names] = componentConfig.default || componentConfig;
    });
    export default {
        components: comObj,
        data() {
            return {
                userName: "value",
                leftOpen: true,
                menu: [{
                        k: 0,
                        v: "首页",
                        i: "font icon-shouye",
                        c: [{
                            k: 0,
                            v: "首页",
                            i: "font icon-shouye",
                            u: "index-index"
                        }]
                    },
                    {
                        k: 3,
                        v: "销售管理",
                        i: "font icon-jine",
                        c: [{
                            k: 11,
                            v: "销售管理",
                            i: "font icon-jine",
                            u: "sale"
                        }]
                    },
                    {
                        k: 1,
                        v: "技术管理",
                        i: "font icon-ic_form_set24px",
                        c: [{
                                k: 1,
                                v: "标准BOM",
                                i: "font icon-shouye",
                                u: "standard"
                            },
                            {
                                k: 2,
                                v: "订单BOM",
                                i: "font icon-shouye",
                                u: "technical"
                            }
                        ]
                    },
                    {
                        k: 4,
                        v: "生产管理",
                        i: "font icon-shengchanguanli",
                        c: [{
                                k: 12,
                                v: "生产订单",
                                i: "font icon-shouye",
                                u: ""
                            },
                            {
                                k: 13,
                                v: "生产计划",
                                i: "font icon-shouye",
                                u: ""
                            },
                            {
                                k: 14,
                                v: "生产报工",
                                i: "font icon-shouye",
                                u: ""
                            }
                        ]
                    },
                    {
                        k: 5,
                        v: "WMS管理",
                        i: "font icon-a-Inventorydumprequest",
                        c: [{
                                k: 17,
                                v: "半成品库存",
                                i: "font icon-shouye",
                                u: ""
                            },
                            {
                                k: 18,
                                v: "成品库存",
                                i: "font icon-shouye",
                                u: ""
                            },
                            {
                                k: 19,
                                v: "成品发货",
                                i: "font icon-shouye",
                                u: ""
                            },
                            {
                                k: 20,
                                v: "成品入库",
                                i: "font icon-shouye",
                                u: ""
                            }
                        ]
                    },
                    {
                        k: 2,
                        v: "QMS管理",
                        i: "font icon-xunhuan",
                        c: [{
                                k: 3,
                                v: "原材料检验",
                                i: "font icon-shouye",
                                u: "rawInsBox"
                            },
                            {
                                k: 4,
                                v: "原材料不合格品",
                                i: "font icon-shouye",
                                u: "rawUnqualifiedBox"
                            },
                            {
                                k: 5,
                                v: "过程检验",
                                i: "font icon-shouye",
                                u: "processInspection"
                            },
                            {
                                k: 6,
                                v: "产品检验",
                                i: "font icon-shouye",
                                u: "finishedProductInspection"
                            },
                            {
                                k: 7,
                                v: "不合格品管理",
                                i: "font icon-shouye",
                                u: "unqualifiedManagement"
                            },
                            {
                                k: 9,
                                v: "质量统计",
                                i: "font icon-shouye",
                                u: ""
                            },
                            {
                                k: 10,
                                v: "计量管理",
                                i: "font icon-shouye",
                                u: "measurementManagement"
                            },
                            {
                                k: 10.1,
                                v: "不合格品处置",
                                i: "font icon-shouye",
                                u: "Processingproducts"
                            }
                        ]
                    },
                    {
                        k: 6,
                        v: "核算管理",
                        i: "font icon-caiwuhesuanxitong",
                        c: [{
                                k: 21,
                                v: "产量工资",
                                i: "font icon-shouye",
                                u: ""
                            },
                            {
                                k: 22,
                                v: "员工出勤",
                                i: "font icon-shouye",
                                u: ""
                            }
                        ]
                    },
                    {
                        k: 7,
                        v: "基础数据",
                        i: "font icon-a-ziyuan20",
                        c: [{
                                k: 23,
                                v: "生产记录维护",
                                i: "font icon-shouye",
                                u: "record-content"
                            },
                            {
                                k: 25,
                                v: "技术指标维护",
                                i: "font icon-shouye",
                                u: "Technicalindex"
                            },
                            {
                                k: 26,
                                v: "工艺路线维护",
                                i: "font icon-shouye",
                                u: "technology"
                            },
                            {
                                k: 27,
                                v: "设备维护",
                                i: "font icon-shouye",
                                u: "laboratoryManagement"
                            },
                            {
                                k: 28,
                                v: "物料清单维护",
                                i: "font icon-shouye",
                                u: "mbom"
                            }
                        ]
                    }
                ],
                activeBox: 0,
                activeP: 0,
                tabActive: 0,
                tabs: [{
                    k: 0,
                    v: "首页",
                    i: "font icon-shouye",
                    u: "index-index"
                }],
                upIndex: 0
            };
        },
        created() {},
        mounted() {
            this.userName = JSON.parse(localStorage.getItem("user")).name;
        },
        methods: {
            addTab(ob) {
                if (ob.k == 0) this.activeBox = 0;
                if (ob.k == 11) this.activeBox = 3;
                this.activeP = ob.k; //0
                this.tabActive = ob.k; //0
                let num = -1;
                this.tabs.forEach((a, ai) => {
                    if (ob.k == a.k) {
                        num = a.k;
                    }
                });
                // å¦‚果没有遍历到tabs里没有该ob对应的table,往tabs里面加入该ob
                if (num == -1) {
                    this.tabs.push(ob);
                }
            },
            removeTab(index) {
                this.tabs.splice(index, 1);
                this.activeP = this.tabs[this.tabs.length - 1].k;
                this.tabActive = this.tabs[this.tabs.length - 1].k;
            },
            allDel() {
                this.activeBox = 0
                this.activeP = 0
                this.tabActive = 0
                this.tabs = [{
                    k: 0,
                    v: " é¦–页",
                    i: "font icon-shouye",
                    u: "index-index"
                }]
            },
const requireComponent = require.context("../components/view", false, /\.vue/);
var comObj = {};
requireComponent.keys().forEach(fileName => {
    var names = fileName
        .split("/")
        .pop()
        .replace(".vue", "");
    const componentConfig = requireComponent(fileName);
    comObj[names] = componentConfig.default || componentConfig;
});
export default {
    components: comObj,
    data() {
        return {
            userName: "value",
            leftOpen: true,
            menu: [{
                k: 0,
                v: "首页",
                i: "font icon-shouye",
                c: [{
                    k: 0,
                    v: "首页",
                    i: "font icon-shouye",
                    u: "index-index"
                }]
            },
            {
                k: 3,
                v: "销售管理",
                i: "font icon-jine",
                c: [{
                    k: 11,
                    v: "销售管理",
                    i: "font icon-jine",
                    u: "sale"
                }]
            },
            {
                k: 1,
                v: "技术管理",
                i: "font icon-ic_form_set24px",
                c: [{
                    k: 1,
                    v: "标准BOM",
                    i: "font icon-shouye",
                    u: "standard"
                },
                {
                    k: 2,
                    v: "订单BOM",
                    i: "font icon-shouye",
                    u: "technical"
                }
                ]
            },
            {
                k: 4,
                v: "生产管理",
                i: "font icon-shengchanguanli",
                c: [{
                    k: 12,
                    v: "生产订单",
                    i: "font icon-shouye",
                    u: ""
                },
                {
                    k: 13,
                    v: "生产计划",
                    i: "font icon-shouye",
                    u: ""
                },
                {
                    k: 14,
                    v: "生产报工",
                    i: "font icon-shouye",
                    u: ""
                }
                ]
            },
            {
                k: 5,
                v: "WMS管理",
                i: "font icon-a-Inventorydumprequest",
                c: [{
                    k: 17,
                    v: "半成品库存",
                    i: "font icon-shouye",
                    u: ""
                },
                {
                    k: 18,
                    v: "成品库存",
                    i: "font icon-shouye",
                    u: ""
                },
                {
                    k: 19,
                    v: "成品发货",
                    i: "font icon-shouye",
                    u: ""
                },
                {
                    k: 20,
                    v: "成品入库",
                    i: "font icon-shouye",
                    u: ""
                }
                ]
            },
            {
                k: 2,
                v: "QMS管理",
                i: "font icon-xunhuan",
                c: [{
                    k: 3,
                    v: "原材料检验",
                    i: "font icon-shouye",
                    u: "rawInsBox"
                },
                {
                    k: 5,
                    v: "过程检验",
                    i: "font icon-shouye",
                    u: "processInspection"
                },
                {
                    k: 6,
                    v: "产品检验",
                    i: "font icon-shouye",
                    u: "finishedProductInspection"
                },
                {
                    k: 7,
                    v: "不合格品管理",
                    i: "font icon-shouye",
                    u: "unqualifiedManagement"
                },
                {
                    k: 9,
                    v: "质量统计",
                    i: "font icon-shouye",
                    u: ""
                },
                {
                    k: 10,
                    v: "计量管理",
                    i: "font icon-shouye",
                    u: "measurementManagement"
                },
                {
                    k: 10.1,
                    v: "不合格品处置",
                    i: "font icon-shouye",
                    u: "Processingproducts"
                }
                ]
            },
            {
                k: 6,
                v: "核算管理",
                i: "font icon-caiwuhesuanxitong",
                c: [{
                    k: 21,
                    v: "产量工资",
                    i: "font icon-shouye",
                    u: ""
                },
                {
                    k: 22,
                    v: "员工出勤",
                    i: "font icon-shouye",
                    u: ""
                }
                ]
            },
            {
                k: 7,
                v: "基础数据",
                i: "font icon-a-ziyuan20",
                c: [{
                    k: 23,
                    v: "生产记录维护",
                    i: "font icon-shouye",
                    u: "record-content"
                },
                {
                    k: 25,
                    v: "技术指标维护",
                    i: "font icon-shouye",
                    u: "Technicalindex"
                },
                {
                    k: 26,
                    v: "工艺路线维护",
                    i: "font icon-shouye",
                    u: "technology"
                },
                {
                    k: 27,
                    v: "设备维护",
                    i: "font icon-shouye",
                    u: "laboratoryManagement"
                },
                {
                    k: 28,
                    v: "物料清单维护",
                    i: "font icon-shouye",
                    u: "mbom"
                }
                ]
            }
            ],
            activeBox: 0,
            activeP: 0,
            tabActive: 0,
            tabs: [{
                k: 0,
                v: "首页",
                i: "font icon-shouye",
                u: "index-index"
            }],
            upIndex: 0
        };
    },
    created() { },
    mounted() {
        this.userName = JSON.parse(localStorage.getItem("user")).name;
    },
    methods: {
        addTab(ob) {
            if (ob.k == 0) this.activeBox = 0;
            if (ob.k == 11) this.activeBox = 3;
            this.activeP = ob.k; //0
            this.tabActive = ob.k; //0
            let num = -1;
            this.tabs.forEach((a, ai) => {
                if (ob.k == a.k) {
                    num = a.k;
                }
            });
            // å¦‚果没有遍历到tabs里没有该ob对应的table,往tabs里面加入该ob
            if (num == -1) {
                this.tabs.push(ob);
            }
        },
        removeTab(index) {
            this.tabs.splice(index, 1);
            this.activeP = this.tabs[this.tabs.length - 1].k;
            this.tabActive = this.tabs[this.tabs.length - 1].k;
        },
        allDel() {
            this.activeBox = 0
            this.activeP = 0
            this.tabActive = 0
            this.tabs = [{
                k: 0,
                v: " é¦–页",
                i: "font icon-shouye",
                u: "index-index"
            }]
        },
            upTabActive(num) {
                this.tabActive = num;
                this.activeP = num;
                for (var i = 0; i < this.menu.length; i++) {
                    this.menu[i].c.forEach(b => {
                        if (b.k == num) {
                            this.activeBox = this.menu[i].k;
                            return
                        }
                    })
                }
            },
            out() {
                sessionStorage.clear();
                localStorage.removeItem("autoenter");
                this.$router.push("/enter");
            },
            removeAllTab() {
                this.upIndex++
                this.$message.warning('数据变动较大,页面自动更新!')
            }
        }
    };
        upTabActive(num) {
            this.tabActive = num;
            this.activeP = num;
            for (var i = 0; i < this.menu.length; i++) {
                this.menu[i].c.forEach(b => {
                    if (b.k == num) {
                        this.activeBox = this.menu[i].k;
                        return
                    }
                })
            }
        },
        out() {
            sessionStorage.clear();
            localStorage.removeItem("autoenter");
            this.$router.push("/enter");
        },
        removeAllTab() {
            this.upIndex++
            this.$message.warning('数据变动较大,页面自动更新!')
        }
    }
};
</script>