更新
This commit is contained in:
parent
c0a5dbac2d
commit
f6b3f2f323
311
package-lock.json
generated
311
package-lock.json
generated
@ -17,6 +17,20 @@
|
||||
"utility-types": "^3.10.0"
|
||||
}
|
||||
},
|
||||
"@antv/x6-react-components": {
|
||||
"version": "1.1.15",
|
||||
"resolved": "https://registry.npmjs.org/@antv/x6-react-components/-/x6-react-components-1.1.15.tgz",
|
||||
"integrity": "sha512-tXUak5CPuZLIA0fVBSM2vZ+TxxoEGBcokr0J69e7H0G3WIutDf6J6RkNeRGuKvcW8O1Lef1jiBGSLLjlrRXf0g==",
|
||||
"requires": {
|
||||
"clamp": "^1.0.1",
|
||||
"classnames": "^2.2.6",
|
||||
"rc-dropdown": "^3.0.0-alpha.0",
|
||||
"rc-util": "^4.15.7",
|
||||
"react-color": "^2.17.3",
|
||||
"react-resize-detector": "^6.6.4",
|
||||
"ua-parser-js": "^0.7.20"
|
||||
}
|
||||
},
|
||||
"@babel/code-frame": {
|
||||
"version": "7.0.0-beta.44",
|
||||
"resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.0.0-beta.44.tgz?cache=0&sync_timestamp=1593529659031&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.0.0-beta.44.tgz",
|
||||
@ -2373,7 +2387,6 @@
|
||||
"version": "7.10.5",
|
||||
"resolved": "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.10.5.tgz",
|
||||
"integrity": "sha1-MD2L1EDs1aSR6uYRf9M2dphnTFw=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
},
|
||||
@ -2381,8 +2394,7 @@
|
||||
"regenerator-runtime": {
|
||||
"version": "0.13.7",
|
||||
"resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz?cache=0&sync_timestamp=1595456367497&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.7.tgz",
|
||||
"integrity": "sha1-ysLazIoepnX+qrrriugziYrkb1U=",
|
||||
"dev": true
|
||||
"integrity": "sha1-ysLazIoepnX+qrrriugziYrkb1U="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -2463,6 +2475,11 @@
|
||||
"@hapi/hoek": "^8.3.0"
|
||||
}
|
||||
},
|
||||
"@icons/material": {
|
||||
"version": "0.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz",
|
||||
"integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw=="
|
||||
},
|
||||
"@intervolga/optimize-cssnano-plugin": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npm.taobao.org/@intervolga/optimize-cssnano-plugin/download/@intervolga/optimize-cssnano-plugin-1.0.6.tgz",
|
||||
@ -2640,6 +2657,11 @@
|
||||
"integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=",
|
||||
"dev": true
|
||||
},
|
||||
"@types/resize-observer-browser": {
|
||||
"version": "0.1.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.7.tgz",
|
||||
"integrity": "sha512-G9eN0Sn0ii9PWQ3Vl72jDPgeJwRWhv2Qk/nQkJuWmRmOB4HX3/BhD5SE1dZs/hzPZL/WKnvF0RHdTSG54QJFyg=="
|
||||
},
|
||||
"@vue/babel-helper-vue-jsx-merge-props": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.0.0.tgz",
|
||||
@ -4042,6 +4064,21 @@
|
||||
"integrity": "sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w=",
|
||||
"dev": true
|
||||
},
|
||||
"add-dom-event-listener": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz",
|
||||
"integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==",
|
||||
"requires": {
|
||||
"object-assign": "4.x"
|
||||
},
|
||||
"dependencies": {
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"address": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npm.taobao.org/address/download/address-1.1.2.tgz?cache=0&sync_timestamp=1593529661616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faddress%2Fdownload%2Faddress-1.1.2.tgz",
|
||||
@ -5290,6 +5327,11 @@
|
||||
"safe-buffer": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"clamp": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz",
|
||||
"integrity": "sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA=="
|
||||
},
|
||||
"class-utils": {
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz",
|
||||
@ -5311,6 +5353,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"classnames": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz",
|
||||
"integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA=="
|
||||
},
|
||||
"clean-css": {
|
||||
"version": "3.4.28",
|
||||
"resolved": "https://registry.npm.taobao.org/clean-css/download/clean-css-3.4.28.tgz",
|
||||
@ -6950,6 +6997,11 @@
|
||||
"buffer-indexof": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"dom-align": {
|
||||
"version": "1.12.3",
|
||||
"resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.3.tgz",
|
||||
"integrity": "sha512-Gj9hZN3a07cbR6zviMUBOMPdWxYhbMI+x+WS0NAIu2zFZmbK8ys9R79g+iG9qLnlCwpFoaB+fKy8Pdv470GsPA=="
|
||||
},
|
||||
"dom-converter": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz",
|
||||
@ -10608,6 +10660,11 @@
|
||||
"object-visit": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"material-colors": {
|
||||
"version": "1.2.6",
|
||||
"resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz",
|
||||
"integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg=="
|
||||
},
|
||||
"md5.js": {
|
||||
"version": "1.3.5",
|
||||
"resolved": "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz",
|
||||
@ -13640,6 +13697,23 @@
|
||||
"integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
|
||||
"dev": true
|
||||
},
|
||||
"prop-types": {
|
||||
"version": "15.8.1",
|
||||
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
|
||||
"integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
|
||||
"requires": {
|
||||
"loose-envify": "^1.4.0",
|
||||
"object-assign": "^4.1.1",
|
||||
"react-is": "^16.13.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"proxy-addr": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz",
|
||||
@ -13880,6 +13954,222 @@
|
||||
"unpipe": "1.0.0"
|
||||
}
|
||||
},
|
||||
"rc-align": {
|
||||
"version": "4.0.12",
|
||||
"resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.12.tgz",
|
||||
"integrity": "sha512-3DuwSJp8iC/dgHzwreOQl52soj40LchlfUHtgACOUtwGuoFIOVh6n/sCpfqCU8kO5+iz6qR0YKvjgB8iPdE3aQ==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"classnames": "2.x",
|
||||
"dom-align": "^1.7.0",
|
||||
"lodash": "^4.17.21",
|
||||
"rc-util": "^5.3.0",
|
||||
"resize-observer-polyfill": "^1.5.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"lodash": {
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
|
||||
},
|
||||
"rc-util": {
|
||||
"version": "5.24.2",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.24.2.tgz",
|
||||
"integrity": "sha512-MWd0ZEV7xSwN4HM9jz9BwpnMzwCPjYJ7K90lePsrdgAkrmm8U7b4BOTIsv/84BQsaF7N3ejNkcrZ3AfEwc9HXA==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.18.3",
|
||||
"react-is": "^16.12.0",
|
||||
"shallowequal": "^1.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.19.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz",
|
||||
"integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"regenerator-runtime": {
|
||||
"version": "0.13.9",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
|
||||
"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"rc-dropdown": {
|
||||
"version": "3.6.2",
|
||||
"resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-3.6.2.tgz",
|
||||
"integrity": "sha512-Wsw7GkVbUXADEs8FPL0v8gd+3mWQiydPFXBlr2imMScQaf8hh79pG9KrBc1DwK+nqHmYOpQfK2gn6jG2AQw9Pw==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"classnames": "^2.2.6",
|
||||
"rc-trigger": "^5.0.4",
|
||||
"rc-util": "^5.17.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"rc-util": {
|
||||
"version": "5.24.2",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.24.2.tgz",
|
||||
"integrity": "sha512-MWd0ZEV7xSwN4HM9jz9BwpnMzwCPjYJ7K90lePsrdgAkrmm8U7b4BOTIsv/84BQsaF7N3ejNkcrZ3AfEwc9HXA==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.18.3",
|
||||
"react-is": "^16.12.0",
|
||||
"shallowequal": "^1.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.19.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz",
|
||||
"integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"regenerator-runtime": {
|
||||
"version": "0.13.9",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
|
||||
"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"rc-motion": {
|
||||
"version": "2.6.2",
|
||||
"resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.6.2.tgz",
|
||||
"integrity": "sha512-4w1FaX3dtV749P8GwfS4fYnFG4Rb9pxvCYPc/b2fw1cmlHJWNNgOFIz7ysiD+eOrzJSvnLJWlNQQncpNMXwwpg==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.11.1",
|
||||
"classnames": "^2.2.1",
|
||||
"rc-util": "^5.21.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.19.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz",
|
||||
"integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
},
|
||||
"rc-util": {
|
||||
"version": "5.24.2",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.24.2.tgz",
|
||||
"integrity": "sha512-MWd0ZEV7xSwN4HM9jz9BwpnMzwCPjYJ7K90lePsrdgAkrmm8U7b4BOTIsv/84BQsaF7N3ejNkcrZ3AfEwc9HXA==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.18.3",
|
||||
"react-is": "^16.12.0",
|
||||
"shallowequal": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"regenerator-runtime": {
|
||||
"version": "0.13.9",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
|
||||
"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"rc-trigger": {
|
||||
"version": "5.3.1",
|
||||
"resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-5.3.1.tgz",
|
||||
"integrity": "sha512-5gaFbDkYSefZ14j2AdzucXzlWgU2ri5uEjkHvsf1ynRhdJbKxNOnw4PBZ9+FVULNGFiDzzlVF8RJnR9P/xrnKQ==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.18.3",
|
||||
"classnames": "^2.2.6",
|
||||
"rc-align": "^4.0.0",
|
||||
"rc-motion": "^2.0.0",
|
||||
"rc-util": "^5.19.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.19.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz",
|
||||
"integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
},
|
||||
"rc-util": {
|
||||
"version": "5.24.2",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.24.2.tgz",
|
||||
"integrity": "sha512-MWd0ZEV7xSwN4HM9jz9BwpnMzwCPjYJ7K90lePsrdgAkrmm8U7b4BOTIsv/84BQsaF7N3ejNkcrZ3AfEwc9HXA==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.18.3",
|
||||
"react-is": "^16.12.0",
|
||||
"shallowequal": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"regenerator-runtime": {
|
||||
"version": "0.13.9",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
|
||||
"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"rc-util": {
|
||||
"version": "4.21.1",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz",
|
||||
"integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==",
|
||||
"requires": {
|
||||
"add-dom-event-listener": "^1.1.0",
|
||||
"prop-types": "^15.5.10",
|
||||
"react-is": "^16.12.0",
|
||||
"react-lifecycles-compat": "^3.0.4",
|
||||
"shallowequal": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"react-color": {
|
||||
"version": "2.19.3",
|
||||
"resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz",
|
||||
"integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==",
|
||||
"requires": {
|
||||
"@icons/material": "^0.2.4",
|
||||
"lodash": "^4.17.15",
|
||||
"lodash-es": "^4.17.15",
|
||||
"material-colors": "^1.2.1",
|
||||
"prop-types": "^15.5.10",
|
||||
"reactcss": "^1.2.0",
|
||||
"tinycolor2": "^1.4.1"
|
||||
}
|
||||
},
|
||||
"react-is": {
|
||||
"version": "16.13.1",
|
||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
|
||||
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
|
||||
},
|
||||
"react-lifecycles-compat": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
|
||||
"integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
|
||||
},
|
||||
"react-resize-detector": {
|
||||
"version": "6.7.8",
|
||||
"resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-6.7.8.tgz",
|
||||
"integrity": "sha512-0FaEcUBAbn+pq3PT5a9hHRebUfuS1SRLGLpIw8LydU7zX429I6XJgKerKAMPsJH0qWAl6o5bVKNqFJqr6tGPYw==",
|
||||
"requires": {
|
||||
"@types/resize-observer-browser": "^0.1.6",
|
||||
"lodash": "^4.17.21",
|
||||
"resize-observer-polyfill": "^1.5.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"lodash": {
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"reactcss": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz",
|
||||
"integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==",
|
||||
"requires": {
|
||||
"lodash": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"read-pkg": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz",
|
||||
@ -14590,6 +14880,11 @@
|
||||
"safe-buffer": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"shallowequal": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
|
||||
"integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
|
||||
},
|
||||
"shebang-command": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz",
|
||||
@ -15839,6 +16134,11 @@
|
||||
"integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
|
||||
"dev": true
|
||||
},
|
||||
"tinycolor2": {
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz",
|
||||
"integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA=="
|
||||
},
|
||||
"to-arraybuffer": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz",
|
||||
@ -16013,6 +16313,11 @@
|
||||
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
|
||||
"dev": true
|
||||
},
|
||||
"ua-parser-js": {
|
||||
"version": "0.7.31",
|
||||
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz",
|
||||
"integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ=="
|
||||
},
|
||||
"uglify-js": {
|
||||
"version": "3.4.10",
|
||||
"resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.10.tgz",
|
||||
|
@ -3,7 +3,7 @@
|
||||
"version": "5.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
"dev": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build",
|
||||
"build:prod": "vue-cli-service build --mode production",
|
||||
"build:sit": "vue-cli-service build --mode production.sit",
|
||||
@ -11,6 +11,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@antv/x6": "^1.33.1",
|
||||
"@antv/x6-react-components": "^1.1.15",
|
||||
"axios": "^0.19.2",
|
||||
"babel-eslint": "^8.0.1",
|
||||
"babel-plugin-component": "^1.1.1",
|
||||
|
@ -2,7 +2,7 @@
|
||||
* @Author: zwq
|
||||
* @Date: 2022-08-22 14:57:50
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-08-22 15:15:04
|
||||
* @LastEditTime: 2022-12-13 14:33:51
|
||||
* @Description:
|
||||
-->
|
||||
<!DOCTYPE html>
|
||||
@ -37,7 +37,7 @@
|
||||
<!-- 开发环境 -->
|
||||
<% if (process.env.VUE_APP_NODE_ENV === 'dev') { %>
|
||||
<script>
|
||||
window.SITE_CONFIG['apiURL'] = 'http://192.168.1.74:8080/ym-spc';
|
||||
window.SITE_CONFIG['apiURL'] = 'http://192.168.1.73:8080/ym-spc';
|
||||
</script>
|
||||
<% } %>
|
||||
<!-- 集成测试环境 -->
|
||||
|
1
src/icons/svg/08质量.svg
Normal file
1
src/icons/svg/08质量.svg
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1663551954271" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2653" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M640 512c0 40.8-19.2 76.8-48.8 100l-43.2-43.2-45.6 45.6 24.8 24.8c-4.8 0.8-10.4 0.8-15.2 0.8-70.4 0-128-57.6-128-128s57.6-128 128-128 128 57.6 128 128z m226.4-283.2v244.8c0 226.4-151.2 437.6-353.6 489.6-203.2-51.2-354.4-263.2-354.4-489.6V228.8L512.8 65.6l353.6 163.2zM636.8 657.6C677.6 622.4 704 570.4 704 512c0-106.4-85.6-192-192-192S320 406.4 320 512s85.6 192 192 192c24 0 46.4-4.8 68-12l58.4 58.4 45.6-45.6-47.2-47.2z" p-id="2654"></path></svg>
|
After Width: | Height: | Size: 780 B |
1
src/icons/svg/控制中心.svg
Normal file
1
src/icons/svg/控制中心.svg
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1663552103188" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5400" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M682.666667 682.666667v-42.666667h85.333333v42.666667h85.333333v85.333333h-85.333333v42.666667h-85.333333v-42.666667H170.666667v-85.333333h512z m-213.333334-213.333334v-42.666666h85.333334v42.666666h298.666666v85.333334h-298.666666v42.666666h-85.333334v-42.666666H170.666667v-85.333334h298.666666zM256 256V213.333333h85.333333v42.666667h512v85.333333H341.333333v42.666667H256V341.333333H170.666667V256h85.333333z" fill="#fff" p-id="5401"></path></svg>
|
After Width: | Height: | Size: 784 B |
1
src/icons/svg/方案管理.svg
Normal file
1
src/icons/svg/方案管理.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 9.0 KiB |
@ -1,3 +1,10 @@
|
||||
/*
|
||||
* @Author: zwq
|
||||
* @Date: 2022-08-22 14:57:50
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-09-13 10:39:56
|
||||
* @Description:
|
||||
*/
|
||||
import Vue from 'vue'
|
||||
import Element from 'element-ui'
|
||||
import App from '@/App'
|
||||
@ -15,6 +22,7 @@ import renRegionTree from '@/components/ren-region-tree'
|
||||
import { hasPermission, getDictLabel } from '@/utils'
|
||||
import cloneDeep from 'lodash/cloneDeep'
|
||||
|
||||
|
||||
Vue.config.productionTip = false
|
||||
|
||||
Vue.use(Element, {
|
||||
|
@ -2,7 +2,7 @@
|
||||
* @Author: zwq
|
||||
* @Date: 2022-08-24 11:19:43
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-08-26 15:38:58
|
||||
* @LastEditTime: 2022-09-19 14:12:43
|
||||
* @Description:
|
||||
*/
|
||||
export default {
|
||||
|
@ -2,7 +2,7 @@
|
||||
* @Author: zwq
|
||||
* @Date: 2022-08-24 11:19:43
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-08-24 14:06:58
|
||||
* @LastEditTime: 2022-09-16 13:50:19
|
||||
* @Description:
|
||||
*/
|
||||
export default {
|
||||
@ -15,10 +15,8 @@ export default {
|
||||
statusUrl: '',
|
||||
exportUrl: ''
|
||||
},
|
||||
dataForm: {
|
||||
paramKey: "",
|
||||
},
|
||||
dataList: [],
|
||||
dataForm: {},
|
||||
pageIndex: 1,
|
||||
pageSize: 10,
|
||||
totalPage: 0,
|
||||
@ -32,7 +30,6 @@ export default {
|
||||
this.getDataList();
|
||||
},
|
||||
methods: {
|
||||
|
||||
// 获取数据列表
|
||||
getDataList() {
|
||||
this.dataListLoading = true;
|
||||
@ -41,8 +38,7 @@ export default {
|
||||
params: {
|
||||
page: this.pageIndex,
|
||||
limit: this.pageSize,
|
||||
code: this.dataForm.paramKey,
|
||||
name: this.dataForm.paramKey,
|
||||
...this.dataForm
|
||||
},
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
|
152
src/mixins/process-page.js
Normal file
152
src/mixins/process-page.js
Normal file
@ -0,0 +1,152 @@
|
||||
/*
|
||||
* @Author: zwq
|
||||
* @Date: 2022-08-24 11:19:43
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-09-16 14:19:44
|
||||
* @Description:
|
||||
*/
|
||||
export default {
|
||||
data () {
|
||||
/* eslint-disable */
|
||||
return {
|
||||
urlOptions: {
|
||||
getDataListURL: '',
|
||||
deleteURL: '',
|
||||
statusUrl: '',
|
||||
exportUrl: ''
|
||||
},
|
||||
dataList: [],
|
||||
dataForm: {},
|
||||
pageIndex: 1,
|
||||
pageSize: 10,
|
||||
totalPage: 0,
|
||||
dataListLoading: false,
|
||||
addOrUpdateVisible: false,
|
||||
}
|
||||
},
|
||||
created () {
|
||||
},
|
||||
activated() {
|
||||
this.getDataList();
|
||||
},
|
||||
methods: {
|
||||
// 获取数据列表
|
||||
getDataList() {
|
||||
this.dataListLoading = true;
|
||||
this.$http
|
||||
.get(this.urlOptions.getDataListURL, {
|
||||
params: {
|
||||
page: this.pageIndex,
|
||||
limit: this.pageSize,
|
||||
...this.dataForm
|
||||
},
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
this.dataListLoading = false;
|
||||
if (res.code !== 0) {
|
||||
this.dataList = [];
|
||||
this.totalPage = 0;
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.dataList = res.data.list;
|
||||
this.totalPage = res.data.total;
|
||||
})
|
||||
.catch(() => {
|
||||
this.dataListLoading = false;
|
||||
});
|
||||
},
|
||||
// 每页数
|
||||
sizeChangeHandle(val) {
|
||||
this.pageSize = val;
|
||||
this.pageIndex = 1;
|
||||
this.getDataList();
|
||||
},
|
||||
// 当前页
|
||||
currentChangeHandle(val) {
|
||||
this.pageIndex = val;
|
||||
this.getDataList();
|
||||
},
|
||||
// 新增 / 修改
|
||||
addOrUpdateHandle(id) {
|
||||
this.addOrUpdateVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.addOrUpdate.init(id);
|
||||
});
|
||||
},
|
||||
cancel(id) {
|
||||
this.$refs["popover-" + id].showPopper = false;
|
||||
},
|
||||
changeStatus(id) {
|
||||
this.$http
|
||||
.post(this.urlOptions.statusUrl, { id })
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.$refs["popover-" + id].showPopper = false;
|
||||
this.$message({
|
||||
message: this.$t("prompt.success"),
|
||||
type: "success",
|
||||
duration: 500,
|
||||
onClose: () => {
|
||||
this.getDataList();
|
||||
},
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
// 删除
|
||||
deleteHandle(id, name) {
|
||||
this.$confirm(`确定对[名称=${name}]进行删除操作?`, "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
.then(() => {
|
||||
this.$http.delete(this.urlOptions.deleteURL, { data: [id] }).then(({ data }) => {
|
||||
if (data && data.code === 0) {
|
||||
this.$message({
|
||||
message: "操作成功",
|
||||
type: "success",
|
||||
duration: 1500,
|
||||
onClose: () => {
|
||||
this.getDataList();
|
||||
},
|
||||
});
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
// 导出
|
||||
exportHandle(name) {
|
||||
this.$http
|
||||
.get(this.urlOptions.exportUrl, { responseType: "blob" })
|
||||
.then(({ data: res }) => {
|
||||
var date = new Date();
|
||||
var year = date.getFullYear();
|
||||
var month = date.getMonth() + 1;
|
||||
var strDate = date.getDate();
|
||||
if (month >= 1 && month <= 9) {
|
||||
month = "0" + month;
|
||||
}
|
||||
if (strDate >= 0 && strDate <= 9) {
|
||||
strDate = "0" + strDate;
|
||||
}
|
||||
var currentdate = year + "-" + month + "-" + strDate;
|
||||
const blob = new Blob([res]);
|
||||
const downloadElement = document.createElement("a");
|
||||
const href = window.URL.createObjectURL(blob); // 创建下载的链接
|
||||
downloadElement.href = href;
|
||||
downloadElement.download = `${name+currentdate}.xls`; // 下载后文件名
|
||||
document.body.appendChild(downloadElement);
|
||||
downloadElement.click(); // 点击下载
|
||||
document.body.removeChild(downloadElement); // 下载完成移除元素
|
||||
window.URL.revokeObjectURL(href);
|
||||
})
|
||||
.catch(() => {});
|
||||
}
|
||||
}
|
||||
}
|
@ -47,8 +47,8 @@ export default {
|
||||
this.mixinViewModuleOptions.getDataListURL,
|
||||
{
|
||||
params: {
|
||||
order: this.order,
|
||||
orderField: this.orderField,
|
||||
order: this.order?this.order:null,
|
||||
orderField: this.orderField?this.orderField:null,
|
||||
page: this.mixinViewModuleOptions.getDataListIsPage ? this.page : null,
|
||||
limit: this.mixinViewModuleOptions.getDataListIsPage ? this.limit : null,
|
||||
...this.dataForm
|
||||
|
@ -33,8 +33,12 @@ export const moduleRoutes = {
|
||||
meta: { title: '主入口布局' },
|
||||
children: [
|
||||
{ path: '/home', component: () => import('@/views/modules/home'), name: 'home', meta: { title: '首页', isTab: true } },
|
||||
{ path: '/echart-line', component: () => import('@/views/spc/echart-line'), name: 'echart-line', meta: { title: 'spc折线', isTab: true } },
|
||||
{ path: '/echart-3line', component: () => import('@/views/spc/echart-3line'), name: 'echart-3line', meta: { title: 'spc3折线', isTab: true } },
|
||||
|
||||
{ path: '/echart-line', component: () => import('@/views/spc-chart/echart-line'), name: 'echart-line', meta: { title: 'spc折线', isTab: true } },
|
||||
{ path: '/echart-3line', component: () => import('@/views/spc-chart/echart-3line'), name: 'echart-3line', meta: { title: 'spc3折线', isTab: true } },
|
||||
{ path: '/echart-2line', component: () => import('@/views/spc-chart/echart-2line'), name: 'echart-2line', meta: { title: 'spc2折线', isTab: true } },
|
||||
|
||||
// 基础信息
|
||||
{ path: '/productType', component: () => import('@/views/spc-basic/productType'), name: 'productType', meta: { title: '产品类型', isTab: true } },
|
||||
{ path: '/productList', component: () => import('@/views/spc-basic/productList'), name: 'productList', meta: { title: '产品列表', isTab: true } },
|
||||
{ path: '/factoryManage', component: () => import('@/views/spc-basic/factoryManage'), name: 'factoryManage', meta: { title: '工厂管理', isTab: true } },
|
||||
@ -44,8 +48,20 @@ export const moduleRoutes = {
|
||||
{ path: '/siteManage', component: () => import('@/views/spc-basic/siteManage'), name: 'siteManage', meta: { title: '站点管理', isTab: true } },
|
||||
{ path: '/machineManage', component: () => import('@/views/spc-basic/machineManage'), name: 'machineManage', meta: { title: '机台管理', isTab: true } },
|
||||
{ path: '/toolsType', component: () => import('@/views/spc-basic/toolsType'), name: 'toolsType', meta: { title: '量具管理', isTab: true } },
|
||||
{ path: '/unitList', component: () => import('@/views/spc-basic/unitList'), name: 'unitList', meta: { title: '计量单位管理', isTab: true } }
|
||||
|
||||
{ path: '/unitList', component: () => import('@/views/spc-basic/unitList'), name: 'unitList', meta: { title: '计量单位管理', isTab: true } },
|
||||
// 质量规划
|
||||
{ path: '/controlGraph', component: () => import('@/views/quality-planning/controlGraph'), name: 'controlGraph', meta: { title: '控制图形', isTab: true } },
|
||||
{ path: '/controlRatio', component: () => import('@/views/quality-planning/controlRatio'), name: 'controlRatio', meta: { title: '控制系数', isTab: true } },
|
||||
{ path: '/interpretationScheme', component: () => import('@/views/quality-planning/interpretationScheme'), name: 'interpretationScheme', meta: { title: '判读方案', isTab: true } },
|
||||
// 过程检验
|
||||
{ path: '/generalOperation', component: () => import('@/views/process-inspection/generalOperation'), name: 'generalOperation', meta: { title: '通用作业', isTab: true } },
|
||||
{ path: '/XbarRGraph', component: () => import('@/views/process-inspection/Metrological/XbarRGraph'), name: 'XbarRGraph', meta: { title: '均值极差控制图', isTab: true } },
|
||||
{ path: '/XbarSGraph', component: () => import('@/views/process-inspection/Metrological/XbarSGraph'), name: 'XbarSGraph', meta: { title: '均值标准差控制图', isTab: true } },
|
||||
{ path: '/XMRGraph', component: () => import('@/views/process-inspection/Metrological/XMRGraph'), name: 'XMRGraph', meta: { title: '单值移动极差控制图', isTab: true } },
|
||||
{ path: '/CGraph', component: () => import('@/views/process-inspection/Counting/CGraph'), name: 'CGraph', meta: { title: 'C图', isTab: true } },
|
||||
{ path: '/UGraph', component: () => import('@/views/process-inspection/Counting/UGraph'), name: 'UGraph', meta: { title: 'U图', isTab: true } },
|
||||
{ path: '/NPGraph', component: () => import('@/views/process-inspection/Counting/NPGraph'), name: 'NPGraph', meta: { title: 'NP图', isTab: true } },
|
||||
{ path: '/PGraph', component: () => import('@/views/process-inspection/Counting/PGraph'), name: 'PGraph', meta: { title: 'P图', isTab: true } },
|
||||
]
|
||||
}
|
||||
|
||||
|
@ -15,15 +15,19 @@
|
||||
</template>
|
||||
<el-submenu index="product">
|
||||
<template slot="title">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-config"></use></svg>
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-config"></use>
|
||||
</svg>
|
||||
<span>产品管理</span>
|
||||
</template>
|
||||
<el-menu-item index="productType" @click="$router.push({ name: 'productType' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-zonghe"></use></svg>
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-zonghe"></use>
|
||||
</svg>
|
||||
<span slot="title">产品类型</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="productList" @click="$router.push({ name: 'productList' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-log"></use></svg>
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-log"></use></svg>
|
||||
<span slot="title">产品列表</span>
|
||||
</el-menu-item>
|
||||
</el-submenu>
|
||||
@ -33,33 +37,45 @@
|
||||
</el-menu-item>
|
||||
<el-submenu index="process">
|
||||
<template slot="title">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-config"></use></svg>
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-config"></use>
|
||||
</svg>
|
||||
<span>过程管理</span>
|
||||
</template>
|
||||
<el-menu-item index="processType" @click="$router.push({ name: 'processType' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-zonghe"></use></svg>
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-zonghe"></use>
|
||||
</svg>
|
||||
<span slot="title">工序类型</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="processDefine" @click="$router.push({ name: 'processDefine' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-zonghe"></use></svg>
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-zonghe"></use>
|
||||
</svg>
|
||||
<span slot="title">工序定义</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="processFlow" @click="$router.push({ name: 'processFlow' })">
|
||||
<!-- <el-menu-item index="processFlow" @click="$router.push({ name: 'processFlow' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-zonghe"></use></svg>
|
||||
<span slot="title">工艺流程</span>
|
||||
</el-menu-item>
|
||||
</el-menu-item> -->
|
||||
</el-submenu>
|
||||
<el-submenu index="Machine">
|
||||
<template slot="title">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-config"></use></svg>
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-config"></use>
|
||||
</svg>
|
||||
<span>机台管理</span>
|
||||
</template>
|
||||
<el-menu-item index="siteManage" @click="$router.push({ name: 'siteManage' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-zonghe"></use></svg>
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-zonghe"></use>
|
||||
</svg>
|
||||
<span slot="title">站点管理</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="machineManage" @click="$router.push({ name: 'machineManage' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-zonghe"></use></svg>
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-zonghe"></use>
|
||||
</svg>
|
||||
<span slot="title">机台管理</span>
|
||||
</el-menu-item>
|
||||
</el-submenu>
|
||||
@ -74,18 +90,116 @@
|
||||
</el-submenu>
|
||||
<el-submenu index="spc">
|
||||
<template slot="title">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-shoucang"></use></svg>
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-shoucang"></use>
|
||||
</svg>
|
||||
<span>SPC</span>
|
||||
</template>
|
||||
<el-menu-item index="echart-line" @click="$router.push({ name: 'echart-line' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-tubiao"></use></svg>
|
||||
<span slot="title">spc折线</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="echart-2line" @click="$router.push({ name: 'echart-2line' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-tubiao"></use></svg>
|
||||
<span slot="title">spc2折线</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="echart-line" @click="$router.push({ name: 'echart-3line' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-tubiao"></use></svg>
|
||||
<span slot="title">spc3折线</span>
|
||||
</el-menu-item>
|
||||
</el-submenu>
|
||||
<el-submenu index="quality">
|
||||
<template slot="title">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#08质量"></use>
|
||||
</svg>
|
||||
<span>质量规划</span>
|
||||
</template>
|
||||
<el-menu-item index="controlGraph" @click="$router.push({ name: 'controlGraph' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#控制中心"></use></svg>
|
||||
<span slot="title">控制图形</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="controlRatio" @click="$router.push({ name: 'controlRatio' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#控制中心"></use></svg>
|
||||
<span slot="title">控制系数</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="interpretationScheme" @click="$router.push({ name: 'interpretationScheme' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#方案管理"></use></svg>
|
||||
<span slot="title">判读方案</span>
|
||||
</el-menu-item>
|
||||
</el-submenu>
|
||||
<el-submenu index="inspection">
|
||||
<template slot="title">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-shoucang"></use>
|
||||
</svg>
|
||||
<span>过程检验</span>
|
||||
</template>
|
||||
<el-menu-item index="generalOperation" @click="$router.push({ name: 'generalOperation' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-log"></use>
|
||||
</svg>
|
||||
<span slot="title">通用作业</span>
|
||||
</el-menu-item>
|
||||
<el-submenu index="Metrological">
|
||||
<template slot="title">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-log"></use>
|
||||
</svg>
|
||||
<span>计量分析</span>
|
||||
</template>
|
||||
<el-menu-item index="XbarRGraph" @click="$router.push({ name: 'XbarRGraph' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-tubiao"></use>
|
||||
</svg>
|
||||
<span slot="title">均值极差控制图</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="XbarSGraph" @click="$router.push({ name: 'XbarSGraph' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-tubiao"></use>
|
||||
</svg>
|
||||
<span slot="title">均值标准差控制图</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="XMRGraph" @click="$router.push({ name: 'XMRGraph' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-tubiao"></use>
|
||||
</svg>
|
||||
<span slot="title">单值移动极差控制图</span>
|
||||
</el-menu-item>
|
||||
</el-submenu>
|
||||
<el-submenu index="Counting">
|
||||
<template slot="title">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-log"></use>
|
||||
</svg>
|
||||
<span>计数分析</span>
|
||||
</template>
|
||||
<el-menu-item index="CGraph" @click="$router.push({ name: 'CGraph' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-tubiao"></use>
|
||||
</svg>
|
||||
<span slot="title">C图</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="UGraph" @click="$router.push({ name: 'UGraph' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-tubiao"></use>
|
||||
</svg>
|
||||
<span slot="title">U图</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="NPGraph" @click="$router.push({ name: 'NPGraph' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-tubiao"></use>
|
||||
</svg>
|
||||
<span slot="title">NP图</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="PGraph" @click="$router.push({ name: 'PGraph' })">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon">
|
||||
<use xlink:href="#icon-tubiao"></use>
|
||||
</svg>
|
||||
<span slot="title">P图</span>
|
||||
</el-menu-item>
|
||||
</el-submenu>
|
||||
</el-submenu>
|
||||
<sub-menu v-for="menu in $store.state.sidebarMenuList" :key="menu.id" :menu="menu" />
|
||||
</el-menu>
|
||||
</div>
|
||||
|
@ -1,3 +1,10 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2022-08-22 14:57:51
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-12-07 14:54:22
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<div class="mod-sys__role">
|
||||
@ -62,7 +69,6 @@ export default {
|
||||
deleteIsBatch: true
|
||||
},
|
||||
dataForm: {
|
||||
name: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -52,7 +52,7 @@
|
||||
<script>
|
||||
import Cookies from 'js-cookie'
|
||||
import debounce from 'lodash/debounce'
|
||||
//import { getUUID } from '@/utils'
|
||||
import { getUUID } from '@/utils'
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
@ -86,6 +86,7 @@ export default {
|
||||
methods: {
|
||||
// 获取验证码
|
||||
getCaptcha () {
|
||||
this.dataForm.uuid = getUUID()
|
||||
this.captchaPath = `${window.SITE_CONFIG['apiURL']}/captcha?uuid=${this.dataForm.uuid}`
|
||||
},
|
||||
// 表单提交
|
||||
|
85
src/views/process-inspection/Counting/CGraph.vue
Normal file
85
src/views/process-inspection/Counting/CGraph.vue
Normal file
@ -0,0 +1,85 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2022-09-15 10:22:53
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-12-01 10:23:29
|
||||
* @Description: C图
|
||||
-->
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<query-form
|
||||
:page-name="'缺陷数图'"
|
||||
:data-form="dataForm"
|
||||
@getDataList="getDataList"
|
||||
@rawData="rawData"
|
||||
@exportHandle="exportHandle"
|
||||
/>
|
||||
<el-row :gutter="6" v-if="chartVisible">
|
||||
<el-col :span="24">
|
||||
<chart-line
|
||||
ref="CGraph"
|
||||
:chartLineName="'CGraph'"
|
||||
:yName="'缺陷数'"
|
||||
:title="chartTitle"
|
||||
:data-list="dataList.list"
|
||||
></chart-line>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import queryForm from "../query-form";
|
||||
import processPage from "@/mixins/process-page";
|
||||
import chartLine from "../charts/echart-3line.vue";
|
||||
export default {
|
||||
mixins: [processPage],
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
exportUrl: "/basic/unit/export",
|
||||
},
|
||||
chartVisible: false,
|
||||
chartTitle: "缺陷数图",
|
||||
};
|
||||
},
|
||||
components: {
|
||||
queryForm,
|
||||
chartLine,
|
||||
},
|
||||
methods: {
|
||||
// 获取数据列表
|
||||
getDataList() {
|
||||
this.$http
|
||||
.post("/processInspection/CGraphTest")
|
||||
.then(({ data: res }) => {
|
||||
this.dataListLoading = false;
|
||||
if (res.code !== 0) {
|
||||
this.dataList = [];
|
||||
this.rightList = [];
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.dataList = res.data;
|
||||
this.chartVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.CGraph.initChartLine();
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
rawData() {
|
||||
console.log("原始数据");
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.rightDiv {
|
||||
padding: 8px 16px;
|
||||
font-size: 16px;
|
||||
background-color: #fdfdfd;
|
||||
border-bottom: 1px solid #f5f5f5;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
85
src/views/process-inspection/Counting/NPGraph.vue
Normal file
85
src/views/process-inspection/Counting/NPGraph.vue
Normal file
@ -0,0 +1,85 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2022-09-15 10:22:53
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-12-01 10:23:34
|
||||
* @Description: NP图
|
||||
-->
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<query-form
|
||||
:page-name="'NP图'"
|
||||
:data-form="dataForm"
|
||||
@getDataList="getDataList"
|
||||
@rawData="rawData"
|
||||
@exportHandle="exportHandle"
|
||||
/>
|
||||
<el-row :gutter="6" v-if="chartVisible">
|
||||
<el-col :span="24">
|
||||
<chart-line
|
||||
ref="CGraph"
|
||||
:chartLineName="'CGraph'"
|
||||
:yName="'缺陷数'"
|
||||
:title="chartTitle"
|
||||
:data-list="dataList.list"
|
||||
></chart-line>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import queryForm from "../query-form";
|
||||
import processPage from "@/mixins/process-page";
|
||||
import chartLine from "../charts/echart-3line.vue";
|
||||
export default {
|
||||
mixins: [processPage],
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
exportUrl: "/basic/unit/export",
|
||||
},
|
||||
chartVisible: false,
|
||||
chartTitle: "NP图",
|
||||
};
|
||||
},
|
||||
components: {
|
||||
queryForm,
|
||||
chartLine,
|
||||
},
|
||||
methods: {
|
||||
// 获取数据列表
|
||||
getDataList() {
|
||||
this.$http
|
||||
.post("/processInspection/NPGraphTest")
|
||||
.then(({ data: res }) => {
|
||||
this.dataListLoading = false;
|
||||
if (res.code !== 0) {
|
||||
this.dataList = [];
|
||||
this.rightList = [];
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.dataList = res.data;
|
||||
this.chartVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.CGraph.initChartLine();
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
rawData() {
|
||||
console.log("原始数据");
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.rightDiv {
|
||||
padding: 8px 16px;
|
||||
font-size: 16px;
|
||||
background-color: #fdfdfd;
|
||||
border-bottom: 1px solid #f5f5f5;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
85
src/views/process-inspection/Counting/PGraph.vue
Normal file
85
src/views/process-inspection/Counting/PGraph.vue
Normal file
@ -0,0 +1,85 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2022-09-15 10:22:53
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-12-01 10:23:38
|
||||
* @Description: P图
|
||||
-->
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<query-form
|
||||
:page-name="'NP图'"
|
||||
:data-form="dataForm"
|
||||
@getDataList="getDataList"
|
||||
@rawData="rawData"
|
||||
@exportHandle="exportHandle"
|
||||
/>
|
||||
<el-row :gutter="6" v-if="chartVisible">
|
||||
<el-col :span="24">
|
||||
<chart-line
|
||||
ref="CGraph"
|
||||
:chartLineName="'CGraph'"
|
||||
:yName="'缺陷率'"
|
||||
:title="chartTitle"
|
||||
:data-list="dataList.list"
|
||||
></chart-line>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import queryForm from "../query-form";
|
||||
import processPage from "@/mixins/process-page";
|
||||
import chartLine from "../charts/echart-3line.vue";
|
||||
export default {
|
||||
mixins: [processPage],
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
exportUrl: "/basic/unit/export",
|
||||
},
|
||||
chartVisible: false,
|
||||
chartTitle: "P图",
|
||||
};
|
||||
},
|
||||
components: {
|
||||
queryForm,
|
||||
chartLine,
|
||||
},
|
||||
methods: {
|
||||
// 获取数据列表
|
||||
getDataList() {
|
||||
this.$http
|
||||
.post("/processInspection/PGraphTest")
|
||||
.then(({ data: res }) => {
|
||||
this.dataListLoading = false;
|
||||
if (res.code !== 0) {
|
||||
this.dataList = [];
|
||||
this.rightList = [];
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.dataList = res.data;
|
||||
this.chartVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.CGraph.initChartLine();
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
rawData() {
|
||||
console.log("原始数据");
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.rightDiv {
|
||||
padding: 8px 16px;
|
||||
font-size: 16px;
|
||||
background-color: #fdfdfd;
|
||||
border-bottom: 1px solid #f5f5f5;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
85
src/views/process-inspection/Counting/UGraph.vue
Normal file
85
src/views/process-inspection/Counting/UGraph.vue
Normal file
@ -0,0 +1,85 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2022-09-15 10:22:53
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-12-01 10:23:43
|
||||
* @Description: U图
|
||||
-->
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<query-form
|
||||
:page-name="'U图'"
|
||||
:data-form="dataForm"
|
||||
@getDataList="getDataList"
|
||||
@rawData="rawData"
|
||||
@exportHandle="exportHandle"
|
||||
/>
|
||||
<el-row :gutter="6" v-if="chartVisible">
|
||||
<el-col :span="24">
|
||||
<chart-line
|
||||
ref="CGraph"
|
||||
:chartLineName="'CGraph'"
|
||||
:yName="'单位缺陷'"
|
||||
:title="chartTitle"
|
||||
:data-list="dataList.list"
|
||||
></chart-line>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import queryForm from "../query-form";
|
||||
import processPage from "@/mixins/process-page";
|
||||
import chartLine from "../charts/echart-3line.vue";
|
||||
export default {
|
||||
mixins: [processPage],
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
exportUrl: "/basic/unit/export",
|
||||
},
|
||||
chartVisible: false,
|
||||
chartTitle: "U图",
|
||||
};
|
||||
},
|
||||
components: {
|
||||
queryForm,
|
||||
chartLine,
|
||||
},
|
||||
methods: {
|
||||
// 获取数据列表
|
||||
getDataList() {
|
||||
this.$http
|
||||
.post("/processInspection/UGraphTest")
|
||||
.then(({ data: res }) => {
|
||||
this.dataListLoading = false;
|
||||
if (res.code !== 0) {
|
||||
this.dataList = [];
|
||||
this.rightList = [];
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.dataList = res.data;
|
||||
this.chartVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.CGraph.initChartLine();
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
rawData() {
|
||||
console.log("原始数据");
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.rightDiv {
|
||||
padding: 8px 16px;
|
||||
font-size: 16px;
|
||||
background-color: #fdfdfd;
|
||||
border-bottom: 1px solid #f5f5f5;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
172
src/views/process-inspection/Metrological/XMRGraph.vue
Normal file
172
src/views/process-inspection/Metrological/XMRGraph.vue
Normal file
@ -0,0 +1,172 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2022-09-15 10:23:42
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-11-29 16:26:58
|
||||
* @Description: 单值-移动极差 控制图
|
||||
-->
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<query-form
|
||||
:page-name="'单值-移动极差控制图'"
|
||||
:data-form="dataForm"
|
||||
@getDataList="getDataList"
|
||||
@rawData="rawData"
|
||||
@exportHandle="exportHandle"
|
||||
/>
|
||||
<el-row :gutter="6" v-if="chartVisible">
|
||||
<el-col :span="19">
|
||||
<chart-line
|
||||
ref="XMRGraph"
|
||||
:chartLineName="'XMRGraph'"
|
||||
:lineIndex='2'
|
||||
:title="chartTitle"
|
||||
:y-name1="yName1"
|
||||
:y-name2="yName2"
|
||||
:mrGraphEntity="dataList.xmrGraphEntity"
|
||||
:processCapability="dataList.processCapability"
|
||||
:rcl="dataList.rcl"
|
||||
:sl="dataList.sl"
|
||||
:xbarCL="dataList.xbarCL"
|
||||
></chart-line>
|
||||
</el-col>
|
||||
<el-col :span="5" style="margin-top: 20px;">
|
||||
<el-card>
|
||||
<div v-for="item in rightList" :key="item.name" class="rightDiv">
|
||||
{{ item.name }}<span style="float:right">{{ parseFloat(item.value).toFixed(4) }}</span>
|
||||
</div>
|
||||
<el-collapse>
|
||||
<el-collapse-item title="单值数值" name="0">
|
||||
<div
|
||||
v-for="(val, key, index) in this.dataList.xbarCL"
|
||||
:key="index + 'xbar'"
|
||||
class="rightDiv"
|
||||
>
|
||||
{{ key }}<span style="float:right">{{ val.length?val: parseFloat(val).toFixed(4) }}</span>
|
||||
</div>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="移动极差数值" name="1">
|
||||
<div
|
||||
v-for="(val, key, index) in this.dataList.rcl"
|
||||
:key="index + 'rcl'"
|
||||
class="rightDiv"
|
||||
>
|
||||
{{ key }}<span style="float:right">{{ val.length?val: parseFloat(val).toFixed(4) }}</span>
|
||||
</div>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="waring:" name="2">
|
||||
<div v-for="item in waring" :key="item" class="rightDiv">{{ item }}</div>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import queryForm from "../query-form";
|
||||
import processPage from "@/mixins/process-page";
|
||||
import chartLine from "../charts/echart-2line.vue";
|
||||
export default {
|
||||
mixins: [processPage],
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
exportUrl: "/basic/unit/export",
|
||||
},
|
||||
chartVisible: false,
|
||||
chartTitle: "单值-移动极差控制图",
|
||||
yName1: "单值",
|
||||
yName2: "移动极差",
|
||||
rightList: [],
|
||||
waring: [],
|
||||
};
|
||||
},
|
||||
components: {
|
||||
queryForm,
|
||||
chartLine,
|
||||
},
|
||||
methods: {
|
||||
// 获取数据列表
|
||||
getDataList() {
|
||||
this.$http
|
||||
.post("/processInspection/XMRGraphTest")
|
||||
.then(({ data: res }) => {
|
||||
this.dataListLoading = false;
|
||||
if (res.code !== 0) {
|
||||
this.dataList = [];
|
||||
this.rightList = [];
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.dataList = res.data;
|
||||
this.rightList = [];
|
||||
// this.rightList.push({
|
||||
// name: "cl(上图)",
|
||||
// value: res.data.xbarCL.cl,
|
||||
// });
|
||||
// this.rightList.push({
|
||||
// name: "lcl(上图)",
|
||||
// value: res.data.xbarCL.lcl,
|
||||
// });
|
||||
// this.rightList.push({
|
||||
// name: "ucl(上图)",
|
||||
// value: res.data.xbarCL.ucl,
|
||||
// });
|
||||
Object.keys(res.data.sl).map((key) => {
|
||||
this.rightList.push({
|
||||
name: key,
|
||||
value: res.data.sl[key],
|
||||
});
|
||||
});
|
||||
// this.rightList.push({
|
||||
// name: "cl(下图)",
|
||||
// value: res.data.rcl.cl,
|
||||
// });
|
||||
// this.rightList.push({
|
||||
// name: "lcl(下图)",
|
||||
// value: res.data.rcl.lcl,
|
||||
// });
|
||||
// this.rightList.push({
|
||||
// name: "ucl(下图)",
|
||||
// value: res.data.rcl.ucl,
|
||||
// });
|
||||
Object.keys(res.data.standardDiviation).map((key) => {
|
||||
this.rightList.push({
|
||||
name: key,
|
||||
value: res.data.standardDiviation[key],
|
||||
});
|
||||
});
|
||||
Object.keys(res.data.processCapability).map((key) => {
|
||||
if (key === "warming") {
|
||||
this.waring = res.data.processCapability[key];
|
||||
} else {
|
||||
this.rightList.push({
|
||||
name: key,
|
||||
value: res.data.processCapability[key],
|
||||
});
|
||||
}
|
||||
});
|
||||
this.chartVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.XMRGraph.initChartLine();
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
rawData() {
|
||||
console.log("原始数据");
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.rightDiv {
|
||||
padding: 8px 16px;
|
||||
font-size: 16px;
|
||||
background-color: #fdfdfd;
|
||||
border-bottom: 1px solid #f5f5f5;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
184
src/views/process-inspection/Metrological/XbarRGraph.vue
Normal file
184
src/views/process-inspection/Metrological/XbarRGraph.vue
Normal file
@ -0,0 +1,184 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2022-09-15 10:22:12
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-12-12 16:40:23
|
||||
* @Description: 均值极差控制图
|
||||
-->
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<query-form
|
||||
ref="queryForm"
|
||||
:page-name="'均值极差控制图'"
|
||||
:data-form="dataForm"
|
||||
@getDataList="getDataList"
|
||||
@rawData="rawData"
|
||||
@exportHandle="exportHandle"
|
||||
/>
|
||||
<el-row :gutter="6" v-if="chartVisible">
|
||||
<el-col :span="19">
|
||||
<chart-line
|
||||
ref="chartRef"
|
||||
:chartLineName="'XbarRGraph'"
|
||||
:lineIndex="0"
|
||||
:title="chartTitle"
|
||||
:y-name1="yName1"
|
||||
:y-name2="yName2"
|
||||
:mrGraphEntity="dataList.mrGraphEntity"
|
||||
:processCapability="dataList.processCapability"
|
||||
:rcl="dataList.rcl"
|
||||
:sl="dataList.sl"
|
||||
:xbarCL="dataList.xbarCL"
|
||||
></chart-line>
|
||||
</el-col>
|
||||
<el-col :span="5" style="margin-top: 20px;">
|
||||
<el-card>
|
||||
<div v-for="item in rightList" :key="item.name" class="rightDiv">
|
||||
{{ item.name }}<span style="float:right">{{ parseFloat(item.value).toFixed(4) }}</span>
|
||||
</div>
|
||||
<el-collapse>
|
||||
<el-collapse-item title="均值数值" name="0">
|
||||
<div
|
||||
v-for="(val, key, index) in this.dataList.xbarCL"
|
||||
:key="index + 'xbar'"
|
||||
class="rightDiv"
|
||||
>
|
||||
{{ key
|
||||
}}<span style="float:right">{{
|
||||
val.length ? val : parseFloat(val).toFixed(4)
|
||||
}}</span>
|
||||
</div>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="极差数值" name="1">
|
||||
<div
|
||||
v-for="(val, key, index) in this.dataList.rcl"
|
||||
:key="index + 'rcl'"
|
||||
class="rightDiv"
|
||||
>
|
||||
{{ key
|
||||
}}<span style="float:right">{{
|
||||
val.length ? val : parseFloat(val).toFixed(4)
|
||||
}}</span>
|
||||
</div>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="waring:" name="2">
|
||||
<div v-for="item in waring" :key="item" class="rightDiv">{{ item }}</div>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import queryForm from "../query-form";
|
||||
import processPage from "@/mixins/process-page";
|
||||
import chartLine from "../charts/echart-2line.vue";
|
||||
export default {
|
||||
mixins: [processPage],
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
exportUrl: "/basic/unit/export",
|
||||
},
|
||||
chartVisible: false,
|
||||
chartTitle: "均值极差控制图",
|
||||
yName1: "均值",
|
||||
yName2: "极差",
|
||||
rightList: [],
|
||||
waring: [],
|
||||
};
|
||||
},
|
||||
components: {
|
||||
queryForm,
|
||||
chartLine,
|
||||
},
|
||||
created() {
|
||||
this.$nextTick(() => {
|
||||
this.$refs.queryForm.getArr();
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
// 获取数据列表
|
||||
getDataList() {
|
||||
this.$http
|
||||
.post("/processInspection/XbarRGraphTest")
|
||||
.then(({ data: res }) => {
|
||||
this.dataListLoading = false;
|
||||
if (res.code !== 0) {
|
||||
this.dataList = [];
|
||||
this.rightList = [];
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.dataList = res.data;
|
||||
this.rightList = [];
|
||||
// this.rightList.push({
|
||||
// name: "cl(上图)",
|
||||
// value: res.data.xbarCL.cl,
|
||||
// });
|
||||
// this.rightList.push({
|
||||
// name: "lcl(上图)",
|
||||
// value: res.data.xbarCL.lcl,
|
||||
// });
|
||||
// this.rightList.push({
|
||||
// name: "ucl(上图)",
|
||||
// value: res.data.xbarCL.ucl,
|
||||
// });
|
||||
Object.keys(res.data.sl).map((key) => {
|
||||
this.rightList.push({
|
||||
name: key,
|
||||
value: res.data.sl[key],
|
||||
});
|
||||
});
|
||||
// this.rightList.push({
|
||||
// name: "cl(下图)",
|
||||
// value: res.data.rcl.cl,
|
||||
// });
|
||||
// this.rightList.push({
|
||||
// name: "lcl(下图)",
|
||||
// value: res.data.rcl.lcl,
|
||||
// });
|
||||
// this.rightList.push({
|
||||
// name: "ucl(下图)",
|
||||
// value: res.data.rcl.ucl,
|
||||
// });
|
||||
Object.keys(res.data.standardDiviation).map((key) => {
|
||||
this.rightList.push({
|
||||
name: key,
|
||||
value: res.data.standardDiviation[key],
|
||||
});
|
||||
});
|
||||
Object.keys(res.data.processCapability).map((key) => {
|
||||
if (key === "warming") {
|
||||
this.waring = res.data.processCapability[key];
|
||||
} else {
|
||||
this.rightList.push({
|
||||
name: key,
|
||||
value: res.data.processCapability[key],
|
||||
});
|
||||
}
|
||||
});
|
||||
this.chartVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.chartRef.initChartLine();
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
rawData() {
|
||||
console.log("原始数据");
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.rightDiv {
|
||||
padding: 8px 16px;
|
||||
font-size: 16px;
|
||||
background-color: #fdfdfd;
|
||||
border-bottom: 1px solid #f5f5f5;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
172
src/views/process-inspection/Metrological/XbarSGraph.vue
Normal file
172
src/views/process-inspection/Metrological/XbarSGraph.vue
Normal file
@ -0,0 +1,172 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2022-09-15 10:22:53
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-11-29 16:26:47
|
||||
* @Description: 均值标准差控制图
|
||||
-->
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<query-form
|
||||
:page-name="'均值标准差控制图'"
|
||||
:data-form="dataForm"
|
||||
@getDataList="getDataList"
|
||||
@rawData="rawData"
|
||||
@exportHandle="exportHandle"
|
||||
/>
|
||||
<el-row :gutter="6" v-if="chartVisible">
|
||||
<el-col :span="19">
|
||||
<chart-line
|
||||
ref="chart1Ref"
|
||||
:chartLineName="'XbarSGraph'"
|
||||
:lineIndex='1'
|
||||
:title="chartTitle"
|
||||
:y-name1="yName1"
|
||||
:y-name2="yName2"
|
||||
:mrGraphEntity="dataList.msdGraphEntity"
|
||||
:processCapability="dataList.processCapability"
|
||||
:rcl="dataList.scl"
|
||||
:sl="dataList.sl"
|
||||
:xbarCL="dataList.xbarCL"
|
||||
></chart-line>
|
||||
</el-col>
|
||||
<el-col :span="5" style="margin-top: 20px;">
|
||||
<el-card>
|
||||
<div v-for="item in rightList" :key="item.name" class="rightDiv">
|
||||
{{ item.name }}<span style="float:right">{{ parseFloat(item.value).toFixed(4) }}</span>
|
||||
</div>
|
||||
<el-collapse>
|
||||
<el-collapse-item title="均值数值" name="0">
|
||||
<div
|
||||
v-for="(val, key, index) in this.dataList.xbarCL"
|
||||
:key="index + 'xbar'"
|
||||
class="rightDiv"
|
||||
>
|
||||
{{ key }}<span style="float:right">{{ val.length?val: parseFloat(val).toFixed(4) }}</span>
|
||||
</div>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="标准差数值" name="1">
|
||||
<div
|
||||
v-for="(val, key, index) in this.dataList.scl"
|
||||
:key="index + 'scl'"
|
||||
class="rightDiv"
|
||||
>
|
||||
{{ key }}<span style="float:right">{{ val.length?val: parseFloat(val).toFixed(4) }}</span>
|
||||
</div>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="waring:" name="2">
|
||||
<div v-for="item in waring" :key="item" class="rightDiv">{{ item }}</div>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import queryForm from "../query-form";
|
||||
import processPage from "@/mixins/process-page";
|
||||
import chartLine from "../charts/echart-2line.vue";
|
||||
export default {
|
||||
mixins: [processPage],
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
exportUrl: "/basic/unit/export",
|
||||
},
|
||||
chartVisible: false,
|
||||
chartTitle: "均值标准差控制图",
|
||||
yName1: "均值",
|
||||
yName2: "标准差",
|
||||
rightList: [],
|
||||
waring: [],
|
||||
};
|
||||
},
|
||||
components: {
|
||||
queryForm,
|
||||
chartLine,
|
||||
},
|
||||
methods: {
|
||||
// 获取数据列表
|
||||
getDataList() {
|
||||
this.$http
|
||||
.post("/processInspection/XbarSGraphTest")
|
||||
.then(({ data: res }) => {
|
||||
this.dataListLoading = false;
|
||||
if (res.code !== 0) {
|
||||
this.dataList = [];
|
||||
this.rightList = [];
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.dataList = res.data;
|
||||
this.rightList = [];
|
||||
// this.rightList.push({
|
||||
// name: "cl(上图)",
|
||||
// value: res.data.xbarCL.cl,
|
||||
// });
|
||||
// this.rightList.push({
|
||||
// name: "lcl(上图)",
|
||||
// value: res.data.xbarCL.lcl,
|
||||
// });
|
||||
// this.rightList.push({
|
||||
// name: "ucl(上图)",
|
||||
// value: res.data.xbarCL.ucl,
|
||||
// });
|
||||
Object.keys(res.data.sl).map((key) => {
|
||||
this.rightList.push({
|
||||
name: key,
|
||||
value: res.data.sl[key],
|
||||
});
|
||||
});
|
||||
// this.rightList.push({
|
||||
// name: "cl(下图)",
|
||||
// value: res.data.rcl.cl,
|
||||
// });
|
||||
// this.rightList.push({
|
||||
// name: "lcl(下图)",
|
||||
// value: res.data.rcl.lcl,
|
||||
// });
|
||||
// this.rightList.push({
|
||||
// name: "ucl(下图)",
|
||||
// value: res.data.rcl.ucl,
|
||||
// });
|
||||
Object.keys(res.data.standardDiviation).map((key) => {
|
||||
this.rightList.push({
|
||||
name: key,
|
||||
value: res.data.standardDiviation[key],
|
||||
});
|
||||
});
|
||||
Object.keys(res.data.processCapability).map((key) => {
|
||||
if (key === "warming") {
|
||||
this.waring = res.data.processCapability[key];
|
||||
} else {
|
||||
this.rightList.push({
|
||||
name: key,
|
||||
value: res.data.processCapability[key],
|
||||
});
|
||||
}
|
||||
});
|
||||
this.chartVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.chart1Ref.initChartLine();
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
rawData() {
|
||||
console.log("原始数据");
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.rightDiv {
|
||||
padding: 8px 16px;
|
||||
font-size: 16px;
|
||||
background-color: #fdfdfd;
|
||||
border-bottom: 1px solid #f5f5f5;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
618
src/views/process-inspection/charts/echart-2line.vue
Normal file
618
src/views/process-inspection/charts/echart-2line.vue
Normal file
@ -0,0 +1,618 @@
|
||||
<template>
|
||||
<div class="mod-demo-echarts">
|
||||
<div :id="chartLineName" class="chart-box"></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as echarts from "echarts";
|
||||
//import testdata from './testdata'
|
||||
export default {
|
||||
props: {
|
||||
title: {
|
||||
type: String,
|
||||
},
|
||||
chartLineName: {
|
||||
type:String,
|
||||
default: 'echartLine',
|
||||
},
|
||||
mrGraphEntity: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
},
|
||||
},
|
||||
processCapability: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
},
|
||||
},
|
||||
rcl: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
},
|
||||
},
|
||||
sl: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
},
|
||||
},
|
||||
xbarCL: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
},
|
||||
},
|
||||
yName1: {
|
||||
type: String,
|
||||
},
|
||||
yName2: {
|
||||
type: String,
|
||||
},
|
||||
lineIndex: {
|
||||
type: Number,
|
||||
default: 0
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
ruleList: [
|
||||
"违反规则一:控制图上有 1 个点位于三倍标准差以外",
|
||||
"违反规则二:连续 9 点落在中心线的用一侧",
|
||||
"违反规则三:连续 6 点递增或者递减",
|
||||
"违反规则四:连续 14 点中 相邻点 交替上下",
|
||||
"违反规则五:连续 3 点中 有 2 点 落在中心线同一侧,B区以外",
|
||||
"违反规则六:连续 5 点中 有 4点 落在中心线同一侧,C区以外",
|
||||
"违反规则七:连续 15 点 落在中心线两侧的C区内",
|
||||
"违反规则八:连续 8 点 落在中心线两侧,且无一点在C区内",
|
||||
"违反规则九:有 1 点落在规格线以外",
|
||||
"违反规则十:CPK小于目标值",
|
||||
],
|
||||
upLine:[{name:'xbar',
|
||||
rules:'xbarUnsatisfiedRules'},{name:'xbar',
|
||||
rules:'xbarUnsatisfiedRules'},{name:'x',
|
||||
rules:'xUnsatisfiedRules'}],
|
||||
lowLine:[{name:'r',
|
||||
rules:'rUnsatisfiedRules'},{name:'s',
|
||||
rules:'sUnsatisfiedRules'},{name:'rs',
|
||||
rules:'rsUnsatisfiedRules'}]
|
||||
//testdata
|
||||
};
|
||||
},
|
||||
mounted() {},
|
||||
activated() {
|
||||
// 由于给echart添加了resize事件, 在组件激活时需要重新resize绘画一次, 否则出现空白bug
|
||||
if (this.chartLine1) {
|
||||
this.chartLine1.resize();
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 折线图
|
||||
initChartLine() {
|
||||
const rclUcl = this.rcl.ucl;
|
||||
var option = {
|
||||
title: {
|
||||
text: this.title,
|
||||
},
|
||||
tooltip: {
|
||||
// 悬浮提示框
|
||||
trigger: "axis",
|
||||
boundaryGap: false,
|
||||
axisPointer: {
|
||||
type: "cross",
|
||||
label: {
|
||||
backgroundColor: "#6a7985",
|
||||
},
|
||||
},
|
||||
formatter: (e) => {
|
||||
let alarmInfo = ''
|
||||
e[0].data.sRule.forEach(item=>{
|
||||
alarmInfo += this.ruleList[item - 1]+'<br/>'
|
||||
})
|
||||
return `
|
||||
点位坐标: ${e[0].data.position}<br/>
|
||||
${e[0].marker} 数值: ${e[0].data.value}<br/>
|
||||
${e[0].marker} 规格: ${e[0].data.sl}<br/>
|
||||
${e[0].marker} 异常信息:<br/> ${alarmInfo || "无"}
|
||||
`;
|
||||
},
|
||||
},
|
||||
toolbox: {
|
||||
feature: {
|
||||
dataView: { show: true, readOnly: false },
|
||||
magicType: { show: true, type: ["line", "bar"] },
|
||||
restore: { show: true },
|
||||
saveAsImage: { show: true },
|
||||
},
|
||||
},
|
||||
color: ["#f8f106", "#fe7576", "#a9b0d3", "#476fd4"],
|
||||
//多个图,就有多个grid,排序默认0、1、2....
|
||||
grid: [
|
||||
//0降雨
|
||||
{ x: "7%", y: "7%", height: "40%", left: "10%" },
|
||||
//1水位流量
|
||||
{ x: "7%", y2: "7%", height: "35%", left: "10%", bottom: "15%" },
|
||||
],
|
||||
legend: {
|
||||
data: [this.yName1, this.yName2],
|
||||
},
|
||||
xAxis: [
|
||||
{
|
||||
show: false, //隐藏了x轴
|
||||
type: "category",
|
||||
gridIndex: 0, //对应前面grid的索引位置(第一个)
|
||||
axisTick: {
|
||||
alignWithLabel: true,
|
||||
},
|
||||
axisLabel: {
|
||||
//interval:showNum, //x轴显示的数量,我这里是动态算的
|
||||
},
|
||||
},
|
||||
{
|
||||
type: "category",
|
||||
gridIndex: 1, //对应前面grid的索引位置(第二个)
|
||||
axisTick: {
|
||||
alignWithLabel: true,
|
||||
},
|
||||
axisLabel: {
|
||||
//interval:showNum,
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
yAxis: [
|
||||
{
|
||||
type: "value",
|
||||
gridIndex: 1,
|
||||
nameLocation: "middle",
|
||||
name: this.yName2,
|
||||
max: function(value) {
|
||||
if (rclUcl > value.max + 1) {
|
||||
return rclUcl + 0.5;
|
||||
} else {
|
||||
return value.max + 1;
|
||||
}
|
||||
},
|
||||
splitLine: { show: false },
|
||||
nameTextStyle: {
|
||||
padding: 25,
|
||||
},
|
||||
position: "left",
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
//color: colors[2]
|
||||
},
|
||||
},
|
||||
axisTick: {
|
||||
show: true,
|
||||
},
|
||||
axisLabel: {
|
||||
formatter: "{value}",
|
||||
},
|
||||
},
|
||||
{
|
||||
type: "value",
|
||||
gridIndex: 0,
|
||||
name: this.yName1,
|
||||
min: function(value) {
|
||||
return value.min - 1;
|
||||
},
|
||||
max: function(value) {
|
||||
return value.max + 1;
|
||||
},
|
||||
splitLine: { show: false },
|
||||
nameTextStyle: {
|
||||
padding: 25,
|
||||
},
|
||||
nameLocation: "middle",
|
||||
position: "left",
|
||||
//nameLocation: 'start',//y轴name的位置
|
||||
//inverse: true,
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
//color: colors[1]
|
||||
},
|
||||
},
|
||||
axisTick: {
|
||||
show: true,
|
||||
},
|
||||
axisLabel: {
|
||||
formatter: "{value}",
|
||||
textStyle: {
|
||||
fontSize: 12, //y轴坐标轴上的字体大小
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
visualMap: [
|
||||
{
|
||||
// 折线颜色修改
|
||||
type: "piecewise",
|
||||
show: false,
|
||||
dimension: 0,
|
||||
seriesIndex: 0,
|
||||
pieces: [],
|
||||
inRange: {
|
||||
// 在选中范围外 的视觉元素,这里设置在正常范围内的图形颜色
|
||||
color: "blue",
|
||||
},
|
||||
outOfRange: {
|
||||
// 在选中范围外 的视觉元素,这里设置在正常范围内的图形颜色
|
||||
color: "blue",
|
||||
},
|
||||
},
|
||||
{
|
||||
// 折线颜色修改
|
||||
type: "piecewise",
|
||||
show: false,
|
||||
dimension: 0,
|
||||
seriesIndex: 1,
|
||||
pieces: [],
|
||||
inRange: {
|
||||
// 在选中范围外 的视觉元素,这里设置在正常范围内的图形颜色
|
||||
color: "blue",
|
||||
},
|
||||
outOfRange: {
|
||||
// 在选中范围外 的视觉元素,这里设置在正常范围内的图形颜色
|
||||
color: "blue",
|
||||
},
|
||||
},
|
||||
],
|
||||
dataZoom: [
|
||||
// 轴放大
|
||||
{
|
||||
type: "inside",
|
||||
start: 0,
|
||||
end: 100,
|
||||
},
|
||||
{
|
||||
start: 0,
|
||||
end: 100,
|
||||
},
|
||||
{
|
||||
type: "inside",
|
||||
xAxisIndex: [0, 1],
|
||||
start: 0,
|
||||
end: 100,
|
||||
},
|
||||
{
|
||||
show: true,
|
||||
yAxisIndex: 0,
|
||||
realtime: true,
|
||||
left: 6,
|
||||
start: 0,
|
||||
end: 100,
|
||||
},
|
||||
{
|
||||
show: true,
|
||||
yAxisIndex: 1,
|
||||
realtime: true,
|
||||
left: 6,
|
||||
start: 0,
|
||||
end: 100,
|
||||
},
|
||||
],
|
||||
series: [
|
||||
{
|
||||
name: this.yName1,
|
||||
xAxisIndex: 0,
|
||||
yAxisIndex: 1,
|
||||
type: "line",
|
||||
smooth: true,
|
||||
symbol: "emptyDiamond", // 设定为实心点
|
||||
symbolSize: 10,
|
||||
lineStyle: {
|
||||
// color: '#5470C6', // 这里不能设置颜色,不然会以这个为准,设置的范围变色将不起作用
|
||||
width: 1,
|
||||
},
|
||||
markLine: {
|
||||
// 最大值最小值均值线
|
||||
symbol: "none",
|
||||
label: {
|
||||
normal: {
|
||||
show: true,
|
||||
position: "end",
|
||||
formatter: "{name|{b}}--{c}",
|
||||
rich: {
|
||||
name: {
|
||||
color: "blue",
|
||||
fontSize: 16,
|
||||
fontWeight: 400,
|
||||
},
|
||||
},
|
||||
textStyle: {
|
||||
color: "black", //标注线终点文字颜色
|
||||
fontSize: 14,
|
||||
fontWeight: 400,
|
||||
},
|
||||
},
|
||||
},
|
||||
data: [
|
||||
{
|
||||
lineStyle: {
|
||||
color: "#990000",
|
||||
type: "solid",
|
||||
width: 3,
|
||||
},
|
||||
name: "ucl",
|
||||
yAxis: this.xbarCL.ucl,
|
||||
},
|
||||
{
|
||||
lineStyle: {
|
||||
color: "#990000",
|
||||
type: [5, 10],
|
||||
width: 3,
|
||||
dashOffset: 5,
|
||||
},
|
||||
name: "cl",
|
||||
yAxis: this.xbarCL.cl,
|
||||
},
|
||||
{
|
||||
lineStyle: {
|
||||
color: "#990000",
|
||||
type: "solid",
|
||||
width: 3,
|
||||
},
|
||||
name: "lcl",
|
||||
yAxis: this.xbarCL.lcl,
|
||||
},
|
||||
{
|
||||
lineStyle: {
|
||||
color: "#009900",
|
||||
type: "solid",
|
||||
width: 3,
|
||||
},
|
||||
name: "usl",
|
||||
yAxis: this.sl.usl,
|
||||
},
|
||||
{
|
||||
lineStyle: {
|
||||
color: "#009900",
|
||||
type: "solid",
|
||||
width: 3,
|
||||
},
|
||||
name: "sl",
|
||||
yAxis: this.sl.sl,
|
||||
},
|
||||
{
|
||||
lineStyle: {
|
||||
color: "#009900",
|
||||
width: 3,
|
||||
type: "solid",
|
||||
},
|
||||
name: "lsl",
|
||||
yAxis: this.sl.lsl,
|
||||
},
|
||||
],
|
||||
},
|
||||
markPoint: {
|
||||
// 标记
|
||||
data: [],
|
||||
symbolSize: 50, // 标记的大小
|
||||
label: {
|
||||
// 标记单位
|
||||
fontSize: 10,
|
||||
formatter: "{c}", // 单位
|
||||
},
|
||||
},
|
||||
markArea: {
|
||||
// 以y轴分割的区域
|
||||
silent: false,
|
||||
data: [
|
||||
[
|
||||
{
|
||||
name: "",
|
||||
itemStyle: {
|
||||
color: "#fb512c",
|
||||
opacity: 0.5,
|
||||
},
|
||||
yAxis: this.xbarCL.la[0],
|
||||
},
|
||||
{
|
||||
yAxis: this.xbarCL.la[1],
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: "",
|
||||
itemStyle: {
|
||||
color: "#ffcc33",
|
||||
opacity: 0.5,
|
||||
},
|
||||
yAxis: this.xbarCL.lb[0],
|
||||
},
|
||||
{
|
||||
yAxis: this.xbarCL.lb[1],
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: "",
|
||||
itemStyle: {
|
||||
color: "#52b854",
|
||||
opacity: 0.5,
|
||||
},
|
||||
yAxis: this.xbarCL.lc[0],
|
||||
},
|
||||
{
|
||||
yAxis: this.xbarCL.uc[1],
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: "",
|
||||
itemStyle: {
|
||||
color: "#ffcc33",
|
||||
opacity: 0.5,
|
||||
},
|
||||
yAxis: this.xbarCL.ub[0],
|
||||
},
|
||||
{
|
||||
yAxis: this.xbarCL.ub[1],
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: "",
|
||||
itemStyle: {
|
||||
color: "#fb512c",
|
||||
opacity: 0.5,
|
||||
},
|
||||
yAxis: this.xbarCL.ua[0],
|
||||
},
|
||||
{
|
||||
yAxis: this.xbarCL.ua[1],
|
||||
},
|
||||
],
|
||||
],
|
||||
},
|
||||
// areaStyle: {},
|
||||
data: this.mrGraphEntity.list?.map((item) => {
|
||||
const obj = {
|
||||
position: item.position,
|
||||
value: item[this.upLine[this.lineIndex].name],
|
||||
sRule: item[this.upLine[this.lineIndex].rules],
|
||||
sl:`ucl-${this.xbarCL.ucl.toFixed(2)} cl-${this.xbarCL.cl.toFixed(2)} lcl-${this.xbarCL.lcl.toFixed(2)} `
|
||||
};
|
||||
return obj;
|
||||
}),
|
||||
},
|
||||
{
|
||||
name: this.yName2,
|
||||
type: "line",
|
||||
xAxisIndex: 1,
|
||||
yAxisIndex: 0,
|
||||
type: "line",
|
||||
smooth: true,
|
||||
symbol: "emptyDiamond", // 设定为实心点
|
||||
symbolSize: 10,
|
||||
lineStyle: {
|
||||
// color: '#5470C6', // 这里不能设置颜色,不然会以这个为准,设置的范围变色将不起作用
|
||||
width: 1,
|
||||
},
|
||||
markLine: {
|
||||
// 最大值最小值均值线
|
||||
symbol: "none",
|
||||
label: {
|
||||
normal: {
|
||||
show: true,
|
||||
position: "end",
|
||||
formatter: "{name|{b}}--{c}",
|
||||
rich: {
|
||||
name: {
|
||||
color: "blue",
|
||||
fontSize: 16,
|
||||
fontWeight: 400,
|
||||
},
|
||||
},
|
||||
textStyle: {
|
||||
color: "black", //标注线终点文字颜色
|
||||
fontSize: 14,
|
||||
fontWeight: 400,
|
||||
},
|
||||
},
|
||||
},
|
||||
data: [
|
||||
{
|
||||
lineStyle: {
|
||||
color: "#990000",
|
||||
type: "solid",
|
||||
width: 3,
|
||||
},
|
||||
name: "ucl",
|
||||
yAxis: this.rcl.ucl,
|
||||
},
|
||||
{
|
||||
lineStyle: {
|
||||
color: "#990000",
|
||||
width: 3,
|
||||
type: [5, 10],
|
||||
dashOffset: 5,
|
||||
},
|
||||
name: "cl",
|
||||
yAxis: this.rcl.cl,
|
||||
},
|
||||
{
|
||||
lineStyle: {
|
||||
color: "#990000",
|
||||
width: 3,
|
||||
type: "solid",
|
||||
},
|
||||
name: "lcl",
|
||||
yAxis: this.rcl.lcl,
|
||||
},
|
||||
],
|
||||
},
|
||||
markPoint: {
|
||||
// 标记
|
||||
data: [],
|
||||
symbolSize: 50, // 标记的大小
|
||||
label: {
|
||||
// 标记单位
|
||||
fontSize: 10,
|
||||
formatter: "{c}", // 单位
|
||||
},
|
||||
},
|
||||
// areaStyle: {},
|
||||
data: this.mrGraphEntity.list?.map((item) => {
|
||||
const obj = {
|
||||
position: item.position,
|
||||
value: item[this.lowLine[this.lineIndex].name],
|
||||
sRule: item[this.lowLine[this.lineIndex].rules],
|
||||
sl:`ucl-${this.rcl.ucl.toFixed(2)} cl-${this.rcl.cl.toFixed(2)} lcl-${this.rcl.lcl.toFixed(2)} `
|
||||
};
|
||||
return obj;
|
||||
}),
|
||||
},
|
||||
],
|
||||
};
|
||||
this.mrGraphEntity.list?.forEach((item, index) => {
|
||||
if (item[this.lowLine[this.lineIndex].rules].length) {
|
||||
option.visualMap[1].pieces.push({
|
||||
gte: index,
|
||||
lt: index + 1,
|
||||
color: "red",
|
||||
});
|
||||
option.series[1].markPoint.data.push({
|
||||
value: item[this.lowLine[this.lineIndex].name],
|
||||
coord: [index, item[this.lowLine[this.lineIndex].name]],
|
||||
});
|
||||
}
|
||||
});
|
||||
this.mrGraphEntity.list?.forEach((item, index) => {
|
||||
if (item[this.upLine[this.lineIndex].rules].length) {
|
||||
option.visualMap[0].pieces.push({
|
||||
gte: index,
|
||||
lt: index + 1,
|
||||
color: "red",
|
||||
});
|
||||
option.series[0].markPoint.data.push({
|
||||
value: item[this.upLine[this.lineIndex].name],
|
||||
coord: [index, item[this.upLine[this.lineIndex].name]],
|
||||
});
|
||||
}
|
||||
});
|
||||
this.chartLine1 = echarts.init(document.getElementById(this.chartLineName));
|
||||
this.chartLine1.setOption(option);
|
||||
window.addEventListener("resize", () => {
|
||||
this.chartLine1.resize();
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.mod-demo-echarts {
|
||||
.chart-box {
|
||||
min-height: 700px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
}
|
||||
</style>
|
239
src/views/process-inspection/charts/echart-3line.vue
Normal file
239
src/views/process-inspection/charts/echart-3line.vue
Normal file
@ -0,0 +1,239 @@
|
||||
<template>
|
||||
<div class="mod-demo-echarts">
|
||||
<div :id="chartLineName" class="chart-box"></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as echarts from "echarts";
|
||||
//import testdata from './testdata'
|
||||
export default {
|
||||
props: {
|
||||
title: {
|
||||
type: String,
|
||||
},
|
||||
chartLineName: {
|
||||
type: String,
|
||||
default: "echartLine",
|
||||
},
|
||||
yName: {
|
||||
type: String,
|
||||
},
|
||||
dataList: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return [];
|
||||
},
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
ruleList: [
|
||||
"违反规则一:控制图上有 1 个点位于三倍标准差以外",
|
||||
"违反规则二:连续 9 点落在中心线的用一侧",
|
||||
"违反规则三:连续 6 点递增或者递减",
|
||||
"违反规则四:连续 14 点中 相邻点 交替上下",
|
||||
"违反规则五:连续 3 点中 有 2 点 落在中心线同一侧,B区以外",
|
||||
"违反规则六:连续 5 点中 有 4点 落在中心线同一侧,C区以外",
|
||||
"违反规则七:连续 15 点 落在中心线两侧的C区内",
|
||||
"违反规则八:连续 8 点 落在中心线两侧,且无一点在C区内",
|
||||
"违反规则九:有 1 点落在规格线以外",
|
||||
"违反规则十:CPK小于目标值",
|
||||
],
|
||||
//testdata
|
||||
};
|
||||
},
|
||||
mounted() {},
|
||||
activated() {
|
||||
// 由于给echart添加了resize事件, 在组件激活时需要重新resize绘画一次, 否则出现空白bug
|
||||
if (this.chartLine) {
|
||||
this.chartLine.resize();
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 折线图
|
||||
initChartLine() {
|
||||
var option = {
|
||||
title: {
|
||||
text: this.title,
|
||||
},
|
||||
legend: {
|
||||
data: [this.title, "LCL", "CL", "UCL"],
|
||||
},
|
||||
tooltip: {
|
||||
// 悬浮提示框
|
||||
trigger: "axis",
|
||||
boundaryGap: false,
|
||||
axisPointer: {
|
||||
type: "cross",
|
||||
label: {
|
||||
backgroundColor: "#6a7985",
|
||||
},
|
||||
},
|
||||
formatter: (e) => {
|
||||
return `
|
||||
点位坐标: ${e[0].data.position}<br/>
|
||||
${e[0].marker} 数值: ${e[0].data.value}<br/>
|
||||
${e[0].marker} 规格: ${e[0].data.sl}<br/>
|
||||
${e[0].marker} 名称:${e[0].data.name}
|
||||
`;
|
||||
},
|
||||
},
|
||||
toolbox: {
|
||||
feature: {
|
||||
dataView: { show: true, readOnly: false },
|
||||
magicType: { show: true, type: ["line", "bar"] },
|
||||
restore: { show: true },
|
||||
saveAsImage: { show: true },
|
||||
},
|
||||
},
|
||||
grid: {
|
||||
// 折线图内边距
|
||||
left: "3%",
|
||||
right: "4%",
|
||||
bottom: "7%",
|
||||
containLabel: true,
|
||||
},
|
||||
xAxis: {
|
||||
type: "category",
|
||||
boundaryGap: false,
|
||||
},
|
||||
yAxis: {
|
||||
type: "value",
|
||||
name: this.yName,
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
//color: colors[2]
|
||||
},
|
||||
},
|
||||
axisTick: {
|
||||
show: true,
|
||||
},
|
||||
axisLabel: {
|
||||
formatter: "{value}",
|
||||
},
|
||||
},
|
||||
dataZoom: [
|
||||
// 轴放大
|
||||
{
|
||||
show: true,
|
||||
realtime: true,
|
||||
start: 0,
|
||||
end: 100,
|
||||
xAxisIndex: 0,
|
||||
},
|
||||
{
|
||||
type: "inside",
|
||||
realtime: true,
|
||||
start: 0,
|
||||
end: 100,
|
||||
xAxisIndex: 0,
|
||||
},
|
||||
],
|
||||
series: [
|
||||
{
|
||||
name: this.title,
|
||||
type: "line",
|
||||
lineStyle: {
|
||||
color: "#5470c6",
|
||||
},
|
||||
markArea: {
|
||||
// 以y轴分割的区域
|
||||
silent: false,
|
||||
data: [
|
||||
],
|
||||
},
|
||||
data: this.dataList.map((item) => {
|
||||
const obj = {
|
||||
position: item.position,
|
||||
value: item.value,
|
||||
name: item.name,
|
||||
sl:`ucl-${item.controlLimit.ucl.toFixed(2)} cl-${item.controlLimit.cl.toFixed(2)} lcl-${item.controlLimit.lcl.toFixed(2)} `
|
||||
};
|
||||
return obj;
|
||||
}),
|
||||
},
|
||||
{
|
||||
name: "LCL",
|
||||
type: "line",
|
||||
step: "middle",
|
||||
showSymbol: false,
|
||||
lineStyle: {
|
||||
color: "#91cc75",
|
||||
},
|
||||
endLabel: {
|
||||
formatter: "LCL",
|
||||
show: true,
|
||||
},
|
||||
data: this.dataList.map((item) => {
|
||||
const obj = {
|
||||
position: item.position,
|
||||
value: item.controlLimit.lcl,
|
||||
name: item.name,
|
||||
};
|
||||
return obj;
|
||||
}),
|
||||
},
|
||||
{
|
||||
name: "CL",
|
||||
type: "line",
|
||||
step: "middle",
|
||||
showSymbol: false,
|
||||
lineStyle: {
|
||||
color: "#ee6666",
|
||||
},
|
||||
endLabel: {
|
||||
formatter: "CL",
|
||||
show: true,
|
||||
},
|
||||
data: this.dataList.map((item) => {
|
||||
const obj = {
|
||||
position: item.position,
|
||||
value: item.controlLimit.cl,
|
||||
name: item.name,
|
||||
};
|
||||
return obj;
|
||||
}),
|
||||
},
|
||||
{
|
||||
name: "UCL",
|
||||
type: "line",
|
||||
step: "middle",
|
||||
showSymbol: false,
|
||||
lineStyle: {
|
||||
color: "#fac858",
|
||||
},
|
||||
endLabel: {
|
||||
formatter: "UCL",
|
||||
show: true,
|
||||
},
|
||||
data: this.dataList.map((item) => {
|
||||
const obj = {
|
||||
position: item.position,
|
||||
value: item.controlLimit.ucl,
|
||||
name: item.name,
|
||||
};
|
||||
return obj;
|
||||
}),
|
||||
},
|
||||
],
|
||||
};
|
||||
this.chartLine = echarts.init(document.getElementById(this.chartLineName));
|
||||
this.chartLine.setOption(option);
|
||||
window.addEventListener("resize", () => {
|
||||
this.chartLine.resize();
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.mod-demo-echarts {
|
||||
.chart-box {
|
||||
min-height: 700px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
}
|
||||
</style>
|
274
src/views/process-inspection/components/detail-table.vue
Normal file
274
src/views/process-inspection/components/detail-table.vue
Normal file
@ -0,0 +1,274 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2021-11-18 14:16:25
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-12-13 13:43:23
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
<div>
|
||||
<div style="margin-left:20px">
|
||||
<el-button size="small" type="primary" @click="addSample()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
|
||||
添加样本组
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="Submit()">
|
||||
提交
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
:data="dataList"
|
||||
border
|
||||
:stripe="true"
|
||||
:header-cell-style="{
|
||||
background: '#eef1f6',
|
||||
color: '#606266',
|
||||
height: '56px',
|
||||
}"
|
||||
:height="'80vh'"
|
||||
v-loading="dataListLoading"
|
||||
style="width: 100%;"
|
||||
>
|
||||
<el-table-column
|
||||
v-for="item in tableProps"
|
||||
:label="item.label"
|
||||
:key="item.prop"
|
||||
align="center"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.$index > 6">
|
||||
<el-checkbox
|
||||
v-if="item.fType === 2"
|
||||
v-model="scope.row[item.prop]"
|
||||
true-label="1"
|
||||
false-label="0"
|
||||
/>
|
||||
<el-input
|
||||
v-else
|
||||
v-model="scope.row[item.prop]"
|
||||
size="small"
|
||||
clearable
|
||||
:readonly="
|
||||
item.label === '取样时间' || item.label === '样本号' || item.label === '批次号'
|
||||
"
|
||||
:placeholder="item.label"
|
||||
/>
|
||||
</span>
|
||||
<span v-else>{{ scope.row[item.prop] }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
featuresList: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
[];
|
||||
},
|
||||
},
|
||||
workingProcedureName: {
|
||||
type: String,
|
||||
},
|
||||
inspectionSheetId: {
|
||||
type: String,
|
||||
},
|
||||
numberOfGroupedSamples: {
|
||||
type: Number,
|
||||
default: 1,
|
||||
},
|
||||
batchNum: {
|
||||
type: String,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
dataListLoading: false,
|
||||
dataList: [],
|
||||
tableProps: [],
|
||||
sampleNum: 1,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
this.dataList.splice(0, this.dataList.length);
|
||||
this.dataList = [
|
||||
{
|
||||
sampleNumber: "工序",
|
||||
},
|
||||
{
|
||||
sampleNumber: "特性类型",
|
||||
},
|
||||
{
|
||||
sampleNumber: "规格下限",
|
||||
},
|
||||
{
|
||||
sampleNumber: "规格上限",
|
||||
},
|
||||
{
|
||||
sampleNumber: "抽样数量",
|
||||
},
|
||||
{
|
||||
sampleNumber: "参数规格",
|
||||
},
|
||||
{
|
||||
sampleNumber: "频率",
|
||||
},
|
||||
];
|
||||
this.tableProps = [
|
||||
{
|
||||
prop: "sampleNumber",
|
||||
label: "样本号",
|
||||
},
|
||||
{
|
||||
prop: "sampleTime",
|
||||
label: "取样时间",
|
||||
},
|
||||
{
|
||||
prop: "batchNum",
|
||||
label: "批次号",
|
||||
},
|
||||
];
|
||||
this.featuresList.forEach((item) => {
|
||||
let obj = {
|
||||
prop: item.name,
|
||||
label: item.name,
|
||||
fType: item.type,
|
||||
};
|
||||
this.tableProps.push(obj);
|
||||
this.dataList[0][item.name] = this.workingProcedureName;
|
||||
this.dataList[1][item.name] = { 1: "计量型", 2: "计数型" }[item.type];
|
||||
this.dataList[2][item.name] = item.lsl;
|
||||
this.dataList[3][item.name] = item.usl;
|
||||
this.dataList[4][item.name] = item.sampleSize;
|
||||
this.dataList[5][item.name] = item.specifications;
|
||||
this.dataList[6][item.name] = item.samplingFrequency;
|
||||
});
|
||||
this.getInfluxdb();
|
||||
this.dataListLoading = false;
|
||||
this.$nextTick(() => {});
|
||||
},
|
||||
getInfluxdb() {
|
||||
this.$http
|
||||
.post(
|
||||
`/processInspection/inspectionSheet/getFluxParamList?inspectionSheetId=${this.inspectionSheetId}`
|
||||
)
|
||||
.then((res) => {
|
||||
res.data.forEach((item) => {
|
||||
item.sampleTime = this.formatDateTime(item.sampleTime);
|
||||
// item.events.forEach((item1) => {
|
||||
// item[item1.argName] = item1.argValue;
|
||||
// });
|
||||
Object.assign(item, JSON.parse(item.jsonData));
|
||||
this.dataList.push(item);
|
||||
});
|
||||
this.dataList.concat(res.data);
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
addSample() {
|
||||
let arr = [];
|
||||
for (let i = 1; i <= parseInt(this.numberOfGroupedSamples); i++) {
|
||||
let sampleNum = "";
|
||||
if (i < 10) {
|
||||
sampleNum = this.getSampleNum("0" + i);
|
||||
} else {
|
||||
sampleNum = this.getSampleNum(i);
|
||||
}
|
||||
let obj = {
|
||||
inspectionSheetId: this.inspectionSheetId,
|
||||
workingProcedureName: this.workingProcedureName,
|
||||
sampleNumber: sampleNum,
|
||||
sampleTime: new Date(),
|
||||
batchNum: this.batchNum,
|
||||
events: [],
|
||||
};
|
||||
this.featuresList.forEach((item) => {
|
||||
let obj1 = {
|
||||
time: new Date(),
|
||||
inspectionSheetId: this.inspectionSheetId,
|
||||
sampleNumber: sampleNum,
|
||||
transationId: "",
|
||||
};
|
||||
if (item.type === 1) {
|
||||
obj1.argName = item.name;
|
||||
obj1.argValue = "";
|
||||
} else {
|
||||
obj1.argName = item.name;
|
||||
obj1.argValue = 1;
|
||||
}
|
||||
obj.events.push(obj1);
|
||||
});
|
||||
// obj.jsonData = JSON.stringify(obj.jsonData);
|
||||
arr.push(obj);
|
||||
}
|
||||
this.$http
|
||||
.post("/processInspection/inspectionSheet/saveFluxParamList2", arr)
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.$nextTick(() => {
|
||||
this.$emit("refreshDataForm", this.inspectionSheetId);
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
Submit() {
|
||||
let arr = JSON.parse(JSON.stringify(this.dataList.slice(7)));
|
||||
arr.forEach((item) => {
|
||||
(item.workingProcedureName = this.workingProcedureName),
|
||||
(item.sampleTime = new Date(item.sampleTime));
|
||||
item.events=[]
|
||||
this.featuresList.forEach((item1) => {
|
||||
let obj1 = {
|
||||
time: new Date(item.sampleTime),
|
||||
inspectionSheetId: this.inspectionSheetId,
|
||||
sampleNumber: item.sampleNumber,
|
||||
transationId: "",
|
||||
};
|
||||
obj1.argName = item1.name;
|
||||
obj1.argValue = item[item1.name];
|
||||
item.events.push(obj1);
|
||||
});
|
||||
});
|
||||
this.$http
|
||||
.post("/processInspection/inspectionSheet/saveFluxParamList2", arr)
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.init();
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
getSampleNum(num) {
|
||||
this.sampleNum = Math.ceil(this.dataList.slice(7).length / this.numberOfGroupedSamples) + 1;
|
||||
return `00${this.sampleNum}${num}`;
|
||||
},
|
||||
formatDateTime(val) {
|
||||
let date = "";
|
||||
if (val) {
|
||||
date = new Date(val);
|
||||
} else {
|
||||
date = new Date();
|
||||
}
|
||||
let y = date.getFullYear();
|
||||
let MM = date.getMonth() + 1;
|
||||
MM = MM < 10 ? "0" + MM : MM;
|
||||
let d = date.getDate();
|
||||
d = d < 10 ? "0" + d : d;
|
||||
let h = date.getHours();
|
||||
h = h < 10 ? "0" + h : h;
|
||||
let m = date.getMinutes();
|
||||
m = m < 10 ? "0" + m : m;
|
||||
let s = date.getSeconds();
|
||||
s = s < 10 ? "0" + s : s;
|
||||
return y + "-" + MM + "-" + d + " " + h + ":" + m + ":" + s;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
83
src/views/process-inspection/components/features-table.vue
Normal file
83
src/views/process-inspection/components/features-table.vue
Normal file
@ -0,0 +1,83 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2021-11-18 14:16:25
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-12-09 08:59:32
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
<el-table
|
||||
:data="dataList"
|
||||
:stripe="true"
|
||||
:header-cell-style="{
|
||||
background: '#eef1f6',
|
||||
color: '#606266',
|
||||
height: '56px',
|
||||
}"
|
||||
v-loading="dataListLoading"
|
||||
style="width: 100%;"
|
||||
>
|
||||
<el-table-column type="index" header-align="center" align="center" label="序号" width="50">
|
||||
</el-table-column>
|
||||
<el-table-column prop="workingProcedureName" align="center" label="工序"> </el-table-column>
|
||||
<el-table-column prop="name" align="center" label="特性"> </el-table-column>
|
||||
<el-table-column prop="defectLevel" align="center" label="缺陷等级">
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
{ 1: '致命缺陷',2: '严重缺陷',3: '轻微缺陷' }[
|
||||
scope.row.defectLevel
|
||||
]
|
||||
}}</span>
|
||||
</template> </el-table-column>
|
||||
<el-table-column prop="type" align="center" label="特性类型">
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
{ 1: "计量型", 2: "计数型"}[
|
||||
scope.row.type
|
||||
]
|
||||
}}</span>
|
||||
</template></el-table-column>
|
||||
<el-table-column prop="measureToolName" align="center" label="量具"> </el-table-column>
|
||||
<el-table-column prop="usl" align="center" label="USL"> </el-table-column>
|
||||
<el-table-column prop="sl" align="center" label="SL"> </el-table-column>
|
||||
<el-table-column prop="lsl" align="center" label="LSL"> </el-table-column>
|
||||
<el-table-column prop="black1" align="center" label="记录数量"> </el-table-column>
|
||||
<el-table-column prop="black2" align="center" label="最大值"> </el-table-column>
|
||||
<el-table-column prop="black3" align="center" label="最小值"> </el-table-column>
|
||||
<el-table-column prop="black4" align="center" label="均值"> </el-table-column>
|
||||
<el-table-column prop="black5" align="center" label="检验结果"> </el-table-column>
|
||||
<el-table-column prop="black6" align="center" label="缺陷数量"> </el-table-column>
|
||||
</el-table>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
featuresList: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
[];
|
||||
},
|
||||
},
|
||||
workingProcedureName: {
|
||||
type: String,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
dataListLoading: false,
|
||||
dataList: [],
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
this.featuresList.forEach((item) => {
|
||||
item.workingProcedureName = this.workingProcedureName;
|
||||
});
|
||||
this.dataList = JSON.parse(JSON.stringify(this.featuresList));
|
||||
this.dataListLoading = false;
|
||||
this.$nextTick(() => {});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
432
src/views/process-inspection/components/generalOperation-add.vue
Normal file
432
src/views/process-inspection/components/generalOperation-add.vue
Normal file
@ -0,0 +1,432 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2021-11-18 14:16:25
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-12-12 11:32:04
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
<el-drawer :visible.sync="visible" size="90%" class="drawerClass" :before-close="handleClose">
|
||||
<template slot="title">
|
||||
<h3 style="margin:10px 20px">{{ !dataForm.id ? "登记" : "修改" }}</h3>
|
||||
</template>
|
||||
<el-collapse value="1" @change="handleChange">
|
||||
<el-collapse-item name="1">
|
||||
<template slot="title">
|
||||
<h3 style="margin-left:20px">检验信息</h3>
|
||||
</template>
|
||||
<el-row :gutter="6">
|
||||
<el-form
|
||||
:model="dataForm"
|
||||
:rules="dataRule"
|
||||
ref="dataForm"
|
||||
:disabled="!dataForm.id ? false : true"
|
||||
@keyup.enter.native="dataFormSubmit()"
|
||||
label-width="100px"
|
||||
>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="检验站点" prop="inspectionSite">
|
||||
<el-input v-model="dataForm.inspectionSite" placeholder="检验站点"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="开单时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="dataForm.createTime"
|
||||
type="datetime"
|
||||
readonly
|
||||
format="yyyy-MM-dd hh:mm:ss"
|
||||
value-format="yyyy-MM-dd hh:mm:ss"
|
||||
placeholder="选择日期时间"
|
||||
:style="{ width: '100%' }"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="订单号" prop="orderNumber">
|
||||
<el-input v-model="dataForm.orderNumber" placeholder="订单号"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="批次号" prop="batchNumber">
|
||||
<el-input v-model="dataForm.batchNumber" placeholder="批次号"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="产品" prop="productId">
|
||||
<el-select
|
||||
v-model="dataForm.productId"
|
||||
@change="getWorkingprocedureByProductId"
|
||||
placeholder="请选择产品"
|
||||
filterable
|
||||
clearable
|
||||
:style="{ width: '100%' }"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in optionArr.arr0"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:disabled="item.disabled"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="检验阶段" prop="inspectionStage">
|
||||
<el-select
|
||||
v-model="dataForm.inspectionStage"
|
||||
:style="{ width: '100%' }"
|
||||
@change="$forceUpdate()"
|
||||
clearable
|
||||
placeholder="请选择检验阶段"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in inspectionStageArr"
|
||||
:key="item.name"
|
||||
:label="item.name"
|
||||
:value="item.value"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="工序" prop="workingProcedureId">
|
||||
<el-select
|
||||
v-model="dataForm.workingProcedureId"
|
||||
@change="$forceUpdate()"
|
||||
placeholder="请选择工序"
|
||||
filterable
|
||||
clearable
|
||||
:style="{ width: '100%' }"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in optionArr.arr4"
|
||||
:key="item.workingProcedureId"
|
||||
:label="item.workingProcedureName"
|
||||
:value="item.workingProcedureId"
|
||||
:disabled="item.disabled"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="机台号" prop="machineId">
|
||||
<el-select
|
||||
v-model="dataForm.machineId"
|
||||
placeholder="请选择机台号"
|
||||
filterable
|
||||
clearable
|
||||
:style="{ width: '100%' }"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in optionArr.arr1"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:disabled="item.disabled"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="分组样本数" prop="numberOfGroupedSamples">
|
||||
<el-input
|
||||
v-model="dataForm.numberOfGroupedSamples"
|
||||
placeholder="分组样本数"
|
||||
disabled
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="样本大小" prop="numberOfSamples">
|
||||
<el-input
|
||||
v-model="dataForm.numberOfSamples"
|
||||
placeholder="样本大小"
|
||||
disabled
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="缺陷数量" prop="numberOfDefects">
|
||||
<el-input
|
||||
v-model="dataForm.numberOfDefects"
|
||||
placeholder="缺陷数量"
|
||||
disabled
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="不良数量" prop="defectiveQuantity">
|
||||
<el-input
|
||||
v-model="dataForm.defectiveQuantity"
|
||||
placeholder="不良数量"
|
||||
disabled
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="班次" prop="shiftId">
|
||||
<el-select
|
||||
v-model="dataForm.shiftId"
|
||||
placeholder="请选择班次"
|
||||
filterable
|
||||
clearable
|
||||
:style="{ width: '100%' }"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in optionArr.arr2"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:disabled="item.disabled"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="生产人" prop="producer">
|
||||
<el-select
|
||||
:style="{ width: '100%' }"
|
||||
v-model="dataForm.producer"
|
||||
placeholder="请选择生产人"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in optionArr.arr3"
|
||||
:key="item.id"
|
||||
:label="item.realName"
|
||||
:value="item.id"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="检验人" prop="inspector">
|
||||
<el-select
|
||||
:style="{ width: '100%' }"
|
||||
v-model="dataForm.inspector"
|
||||
placeholder="请选择检验人"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in optionArr.arr3"
|
||||
:key="item.id"
|
||||
:label="item.realName"
|
||||
:value="item.id"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-form>
|
||||
</el-row>
|
||||
<el-row v-if="!dataForm.id">
|
||||
<span style="margin-left:20px">
|
||||
<el-button size="medium" type="primary" @click="dataFormSubmit()">开单</el-button>
|
||||
<el-button size="medium" @click="visible = false">关闭</el-button>
|
||||
</span>
|
||||
</el-row>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item name="2" v-if="dataForm.id">
|
||||
<template slot="title">
|
||||
<h3 style="margin-left:20px">特性信息</h3>
|
||||
</template>
|
||||
<features-table
|
||||
v-if="featuresTableVisible"
|
||||
:features-list="featuresList"
|
||||
:workingProcedureName="workingProcedureName"
|
||||
ref="featuresTable"
|
||||
></features-table>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
<div v-if="dataForm.id">
|
||||
<el-divider content-position="left"><h3 style="font-size:15px">详情</h3></el-divider>
|
||||
<detail-table
|
||||
v-loading="detailLoading"
|
||||
:inspectionSheetId="dataForm.id"
|
||||
:batchNum="dataForm.batchNumber"
|
||||
:numberOfGroupedSamples="dataForm.numberOfGroupedSamples"
|
||||
:features-list="featuresList"
|
||||
:workingProcedureName="workingProcedureName"
|
||||
ref="detailTable"
|
||||
@refreshDataForm="init"
|
||||
></detail-table>
|
||||
</div>
|
||||
</el-drawer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import basicAdd from "@/mixins/basic-add";
|
||||
import featuresTable from "./features-table";
|
||||
import detailTable from "./detail-table";
|
||||
export default {
|
||||
mixins: [basicAdd],
|
||||
props: {
|
||||
optionArr: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
{
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
infoURL: "/processInspection/inspectionSheet",
|
||||
},
|
||||
inspectionStageArr: [],
|
||||
dataForm: {
|
||||
id: "",
|
||||
inspectionSite: "",
|
||||
createTime: new Date(),
|
||||
orderNumber: "",
|
||||
batchNumber: "",
|
||||
productId: "",
|
||||
inspectionStage: "",
|
||||
workingProcedureId: "",
|
||||
machineId: "",
|
||||
shiftId: "",
|
||||
numberOfGroupedSamples: 0,
|
||||
numberOfSamples: "",
|
||||
numberOfDefects: "",
|
||||
defectiveQuantity: "",
|
||||
producer: "",
|
||||
inspector: "",
|
||||
},
|
||||
featuresTableVisible: false,
|
||||
featuresList: [],
|
||||
workingProcedureName: "",
|
||||
detailLoading: false,
|
||||
setData: true,
|
||||
dataRule: {
|
||||
productId: [{ required: true, message: "产品不能为空", trigger: "change" }],
|
||||
inspectionStage: [{ required: true, message: "检验阶段不能为空", trigger: "change" }],
|
||||
workingProcedureId: [{ required: true, message: "工序不能为空", trigger: "change" }],
|
||||
},
|
||||
};
|
||||
},
|
||||
components: {
|
||||
featuresTable,
|
||||
detailTable,
|
||||
},
|
||||
methods: {
|
||||
getWorkingprocedureByProductId(val) {
|
||||
this.dataForm.inspectionStage = "";
|
||||
this.dataForm.workingProcedureId = "";
|
||||
this.getWorkingprocedureArr(val);
|
||||
},
|
||||
getWorkingprocedureArr(val) {
|
||||
if (val) {
|
||||
const obj = this.optionArr.arr0.find((item) => {
|
||||
return item.id === val;
|
||||
});
|
||||
const obj1 = { 1: "进货检验", 2: "过程检验", 3: "成品检验", 4: "出货检验" };
|
||||
const inspectionStage = obj.inspectionStage.split(",");
|
||||
this.inspectionStageArr = [];
|
||||
inspectionStage.forEach((item) => {
|
||||
this.inspectionStageArr.push({
|
||||
value: item,
|
||||
name: obj1[item],
|
||||
});
|
||||
});
|
||||
|
||||
this.$http
|
||||
.get(`/basic/productWorkingprocedureRelation/getWorkingprocedureByProductId/${val}`)
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.$set(this.optionArr, "arr4", res.data);
|
||||
if (this.dataForm.id) {
|
||||
this.workingProcedureName = this.optionArr.arr4.find((item) => {
|
||||
return item.workingProcedureId === this.dataForm.workingProcedureId;
|
||||
}).workingProcedureName;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.detailTable.init();
|
||||
});
|
||||
this.detailLoading = false;
|
||||
}
|
||||
})
|
||||
.catch(() => {});
|
||||
} else {
|
||||
this.inspectionStageArr = [];
|
||||
this.$set(this.optionArr, "arr4", []);
|
||||
}
|
||||
},
|
||||
setDataForm() {
|
||||
this.detailLoading = true;
|
||||
const obj = {
|
||||
inspectionStage: this.dataForm.inspectionStage,
|
||||
productId: this.dataForm.productId,
|
||||
workingProcedureId: this.dataForm.workingProcedureId,
|
||||
};
|
||||
|
||||
this.$http
|
||||
.post("/processInspection/inspectionSheet/getInspectionSheetFeaturesList", obj)
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
this.featuresList = [];
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.featuresList = res.data;
|
||||
})
|
||||
.catch(() => {});
|
||||
this.dataForm.inspectionStage = String(this.dataForm.inspectionStage);
|
||||
this.getWorkingprocedureArr(this.dataForm.productId);
|
||||
},
|
||||
handleChange(val) {
|
||||
if (val.includes("2")) {
|
||||
this.featuresTableVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.featuresTable.init();
|
||||
});
|
||||
}
|
||||
},
|
||||
// 表单提交
|
||||
dataFormSubmit() {
|
||||
this.$refs["dataForm"].validate((valid) => {
|
||||
if (!valid) {
|
||||
return false;
|
||||
}
|
||||
this.$http[!this.dataForm.id ? "post" : "put"](
|
||||
"/processInspection/inspectionSheet",
|
||||
this.dataForm
|
||||
)
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.$message({
|
||||
message: this.$t("prompt.success"),
|
||||
type: "success",
|
||||
duration: 500,
|
||||
onClose: () => {
|
||||
this.init(res.data);
|
||||
},
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
});
|
||||
},
|
||||
handleClose(done) {
|
||||
this.$confirm("确认关闭?")
|
||||
.then((_) => {
|
||||
this.inspectionStageArr = [];
|
||||
this.$set(this.optionArr, "arr4", []);
|
||||
done();
|
||||
this.$emit("refreshDataList");
|
||||
})
|
||||
.catch((_) => {});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style scoped>
|
||||
.drawerClass >>> .el-drawer__header {
|
||||
margin-bottom: 0;
|
||||
padding: 0;
|
||||
}
|
||||
</style>
|
306
src/views/process-inspection/generalOperation.vue
Normal file
306
src/views/process-inspection/generalOperation.vue
Normal file
@ -0,0 +1,306 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2022-09-15 10:44:29
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-12-09 11:16:58
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<el-row :gutter="6" style="background-color:#e6f7ff;margin:-20px;padding-top:10px;margin-bottom:0">
|
||||
<el-form ref="dataForm" :model="dataForm" :rules="rules" size="small" label-width="80px">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="检验时间" prop="time">
|
||||
<el-date-picker
|
||||
type="daterange"
|
||||
v-model="time"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
:style="{ width: '100%' }"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
range-separator="-"
|
||||
clearable
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="检验站点" prop="inspectionSite">
|
||||
<el-input
|
||||
size="small"
|
||||
v-model="dataForm.inspectionSite"
|
||||
clearable
|
||||
placeholder="请输入检验站点"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="产品" prop="productId">
|
||||
<el-select
|
||||
v-model="dataForm.productId"
|
||||
@change="getWorkingprocedureByProductId"
|
||||
placeholder="请选择产品"
|
||||
filterable
|
||||
clearable
|
||||
:style="{ width: '100%' }"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in optionArr.arr0"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:disabled="item.disabled"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="工序" prop="workingProcedureId">
|
||||
<el-select
|
||||
v-model="dataForm.workingProcedureId"
|
||||
placeholder="请选择工序"
|
||||
filterable
|
||||
clearable
|
||||
@change="$forceUpdate()"
|
||||
:style="{ width: '100%' }"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in optionArr.arr4"
|
||||
:key="index"
|
||||
:label="item.workingProcedureName"
|
||||
:value="item.workingProcedureId"
|
||||
:disabled="item.disabled"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="机台号" prop="machineId">
|
||||
<el-select
|
||||
v-model="dataForm.machineId"
|
||||
placeholder="请选择机台号"
|
||||
filterable
|
||||
clearable
|
||||
:style="{ width: '100%' }"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in optionArr.arr1"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:disabled="item.disabled"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="批次号" prop="batchNumber">
|
||||
<el-input
|
||||
size="small"
|
||||
v-model="dataForm.batchNumber"
|
||||
clearable
|
||||
placeholder="请输入批次号"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="检验单号" prop="id">
|
||||
<el-input size="small" v-model="dataForm.id" clearable placeholder="请输入检验单号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="订单号" prop="orderNumber">
|
||||
<el-input
|
||||
size="small"
|
||||
v-model="dataForm.orderNumber"
|
||||
clearable
|
||||
placeholder="请输入订单号"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" :offset="12">
|
||||
<el-form-item style="float:right;padding-right:20px">
|
||||
<el-button size="small" @click="getDataList()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
|
||||
登记
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="exportHandle('通用作业')">
|
||||
<svg class="icon-svg">
|
||||
<use xlink:href="#导出"></use>
|
||||
</svg>
|
||||
导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-form>
|
||||
</el-row>
|
||||
<el-table
|
||||
:data="dataList"
|
||||
:stripe="true"
|
||||
:header-cell-style="{
|
||||
background: '#eef1f6',
|
||||
color: '#606266',
|
||||
height: '56px',
|
||||
}"
|
||||
v-loading="dataListLoading"
|
||||
style="width: 100%;"
|
||||
>
|
||||
<el-table-column prop="id" align="center" label="检验单号"> </el-table-column>
|
||||
<el-table-column prop="batchNumber" align="center" label="批次号"> </el-table-column>
|
||||
<el-table-column prop="inspectionStage" align="center" label="检验阶段">
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
{ 1: "进货检验", 2: "过程检验", 3: "成品检验", 4: "出货检验" }[
|
||||
scope.row.inspectionStage
|
||||
]
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="productName" align="center" label="产品名称"> </el-table-column>
|
||||
<el-table-column prop="machineName" align="center" label="机台"> </el-table-column>
|
||||
<el-table-column prop="workingProcedureName" align="center" label="工序"> </el-table-column>
|
||||
<el-table-column prop="createTime" align="center" label="检验时间"> </el-table-column>
|
||||
<el-table-column prop="shiftName" align="center" label="班次"> </el-table-column>
|
||||
<el-table-column prop="numberOfSamples" align="center" label="抽样数量"> </el-table-column>
|
||||
<el-table-column prop="numberOfDefects" align="center" label="缺陷数量"> </el-table-column>
|
||||
<el-table-column prop="defectiveQuantity" align="center" label="不良数量"> </el-table-column>
|
||||
<el-table-column prop="remark" align="center" label="备注"> </el-table-column>
|
||||
<el-table-column fixed="right" header-align="center" align="center" width="150" label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">
|
||||
<el-tooltip class="item" effect="dark" content="修改" placement="top">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-编辑"></use></svg>
|
||||
</el-tooltip>
|
||||
</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
style="color:red"
|
||||
size="small"
|
||||
@click="deleteHandle(scope.row.id, scope.row.id)"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" content="删除" placement="top">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-删除"></use></svg>
|
||||
</el-tooltip>
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-pagination
|
||||
@size-change="sizeChangeHandle"
|
||||
@current-change="currentChangeHandle"
|
||||
:current-page="pageIndex"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
:page-size="pageSize"
|
||||
:total="totalPage"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
>
|
||||
</el-pagination>
|
||||
<!-- 弹窗, 新增 / 修改 -->
|
||||
<add-or-update
|
||||
:optionArr="optionArr"
|
||||
v-if="addOrUpdateVisible"
|
||||
ref="addOrUpdate"
|
||||
@refreshDataList="getDataList"
|
||||
></add-or-update>
|
||||
</el-card>
|
||||
</template>
|
||||
<script>
|
||||
import processPage from "@/mixins/process-page";
|
||||
import AddOrUpdate from './components/generalOperation-add'
|
||||
export default {
|
||||
mixins: [processPage],
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
getDataListURL: "/processInspection/inspectionSheet/page",
|
||||
deleteURL: "/processInspection/inspectionSheet",
|
||||
exportUrl: "/processInspection/inspectionSheet/export",
|
||||
},
|
||||
optionArrUrl: [
|
||||
"/basic/product/page",
|
||||
"/basic/machine/page",
|
||||
"/basic/shift/page",
|
||||
"/sys/user/page",
|
||||
],
|
||||
optionArr: {},
|
||||
time: [],
|
||||
rules: {},
|
||||
};
|
||||
},
|
||||
components: {
|
||||
AddOrUpdate,
|
||||
},
|
||||
created() {},
|
||||
activated() {
|
||||
this.getArr();
|
||||
},
|
||||
methods: {
|
||||
getArr() {
|
||||
this.optionArrUrl.forEach((item, index) => {
|
||||
this.$http
|
||||
.get(item, {
|
||||
params: {
|
||||
page: 1,
|
||||
limit: 500,
|
||||
},
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.$set(this.optionArr, `arr${index}`, res.data.list);
|
||||
})
|
||||
.catch(() => {});
|
||||
});
|
||||
},
|
||||
getWorkingprocedureByProductId(val) {
|
||||
this.dataForm.workingProcedureId = ''
|
||||
if (val) {
|
||||
this.$http
|
||||
.get(`/basic/productWorkingprocedureRelation/getWorkingprocedureByProductId/${val}`)
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.$set(this.optionArr, "arr4", res.data);
|
||||
})
|
||||
.catch(() => {});
|
||||
}else{
|
||||
this.$set(this.optionArr, "arr4", []);
|
||||
}
|
||||
},
|
||||
getDataList() {
|
||||
this.dataListLoading = true;
|
||||
this.$http
|
||||
.get(this.urlOptions.getDataListURL, {
|
||||
params: {
|
||||
page: this.pageIndex,
|
||||
limit: this.pageSize,
|
||||
startTime: this.time && this.time.length > 0 ? this.time[0] : "",
|
||||
endTime: this.time && this.time.length > 0 ? this.time[1] : "",
|
||||
...this.dataForm,
|
||||
},
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
this.dataListLoading = false;
|
||||
if (res.code !== 0) {
|
||||
this.dataList = [];
|
||||
this.totalPage = 0;
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.dataList = res.data.list;
|
||||
this.totalPage = res.data.total;
|
||||
})
|
||||
.catch(() => {
|
||||
this.dataListLoading = false;
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style></style>
|
255
src/views/process-inspection/query-form.vue
Normal file
255
src/views/process-inspection/query-form.vue
Normal file
@ -0,0 +1,255 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2022-09-15 10:44:29
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-12-12 16:42:27
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
<el-row :gutter="6" style="background-color:#e6f7ff;margin:-20px;padding-top:10px;margin-bottom:0">
|
||||
<el-form ref="dataForm" :model="dataForm" :rules="rules" size="small" label-width="80px">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="检验时间" prop="field101">
|
||||
<el-date-picker
|
||||
type="daterange"
|
||||
v-model="dataForm.field101"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
:style="{ width: '100%' }"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
range-separator="-"
|
||||
clearable
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6" v-if="false">
|
||||
<el-form-item label="工厂" prop="field102">
|
||||
<el-select
|
||||
v-model="dataForm.field102"
|
||||
placeholder="请选择工厂"
|
||||
filterable
|
||||
clearable
|
||||
:style="{ width: '100%' }"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in field102Options"
|
||||
:key="index"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
:disabled="item.disabled"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="检验类型" prop="field103">
|
||||
<el-select
|
||||
v-model="dataForm.field103"
|
||||
placeholder="请选择检验类型"
|
||||
filterable
|
||||
clearable
|
||||
:style="{ width: '100%' }"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in field103Options"
|
||||
:key="index"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
:disabled="item.disabled"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="产品" prop="productId">
|
||||
<el-select
|
||||
v-model="dataForm.productId"
|
||||
placeholder="请选择产品"
|
||||
filterable
|
||||
clearable
|
||||
:style="{ width: '100%' }"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in optionArr.arr0"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:disabled="item.disabled"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="工艺流程" prop="field105">
|
||||
<el-select
|
||||
v-model="dataForm.field105"
|
||||
placeholder="请选择工艺流程"
|
||||
filterable
|
||||
clearable
|
||||
:style="{ width: '100%' }"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in optionArr.arr1"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:disabled="item.disabled"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="特性" prop="field106">
|
||||
<el-select
|
||||
v-model="dataForm.field106"
|
||||
placeholder="请选择特性"
|
||||
filterable
|
||||
clearable
|
||||
:style="{ width: '100%' }"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in optionArr.arr2"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:disabled="item.disabled"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="样本大小" prop="field111">
|
||||
<el-input-number
|
||||
v-model="dataForm.field111"
|
||||
placeholder="样本大小"
|
||||
:step="1"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item>
|
||||
<el-button size="small" @click="getDataList()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="rawData()">
|
||||
<svg class="icon-svg"><use xlink:href="#历史记录"></use></svg>
|
||||
原始数据
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="exportHandle()">
|
||||
<svg class="icon-svg">
|
||||
<use xlink:href="#导出"></use>
|
||||
</svg>
|
||||
导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-form>
|
||||
</el-row>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
pageName: {
|
||||
type: String,
|
||||
default: () => {
|
||||
return "";
|
||||
},
|
||||
},
|
||||
dataForm: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
},
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
optionArrUrl: [
|
||||
"/basic/product/page",
|
||||
"/basic/workingProcedure/page",
|
||||
],
|
||||
optionArr: {},
|
||||
rules: {
|
||||
productId: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择产品",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
field106: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择特性",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
},
|
||||
field103Options: [
|
||||
{
|
||||
label: "进货检验",
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
label: "过程检验",
|
||||
value: 2,
|
||||
},
|
||||
{
|
||||
label: "成品检验",
|
||||
value: 3,
|
||||
},
|
||||
{
|
||||
label: "出货检验",
|
||||
value: 4,
|
||||
},
|
||||
],
|
||||
};
|
||||
},
|
||||
created(){
|
||||
},
|
||||
methods: {
|
||||
getArr(){
|
||||
this.optionArrUrl.forEach((item, index) => {
|
||||
this.$http
|
||||
.get(item, {
|
||||
params: {
|
||||
page: 1,
|
||||
limit: 500,
|
||||
},
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
this.$set(this.optionArr, `arr${index}`, []);
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.$set(this.optionArr, `arr${index}`, res.data.list);
|
||||
})
|
||||
.catch(() => {});
|
||||
});
|
||||
this.$http
|
||||
.post("/processInspection/inspectionSheet/getInspectionSheetFeaturesList")
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
this.$set(this.optionArr, 'arr2', []);
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.$set(this.optionArr, 'arr2', res.data);
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
getDataList() {
|
||||
this.$emit("getDataList");
|
||||
},
|
||||
rawData() {
|
||||
this.$emit("rawData");
|
||||
},
|
||||
exportHandle() {
|
||||
this.$emit("exportHandle", this.pageName);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style></style>
|
66
src/views/quality-planning/components/controlRatio.js
Normal file
66
src/views/quality-planning/components/controlRatio.js
Normal file
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* @Author: zwq
|
||||
* @Date: 2022-12-01 15:04:30
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-12-01 15:39:48
|
||||
* @Description:
|
||||
*/
|
||||
|
||||
const dataArr = [
|
||||
[2, 2.121, 3.76, 1.88, 2.659, 1, 1.88, 0.5642, 0.7979, 1.253, 0, 1.843, 0, 3.267, 0, 2.606, 1.128, 0.8865, 0.853, 0, 3.686, 0, 3.2672],
|
||||
[3, 1.732, 2.394, 1.023, 1.954, 1.16, 1.187, 0.7236, 0.8862, 1.128, 0, 1.858, 0, 2.586, 0, 2.276, 1.693, 0.5907, 0.888, 0, 4.358, 0, 2.575],
|
||||
[4, 1.5, 1.88, 0.729, 1.628, 1.092, 0.796, 0.7979, 0.9213, 1.085, 0, 1.808, 0, 2.266, 0, 2.088, 2.059, 0.4857, 0.88, 0, 4.689, 0, 2.282],
|
||||
[5, 1.342, 1.596, 0.577, 1.427, 1.198, 0.691, 0.8407, 0.94, 1.064, 0, 1.756, 0, 2.089, 0, 1.964, 2.326, 0.4299, 0.864, 0, 4.198, 0, 2.115],
|
||||
[6, 1.225, 1.41, 0.483, 1.287, 1.135, 0.549, 0.8686, 0.9515, 1.051, 0.026, 0.711, 0.03, 1.97, 0.029, 1.874, 2.534, 0.3946, 0.848, 0, 5.078, 0, 2.004],
|
||||
[7, 1.134, 1.277, 0.419, 1.182, 1.214, 0.509, 0.8882, 0.9594, 1.042, 0.105, 1.672, 0.118, 1.882, 0.113, 1.806, 2.704, 0.3698, 0.833, 0.205, 5.203, 0.067, 1.924],
|
||||
[8, 1.061, 1.175, 0.373, 1.099, 1.16, 0.432, 0.9027, 0.965, 1.036, 0.167, 1.638, 0.185, 1.851, 0.179, 1.751, 2.847, 0.3512, 0.82, 0.387, 5.307, 0.136, 1.864],
|
||||
[9, 1, 1.094, 0.337, 1.032, 1.223, 0.412, 0.9139, 0.9693, 1.032, 0.219, 1.609, 0.239, 1.761, 0.232, 1.707, 2.97, 0.3367, 0.808, 0.546, 5.394, 0.184, 1.816],
|
||||
[10, 0.949, 1.028, 0.308, 0.975, 1.176, 0.363, 0.9227, 0.9727, 1.028, 0.262, 1.584, 0.284, 1.716, 0.276, 1.669, 3.078, 0.3249, 0.797, 0.687, 5.469, 0.223, 1.777],
|
||||
[11, 0.905, 0.973, 0.285, 0.927, 0, 0, 0.93, 0.9754, 1.025, 0.299, 1.561, 0.321, 1.679, 0.313, 1.637, 3.173, 0.3152, 0.787, 0.812, 5.534, 0.256, 1.744],
|
||||
[12, 0.866, 0.925, 0.266, 0.886, 0, 0, 0.9359, 0.9776, 1.023, 0.331, 1.541, 0.354, 1.646, 0.346, 1.61, 3.258, 0.3069, 0.778, 0.924, 5.592, 0.284, 1.716],
|
||||
[13, 0.832, 0.884, 0.249, 0.85, 0, 0, 0.941, 0.9794, 1.021, 0.359, 1.523, 0.382, 1.618, 0.374, 1.585, 3.336, 0.2998, 0.77, 1.026, 5.646, 0.308, 1.692],
|
||||
[14, 0.802, 0.848, 0.235, 0.817, 0, 0, 0.9453, 0.981, 1.019, 0.384, 1.507, 0.406, 1.594, 0.399, 1.563, 3.407, 0.2935, 0.762, 1.121, 5.693, 0.329, 1.671],
|
||||
[15, 0.775, 0.816, 0.223, 0.789, 0, 0, 0.949, 0.9823, 1.018, 0.406, 1.492, 0.428, 1.572, 0.421, 1.544, 3.472, 0.288, 0.755, 1.207, 5.737, 0.348, 1.652],
|
||||
[16, 0.75, 0.788, 0.212, 0.763, 0, 0, 0.9523, 0.9835, 1.017, 0.427, 1.478, 0.448, 1.552, 0.44, 1.526, 3.532, 0.2831, 0.749, 1.285, 5.779, 0.364, 1.636],
|
||||
[17, 0.728, 0.762, 0.203, 0.739, 0, 0, 0.9551, 0.9845, 1.016, 0.445, 1.465, 0.466, 1.534, 0.458, 1.511, 3.588, 0.2787, 0.743, 1.359, 5.187, 0.379, 1.621],
|
||||
[18, 0.707, 0.738, 0.194, 0.718, 0, 0, 0.9576, 0.9854, 1.015, 0.461, 1.454, 0.482, 1.518, 0.475, 1.496, 3.64, 0.2747, 0.738, 1.426, 5.854, 0.392, 1.608],
|
||||
[19, 0.688, 0.717, 0.187, 0.698, 0, 0, 0.9599, 0.9862, 1.014, 0.477, 1.443, 0.497, 1.503, 0.49, 1.483, 3.689, 0.2711, 0.733, 1.49, 5.888, 0.404, 1.596],
|
||||
[20, 0.671, 0.697, 0.18, 0.68, 0, 0, 0.9619, 0.9869, 1.013, 0.491, 1.433, 0.51, 1.49, 0.504, 1.47, 3.735, 0.2677, 0.729, 1.548, 5.922, 0.414, 1.586],
|
||||
[21, 0.655, 0.679, 0.173, 0.663, 0, 0, 0.9638, 0.9876, 1.013, 0.504, 1.424, 0.523, 1.477, 0.516, 1.459, 3.778, 0.2647, 0.724, 1.606, 5.95, 0.425, 1.575],
|
||||
[22, 0.64, 0.662, 0.167, 0.647, 0, 0, 0.9655, 0.9882, 1.012, 0.516, 1.415, 0.534, 1.466, 0.528, 1.448, 3.819, 0.2618, 0.72, 1.659, 5.979, 0.434, 1.556],
|
||||
[23, 0.626, 0.647, 0.162, 0.633, 0, 0, 0.967, 0.9887, 1.011, 0.527, 1.407, 0.545, 1.455, 0.539, 1.438, 3.858, 0.2592, 0.716, 1.71, 6.006, 0.443, 1.557],
|
||||
[24, 0.612, 0.632, 0.157, 0.619, 0, 0, 0.9684, 0.9892, 1.011, 0.538, 1.399, 0.555, 1.445, 0.549, 1.429, 3.895, 0.2567, 0.712, 1.759, 6.031, 0.452, 1.548],
|
||||
[25, 0.6, 0.619, 0.153, 0.606, 0, 0, 0.9696, 0.9896, 1.011, 0.548, 1.392, 0.565, 1.435, 0.559, 1.42, 3.931, 0.2544, 0.709, 1.804, 6.058, 0.459, 1.541],
|
||||
]
|
||||
export function list() {
|
||||
let arr = []
|
||||
dataArr.forEach(item => {
|
||||
const obj = {
|
||||
name: item[0],
|
||||
A: item[1],
|
||||
A1: item[2],
|
||||
A2: item[3],
|
||||
A3: item[4],
|
||||
m3: item[5],
|
||||
m3A2: item[6],
|
||||
C2: item[7],
|
||||
C4: item[8],
|
||||
'1/C4': item[9],
|
||||
B1: item[10],
|
||||
B2: item[11],
|
||||
B3: item[12],
|
||||
B4: item[13],
|
||||
B5: item[14],
|
||||
B6: item[15],
|
||||
d2: item[16],
|
||||
'1/d2': item[17],
|
||||
d3: item[18],
|
||||
D1: item[19],
|
||||
D2: item[20],
|
||||
D3: item[21],
|
||||
D4: item[22],
|
||||
}
|
||||
arr.push(obj)
|
||||
})
|
||||
return arr
|
||||
}
|
@ -0,0 +1,180 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2021-11-18 14:16:25
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-09-21 09:22:30
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
<el-dialog
|
||||
:title="!dataForm.id ? '新增' : '修改'"
|
||||
:close-on-click-modal="false"
|
||||
:visible.sync="visible"
|
||||
>
|
||||
<el-row :gutter="5">
|
||||
<el-form
|
||||
:model="dataForm"
|
||||
:rules="dataRule"
|
||||
ref="dataForm"
|
||||
@keyup.enter.native="dataFormSubmit()"
|
||||
label-width="80px"
|
||||
>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="编码" prop="code">
|
||||
<el-input
|
||||
v-model="dataForm.code"
|
||||
oninput="value=value.replace(/[^\d]/g,'')"
|
||||
placeholder="编码"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="名称" prop="name">
|
||||
<el-input v-model="dataForm.name" placeholder="名称"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-divider content-position="left">监控图形一</el-divider>
|
||||
<el-checkbox-group v-model="checkList">
|
||||
<el-checkbox
|
||||
style="width:100%;font-size:20px;margin:8px 5px"
|
||||
v-for="item in ruleArr"
|
||||
:key="item.id"
|
||||
:label="item.id"
|
||||
>{{ item.ruleKey.split("x")[0] }}
|
||||
<el-input
|
||||
v-show="item.ruleKey.split('x').length >= 2"
|
||||
v-model="item.ruleValue1"
|
||||
@blur="changeRule(item)"
|
||||
style="width:60px"
|
||||
></el-input>
|
||||
{{ item.ruleKey.split("x")[1] }}
|
||||
<el-input
|
||||
v-show="item.ruleKey.split('x').length >= 3"
|
||||
v-model="item.ruleValue2"
|
||||
@blur="changeRule(item)"
|
||||
style="width:60px"
|
||||
></el-input>
|
||||
{{ item.ruleKey.split("x")[2] }}
|
||||
</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</el-col>
|
||||
</el-form>
|
||||
</el-row>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
<el-button type="primary" @click="dataFormSubmit()">确定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
submitURL: "/qualityPlanning/myInterpretationScheme/",
|
||||
infoURL: "/qualityPlanning/myInterpretationScheme",
|
||||
},
|
||||
visible: false,
|
||||
dataForm: {
|
||||
id: "",
|
||||
code: "",
|
||||
name: "",
|
||||
interpretationSchemeIds: "",
|
||||
},
|
||||
ruleArr: [],
|
||||
checkList: [],
|
||||
dataRule: {
|
||||
code: [{ required: true, message: "编码不能为空", trigger: "blur" }],
|
||||
name: [{ required: true, message: "名称不能为空", trigger: "blur" }],
|
||||
type: [{ required: true, message: "单位分类不能为空", trigger: "change" }],
|
||||
},
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
init(id) {
|
||||
this.dataForm.id = id || "";
|
||||
this.checkList = [];
|
||||
this.ruleArr = [];
|
||||
this.visible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs["dataForm"].resetFields();
|
||||
if (this.dataForm.id) {
|
||||
this.$http
|
||||
.get(`${this.urlOptions.infoURL}/${this.dataForm.id}`)
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.dataForm = res.data;
|
||||
})
|
||||
.catch(() => {});
|
||||
this.$http
|
||||
.post(
|
||||
`/qualityPlanning/interpretationScheme/listByMyInterpretationSchemeId?myInterpretationSchemeId=${this.dataForm.id}`
|
||||
)
|
||||
.then(({ data: res }) => {
|
||||
this.ruleArr = res;
|
||||
res.forEach((item) => {
|
||||
if (item.flag === 1) {
|
||||
this.checkList.push(item.id);
|
||||
}
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
}
|
||||
});
|
||||
},
|
||||
changeRule(item) {
|
||||
this.$http
|
||||
.put("/qualityPlanning/interpretationScheme", item)
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
// 表单提交
|
||||
dataFormSubmit() {
|
||||
this.$refs["dataForm"].validate((valid) => {
|
||||
if (!valid) {
|
||||
return false;
|
||||
}
|
||||
this.ruleArr.forEach((item) => {
|
||||
if (this.checkList.findIndex((item1)=>item1===item.id) !== -1) {
|
||||
item.flag = 1;
|
||||
} else {
|
||||
item.flag = 0;
|
||||
}
|
||||
});
|
||||
this.$http
|
||||
.put("/qualityPlanning/interpretationScheme/batchUpdate", this.ruleArr)
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
})
|
||||
.catch(() => {});
|
||||
this.$http[!this.dataForm.id ? "post" : "put"](this.urlOptions.submitURL, this.dataForm)
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.$message({
|
||||
message: this.$t("prompt.success"),
|
||||
type: "success",
|
||||
duration: 500,
|
||||
onClose: () => {
|
||||
this.visible = false;
|
||||
this.$emit("refreshDataList");
|
||||
},
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
102
src/views/quality-planning/controlGraph.vue
Normal file
102
src/views/quality-planning/controlGraph.vue
Normal file
@ -0,0 +1,102 @@
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<el-form
|
||||
style="display: flex; align-items: center; justify-content: right;"
|
||||
:inline="true"
|
||||
:model="dataForm"
|
||||
@keyup.enter.native="getDataList()"
|
||||
>
|
||||
<el-form-item>
|
||||
<el-select
|
||||
size="small"
|
||||
v-model="dataForm.type"
|
||||
placeholder="请选择类型"
|
||||
style="width:150px"
|
||||
clearable
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in typeArr"
|
||||
:key="index"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button size="small" @click="getDataList()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
|
||||
查询
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table
|
||||
:data="dataList"
|
||||
:stripe="true"
|
||||
:header-cell-style="{
|
||||
background: '#eef1f6',
|
||||
color: '#606266',
|
||||
height: '56px'
|
||||
}"
|
||||
v-loading="dataListLoading"
|
||||
style="width: 100%;"
|
||||
>
|
||||
<el-table-column
|
||||
type="index"
|
||||
header-align="center"
|
||||
align="center"
|
||||
label="序号"
|
||||
width="50"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
|
||||
<el-table-column prop="type" align="center" label="类型">
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
scope.row.type === '2' ? "计数" : "计量"
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-pagination
|
||||
@size-change="sizeChangeHandle"
|
||||
@current-change="currentChangeHandle"
|
||||
:current-page="pageIndex"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
:page-size="pageSize"
|
||||
:total="totalPage"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
>
|
||||
</el-pagination>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import basicPage from '@/mixins/basic-page'
|
||||
export default {
|
||||
mixins: [basicPage],
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
getDataListURL: '/qualityPlanning/controlGraph/page',
|
||||
deleteURL: '/qualityPlanning/controlGraph',
|
||||
exportUrl: '/qualityPlanning/controlGraph/export'
|
||||
},
|
||||
typeArr: [
|
||||
{
|
||||
label: "计量",
|
||||
value: "1",
|
||||
},
|
||||
{
|
||||
label: "计数",
|
||||
value: "2",
|
||||
}
|
||||
],
|
||||
};
|
||||
},
|
||||
components: {
|
||||
},
|
||||
methods: {
|
||||
},
|
||||
};
|
||||
</script>
|
121
src/views/quality-planning/controlRatio.vue
Normal file
121
src/views/quality-planning/controlRatio.vue
Normal file
@ -0,0 +1,121 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2022-12-01 14:52:41
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-12-01 16:34:58
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<el-form
|
||||
style="display: flex; align-items: center; justify-content: right;"
|
||||
:inline="true"
|
||||
:model="dataForm"
|
||||
@keyup.enter.native="getDataList()"
|
||||
>
|
||||
<el-form-item label="样本大小:">
|
||||
<el-input size="small" type="number" v-model="dataForm.name" placeholder="请输入样本大小" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button size="small" @click="getDataList()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
|
||||
查询
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table
|
||||
:data="dataList"
|
||||
:header-cell-style="{
|
||||
background: '#eef1f6',
|
||||
color: '#606266',
|
||||
}"
|
||||
class="rowClass"
|
||||
v-loading="dataListLoading"
|
||||
style="width: 100%;"
|
||||
>
|
||||
<el-table-column align="center" prop="name" label="样本大小" fixed="left"> </el-table-column>
|
||||
<el-table-column align="center" label="均值管制图">
|
||||
<el-table-column align="center" label="控制限系数">
|
||||
<el-table-column align="center" prop="A" label="A"> </el-table-column>
|
||||
<el-table-column align="center" prop="A1" label="A1"> </el-table-column>
|
||||
<el-table-column align="center" prop="A2" label="A2"> </el-table-column>
|
||||
<el-table-column align="center" prop="A3" label="A3"> </el-table-column>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="中线系数">
|
||||
<el-table-column align="center" label="控制限系数">
|
||||
<el-table-column align="center" prop="m3" label="m3"> </el-table-column>
|
||||
<el-table-column align="center" prop="m3A2" label="m3A2"> </el-table-column>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="标准差管制图">
|
||||
<el-table-column align="center" label="中线系数">
|
||||
<el-table-column align="center" prop="C2" label="C2"> </el-table-column>
|
||||
<el-table-column align="center" prop="C4" label="C4"> </el-table-column>
|
||||
<el-table-column align="center" prop="1/C4" label="1/C4"> </el-table-column>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="控制限系数">
|
||||
<el-table-column align="center" prop="B1" label="B1"> </el-table-column>
|
||||
<el-table-column align="center" prop="B2" label="B2"> </el-table-column>
|
||||
<el-table-column align="center" prop="B3" label="B3"> </el-table-column>
|
||||
<el-table-column align="center" prop="B4" label="B4"> </el-table-column>
|
||||
<el-table-column align="center" prop="B5" label="B5"> </el-table-column>
|
||||
<el-table-column align="center" prop="B6" label="B6"> </el-table-column>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="极差管制图">
|
||||
<el-table-column align="center" label="中线系数">
|
||||
<el-table-column align="center" prop="d2" label="d2"> </el-table-column>
|
||||
<el-table-column align="center" prop="1/d2" label="1/d2"> </el-table-column>
|
||||
<el-table-column align="center" prop="d3" label="d3"> </el-table-column>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="控制限系数">
|
||||
<el-table-column align="center" prop="D1" label="D1"> </el-table-column>
|
||||
<el-table-column align="center" prop="D2" label="D2"> </el-table-column>
|
||||
<el-table-column align="center" prop="D3" label="D3"> </el-table-column>
|
||||
<el-table-column align="center" prop="D4" label="D4"> </el-table-column>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { list } from "./components/controlRatio";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
dataList: [],
|
||||
dataForm: {
|
||||
name: "",
|
||||
},
|
||||
dataListLoading: false,
|
||||
};
|
||||
},
|
||||
components: {},
|
||||
activated() {
|
||||
this.getDataList();
|
||||
},
|
||||
methods: {
|
||||
getDataList() {
|
||||
this.dataListLoading = true;
|
||||
if(parseInt(this.dataForm.name)>=2&&parseInt(this.dataForm.name)<=25){
|
||||
this.dataList = list().filter((item,index) => {
|
||||
return parseInt(this.dataForm.name) === (index+2);
|
||||
})
|
||||
}else{
|
||||
this.dataList = list()
|
||||
}
|
||||
this.dataListLoading = false;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style scoped>
|
||||
.rowClass >>> td {
|
||||
padding: 2px 0;
|
||||
}
|
||||
.rowClass >>> th {
|
||||
padding: 4px 0;
|
||||
}
|
||||
</style>
|
107
src/views/quality-planning/interpretationScheme.vue
Normal file
107
src/views/quality-planning/interpretationScheme.vue
Normal file
@ -0,0 +1,107 @@
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<query-form
|
||||
:page-name="'判读方案'"
|
||||
:data-form="dataForm"
|
||||
@getDataList="getDataList"
|
||||
@addOrUpdateHandle="addOrUpdateHandle"
|
||||
@exportHandle="exportHandle"
|
||||
/>
|
||||
<el-table
|
||||
:data="dataList"
|
||||
:stripe="true"
|
||||
:header-cell-style="{
|
||||
background: '#eef1f6',
|
||||
color: '#606266',
|
||||
height: '56px'
|
||||
}"
|
||||
v-loading="dataListLoading"
|
||||
style="width: 100%;"
|
||||
>
|
||||
<el-table-column
|
||||
type="index"
|
||||
header-align="center"
|
||||
align="center"
|
||||
label="序号"
|
||||
width="50"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
|
||||
<el-table-column
|
||||
fixed="right"
|
||||
header-align="center"
|
||||
align="center"
|
||||
width="150"
|
||||
label="操作"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="text"
|
||||
size="small"
|
||||
@click="addOrUpdateHandle(scope.row.id)"
|
||||
>
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
content="修改"
|
||||
placement="top"
|
||||
>
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-编辑"></use></svg>
|
||||
</el-tooltip>
|
||||
</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
style="color:red"
|
||||
size="small"
|
||||
@click="deleteHandle(scope.row.id, scope.row.name)"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" content="删除" placement="top">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-删除"></use></svg>
|
||||
</el-tooltip>
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-pagination
|
||||
@size-change="sizeChangeHandle"
|
||||
@current-change="currentChangeHandle"
|
||||
:current-page="pageIndex"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
:page-size="pageSize"
|
||||
:total="totalPage"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
>
|
||||
</el-pagination>
|
||||
<!-- 弹窗, 新增 / 修改 -->
|
||||
<add-or-update
|
||||
v-if="addOrUpdateVisible"
|
||||
ref="addOrUpdate"
|
||||
@refreshDataList="getDataList"
|
||||
></add-or-update>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import AddOrUpdate from './components/interpretationScheme-add'
|
||||
import queryForm from './query-form'
|
||||
import basicPage from '@/mixins/basic-page'
|
||||
export default {
|
||||
mixins: [basicPage],
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
getDataListURL: '/qualityPlanning/myInterpretationScheme/page',
|
||||
deleteURL: '/qualityPlanning/myInterpretationScheme',
|
||||
exportUrl: '/qualityPlanning/myInterpretationScheme/export'
|
||||
},
|
||||
};
|
||||
},
|
||||
components: {
|
||||
AddOrUpdate,
|
||||
queryForm,
|
||||
},
|
||||
methods: {
|
||||
},
|
||||
};
|
||||
</script>
|
73
src/views/quality-planning/query-form.vue
Normal file
73
src/views/quality-planning/query-form.vue
Normal file
@ -0,0 +1,73 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2022-09-15 10:44:29
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-09-16 13:52:21
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
<el-form
|
||||
style="display: flex; align-items: center; justify-content: right;"
|
||||
:inline="true"
|
||||
:model="dataForm"
|
||||
@keyup.enter.native="getDataList()"
|
||||
>
|
||||
<el-form-item>
|
||||
<el-input size="small" v-model="dataForm.name" clearable placeholder="请输入名称查询" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-input size="small" v-model="dataForm.code" clearable placeholder="请输入编码查询" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button size="small" @click="getDataList()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="exportHandle()">
|
||||
<svg class="icon-svg">
|
||||
<use xlink:href="#导出"></use>
|
||||
</svg>
|
||||
导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
pageName: {
|
||||
type: String,
|
||||
default: () => {
|
||||
return "";
|
||||
},
|
||||
},
|
||||
dataForm: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
},
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
getDataList() {
|
||||
this.$emit("getDataList");
|
||||
},
|
||||
addOrUpdateHandle() {
|
||||
this.$emit("addOrUpdateHandle");
|
||||
},
|
||||
exportHandle() {
|
||||
this.$emit("exportHandle", this.pageName);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style></style>
|
@ -1,103 +1,149 @@
|
||||
import { Addon} from '@antv/x6';
|
||||
import { Addon } from '@antv/x6';
|
||||
// 拖拽生成四边形
|
||||
export const startDragToGraph = (graph,data,e) =>{
|
||||
const node =
|
||||
export const startDragToGraph = (graph, data, e) => {
|
||||
const node =
|
||||
graph.createNode({
|
||||
width: 100, //节点的宽度
|
||||
height: 60, //节点的高度
|
||||
attrs: {
|
||||
label: {
|
||||
text: data.name,
|
||||
workingProcedureId: data.id,
|
||||
fill: 'white',
|
||||
fontSize: 14,
|
||||
textWrap: {
|
||||
width: -10 ,
|
||||
height: -10,
|
||||
ellipsis: true,
|
||||
},
|
||||
label: '圆角矩形',
|
||||
data: {
|
||||
type: 'defaultYSquare'
|
||||
},
|
||||
body: {
|
||||
stroke: '#000000',
|
||||
strokeWidth: 1,
|
||||
fill: '#5bdeff',
|
||||
}
|
||||
},
|
||||
ports: ports
|
||||
})
|
||||
const dnd = new Addon.Dnd({target:graph})
|
||||
dnd.start(node,e)
|
||||
shape: 'rect',
|
||||
width: 100, //节点的宽度
|
||||
height: 60, //节点的高度
|
||||
attrs: {
|
||||
label: {
|
||||
text: data.name,
|
||||
workingProcedureId: data.id,
|
||||
fill: '#FFFFFF',
|
||||
fontSize: 14,
|
||||
textWrap: {
|
||||
width: -10,
|
||||
height: -10,
|
||||
ellipsis: true,
|
||||
},
|
||||
},
|
||||
body: {
|
||||
stroke: '#000000',
|
||||
strokeWidth: 1,
|
||||
fill: '#5bdeff',
|
||||
rx: 10,
|
||||
ry: 10,
|
||||
}
|
||||
},
|
||||
})
|
||||
const dnd = new Addon.Dnd({ target: graph })
|
||||
dnd.start(node, e)
|
||||
}
|
||||
//下面是锚点的代码。 知道就行了 我就不一一写了。
|
||||
export const ports = {
|
||||
groups: {
|
||||
// 输入链接桩群组定义
|
||||
top: {
|
||||
position: 'top',
|
||||
attrs: {
|
||||
circle: {
|
||||
r: 4,
|
||||
magnet: true,
|
||||
stroke: '#2D8CF0',
|
||||
strokeWidth: 2,
|
||||
fill: '#fff',
|
||||
},
|
||||
},
|
||||
},
|
||||
// 输出链接桩群组定义
|
||||
bottom: {
|
||||
position: 'bottom',
|
||||
attrs: {
|
||||
circle: {
|
||||
r: 4,
|
||||
magnet: true,
|
||||
stroke: '#2D8CF0',
|
||||
strokeWidth: 2,
|
||||
fill: '#fff',
|
||||
},
|
||||
},
|
||||
},
|
||||
left: {
|
||||
position: 'left',
|
||||
attrs: {
|
||||
circle: {
|
||||
r: 4,
|
||||
magnet: true,
|
||||
stroke: '#2D8CF0',
|
||||
strokeWidth: 2,
|
||||
fill: '#fff',
|
||||
},
|
||||
},
|
||||
},
|
||||
right: {
|
||||
position: 'right',
|
||||
attrs: {
|
||||
circle: {
|
||||
r: 4,
|
||||
magnet: true,
|
||||
stroke: '#2D8CF0',
|
||||
strokeWidth: 2,
|
||||
fill: '#fff',
|
||||
},
|
||||
groups: {
|
||||
// 输入链接桩群组定义
|
||||
top: {
|
||||
position: 'top',
|
||||
attrs: {
|
||||
circle: {
|
||||
r: 4,
|
||||
magnet: true,
|
||||
stroke: '#2D8CF0',
|
||||
strokeWidth: 2,
|
||||
fill: '#fff',
|
||||
},
|
||||
},
|
||||
},
|
||||
items: [
|
||||
// 输出链接桩群组定义
|
||||
bottom: {
|
||||
position: 'bottom',
|
||||
attrs: {
|
||||
circle: {
|
||||
r: 4,
|
||||
magnet: true,
|
||||
stroke: '#2D8CF0',
|
||||
strokeWidth: 2,
|
||||
fill: '#fff',
|
||||
},
|
||||
},
|
||||
},
|
||||
left: {
|
||||
position: 'left',
|
||||
attrs: {
|
||||
circle: {
|
||||
r: 4,
|
||||
magnet: true,
|
||||
stroke: '#2D8CF0',
|
||||
strokeWidth: 2,
|
||||
fill: '#fff',
|
||||
},
|
||||
},
|
||||
},
|
||||
right: {
|
||||
position: 'right',
|
||||
attrs: {
|
||||
circle: {
|
||||
r: 4,
|
||||
magnet: true,
|
||||
stroke: '#2D8CF0',
|
||||
strokeWidth: 2,
|
||||
fill: '#fff',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
items: [
|
||||
{
|
||||
id: 'port1',
|
||||
group: 'top',
|
||||
},
|
||||
{
|
||||
id: 'port2',
|
||||
group: 'bottom',
|
||||
},
|
||||
{
|
||||
id: 'port3',
|
||||
group: 'left',
|
||||
},
|
||||
{
|
||||
id: 'port4',
|
||||
group: 'right',
|
||||
}
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
// 连线 label 设置
|
||||
export const configEdgeLabel = (labelText, fontColor, fill, stroke) => {
|
||||
if (!labelText) return { attrs: { labelText: { text: '' }, labelBody: { fill: '', stroke: '' } } }
|
||||
return {
|
||||
markup: [
|
||||
{
|
||||
id: 'port1',
|
||||
group: 'top',
|
||||
tagName: 'rect',
|
||||
selector: 'labelBody',
|
||||
},
|
||||
{
|
||||
id: 'port2',
|
||||
group: 'bottom',
|
||||
tagName: 'text',
|
||||
selector: 'labelText',
|
||||
},
|
||||
{
|
||||
id: 'port3',
|
||||
group: 'left',
|
||||
},
|
||||
{
|
||||
id: 'port4',
|
||||
group: 'right',
|
||||
}
|
||||
],
|
||||
attrs: {
|
||||
labelText: {
|
||||
text: labelText || '',
|
||||
fill: fontColor || '#333',
|
||||
textAnchor: 'middle',
|
||||
textVerticalAnchor: 'middle',
|
||||
},
|
||||
labelBody: {
|
||||
ref: 'labelText',
|
||||
refX: -8,
|
||||
refY: -5,
|
||||
refWidth: '100%',
|
||||
refHeight: '100%',
|
||||
refWidth2: 16,
|
||||
refHeight2: 10,
|
||||
stroke: stroke || '#555',
|
||||
fill: fill || '#fff',
|
||||
strokeWidth: 2,
|
||||
rx: 5,
|
||||
ry: 5,
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
@ -2,13 +2,16 @@
|
||||
* @Author: zwq
|
||||
* @Date: 2022-09-01 15:42:34
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-09-09 13:42:48
|
||||
* @LastEditTime: 2022-12-12 15:44:25
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="3">
|
||||
<el-card>
|
||||
<el-card class="cardHeader">
|
||||
<div slot="header" style="color:#409eff;text-align:center">
|
||||
工序列表
|
||||
</div>
|
||||
<div
|
||||
v-for="(item, index) in processArr"
|
||||
:key="index"
|
||||
@ -18,19 +21,164 @@
|
||||
>
|
||||
{{ item.name }}
|
||||
</div>
|
||||
<!-- <el-button type="primary">保存</el-button> -->
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="21">
|
||||
<div id="containerChart"></div>
|
||||
<div v-if="editDrawer" class="edit-main">
|
||||
<div class="edit-main-title">
|
||||
<h3>{{ editTitle }}</h3>
|
||||
<i class="el-icon-close" @click="closeEditForm"></i>
|
||||
</div>
|
||||
<div v-if="editTitle === '编辑节点'" class="form-main">
|
||||
<el-form ref="nodeForm" :model="form" label-width="80px" size="mini">
|
||||
<el-form-item label="节点文本">
|
||||
<el-input
|
||||
v-model="form.labelText"
|
||||
size="small"
|
||||
readonly
|
||||
@input="changeNode('labelText', form.labelText)"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="字体大小">
|
||||
<el-input
|
||||
v-model="form.fontSize"
|
||||
size="small"
|
||||
@input="changeNode('fontSize', form.fontSize)"
|
||||
></el-input>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="字体颜色">
|
||||
<el-color-picker
|
||||
v-model="form.fontFill"
|
||||
@change="changeNode('fontFill', form.fontFill)"
|
||||
></el-color-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="节点背景">
|
||||
<el-color-picker
|
||||
v-model="form.fill"
|
||||
@change="changeNode('fill', form.fill)"
|
||||
></el-color-picker>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="边框颜色">
|
||||
<el-color-picker
|
||||
v-model="form.stroke"
|
||||
@change="changeNode('stroke', form.stroke)"
|
||||
></el-color-picker>
|
||||
</el-form-item> -->
|
||||
<div class="see-box">
|
||||
<h5>预览</h5>
|
||||
<div
|
||||
class="see-item"
|
||||
:style="{
|
||||
background: form.fill,
|
||||
color: form.fontFill,
|
||||
'border-color': form.stroke,
|
||||
'font-size': form.fontSize + 'px',
|
||||
}"
|
||||
>
|
||||
{{ form.labelText }}
|
||||
</div>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
<!-- <div v-if="editTitle === '编辑连线'" class="form-main">
|
||||
<el-form ref="edgeForm" :model="form" label-width="80px" size="mini">
|
||||
<el-form-item label="标签内容">
|
||||
<el-input
|
||||
v-model="form.label"
|
||||
size="small"
|
||||
placeholder="标签文字,空则没有"
|
||||
@input="
|
||||
changeEdgeLabel(form.label, labelForm.fontColor, labelForm.fill, labelForm.stroke)
|
||||
"
|
||||
></el-input>
|
||||
<div v-if="form.label" class="label-style">
|
||||
<p>
|
||||
字体颜色:<el-color-picker
|
||||
v-model="labelForm.fontColor"
|
||||
size="mini"
|
||||
@change="
|
||||
changeEdgeLabel(
|
||||
form.label,
|
||||
labelForm.fontColor,
|
||||
labelForm.fill,
|
||||
labelForm.stroke
|
||||
)
|
||||
"
|
||||
></el-color-picker>
|
||||
</p>
|
||||
<p>
|
||||
背景颜色:<el-color-picker
|
||||
v-model="labelForm.fill"
|
||||
size="mini"
|
||||
@change="
|
||||
changeEdgeLabel(
|
||||
form.label,
|
||||
labelForm.fontColor,
|
||||
labelForm.fill,
|
||||
labelForm.stroke
|
||||
)
|
||||
"
|
||||
></el-color-picker>
|
||||
</p>
|
||||
<p>
|
||||
描边颜色:<el-color-picker
|
||||
v-model="labelForm.stroke"
|
||||
size="mini"
|
||||
@change="
|
||||
changeEdgeLabel(
|
||||
form.label,
|
||||
labelForm.fontColor,
|
||||
labelForm.fill,
|
||||
labelForm.stroke
|
||||
)
|
||||
"
|
||||
></el-color-picker>
|
||||
</p>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="线条颜色">
|
||||
<el-color-picker
|
||||
v-model="form.stroke"
|
||||
size="small"
|
||||
@change="changeEdgeStroke"
|
||||
></el-color-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="线条宽度">
|
||||
<el-input-number
|
||||
v-model="form.strokeWidth"
|
||||
size="small"
|
||||
@change="changeEdgeStrokeWidth"
|
||||
:min="2"
|
||||
:step="2"
|
||||
:max="6"
|
||||
label="线条宽度"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="双向箭头">
|
||||
<el-switch v-model="form.isArrows" @change="changeEdgeArrows"></el-switch>
|
||||
</el-form-item>
|
||||
<el-form-item label="流动线条">
|
||||
<el-switch v-model="form.isAnit" @change="changeEdgeAnit"></el-switch>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div> -->
|
||||
<div class="edit-btn">
|
||||
<el-button type="primary" size="medium" @click="saveChange" style="width:100%"
|
||||
>保存</el-button
|
||||
>
|
||||
<el-button type="danger" size="medium" @click="handlerDel" style="width:100%"
|
||||
>删除此{{ editTitle === "编辑节点" ? "节点" : "连线" }}</el-button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { Graph, Shape, FunctionExt } from "@antv/x6";
|
||||
import { startDragToGraph, ports } from "./flowMethods.js";
|
||||
|
||||
import { startDragToGraph, configEdgeLabel } from "./flowMethods.js";
|
||||
export default {
|
||||
props: {
|
||||
productId: {
|
||||
@ -45,6 +193,14 @@ export default {
|
||||
graph: "",
|
||||
type: "grid",
|
||||
selectCell: "",
|
||||
editDrawer: false,
|
||||
editTitle: "",
|
||||
form: {},
|
||||
labelForm: {
|
||||
fontColor: "#333",
|
||||
fill: "#FFF",
|
||||
stroke: "#555",
|
||||
},
|
||||
connectEdgeType: {
|
||||
//连线方式
|
||||
connector: "normal",
|
||||
@ -68,6 +224,20 @@ export default {
|
||||
activated() {
|
||||
this.init();
|
||||
},
|
||||
watch: {
|
||||
value: {
|
||||
handler: function() {
|
||||
if (this.graph) {
|
||||
this.selectCell = "";
|
||||
this.editDrawer = false;
|
||||
this.graph.dispose();
|
||||
this.init();
|
||||
}
|
||||
},
|
||||
deep: true,
|
||||
immediate: true,
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
this.getArr();
|
||||
@ -101,106 +271,50 @@ export default {
|
||||
modifiers: ["ctrl", "meta"],
|
||||
},
|
||||
grid: this.grid,
|
||||
connecting: {
|
||||
// 节点连接
|
||||
anchor: "center",
|
||||
connectionPoint: "anchor",
|
||||
allowBlank: false,
|
||||
snap: true,
|
||||
},
|
||||
createEdge() {
|
||||
return new Shape.Edge({
|
||||
attrs: {
|
||||
line: {
|
||||
stroke: "#1890ff",
|
||||
strokeWidth: 1,
|
||||
targetMarker: {
|
||||
name: "classic",
|
||||
size: 8,
|
||||
},
|
||||
strokeDasharray: 0, //虚线
|
||||
style: {
|
||||
animation: "ant-line 30s infinite linear",
|
||||
},
|
||||
},
|
||||
},
|
||||
label: {
|
||||
text: "",
|
||||
},
|
||||
connector: _that.connectEdgeType.connector,
|
||||
router: {
|
||||
name: _that.connectEdgeType.router.name || "",
|
||||
},
|
||||
zIndex: 0,
|
||||
});
|
||||
},
|
||||
});
|
||||
// 鼠标移入移出节点
|
||||
this.graph.on(
|
||||
"node:mouseenter",
|
||||
FunctionExt.debounce(() => {
|
||||
const container = document.getElementById("containerChart");
|
||||
const ports = container.querySelectorAll(".x6-port-body");
|
||||
this.showPorts(ports, true);
|
||||
}),
|
||||
500
|
||||
);
|
||||
this.graph.on("node:mouseleave", (e) => {
|
||||
const container = document.getElementById("containerChart");
|
||||
const ports = container.querySelectorAll(".x6-port-body");
|
||||
this.showPorts(ports, false);
|
||||
});
|
||||
// // 鼠标移入移出节点
|
||||
// this.graph.on(
|
||||
// "node:mouseenter",
|
||||
// FunctionExt.debounce(() => {
|
||||
// const container = document.getElementById("containerChart");
|
||||
// const ports = container.querySelectorAll(".x6-port-body");
|
||||
// this.showPorts(ports, true);
|
||||
// }),
|
||||
// 500
|
||||
// );
|
||||
// this.graph.on("node:mouseleave", (e) => {
|
||||
// const container = document.getElementById("containerChart");
|
||||
// const ports = container.querySelectorAll(".x6-port-body");
|
||||
// this.showPorts(ports, false);
|
||||
// });
|
||||
//获取放置到画布上节点的位置
|
||||
this.graph.on("node:added", ({ node }) => {
|
||||
const { x, y } = node.position();
|
||||
this.addProcess(node.attrs.label.workingProcedureId, x, y);
|
||||
});
|
||||
//这是鼠标抬起节点事件
|
||||
this.graph.on("node:mouseup", ({ node }) => {
|
||||
this.graph.on("node:moved", ({ node }) => {
|
||||
const { x, y } = node.position();
|
||||
this.updataNode(node.attrs.label.id, x, y);
|
||||
this.updataNode(node.id, x, y);
|
||||
});
|
||||
//这是点击节点事件
|
||||
this.graph.on("node:click", () => {
|
||||
const cell = this.graph.getSelectedCells();
|
||||
console.log(cell);
|
||||
});
|
||||
//这是右键节点事件
|
||||
this.graph.on("node:contextmenu", (e) => {
|
||||
console.log(e);
|
||||
});
|
||||
this.graph.on("selection:changed", (args) => {
|
||||
args.added.forEach((cell) => {
|
||||
this.selectCell = cell;
|
||||
if (cell.isEdge()) {
|
||||
cell.isEdge() && cell.attr("line/strokeDasharray", 5); //虚线蚂蚁线
|
||||
cell.addTools([
|
||||
{
|
||||
name: "vertices",
|
||||
args: {
|
||||
padding: 4,
|
||||
attrs: {
|
||||
strokeWidth: 0.1,
|
||||
stroke: "#2d8cf0",
|
||||
fill: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
]);
|
||||
}
|
||||
});
|
||||
args.removed.forEach((cell) => {
|
||||
cell.isEdge() && cell.attr("line/strokeDasharray", 0); //正常线
|
||||
cell.removeTools();
|
||||
});
|
||||
console.log(this.graph.toJSON());
|
||||
// 点击编辑
|
||||
this.graph.on("cell:click", ({ cell }) => {
|
||||
this.editForm(cell);
|
||||
});
|
||||
//链接边分离后触发
|
||||
// this.graph.on("edge:connected", ({ isNew, edge }) => {
|
||||
// if (isNew) {
|
||||
// const source = edge.getSourceCell();
|
||||
// const target = edge.getTargetCell();
|
||||
// }
|
||||
// });
|
||||
},
|
||||
showPorts(ports, show) {
|
||||
for (let i = 0, len = ports.length; i < len; i = i + 1) {
|
||||
ports[i].style.visibility = show ? "visible" : "hidden";
|
||||
}
|
||||
},
|
||||
// 是否展示节点
|
||||
// showPorts(ports, show) {
|
||||
// for (let i = 0, len = ports.length; i < len; i = i + 1) {
|
||||
// ports[i].style.visibility = show ? "visible" : "hidden";
|
||||
// }
|
||||
// },
|
||||
// 拖拽生成正方形或者圆形
|
||||
startDrag(data, e) {
|
||||
startDragToGraph(this.graph, data, e);
|
||||
@ -233,6 +347,7 @@ export default {
|
||||
}
|
||||
this.dataList = res.data;
|
||||
this.setNode();
|
||||
this.setEdge();
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
@ -240,15 +355,19 @@ export default {
|
||||
let nodes = [];
|
||||
this.dataList.forEach((item) => {
|
||||
let obj = {};
|
||||
obj.x = item.x;
|
||||
(obj.id = item.id), (obj.x = item.x);
|
||||
obj.y = item.y;
|
||||
obj.width = 100;
|
||||
obj.height = 60;
|
||||
obj.label = "圆角矩形";
|
||||
obj.data = {
|
||||
type: "defaultYSquare",
|
||||
};
|
||||
obj.shape = "rect";
|
||||
obj.attrs = {
|
||||
label: {
|
||||
text: item.workingProcedureName,
|
||||
id: item.id,
|
||||
fill: "white",
|
||||
fill: item.fontcolor || "#FFFFFF",
|
||||
fontSize: 14,
|
||||
textWrap: {
|
||||
width: -10,
|
||||
@ -259,10 +378,11 @@ export default {
|
||||
body: {
|
||||
stroke: "#000000",
|
||||
strokeWidth: 1,
|
||||
fill: "#5bdeff",
|
||||
fill: item.backcolor || "#5bdeff",
|
||||
rx: 10,
|
||||
ry: 10,
|
||||
},
|
||||
};
|
||||
obj.ports = ports;
|
||||
nodes.push(obj);
|
||||
});
|
||||
const data = {
|
||||
@ -270,6 +390,22 @@ export default {
|
||||
};
|
||||
this.graph.fromJSON(data);
|
||||
},
|
||||
setEdge() {
|
||||
let source, target;
|
||||
if (this.dataList.length >= 2) {
|
||||
this.dataList.forEach((item, index) => {
|
||||
if (index % 2 === 0) {
|
||||
source = item.id;
|
||||
} else {
|
||||
target = item.id;
|
||||
this.graph.addEdge({
|
||||
source: source,
|
||||
target: target,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
updataNode(id, x, y) {
|
||||
const data = {
|
||||
id: id,
|
||||
@ -287,6 +423,7 @@ export default {
|
||||
type: "success",
|
||||
duration: 500,
|
||||
});
|
||||
this.getList();
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
@ -314,33 +451,218 @@ export default {
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
// 删除
|
||||
deleteHandle(id, name) {
|
||||
this.$confirm(`确定对[名称=${name}]进行删除操作?`, "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
//编辑节点和线
|
||||
editForm(cell) {
|
||||
this.selectCell = cell;
|
||||
console.log(cell);
|
||||
// 编辑node节点
|
||||
if (cell.isNode() && cell.data.type && cell.data.type.includes("default")) {
|
||||
this.editTitle = "编辑节点";
|
||||
const body = cell.attrs.body || cell.attrs.rect || cell.attrs.polygon || cell.attrs.circle;
|
||||
this.form = {
|
||||
labelText: cell.attrs.label.text || "",
|
||||
fontSize: cell.attrs.label.fontSize || 14,
|
||||
fontFill: cell.attrs.label.fill || "",
|
||||
fill: body.fill || "",
|
||||
stroke: body.stroke || "",
|
||||
};
|
||||
return (this.editDrawer = true);
|
||||
}
|
||||
// // 编辑线
|
||||
// if (!cell.isNode() && cell.shape === "edge") {
|
||||
// this.editTitle = "编辑连线";
|
||||
// this.form = {
|
||||
// label: cell.labels && cell.labels[0] ? cell.labels[0].attrs.labelText.text : "",
|
||||
// stroke: cell.attrs.line.stroke || "",
|
||||
// strokeWidth: cell.attrs.line.strokeWidth || "",
|
||||
// isArrows: cell.attrs.line.sourceMarker ? true : false,
|
||||
// isAnit: cell.attrs.line.strokeDasharray ? true : false,
|
||||
// };
|
||||
// // 看是否有label
|
||||
// const edgeCellLabel = (cell.labels && cell.labels[0] && cell.labels[0].attrs) || false;
|
||||
// if (this.form.label && edgeCellLabel) {
|
||||
// this.labelForm = {
|
||||
// fontColor: edgeCellLabel.labelText.fill || "#333",
|
||||
// fill: edgeCellLabel.labelBody.fill || "#fff",
|
||||
// stroke: edgeCellLabel.labelBody.stroke || "#555",
|
||||
// };
|
||||
// } else {
|
||||
// this.labelForm = { fontColor: "#333", fill: "#FFF", stroke: "#555" };
|
||||
// }
|
||||
// return (this.editDrawer = true);
|
||||
// }
|
||||
},
|
||||
closeEditForm() {
|
||||
this.editDrawer = false;
|
||||
},
|
||||
// 修改一般节点
|
||||
changeNode(type, value) {
|
||||
switch (type) {
|
||||
case "labelText":
|
||||
this.selectCell.attr("label/text", value);
|
||||
break;
|
||||
case "fontSize":
|
||||
this.selectCell.attr("label/fontSize", value);
|
||||
break;
|
||||
case "fontFill":
|
||||
this.selectCell.attr("label/fill", value);
|
||||
break;
|
||||
case "fill":
|
||||
this.selectCell.attr("body/fill", value);
|
||||
break;
|
||||
case "stroke":
|
||||
this.selectCell.attr("body/stroke", value);
|
||||
break;
|
||||
}
|
||||
},
|
||||
// 修改边label属性
|
||||
changeEdgeLabel(label, fontColor, fill, stroke) {
|
||||
this.selectCell.setLabels([configEdgeLabel(label, fontColor, fill, stroke)]);
|
||||
if (!label) this.labelForm = { fontColor: "#333", fill: "#FFF", stroke: "#555" };
|
||||
},
|
||||
// 修改边的颜色
|
||||
changeEdgeStroke(val) {
|
||||
this.selectCell.attr("line/stroke", val);
|
||||
},
|
||||
// 边的宽度
|
||||
changeEdgeStrokeWidth(val) {
|
||||
if (this.form.isArrows) {
|
||||
this.selectCell.attr({
|
||||
line: {
|
||||
strokeWidth: val,
|
||||
sourceMarker: {
|
||||
width: 12 * (val / 2) || 12,
|
||||
height: 8 * (val / 2) || 8,
|
||||
},
|
||||
targetMarker: {
|
||||
width: 12 * (val / 2) || 12,
|
||||
height: 8 * (val / 2) || 8,
|
||||
},
|
||||
},
|
||||
});
|
||||
} else {
|
||||
this.selectCell.attr({
|
||||
line: {
|
||||
strokeWidth: val,
|
||||
targetMarker: {
|
||||
width: 12 * (val / 2) || 12,
|
||||
height: 8 * (val / 2) || 8,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
// 边的箭头
|
||||
changeEdgeArrows(val) {
|
||||
if (val) {
|
||||
this.selectCell.attr({
|
||||
line: {
|
||||
sourceMarker: {
|
||||
name: "block",
|
||||
width: 12 * (this.form.strokeWidth / 2) || 12,
|
||||
height: 8 * (this.form.strokeWidth / 2) || 8,
|
||||
},
|
||||
targetMarker: {
|
||||
name: "block",
|
||||
width: 12 * (this.form.strokeWidth / 2) || 12,
|
||||
height: 8 * (this.form.strokeWidth / 2) || 8,
|
||||
},
|
||||
},
|
||||
});
|
||||
} else {
|
||||
this.selectCell.attr({
|
||||
line: {
|
||||
sourceMarker: "",
|
||||
targetMarker: {
|
||||
name: "block",
|
||||
size: 10 * (this.form.strokeWidth / 2) || 10,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
// 边的添加蚂蚁线
|
||||
changeEdgeAnit(val) {
|
||||
if (val) {
|
||||
this.selectCell.attr({
|
||||
line: {
|
||||
strokeDasharray: 5,
|
||||
style: {
|
||||
animation: "ant-line 30s infinite linear",
|
||||
},
|
||||
},
|
||||
});
|
||||
} else {
|
||||
this.selectCell.attr({
|
||||
line: {
|
||||
strokeDasharray: 0,
|
||||
style: {
|
||||
animation: "",
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
// 删除节点
|
||||
handlerDel() {
|
||||
this.$confirm(
|
||||
`此操作将永久删除此${this.editTitle === "编辑节点" ? "节点" : "连线"}, 是否继续?`,
|
||||
"提示",
|
||||
{
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
}
|
||||
)
|
||||
.then(() => {
|
||||
this.$http
|
||||
.delete("/basic/productWorkingprocedureRelation", { data: [id] })
|
||||
.then(({ data }) => {
|
||||
if (data && data.code === 0) {
|
||||
this.$message({
|
||||
message: "操作成功",
|
||||
type: "success",
|
||||
duration: 1500,
|
||||
onClose: () => {
|
||||
this.getList();
|
||||
},
|
||||
});
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
});
|
||||
const cells = this.graph.getSelectedCells();
|
||||
if (cells.length) {
|
||||
this.$http
|
||||
.delete("/basic/productWorkingprocedureRelation", { data: [cells[0].id] })
|
||||
.then(({ data }) => {
|
||||
if (data && data.code === 0) {
|
||||
this.graph.removeCells(cells);
|
||||
this.form = {};
|
||||
this.editDrawer = false;
|
||||
this.$message({
|
||||
message: "操作成功",
|
||||
type: "success",
|
||||
duration: 1500,
|
||||
onClose: () => {
|
||||
this.getList();
|
||||
},
|
||||
});
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch(() => {});
|
||||
}, //清空画布
|
||||
},
|
||||
saveChange() {
|
||||
const cells = this.graph.getSelectedCells();
|
||||
const data = {
|
||||
id: cells[0].id,
|
||||
backcolor: cells[0].attrs.body.fill,
|
||||
fontcolor: cells[0].attrs.label.fill,
|
||||
};
|
||||
this.$http
|
||||
.put("/basic/productWorkingprocedureRelation", data)
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.$message({
|
||||
message: this.$t("prompt.success"),
|
||||
type: "success",
|
||||
duration: 500,
|
||||
});
|
||||
this.getList();
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
//清空画布
|
||||
deleteAll() {
|
||||
this.graph.clearCells();
|
||||
},
|
||||
@ -349,16 +671,20 @@ export default {
|
||||
this.graph.dispose();
|
||||
},
|
||||
},
|
||||
destroyed() {
|
||||
console.log("销毁画布");
|
||||
beforeDestroy() {
|
||||
this.graph.dispose();
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
#containerChart {
|
||||
<style lang="scss">
|
||||
@keyframes ant-line {
|
||||
to {
|
||||
stroke-dashoffset: -1000;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
.btn {
|
||||
background-color: #5bdeff;
|
||||
text-align: center;
|
||||
@ -368,3 +694,68 @@ export default {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<style lang="scss" scoped="scoped">
|
||||
.edit-main {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
width: 280px;
|
||||
border-left: 1px solid #f2f2f2;
|
||||
box-shadow: 0 -10px 10px rgba($color: #000000, $alpha: 0.3);
|
||||
padding: 20px;
|
||||
background: #fff;
|
||||
box-sizing: border-box;
|
||||
.edit-main-title {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
h3 {
|
||||
flex: 1;
|
||||
}
|
||||
i {
|
||||
cursor: pointer;
|
||||
font-size: 20px;
|
||||
opacity: 0.7;
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
.form-main {
|
||||
padding: 10px 0;
|
||||
.label-style {
|
||||
background: #f2f2f2;
|
||||
padding: 0 10px;
|
||||
p {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.edit-btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.see-box {
|
||||
padding: 10px;
|
||||
background: #f2f2f2;
|
||||
h5 {
|
||||
}
|
||||
.see-item {
|
||||
line-height: 60px;
|
||||
text-align: center;
|
||||
width: 100px;
|
||||
height: 60px;
|
||||
border-radius: 5px;
|
||||
margin: auto;
|
||||
border: 2px solid #333;
|
||||
}
|
||||
}
|
||||
}
|
||||
.el-card ::v-deep .el-card__header {
|
||||
height: 60px;
|
||||
}
|
||||
</style>
|
||||
|
@ -2,7 +2,7 @@
|
||||
* @Author: zwq
|
||||
* @Date: 2021-11-18 14:16:25
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-09-07 16:04:53
|
||||
* @LastEditTime: 2022-12-13 16:00:33
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
@ -20,7 +20,7 @@
|
||||
border
|
||||
style="width: 50%;"
|
||||
>
|
||||
<el-table-column prop="name"> </el-table-column>
|
||||
<el-table-column prop="name" align="center"> </el-table-column>
|
||||
<el-table-column
|
||||
v-for="(item, index) in workingProcedure"
|
||||
:key="item.id"
|
||||
@ -38,7 +38,7 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="特性列表">
|
||||
<el-tab-pane label="特性列表" align="center">
|
||||
<el-table
|
||||
:data="dataList"
|
||||
:stripe="true"
|
||||
@ -57,14 +57,14 @@
|
||||
width="50"
|
||||
>
|
||||
</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="type" label="特性类型">
|
||||
<el-table-column prop="code" align="center" label="编号"> </el-table-column>
|
||||
<el-table-column prop="name" align="center" label="名称"></el-table-column>
|
||||
<el-table-column prop="type" align="center" label="特性类型">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.type === 2 ? "计数" : "计量" }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="defectLevel" label="缺陷等级">
|
||||
<el-table-column prop="defectLevel" align="center" label="缺陷等级">
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
scope.row.defectLevel === 1
|
||||
@ -75,24 +75,24 @@
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="measureToolName" label="量具"></el-table-column>
|
||||
<el-table-column prop="isSpc" label="SPC">
|
||||
<el-table-column prop="measureToolName" align="center" label="量具"></el-table-column>
|
||||
<el-table-column prop="isSpc" align="center" label="SPC">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.isSpc === 1 ? "是" : "否" }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="controlGraphName" label="分析图形"></el-table-column>
|
||||
<el-table-column prop="sampleSize" label="样本大小"></el-table-column>
|
||||
<el-table-column prop="samplingFrequency" label="抽样频率"></el-table-column>
|
||||
<el-table-column prop="unitName" label="单位"></el-table-column>
|
||||
<el-table-column prop="decimalPlaces" label="小数位数"></el-table-column>
|
||||
<el-table-column prop="specifications" label="规格"></el-table-column>
|
||||
<el-table-column prop="lsl" label="LSL"></el-table-column>
|
||||
<el-table-column prop="sl" label="SL"></el-table-column>
|
||||
<el-table-column prop="usl" label="USL"></el-table-column>
|
||||
<el-table-column prop="targetCpk" label="目标CPK"></el-table-column>
|
||||
<el-table-column prop="targetPpk" label="目标PPK"></el-table-column>
|
||||
<el-table-column prop="remark" label="备注"></el-table-column>
|
||||
<el-table-column prop="controlGraphName" align="center" label="分析图形"></el-table-column>
|
||||
<el-table-column prop="sampleSize" align="center" label="样本大小"></el-table-column>
|
||||
<el-table-column prop="samplingFrequency" align="center" label="抽样频率"></el-table-column>
|
||||
<el-table-column prop="unitName" align="center" label="单位"></el-table-column>
|
||||
<el-table-column prop="decimalPlaces" align="center" label="小数位数"></el-table-column>
|
||||
<el-table-column prop="specifications" align="center" label="规格"></el-table-column>
|
||||
<el-table-column prop="lsl" align="center" label="LSL"></el-table-column>
|
||||
<el-table-column prop="sl" align="center" label="SL"></el-table-column>
|
||||
<el-table-column prop="usl" align="center" label="USL"></el-table-column>
|
||||
<el-table-column prop="targetCpk" align="center" label="目标CPK"></el-table-column>
|
||||
<el-table-column prop="targetPpk" align="center" label="目标PPK"></el-table-column>
|
||||
<el-table-column prop="remark" align="center" label="备注"></el-table-column>
|
||||
<el-table-column
|
||||
fixed="right"
|
||||
header-align="center"
|
||||
@ -176,7 +176,7 @@ export default {
|
||||
methods: {
|
||||
init(index) {
|
||||
this.dataListLoading = false;
|
||||
this.inspectionStage = parseInt(index) + 1;
|
||||
this.inspectionStage = parseInt(index);
|
||||
this.productFeaturesList.splice(0, this.productFeaturesList.length);
|
||||
this.$nextTick(() => {
|
||||
this.getSelection();
|
||||
|
@ -2,7 +2,7 @@
|
||||
* @Author: zwq
|
||||
* @Date: 2021-11-18 14:16:25
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-09-07 16:06:00
|
||||
* @LastEditTime: 2022-12-01 15:51:44
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
@ -19,14 +19,14 @@
|
||||
>
|
||||
<el-table-column type="index" header-align="center" align="center" label="序号" width="50">
|
||||
</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="type" label="特性类型">
|
||||
<el-table-column prop="code" align="center" label="编号"> </el-table-column>
|
||||
<el-table-column prop="name" align="center" label="名称"></el-table-column>
|
||||
<el-table-column prop="type" align="center" label="特性类型">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.type === 2 ? "计数" : "计量" }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="defectLevel" label="缺陷等级">
|
||||
<el-table-column prop="defectLevel" align="center" label="缺陷等级">
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
scope.row.defectLevel === 1
|
||||
@ -37,24 +37,24 @@
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="measureToolName" label="量具"></el-table-column>
|
||||
<el-table-column prop="isSpc" label="SPC">
|
||||
<el-table-column prop="measureToolName" align="center" label="量具"></el-table-column>
|
||||
<el-table-column prop="isSpc" align="center" label="SPC">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.isSpc === 1 ? "是" : "否" }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="controlGraphName" label="分析图形"></el-table-column>
|
||||
<el-table-column prop="sampleSize" label="样本大小"></el-table-column>
|
||||
<el-table-column prop="samplingFrequency" label="抽样频率"></el-table-column>
|
||||
<el-table-column prop="unitName" label="单位"></el-table-column>
|
||||
<el-table-column prop="decimalPlaces" label="小数位数"></el-table-column>
|
||||
<el-table-column prop="specifications" label="规格"></el-table-column>
|
||||
<el-table-column prop="lsl" label="LSL"></el-table-column>
|
||||
<el-table-column prop="sl" label="SL"></el-table-column>
|
||||
<el-table-column prop="usl" label="USL"></el-table-column>
|
||||
<el-table-column prop="targetCpk" label="目标CPK"></el-table-column>
|
||||
<el-table-column prop="targetPpk" label="目标PPK"></el-table-column>
|
||||
<el-table-column prop="remark" label="备注"></el-table-column>
|
||||
<el-table-column prop="controlGraphName" align="center" label="分析图形"></el-table-column>
|
||||
<el-table-column prop="sampleSize" align="center" label="样本大小"></el-table-column>
|
||||
<el-table-column prop="samplingFrequency" align="center" label="抽样频率"></el-table-column>
|
||||
<el-table-column prop="unitName" align="center" label="单位"></el-table-column>
|
||||
<el-table-column prop="decimalPlaces" align="center" label="小数位数"></el-table-column>
|
||||
<el-table-column prop="specifications" align="center" label="规格"></el-table-column>
|
||||
<el-table-column prop="lsl" align="center" label="LSL"></el-table-column>
|
||||
<el-table-column prop="sl" align="center" label="SL"></el-table-column>
|
||||
<el-table-column prop="usl" align="center" label="USL"></el-table-column>
|
||||
<el-table-column prop="targetCpk" align="center" label="目标CPK"></el-table-column>
|
||||
<el-table-column prop="targetPpk" align="center" label="目标PPK"></el-table-column>
|
||||
<el-table-column prop="remark" align="center" label="备注"></el-table-column>
|
||||
</el-table>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="hisVisible = false">关闭</el-button>
|
||||
|
@ -2,7 +2,7 @@
|
||||
* @Author: zwq
|
||||
* @Date: 2021-11-18 14:16:25
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-09-05 15:25:52
|
||||
* @LastEditTime: 2022-12-13 16:00:28
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
@ -87,12 +87,12 @@ export default {
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.workingProcedure = res.data;
|
||||
this.$refs.fourContentRef[0].init(0);
|
||||
this.$refs.fourContentRef[0].init(this.inspectionStageArr?.[0]);
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
tabClick(val) {
|
||||
this.$refs.fourContentRef[val.index].init(val.index);
|
||||
this.$refs.fourContentRef[val.index].init(this.inspectionStageArr?.[val.index]);
|
||||
},
|
||||
// 表单提交
|
||||
dataFormSubmit() {
|
||||
|
@ -2,7 +2,7 @@
|
||||
* @Author: zwq
|
||||
* @Date: 2021-11-18 14:16:25
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-08-29 16:49:43
|
||||
* @LastEditTime: 2022-12-12 15:51:58
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
@ -33,6 +33,7 @@
|
||||
<el-form-item label="特性类型" prop="type">
|
||||
<el-select
|
||||
v-model="threeDataForm.type"
|
||||
@change="numIsblack"
|
||||
:style="{ width: '100%' }"
|
||||
filterable
|
||||
placeholder="请选择特性类型"
|
||||
@ -50,6 +51,7 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="缺陷等级" prop="defectLevel">
|
||||
<el-select
|
||||
:disabled="threeDataForm.type === 2"
|
||||
v-model="threeDataForm.defectLevel"
|
||||
:style="{ width: '100%' }"
|
||||
filterable
|
||||
@ -68,6 +70,7 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="量具" prop="measureToolId">
|
||||
<el-select
|
||||
:disabled="threeDataForm.type === 2"
|
||||
v-model="threeDataForm.measureToolId"
|
||||
placeholder="请选择单位"
|
||||
clearable
|
||||
@ -85,6 +88,7 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="单位" prop="unitId">
|
||||
<el-select
|
||||
:disabled="threeDataForm.type === 2"
|
||||
v-model="threeDataForm.unitId"
|
||||
placeholder="请选择单位"
|
||||
clearable
|
||||
@ -101,22 +105,38 @@
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="规格" prop="specifications">
|
||||
<el-input v-model="threeDataForm.specifications" placeholder="规格"></el-input>
|
||||
<el-input
|
||||
:disabled="threeDataForm.type === 2"
|
||||
v-model="threeDataForm.specifications"
|
||||
placeholder="规格"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="LSL" prop="lsl">
|
||||
<el-input-number v-model="threeDataForm.lsl" placeholder="LSL"></el-input-number>
|
||||
<el-input-number
|
||||
:disabled="threeDataForm.type === 2"
|
||||
v-model="threeDataForm.lsl"
|
||||
placeholder="LSL"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="SL" prop="sl">
|
||||
<el-input-number v-model="threeDataForm.sl" placeholder="SL"></el-input-number>
|
||||
<el-input-number
|
||||
:disabled="threeDataForm.type === 2"
|
||||
v-model="threeDataForm.sl"
|
||||
placeholder="SL"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="USL" prop="usl">
|
||||
<el-input-number v-model="threeDataForm.usl" placeholder="USL"></el-input-number>
|
||||
<el-input-number
|
||||
:disabled="threeDataForm.type === 2"
|
||||
v-model="threeDataForm.usl"
|
||||
placeholder="USL"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
@ -147,11 +167,11 @@ export default {
|
||||
defectLevel: "",
|
||||
measureToolId: "",
|
||||
unitId: "",
|
||||
specifications: '',
|
||||
lsl: '',
|
||||
sl: '',
|
||||
usl: '',
|
||||
remark: ''
|
||||
specifications: "",
|
||||
lsl: "",
|
||||
sl: "",
|
||||
usl: "",
|
||||
remark: "",
|
||||
},
|
||||
typeArr: [
|
||||
{
|
||||
@ -238,6 +258,17 @@ export default {
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
numIsblack(val){
|
||||
if(val===2){
|
||||
this.threeDataForm.defectLevel= ""
|
||||
this.threeDataForm.measureToolId= ""
|
||||
this.threeDataForm.unitId= ""
|
||||
this.threeDataForm.specifications= ""
|
||||
this.threeDataForm.lsl= 0
|
||||
this.threeDataForm.sl= 0
|
||||
this.threeDataForm.usl= 0
|
||||
}
|
||||
},
|
||||
// 表单提交
|
||||
dataFormSubmit() {
|
||||
this.$refs["threeDataForm"].validate((valid) => {
|
||||
|
@ -2,7 +2,7 @@
|
||||
* @Author: zwq
|
||||
* @Date: 2021-11-18 14:16:25
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-08-29 16:46:06
|
||||
* @LastEditTime: 2022-12-01 15:52:10
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
@ -26,14 +26,14 @@
|
||||
>
|
||||
<el-table-column type="index" header-align="center" align="center" label="序号" width="50">
|
||||
</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="type" label="特性类型">
|
||||
<el-table-column prop="code" align="center" label="编号"> </el-table-column>
|
||||
<el-table-column prop="name" align="center" label="名称"></el-table-column>
|
||||
<el-table-column prop="type" align="center" label="特性类型">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.type === 2 ? "计数" : "计量" }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="defectLevel" label="缺陷等级">
|
||||
<el-table-column prop="defectLevel" align="center" label="缺陷等级">
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
scope.row.defectLevel === 1
|
||||
@ -44,13 +44,13 @@
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="measureToolName" label="量具"></el-table-column>
|
||||
<el-table-column prop="unitName" label="单位"></el-table-column>
|
||||
<el-table-column prop="specifications" label="规格"></el-table-column>
|
||||
<el-table-column prop="lsl" label="LSL"></el-table-column>
|
||||
<el-table-column prop="sl" label="SL"></el-table-column>
|
||||
<el-table-column prop="usl" label="USL"></el-table-column>
|
||||
<el-table-column prop="remark" label="备注"></el-table-column>
|
||||
<el-table-column prop="measureToolName" align="center" label="量具"></el-table-column>
|
||||
<el-table-column prop="unitName" align="center" label="单位"></el-table-column>
|
||||
<el-table-column prop="specifications" align="center" label="规格"></el-table-column>
|
||||
<el-table-column prop="lsl" align="center" label="LSL"></el-table-column>
|
||||
<el-table-column prop="sl" align="center" label="SL"></el-table-column>
|
||||
<el-table-column prop="usl" align="center" label="USL"></el-table-column>
|
||||
<el-table-column prop="remark" align="center" label="备注"></el-table-column>
|
||||
<el-table-column fixed="right" header-align="center" align="center" width="150" label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">
|
||||
|
@ -2,7 +2,7 @@
|
||||
* @Author: zwq
|
||||
* @Date: 2021-11-18 14:16:25
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-09-07 15:25:36
|
||||
* @LastEditTime: 2022-12-01 15:52:21
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
@ -35,8 +35,8 @@
|
||||
>
|
||||
<el-table-column type="index" header-align="center" align="center" label="序号" width="50">
|
||||
</el-table-column>
|
||||
<el-table-column prop="workingProcedureName" label="工序名称"> </el-table-column>
|
||||
<el-table-column prop="workingProcedureCode" label="工序编码"> </el-table-column>
|
||||
<el-table-column prop="workingProcedureName" align="center" label="工序名称"> </el-table-column>
|
||||
<el-table-column prop="workingProcedureCode" align="center" label="工序编码"> </el-table-column>
|
||||
<el-table-column fixed="right" header-align="center" align="center" width="150" label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
|
@ -2,7 +2,7 @@
|
||||
* @Author: zwq
|
||||
* @Date: 2021-11-18 14:16:25
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-08-24 15:06:08
|
||||
* @LastEditTime: 2022-12-01 15:52:40
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
@ -30,12 +30,12 @@
|
||||
width="50"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" label="编码"> </el-table-column>
|
||||
<el-table-column prop="num" label="小数位数"> </el-table-column>
|
||||
<el-table-column prop="USL" label="USL"> </el-table-column>
|
||||
<el-table-column prop="SL" label="SL"> </el-table-column>
|
||||
<el-table-column prop="LSL" label="LSL"> </el-table-column>
|
||||
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
|
||||
<el-table-column prop="num" align="center" label="小数位数"> </el-table-column>
|
||||
<el-table-column prop="USL" align="center" label="USL"> </el-table-column>
|
||||
<el-table-column prop="SL" align="center" label="SL"> </el-table-column>
|
||||
<el-table-column prop="LSL" align="center" label="LSL"> </el-table-column>
|
||||
<el-table-column
|
||||
fixed="right"
|
||||
header-align="center"
|
||||
|
@ -7,20 +7,34 @@
|
||||
@keyup.enter.native="getDataList()"
|
||||
>
|
||||
<el-form-item>
|
||||
<el-input
|
||||
<el-input size="small" v-model="dataForm.name" clearable placeholder="请输入名称查询" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-input size="small" v-model="dataForm.code" clearable placeholder="请输入编码查询" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-select
|
||||
size="small"
|
||||
v-model="dataForm.paramKey"
|
||||
v-model="dataForm.type"
|
||||
placeholder="请选择类型"
|
||||
style="width:150px"
|
||||
clearable
|
||||
placeholder="请输入关键字查询"
|
||||
/>
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in typeArr"
|
||||
:key="index"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button size="small" @click="getDataList()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
|
||||
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
|
||||
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="exportHandle('工厂管理')">
|
||||
@ -50,8 +64,8 @@
|
||||
width="50"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" label="编码"> </el-table-column>
|
||||
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
|
||||
<el-table-column
|
||||
type="type"
|
||||
header-align="center"
|
||||
@ -65,8 +79,8 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column prop="supplier" label="供应商"> </el-table-column> -->
|
||||
<el-table-column prop="address" label="联系地址"> </el-table-column>
|
||||
<el-table-column prop="descs" label="描述"> </el-table-column>
|
||||
<el-table-column prop="address" align="center" label="联系地址"> </el-table-column>
|
||||
<el-table-column prop="descs" align="center" label="描述"> </el-table-column>
|
||||
<el-table-column
|
||||
type="status"
|
||||
header-align="center"
|
||||
@ -158,6 +172,16 @@ export default {
|
||||
statusUrl: '/basic/factory/status',
|
||||
exportUrl: '/basic/factory/export'
|
||||
},
|
||||
typeArr: [
|
||||
{
|
||||
label: "内部工厂",
|
||||
value: "1",
|
||||
},
|
||||
{
|
||||
label: "供应商",
|
||||
value: "2",
|
||||
}
|
||||
],
|
||||
};
|
||||
},
|
||||
components: {
|
||||
|
@ -1,36 +1,12 @@
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<el-form
|
||||
style="display: flex; align-items: center; justify-content: right;"
|
||||
:inline="true"
|
||||
:model="dataForm"
|
||||
@keyup.enter.native="getDataList()"
|
||||
>
|
||||
<el-form-item>
|
||||
<el-input
|
||||
size="small"
|
||||
v-model="dataForm.paramKey"
|
||||
clearable
|
||||
placeholder="请输入关键字查询"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button size="small" @click="getDataList()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="exportHandle('机台管理')">
|
||||
<svg class="icon-svg">
|
||||
<use xlink:href="#导出"></use>
|
||||
</svg>
|
||||
导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<query-form
|
||||
:page-name="'机台管理'"
|
||||
:data-form="dataForm"
|
||||
@getDataList="getDataList"
|
||||
@addOrUpdateHandle="addOrUpdateHandle"
|
||||
@exportHandle="exportHandle"
|
||||
/>
|
||||
<el-table
|
||||
:data="dataList"
|
||||
:stripe="true"
|
||||
@ -50,10 +26,10 @@
|
||||
width="50"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" label="编码"> </el-table-column>
|
||||
<el-table-column prop="platformName" label="站点"> </el-table-column>
|
||||
<el-table-column prop="remark" label="描述"> </el-table-column>
|
||||
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
|
||||
<el-table-column prop="platformName" align="center" label="站点"> </el-table-column>
|
||||
<el-table-column prop="remark" align="center" label="描述"> </el-table-column>
|
||||
<el-table-column
|
||||
type="status"
|
||||
header-align="center"
|
||||
@ -140,6 +116,7 @@
|
||||
<script>
|
||||
import AddOrUpdate from './components/machineManage-add'
|
||||
import basicPage from '@/mixins/basic-page'
|
||||
import queryForm from './query-form'
|
||||
export default {
|
||||
mixins: [basicPage],
|
||||
data() {
|
||||
@ -154,6 +131,7 @@ export default {
|
||||
},
|
||||
components: {
|
||||
AddOrUpdate,
|
||||
queryForm,
|
||||
},
|
||||
methods: {
|
||||
},
|
||||
|
@ -1,36 +1,12 @@
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<el-form
|
||||
style="display: flex; align-items: center; justify-content: right;"
|
||||
:inline="true"
|
||||
:model="dataForm"
|
||||
@keyup.enter.native="getDataList()"
|
||||
>
|
||||
<el-form-item>
|
||||
<el-input
|
||||
size="small"
|
||||
v-model="dataForm.paramKey"
|
||||
clearable
|
||||
placeholder="请输入关键字查询"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button size="small" @click="getDataList()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="exportHandle('工序定义')">
|
||||
<svg class="icon-svg">
|
||||
<use xlink:href="#导出"></use>
|
||||
</svg>
|
||||
导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<query-form
|
||||
:page-name="'工序定义'"
|
||||
:data-form="dataForm"
|
||||
@getDataList="getDataList"
|
||||
@addOrUpdateHandle="addOrUpdateHandle"
|
||||
@exportHandle="exportHandle"
|
||||
/>
|
||||
<el-table
|
||||
:data="dataList"
|
||||
:stripe="true"
|
||||
@ -50,10 +26,10 @@
|
||||
width="50"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" label="编码"> </el-table-column>
|
||||
<el-table-column prop="workingProcedureTypeName" label="类型"> </el-table-column>
|
||||
<el-table-column prop="machineName" label="机台">
|
||||
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
|
||||
<el-table-column prop="workingProcedureTypeName" align="center" label="类型"> </el-table-column>
|
||||
<el-table-column prop="machineName" align="center" label="机台">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.machineName}}</span>
|
||||
</template>
|
||||
@ -164,6 +140,7 @@
|
||||
import AddOrUpdate from './components/processDefine-add'
|
||||
import BindMachine from './components/processDefine-machine'
|
||||
import basicPage from '@/mixins/basic-page'
|
||||
import queryForm from './query-form'
|
||||
export default {
|
||||
mixins: [basicPage],
|
||||
data() {
|
||||
@ -179,6 +156,7 @@ export default {
|
||||
},
|
||||
components: {
|
||||
AddOrUpdate,
|
||||
queryForm,
|
||||
BindMachine
|
||||
},
|
||||
methods: {
|
||||
|
@ -1,152 +1,781 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2022-08-22 15:53:16
|
||||
* @Date: 2022-09-01 15:42:34
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-09-01 16:42:08
|
||||
* @LastEditTime: 2022-09-13 11:34:30
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="10">
|
||||
<el-form
|
||||
style="background-color:#e6f7ff;padding:10px 20px"
|
||||
:inline="true"
|
||||
:model="dataForm"
|
||||
@keyup.enter.native="getDataList()"
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="3">
|
||||
<el-card>
|
||||
<div
|
||||
v-for="(item, index) in processArr"
|
||||
:key="index"
|
||||
class="btn"
|
||||
:title="item.name"
|
||||
@mousedown="startDrag(item, $event)"
|
||||
>
|
||||
<el-form-item>
|
||||
<el-input v-model="dataForm.paramKey" clearable placeholder="请输入关键字查询" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="getDataList()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
|
||||
查询
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table
|
||||
:data="dataList"
|
||||
height="650"
|
||||
highlight-current-row
|
||||
@current-change="handleCurrentChange"
|
||||
:header-cell-style="{
|
||||
background: '#eef1f6',
|
||||
color: '#606266',
|
||||
height: '56px',
|
||||
}"
|
||||
border
|
||||
v-loading="dataListLoading"
|
||||
style="width: 100%;"
|
||||
>
|
||||
<el-table-column
|
||||
fixed="left"
|
||||
type="index"
|
||||
header-align="center"
|
||||
align="center"
|
||||
label="序号"
|
||||
width="50"
|
||||
{{ item.name }}
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="21">
|
||||
<div id="containerChart"></div>
|
||||
<div v-if="editDrawer" class="edit-main">
|
||||
<div class="edit-main-title">
|
||||
<h3>{{ editTitle }}</h3>
|
||||
<i class="el-icon-close" @click="closeEditForm"></i>
|
||||
</div>
|
||||
<div v-if="editTitle === '编辑节点'" class="form-main">
|
||||
<el-form ref="nodeForm" :model="form" label-width="80px">
|
||||
<el-form-item label="节点文本">
|
||||
<el-input
|
||||
v-model="form.labelText"
|
||||
size="small"
|
||||
@input="changeNode('labelText', form.labelText)"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="字体大小">
|
||||
<el-input
|
||||
v-model="form.fontSize"
|
||||
size="small"
|
||||
@input="changeNode('fontSize', form.fontSize)"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="字体颜色">
|
||||
<el-color-picker
|
||||
v-model="form.fontFill"
|
||||
@change="changeNode('fontFill', form.fontFill)"
|
||||
></el-color-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="节点背景">
|
||||
<el-color-picker
|
||||
v-model="form.fill"
|
||||
@change="changeNode('fill', form.fill)"
|
||||
></el-color-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="边框颜色">
|
||||
<el-color-picker
|
||||
v-model="form.stroke"
|
||||
@change="changeNode('stroke', form.stroke)"
|
||||
></el-color-picker>
|
||||
</el-form-item>
|
||||
<div class="see-box">
|
||||
<h5>预览</h5>
|
||||
<div
|
||||
class="see-item"
|
||||
:style="{
|
||||
background: form.fill,
|
||||
color: form.fontFill,
|
||||
'border-color': form.stroke,
|
||||
'font-size': form.fontSize + 'px',
|
||||
}"
|
||||
>
|
||||
{{ form.labelText }}
|
||||
</div>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
<div v-if="editTitle === '编辑连线'" class="form-main">
|
||||
<el-form ref="edgeForm" :model="form" label-width="80px">
|
||||
<el-form-item label="标签内容">
|
||||
<el-input
|
||||
v-model="form.label"
|
||||
size="small"
|
||||
placeholder="标签文字,空则没有"
|
||||
@input="
|
||||
changeEdgeLabel(form.label, labelForm.fontColor, labelForm.fill, labelForm.stroke)
|
||||
"
|
||||
></el-input>
|
||||
<div v-if="form.label" class="label-style">
|
||||
<p>
|
||||
字体颜色:<el-color-picker
|
||||
v-model="labelForm.fontColor"
|
||||
size="mini"
|
||||
@change="
|
||||
changeEdgeLabel(
|
||||
form.label,
|
||||
labelForm.fontColor,
|
||||
labelForm.fill,
|
||||
labelForm.stroke
|
||||
)
|
||||
"
|
||||
></el-color-picker>
|
||||
</p>
|
||||
<p>
|
||||
背景颜色:<el-color-picker
|
||||
v-model="labelForm.fill"
|
||||
size="mini"
|
||||
@change="
|
||||
changeEdgeLabel(
|
||||
form.label,
|
||||
labelForm.fontColor,
|
||||
labelForm.fill,
|
||||
labelForm.stroke
|
||||
)
|
||||
"
|
||||
></el-color-picker>
|
||||
</p>
|
||||
<p>
|
||||
描边颜色:<el-color-picker
|
||||
v-model="labelForm.stroke"
|
||||
size="mini"
|
||||
@change="
|
||||
changeEdgeLabel(
|
||||
form.label,
|
||||
labelForm.fontColor,
|
||||
labelForm.fill,
|
||||
labelForm.stroke
|
||||
)
|
||||
"
|
||||
></el-color-picker>
|
||||
</p>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="线条颜色">
|
||||
<el-color-picker
|
||||
v-model="form.stroke"
|
||||
size="small"
|
||||
@change="changeEdgeStroke"
|
||||
></el-color-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="线条样式">
|
||||
<el-select
|
||||
v-model="form.connector"
|
||||
size="small"
|
||||
placeholder="请选择"
|
||||
@change="changeEdgeConnector"
|
||||
>
|
||||
<el-option label="直角" value="normal"></el-option>
|
||||
<el-option label="圆角" value="rounded"></el-option>
|
||||
<el-option label="平滑" value="smooth"></el-option>
|
||||
<el-option label="跳线(两线交叉)" value="jumpover"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="线条宽度">
|
||||
<el-input-number
|
||||
v-model="form.strokeWidth"
|
||||
size="small"
|
||||
@change="changeEdgeStrokeWidth"
|
||||
:min="2"
|
||||
:step="2"
|
||||
:max="6"
|
||||
label="线条宽度"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="双向箭头">
|
||||
<el-switch v-model="form.isArrows" @change="changeEdgeArrows"></el-switch>
|
||||
</el-form-item>
|
||||
<el-form-item label="流动线条">
|
||||
<el-switch v-model="form.isAnit" @change="changeEdgeAnit"></el-switch>
|
||||
</el-form-item>
|
||||
<el-form-item label="调整线条">
|
||||
<el-switch v-model="form.isTools" @change="changeEdgeTools"></el-switch>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="edit-btn">
|
||||
<el-button type="danger" @click="handlerDel" style="width:100%"
|
||||
>删除此{{ editTitle === "编辑节点" ? "节点" : "连线" }}</el-button
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="名称" fixed="left"> </el-table-column>
|
||||
<el-table-column prop="code" label="编码" fixed="left"> </el-table-column>
|
||||
</el-table>
|
||||
</el-col>
|
||||
<el-col :span="13" :offset="1">
|
||||
<el-tabs @tab-click="tabClick">
|
||||
<el-tab-pane label="图形模式">
|
||||
<process-flow-graph
|
||||
v-show="graphVisible"
|
||||
ref="graphRef"
|
||||
:product-id="productId"
|
||||
@refreshDataList="getDataList"
|
||||
></process-flow-graph>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="表格模式">
|
||||
<two-step v-show="twoStepVisible" ref="twoStepRef" :product-id="productId"></two-step>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import processFlowGraph from "./components/processFlow-graph";
|
||||
import twoStep from "./components/productList-two";
|
||||
|
||||
import { Graph, Shape, FunctionExt } from "@antv/x6";
|
||||
import { startDragToGraph, ports, configEdgeLabel } from "../spc-basic/components/flowMethods.js";
|
||||
export default {
|
||||
props: {
|
||||
productId: {
|
||||
type: String,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
dataListLoading: false,
|
||||
dataList: [],
|
||||
flowDataList: [],
|
||||
graphVisible: true,
|
||||
twoStepVisible: false,
|
||||
dataForm: {
|
||||
paramKey: "",
|
||||
processArr: [],
|
||||
processId: "",
|
||||
graph: "",
|
||||
type: "grid",
|
||||
selectCell: "",
|
||||
editDrawer: false,
|
||||
editTitle: "",
|
||||
form: {},
|
||||
labelForm: {
|
||||
fontColor: "#333",
|
||||
fill: "#FFF",
|
||||
stroke: "#555",
|
||||
},
|
||||
connectEdgeType: {
|
||||
//连线方式
|
||||
connector: "normal",
|
||||
router: {
|
||||
name: "",
|
||||
},
|
||||
},
|
||||
grid: {
|
||||
// 网格设置
|
||||
size: 20, // 网格大小 10px
|
||||
visible: true, // 渲染网格背景
|
||||
type: "mesh",
|
||||
args: {
|
||||
color: "#D0D0D0",
|
||||
thickness: 1, // 网格线宽度/网格点大小
|
||||
factor: 10,
|
||||
},
|
||||
},
|
||||
productId: "",
|
||||
paneName: "图形模式",
|
||||
};
|
||||
},
|
||||
components: {
|
||||
processFlowGraph,
|
||||
twoStep,
|
||||
activated() {
|
||||
this.init();
|
||||
},
|
||||
created() {
|
||||
this.getDataList();
|
||||
this.productId = ''
|
||||
watch: {
|
||||
value: {
|
||||
handler: function() {
|
||||
if (this.graph) {
|
||||
this.selectCell = "";
|
||||
this.editDrawer = false;
|
||||
this.graph.dispose();
|
||||
this.init();
|
||||
}
|
||||
},
|
||||
deep: true,
|
||||
immediate: true,
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
getDataList() {
|
||||
this.dataListLoading = true;
|
||||
init() {
|
||||
this.getArr();
|
||||
this.$nextTick(() => {
|
||||
this.processId = "";
|
||||
if (this.productId) {
|
||||
this.getList();
|
||||
} else {
|
||||
this.dataList = [];
|
||||
}
|
||||
});
|
||||
this.graph = new Graph({
|
||||
container: document.getElementById("containerChart"),
|
||||
height: 600,
|
||||
selecting: true,
|
||||
background: {
|
||||
color: "#fffbe6", // 设置画布背景颜色
|
||||
},
|
||||
snapline: {
|
||||
enabled: true,
|
||||
sharp: true,
|
||||
},
|
||||
// scroller: {
|
||||
// enabled: true,
|
||||
// pageVisible: false,
|
||||
// pageBreak: false,
|
||||
// pannable: true,
|
||||
// },
|
||||
mousewheel: {
|
||||
enabled: true,
|
||||
modifiers: ["ctrl", "meta"],
|
||||
},
|
||||
grid: this.grid,
|
||||
connecting: {
|
||||
// 节点连接
|
||||
anchor: "center",
|
||||
connectionPoint: "anchor",
|
||||
allowBlank: false,
|
||||
snap: true,
|
||||
},
|
||||
createEdge() {
|
||||
return new Shape.Edge({
|
||||
attrs: {
|
||||
line: {
|
||||
stroke: "#1890ff",
|
||||
strokeWidth: 1,
|
||||
targetMarker: {
|
||||
name: "classic",
|
||||
size: 8,
|
||||
},
|
||||
strokeDasharray: 0, //虚线
|
||||
style: {
|
||||
animation: "ant-line 30s infinite linear",
|
||||
},
|
||||
},
|
||||
},
|
||||
label: {
|
||||
text: "",
|
||||
},
|
||||
connector: _that.connectEdgeType.connector,
|
||||
router: {
|
||||
name: _that.connectEdgeType.router.name || "",
|
||||
},
|
||||
zIndex: 0,
|
||||
});
|
||||
},
|
||||
});
|
||||
// 鼠标移入移出节点
|
||||
this.graph.on(
|
||||
"node:mouseenter",
|
||||
FunctionExt.debounce(() => {
|
||||
const container = document.getElementById("containerChart");
|
||||
const ports = container.querySelectorAll(".x6-port-body");
|
||||
this.showPorts(ports, true);
|
||||
}),
|
||||
500
|
||||
);
|
||||
this.graph.on("node:mouseleave", (e) => {
|
||||
const container = document.getElementById("containerChart");
|
||||
const ports = container.querySelectorAll(".x6-port-body");
|
||||
this.showPorts(ports, false);
|
||||
});
|
||||
//获取放置到画布上节点的位置
|
||||
this.graph.on("node:added", ({ node }) => {
|
||||
const { x, y } = node.position();
|
||||
this.addProcess(node.attrs.label.workingProcedureId, x, y);
|
||||
});
|
||||
//这是鼠标抬起节点事件
|
||||
this.graph.on("node:mouseup", ({ node }) => {
|
||||
const { x, y } = node.position();
|
||||
this.updataNode(node.attrs.label.id, x, y);
|
||||
});
|
||||
// 点击编辑
|
||||
this.graph.on('cell:click', ({ cell }) => {
|
||||
this.editForm(cell)
|
||||
})
|
||||
},
|
||||
showPorts(ports, show) {
|
||||
for (let i = 0, len = ports.length; i < len; i = i + 1) {
|
||||
ports[i].style.visibility = show ? "visible" : "hidden";
|
||||
}
|
||||
},
|
||||
// 拖拽生成正方形或者圆形
|
||||
startDrag(data, e) {
|
||||
startDragToGraph(this.graph, data, e);
|
||||
},
|
||||
getArr() {
|
||||
this.$http
|
||||
.get("/basic/product/page", {
|
||||
.get("/basic/workingProcedure/page", {
|
||||
params: {
|
||||
page: 1,
|
||||
limit: 500,
|
||||
code: this.dataForm.paramKey,
|
||||
name: this.dataForm.paramKey,
|
||||
},
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
this.dataListLoading = false;
|
||||
if (res.code !== 0) {
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.processArr = res.data.list;
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
getList() {
|
||||
this.$http
|
||||
.get(
|
||||
`/basic/productWorkingprocedureRelation/getWorkingprocedureByProductId/${this.productId}`
|
||||
)
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
this.dataList = [];
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.dataList = res.data.list;
|
||||
this.dataList = res.data;
|
||||
this.setNode();
|
||||
})
|
||||
.catch(() => {
|
||||
this.dataListLoading = false;
|
||||
});
|
||||
.catch(() => {});
|
||||
},
|
||||
tabClick(val) {
|
||||
this.paneName = val.label;
|
||||
if (val.label === "图形模式") {
|
||||
this.twoStepVisible = false;
|
||||
this.graphVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.graphRef.init();
|
||||
});
|
||||
} else {
|
||||
this.graphVisible = false;
|
||||
this.twoStepVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.twoStepRef.init();
|
||||
});
|
||||
}
|
||||
},
|
||||
handleCurrentChange(val) {
|
||||
if (val) {
|
||||
this.productId = val.id;
|
||||
const obj = {
|
||||
label: this.paneName,
|
||||
setNode() {
|
||||
let nodes = [];
|
||||
this.dataList.forEach((item) => {
|
||||
let obj = {};
|
||||
obj.x = item.x;
|
||||
obj.y = item.y;
|
||||
obj.width = 100;
|
||||
obj.height = 60;
|
||||
obj.label= '圆角矩形',
|
||||
obj.data= {
|
||||
type: 'defaultYSquare'
|
||||
},
|
||||
obj.shape= 'rect',
|
||||
obj.attrs = {
|
||||
label: {
|
||||
text: item.workingProcedureName,
|
||||
id: item.id,
|
||||
fill: "white",
|
||||
fontSize: 14,
|
||||
textWrap: {
|
||||
width: -10,
|
||||
height: -10,
|
||||
ellipsis: true,
|
||||
},
|
||||
},
|
||||
body: {
|
||||
stroke: "#000000",
|
||||
strokeWidth: 1,
|
||||
fill: "#5bdeff",
|
||||
},
|
||||
};
|
||||
this.tabClick(obj);
|
||||
}
|
||||
obj.ports = ports;
|
||||
nodes.push(obj);
|
||||
});
|
||||
const data = {
|
||||
nodes,
|
||||
};
|
||||
this.graph.fromJSON(data);
|
||||
},
|
||||
updataNode(id, x, y) {
|
||||
const data = {
|
||||
id: id,
|
||||
x: x,
|
||||
y: y,
|
||||
};
|
||||
this.$http
|
||||
.put("/basic/productWorkingprocedureRelation", data)
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.$message({
|
||||
message: this.$t("prompt.success"),
|
||||
type: "success",
|
||||
duration: 500,
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
addProcess(workingProcedureId, x, y) {
|
||||
this.$http
|
||||
.post("/basic/productWorkingprocedureRelation/save", {
|
||||
workingProcedureId: workingProcedureId,
|
||||
productId: this.productId,
|
||||
x,
|
||||
y,
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
this.getList();
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.$message({
|
||||
message: this.$t("prompt.success"),
|
||||
type: "success",
|
||||
duration: 500,
|
||||
onClose: () => {
|
||||
this.getList();
|
||||
},
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
//编辑节点和线
|
||||
editForm(cell){
|
||||
if(this.selectCell) this.selectCell.removeTools() // 删除修改线的工具
|
||||
this.selectCell = cell
|
||||
// 编辑node节点
|
||||
console.log(cell.data)
|
||||
if(cell.isNode() && cell.data.type && cell.data.type.includes('default')){
|
||||
this.editTitle = '编辑节点'
|
||||
const body = cell.attrs.body || cell.attrs.rect || cell.attrs.polygon || cell.attrs.circle
|
||||
this.form = {
|
||||
labelText: cell.attrs.label.text || '',
|
||||
fontSize: cell.attrs.label.fontSize || 14,
|
||||
fontFill: cell.attrs.label.fill || '',
|
||||
fill: body.fill|| '',
|
||||
stroke: body.stroke || ''
|
||||
}
|
||||
return this.editDrawer = true
|
||||
}
|
||||
// 编辑线
|
||||
if(!cell.isNode() && cell.shape === 'edge'){
|
||||
this.editTitle = '编辑连线'
|
||||
this.form = {
|
||||
label: (cell.labels && cell.labels[0]) ? cell.labels[0].attrs.labelText.text : '',
|
||||
stroke: cell.attrs.line.stroke || '',
|
||||
connector: 'rounded',
|
||||
strokeWidth: cell.attrs.line.strokeWidth || '',
|
||||
isArrows: cell.attrs.line.sourceMarker ? true : false,
|
||||
isAnit: cell.attrs.line.strokeDasharray ? true : false,
|
||||
isTools: false
|
||||
}
|
||||
// 看是否有label
|
||||
const edgeCellLabel = cell.labels && cell.labels[0] && cell.labels[0].attrs || false
|
||||
if(this.form.label && edgeCellLabel){
|
||||
this.labelForm = {
|
||||
fontColor: edgeCellLabel.labelText.fill || '#333',
|
||||
fill: edgeCellLabel.labelBody.fill || '#fff',
|
||||
stroke: edgeCellLabel.labelBody.stroke || '#555'
|
||||
}
|
||||
} else {
|
||||
this.labelForm = { fontColor: '#333', fill: '#FFF', stroke: '#555' }
|
||||
}
|
||||
return this.editDrawer = true
|
||||
}
|
||||
},
|
||||
closeEditForm(){
|
||||
this.editDrawer = false
|
||||
if(this.selectCell) this.selectCell.removeTools()
|
||||
},
|
||||
// 修改一般节点
|
||||
changeNode(type, value){
|
||||
switch (type) {
|
||||
case 'labelText':
|
||||
this.selectCell.attr('label/text', value)
|
||||
break;
|
||||
case 'fontSize':
|
||||
this.selectCell.attr('label/fontSize', value)
|
||||
break;
|
||||
case 'fontFill':
|
||||
this.selectCell.attr('label/fill', value)
|
||||
break;
|
||||
case 'fill':
|
||||
this.selectCell.attr('body/fill', value)
|
||||
break;
|
||||
case 'stroke':
|
||||
this.selectCell.attr('body/stroke', value)
|
||||
break;
|
||||
}
|
||||
},
|
||||
// 修改边label属性
|
||||
changeEdgeLabel(label, fontColor, fill, stroke){
|
||||
this.selectCell.setLabels([configEdgeLabel(label, fontColor, fill, stroke)])
|
||||
if(!label) this.labelForm = { fontColor: '#333', fill: '#FFF', stroke: '#555' }
|
||||
},
|
||||
// 修改边的颜色
|
||||
changeEdgeStroke(val){
|
||||
this.selectCell.attr('line/stroke', val)
|
||||
},
|
||||
// 边的样式
|
||||
changeEdgeConnector(val){
|
||||
switch (val) {
|
||||
case 'normal':
|
||||
this.selectCell.setConnector(val)
|
||||
break;
|
||||
case 'smooth':
|
||||
this.selectCell.setConnector(val)
|
||||
break;
|
||||
case 'rounded':
|
||||
this.selectCell.setConnector(val, { radius: 20 })
|
||||
break;
|
||||
case 'jumpover':
|
||||
this.selectCell.setConnector(val, { radius: 20 })
|
||||
break;
|
||||
}
|
||||
},
|
||||
// 边的宽度
|
||||
changeEdgeStrokeWidth(val){
|
||||
if(this.form.isArrows){
|
||||
this.selectCell.attr({
|
||||
line: {
|
||||
strokeWidth: val,
|
||||
sourceMarker: {
|
||||
width: 12 * (val / 2) || 12,
|
||||
height: 8 * (val / 2) || 8
|
||||
},
|
||||
targetMarker: {
|
||||
width: 12 * (val / 2) || 12,
|
||||
height: 8 * (val / 2) || 8
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
} else {
|
||||
this.selectCell.attr({
|
||||
line: {
|
||||
strokeWidth: val,
|
||||
targetMarker: {
|
||||
width: 12 * (val / 2) || 12,
|
||||
height: 8 * (val / 2) || 8
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
},
|
||||
// 边的箭头
|
||||
changeEdgeArrows(val){
|
||||
if(val){
|
||||
this.selectCell.attr({
|
||||
line: {
|
||||
sourceMarker: {
|
||||
name: 'block',
|
||||
width: 12 * (this.form.strokeWidth / 2) || 12,
|
||||
height: 8 * (this.form.strokeWidth / 2) || 8
|
||||
},
|
||||
targetMarker: {
|
||||
name: 'block',
|
||||
width: 12 * (this.form.strokeWidth / 2) || 12,
|
||||
height: 8 * (this.form.strokeWidth / 2) || 8
|
||||
},
|
||||
}
|
||||
})
|
||||
} else {
|
||||
this.selectCell.attr({
|
||||
line: {
|
||||
sourceMarker: '',
|
||||
targetMarker: {
|
||||
name: 'block',
|
||||
size: 10 * (this.form.strokeWidth / 2) || 10
|
||||
},
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
// 边的添加蚂蚁线
|
||||
changeEdgeAnit(val){
|
||||
if(val){
|
||||
this.selectCell.attr({
|
||||
line: {
|
||||
strokeDasharray: 5,
|
||||
style: {
|
||||
animation: 'ant-line 30s infinite linear',
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
this.selectCell.attr({
|
||||
line: {
|
||||
strokeDasharray: 0,
|
||||
style: {
|
||||
animation: '',
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
// 给线添加调节工具
|
||||
changeEdgeTools(val){
|
||||
if(val) this.selectCell.addTools(['vertices', 'segments'])
|
||||
else this.selectCell.removeTools()
|
||||
},
|
||||
// 删除节点
|
||||
handlerDel(){
|
||||
this.$confirm(`此操作将永久删除此${this.editTitle === '编辑节点' ? '节点' : '连线'}, 是否继续?`, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
const cells = this.graph.getSelectedCells()
|
||||
if (cells.length) {
|
||||
this.graph.removeCells(cells)
|
||||
this.form = {}
|
||||
this.editDrawer = false
|
||||
this.$message({type: 'success',message: '删除成功!'})
|
||||
}
|
||||
}).catch(() => {})
|
||||
},
|
||||
// 删除
|
||||
deleteHandle(id, name) {
|
||||
this.$confirm(`确定对[名称=${name}]进行删除操作?`, "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
.then(() => {
|
||||
this.$http
|
||||
.delete("/basic/productWorkingprocedureRelation", { data: [id] })
|
||||
.then(({ data }) => {
|
||||
if (data && data.code === 0) {
|
||||
this.$message({
|
||||
message: "操作成功",
|
||||
type: "success",
|
||||
duration: 1500,
|
||||
onClose: () => {
|
||||
this.getList();
|
||||
},
|
||||
});
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
}, //清空画布
|
||||
deleteAll() {
|
||||
this.graph.clearCells();
|
||||
},
|
||||
//销毁画布
|
||||
GraphDelete() {
|
||||
this.graph.dispose();
|
||||
},
|
||||
},
|
||||
beforeDestroy() {
|
||||
this.graph.dispose();
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
@keyframes ant-line {
|
||||
to {
|
||||
stroke-dashoffset: -1000
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
.btn {
|
||||
background-color: #5bdeff;
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
color: white;
|
||||
cursor: move;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<style lang="scss" scoped="scoped">
|
||||
.edit-main{
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
width: 280px;
|
||||
border-left: 1px solid #f2f2f2;
|
||||
box-shadow: 0 -10px 10px rgba($color: #000000, $alpha: 0.3);
|
||||
padding: 20px;
|
||||
background: #fff;
|
||||
box-sizing: border-box;
|
||||
.edit-main-title{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
h3{
|
||||
flex: 1;
|
||||
}
|
||||
i{
|
||||
cursor: pointer;
|
||||
font-size: 20px;
|
||||
opacity: 0.7;
|
||||
&:hover{
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.form-main{
|
||||
padding: 20px 0;
|
||||
.label-style{
|
||||
background: #f2f2f2;
|
||||
padding: 0 10px;
|
||||
p{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.edit-btn{
|
||||
}
|
||||
.see-box{
|
||||
padding: 20px;
|
||||
background: #f2f2f2;
|
||||
h5{
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.see-item{
|
||||
padding: 10px 30px;
|
||||
border: 2px solid #333;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
@ -1,36 +1,12 @@
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<el-form
|
||||
style="display: flex; align-items: center; justify-content: right;"
|
||||
:inline="true"
|
||||
:model="dataForm"
|
||||
@keyup.enter.native="getDataList()"
|
||||
>
|
||||
<el-form-item>
|
||||
<el-input
|
||||
size="small"
|
||||
v-model="dataForm.paramKey"
|
||||
clearable
|
||||
placeholder="请输入关键字查询"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button size="small" @click="getDataList()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="exportHandle('工序类型')">
|
||||
<svg class="icon-svg">
|
||||
<use xlink:href="#导出"></use>
|
||||
</svg>
|
||||
导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<query-form
|
||||
:page-name="'工序类型'"
|
||||
:data-form="dataForm"
|
||||
@getDataList="getDataList"
|
||||
@addOrUpdateHandle="addOrUpdateHandle"
|
||||
@exportHandle="exportHandle"
|
||||
/>
|
||||
<el-table
|
||||
:data="dataList"
|
||||
:stripe="true"
|
||||
@ -50,8 +26,8 @@
|
||||
width="50"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" label="编码"> </el-table-column>
|
||||
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
|
||||
<el-table-column
|
||||
type="status"
|
||||
header-align="center"
|
||||
@ -133,6 +109,7 @@
|
||||
<script>
|
||||
import AddOrUpdate from './components/processType-add'
|
||||
import basicPage from '@/mixins/basic-page'
|
||||
import queryForm from './query-form'
|
||||
export default {
|
||||
mixins: [basicPage],
|
||||
data() {
|
||||
@ -147,6 +124,7 @@ export default {
|
||||
},
|
||||
components: {
|
||||
AddOrUpdate,
|
||||
queryForm,
|
||||
},
|
||||
methods: {
|
||||
},
|
||||
|
@ -7,20 +7,50 @@
|
||||
@keyup.enter.native="getDataList()"
|
||||
>
|
||||
<el-form-item>
|
||||
<el-input
|
||||
<el-input size="small" v-model="dataForm.name" clearable placeholder="请输入名称查询" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-input size="small" v-model="dataForm.code" clearable placeholder="请输入编码查询" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-select
|
||||
size="small"
|
||||
v-model="dataForm.paramKey"
|
||||
v-model="dataForm.product_type_id"
|
||||
placeholder="请选择产品类型"
|
||||
style="width:150px"
|
||||
clearable
|
||||
placeholder="请输入关键字查询"
|
||||
/>
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in productTypeArr"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-select
|
||||
size="small"
|
||||
v-model="dataForm.inspection_stage"
|
||||
placeholder="请选择检验阶段"
|
||||
style="width:150px"
|
||||
clearable
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in inspectionStageOptions"
|
||||
:key="index"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button size="small" @click="getDataList()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
|
||||
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
|
||||
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="exportHandle('产品列表')">
|
||||
@ -37,7 +67,7 @@
|
||||
:header-cell-style="{
|
||||
background: '#eef1f6',
|
||||
color: '#606266',
|
||||
height: '56px'
|
||||
height: '56px',
|
||||
}"
|
||||
v-loading="dataListLoading"
|
||||
style="width: 100%;"
|
||||
@ -51,33 +81,27 @@
|
||||
width="50"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="名称" fixed="left"> </el-table-column>
|
||||
<el-table-column prop="code" label="编码" fixed="left"> </el-table-column>
|
||||
<el-table-column prop="specifications" label="规格"> </el-table-column>
|
||||
<el-table-column prop="drawing" label="图纸"> </el-table-column>
|
||||
<el-table-column prop="productType" label="产品类型"> </el-table-column>
|
||||
<el-table-column prop="descs" label="描述"> </el-table-column>
|
||||
<el-table-column prop="remark" label="备注"> </el-table-column>
|
||||
<el-table-column prop="inspectionStandard" label="检验标准"> </el-table-column>
|
||||
<el-table-column prop="inspectionStage" label="检验阶段">
|
||||
<el-table-column prop="name" align="center" label="名称" fixed="left"> </el-table-column>
|
||||
<el-table-column prop="code" align="center" label="编码" fixed="left"> </el-table-column>
|
||||
<el-table-column prop="specifications" align="center" label="规格"> </el-table-column>
|
||||
<el-table-column prop="drawing" align="center" label="图纸"> </el-table-column>
|
||||
<el-table-column prop="productType" align="center" label="产品类型"> </el-table-column>
|
||||
<el-table-column prop="descs" align="center" label="描述"> </el-table-column>
|
||||
<el-table-column prop="remark" align="center" label="备注"> </el-table-column>
|
||||
<el-table-column prop="inspectionStandard" align="center" label="检验标准"> </el-table-column>
|
||||
<el-table-column prop="inspectionStage" align="center" label="检验阶段">
|
||||
<template slot-scope="scope">
|
||||
<div style="pointer-events: none;">
|
||||
<el-checkbox-group :value ="scope.row.inspectionStage.split(',')">
|
||||
<el-checkbox label="1">进货检验</el-checkbox>
|
||||
<el-checkbox label="2">过程检验</el-checkbox>
|
||||
<el-checkbox label="3">成品检验</el-checkbox>
|
||||
<el-checkbox label="4">出货检验</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
<el-checkbox-group :value="scope.row.inspectionStage.split(',')">
|
||||
<el-checkbox label="1">进货检验</el-checkbox>
|
||||
<el-checkbox label="2">过程检验</el-checkbox>
|
||||
<el-checkbox label="3">成品检验</el-checkbox>
|
||||
<el-checkbox label="4">出货检验</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
type="status"
|
||||
header-align="center"
|
||||
align="center"
|
||||
label="状态"
|
||||
width="80"
|
||||
>
|
||||
<el-table-column type="status" header-align="center" align="center" label="状态" width="80">
|
||||
<template slot-scope="scope">
|
||||
<el-tag :type="scope.row.status === 0 ? 'danger' : 'success'">{{
|
||||
scope.row.status === 0 ? "不可用" : "可用"
|
||||
@ -110,26 +134,11 @@
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column> -->
|
||||
<el-table-column
|
||||
fixed="right"
|
||||
header-align="center"
|
||||
align="center"
|
||||
width="150"
|
||||
label="操作"
|
||||
>
|
||||
<el-table-column fixed="right" header-align="center" align="center" width="150" label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="text"
|
||||
size="small"
|
||||
@click="addOrUpdateHandle(scope.row.id)"
|
||||
>
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
content="修改"
|
||||
placement="top"
|
||||
>
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-编辑"></use></svg>
|
||||
<el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">
|
||||
<el-tooltip class="item" effect="dark" content="修改" placement="top">
|
||||
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-编辑"></use></svg>
|
||||
</el-tooltip>
|
||||
</el-button>
|
||||
<el-popover placement="top" width="160" trigger="click" :ref="`popover-${scope.row.id}`">
|
||||
@ -181,24 +190,63 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import AddOrUpdate from './components/productList-add'
|
||||
import basicPage from '@/mixins/basic-page'
|
||||
import AddOrUpdate from "./components/productList-add";
|
||||
import basicPage from "@/mixins/basic-page";
|
||||
export default {
|
||||
mixins: [basicPage],
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
getDataListURL: '/basic/product/page',
|
||||
deleteURL: '/basic/product/delete',
|
||||
statusUrl: '/basic/product/status',
|
||||
exportUrl: '/basic/product/export'
|
||||
getDataListURL: "/basic/product/page",
|
||||
deleteURL: "/basic/product/delete",
|
||||
statusUrl: "/basic/product/status",
|
||||
exportUrl: "/basic/product/export",
|
||||
},
|
||||
productTypeArr: [],
|
||||
inspectionStageOptions: [
|
||||
{
|
||||
label: "进货检验",
|
||||
value: "1",
|
||||
},
|
||||
{
|
||||
label: "过程检验",
|
||||
value: "2",
|
||||
},
|
||||
{
|
||||
label: "成品检验",
|
||||
value: "3",
|
||||
},
|
||||
{
|
||||
label: "出货检验",
|
||||
value: "4",
|
||||
},
|
||||
],
|
||||
};
|
||||
},
|
||||
components: {
|
||||
AddOrUpdate,
|
||||
},
|
||||
created() {
|
||||
this.getArr();
|
||||
},
|
||||
methods: {
|
||||
getArr() {
|
||||
this.$http
|
||||
.get("/basic/productType/page", {
|
||||
params: {
|
||||
page: 1,
|
||||
limit: 500,
|
||||
},
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
this.productTypeArr = [];
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
this.productTypeArr = res.data.list;
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
</script>
|
||||
|
@ -1,36 +1,12 @@
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<el-form
|
||||
style="display: flex; align-items: center; justify-content: right;"
|
||||
:inline="true"
|
||||
:model="dataForm"
|
||||
@keyup.enter.native="getDataList()"
|
||||
>
|
||||
<el-form-item>
|
||||
<el-input
|
||||
size="small"
|
||||
v-model="dataForm.paramKey"
|
||||
clearable
|
||||
placeholder="请输入关键字查询"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button size="small" @click="getDataList()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="exportHandle('产品类型')">
|
||||
<svg class="icon-svg">
|
||||
<use xlink:href="#导出"></use>
|
||||
</svg>
|
||||
导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<query-form
|
||||
:page-name="'产品类型'"
|
||||
:data-form="dataForm"
|
||||
@getDataList="getDataList"
|
||||
@addOrUpdateHandle="addOrUpdateHandle"
|
||||
@exportHandle="exportHandle"
|
||||
/>
|
||||
<el-table
|
||||
:data="dataList"
|
||||
:stripe="true"
|
||||
@ -44,9 +20,9 @@
|
||||
>
|
||||
<el-table-column type="index" header-align="center" align="center" label="序号" width="50">
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" label="编码"> </el-table-column>
|
||||
<el-table-column prop="descs" label="描述"> </el-table-column>
|
||||
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
|
||||
<el-table-column prop="descs" align="center" label="描述"> </el-table-column>
|
||||
<el-table-column type="status" header-align="center" align="center" label="状态" width="80">
|
||||
<template slot-scope="scope">
|
||||
<el-tag :type="scope.row.status === 0 ? 'danger' : 'success'">{{
|
||||
@ -112,6 +88,7 @@
|
||||
<script>
|
||||
import AddOrUpdate from "./components/productType-add";
|
||||
import basicPage from '@/mixins/basic-page'
|
||||
import queryForm from './query-form'
|
||||
export default {
|
||||
mixins: [basicPage],
|
||||
data() {
|
||||
@ -126,6 +103,7 @@ export default {
|
||||
},
|
||||
components: {
|
||||
AddOrUpdate,
|
||||
queryForm,
|
||||
},
|
||||
methods: {
|
||||
},
|
||||
|
73
src/views/spc-basic/query-form.vue
Normal file
73
src/views/spc-basic/query-form.vue
Normal file
@ -0,0 +1,73 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2022-09-15 10:44:29
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2022-09-16 13:52:21
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
<el-form
|
||||
style="display: flex; align-items: center; justify-content: right;"
|
||||
:inline="true"
|
||||
:model="dataForm"
|
||||
@keyup.enter.native="getDataList()"
|
||||
>
|
||||
<el-form-item>
|
||||
<el-input size="small" v-model="dataForm.name" clearable placeholder="请输入名称查询" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-input size="small" v-model="dataForm.code" clearable placeholder="请输入编码查询" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button size="small" @click="getDataList()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="exportHandle()">
|
||||
<svg class="icon-svg">
|
||||
<use xlink:href="#导出"></use>
|
||||
</svg>
|
||||
导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
pageName: {
|
||||
type: String,
|
||||
default: () => {
|
||||
return "";
|
||||
},
|
||||
},
|
||||
dataForm: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
},
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
getDataList() {
|
||||
this.$emit("getDataList");
|
||||
},
|
||||
addOrUpdateHandle() {
|
||||
this.$emit("addOrUpdateHandle");
|
||||
},
|
||||
exportHandle() {
|
||||
this.$emit("exportHandle", this.pageName);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style></style>
|
@ -1,36 +1,12 @@
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<el-form
|
||||
style="display: flex; align-items: center; justify-content: right;"
|
||||
:inline="true"
|
||||
:model="dataForm"
|
||||
@keyup.enter.native="getDataList()"
|
||||
>
|
||||
<el-form-item>
|
||||
<el-input
|
||||
size="small"
|
||||
v-model="dataForm.paramKey"
|
||||
clearable
|
||||
placeholder="请输入关键字查询"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button size="small" @click="getDataList()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="exportHandle('站点管理')">
|
||||
<svg class="icon-svg">
|
||||
<use xlink:href="#导出"></use>
|
||||
</svg>
|
||||
导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<query-form
|
||||
:page-name="'站点管理'"
|
||||
:data-form="dataForm"
|
||||
@getDataList="getDataList"
|
||||
@addOrUpdateHandle="addOrUpdateHandle"
|
||||
@exportHandle="exportHandle"
|
||||
/>
|
||||
<el-table
|
||||
:data="dataList"
|
||||
:stripe="true"
|
||||
@ -50,9 +26,9 @@
|
||||
width="50"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" label="编码"> </el-table-column>
|
||||
<el-table-column prop="platformGroup" label="站点分组"> </el-table-column>
|
||||
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
|
||||
<el-table-column prop="platformGroup" align="center" label="站点分组"> </el-table-column>
|
||||
<el-table-column
|
||||
type="status"
|
||||
header-align="center"
|
||||
@ -139,6 +115,7 @@
|
||||
<script>
|
||||
import AddOrUpdate from './components/siteManage-add'
|
||||
import basicPage from '@/mixins/basic-page'
|
||||
import queryForm from './query-form'
|
||||
export default {
|
||||
mixins: [basicPage],
|
||||
data() {
|
||||
@ -153,6 +130,7 @@ export default {
|
||||
},
|
||||
components: {
|
||||
AddOrUpdate,
|
||||
queryForm,
|
||||
},
|
||||
methods: {
|
||||
},
|
||||
|
@ -1,36 +1,12 @@
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<el-form
|
||||
style="display: flex; align-items: center; justify-content: right;"
|
||||
:inline="true"
|
||||
:model="dataForm"
|
||||
@keyup.enter.native="getDataList()"
|
||||
>
|
||||
<el-form-item>
|
||||
<el-input
|
||||
size="small"
|
||||
v-model="dataForm.paramKey"
|
||||
clearable
|
||||
placeholder="请输入关键字查询"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button size="small" @click="getDataList()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="exportHandle('量具管理')">
|
||||
<svg class="icon-svg">
|
||||
<use xlink:href="#导出"></use>
|
||||
</svg>
|
||||
导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<query-form
|
||||
:page-name="'量具管理'"
|
||||
:data-form="dataForm"
|
||||
@getDataList="getDataList"
|
||||
@addOrUpdateHandle="addOrUpdateHandle"
|
||||
@exportHandle="exportHandle"
|
||||
/>
|
||||
<el-table
|
||||
:data="dataList"
|
||||
:stripe="true"
|
||||
@ -50,9 +26,9 @@
|
||||
width="50"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" label="编码"> </el-table-column>
|
||||
<el-table-column prop="type" label="测量类型">
|
||||
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
|
||||
<el-table-column prop="type" align="center" label="测量类型">
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
scope.row.type === '2' ? "计数" : "计量"
|
||||
@ -167,6 +143,7 @@
|
||||
import AddOrUpdate from './components/toolsType-add'
|
||||
import Detail from './components/toolsType-detail'
|
||||
import basicPage from '@/mixins/basic-page'
|
||||
import queryForm from './query-form'
|
||||
export default {
|
||||
mixins: [basicPage],
|
||||
data() {
|
||||
@ -182,6 +159,7 @@ export default {
|
||||
},
|
||||
components: {
|
||||
AddOrUpdate,
|
||||
queryForm,
|
||||
Detail
|
||||
},
|
||||
methods: {
|
||||
|
@ -1,36 +1,12 @@
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<el-form
|
||||
style="display: flex; align-items: center; justify-content: right;"
|
||||
:inline="true"
|
||||
:model="dataForm"
|
||||
@keyup.enter.native="getDataList()"
|
||||
>
|
||||
<el-form-item>
|
||||
<el-input
|
||||
size="small"
|
||||
v-model="dataForm.paramKey"
|
||||
clearable
|
||||
placeholder="请输入关键字查询"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button size="small" @click="getDataList()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="addOrUpdateHandle()">
|
||||
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="exportHandle('计量单位管理')">
|
||||
<svg class="icon-svg">
|
||||
<use xlink:href="#导出"></use>
|
||||
</svg>
|
||||
导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<query-form
|
||||
:page-name="'计量单位'"
|
||||
:data-form="dataForm"
|
||||
@getDataList="getDataList"
|
||||
@addOrUpdateHandle="addOrUpdateHandle"
|
||||
@exportHandle="exportHandle"
|
||||
/>
|
||||
<el-table
|
||||
:data="dataList"
|
||||
:stripe="true"
|
||||
@ -50,9 +26,9 @@
|
||||
width="50"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" label="编码"> </el-table-column>
|
||||
<el-table-column prop="type" label="类型">
|
||||
<el-table-column prop="name" align="center" label="名称"> </el-table-column>
|
||||
<el-table-column prop="code" align="center" label="编码"> </el-table-column>
|
||||
<el-table-column prop="type" align="center" label="类型">
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
scope.row.type === 2 ? "不可计数" : "可计数"
|
||||
@ -144,6 +120,7 @@
|
||||
|
||||
<script>
|
||||
import AddOrUpdate from './components/unitList-add'
|
||||
import queryForm from './query-form'
|
||||
import basicPage from '@/mixins/basic-page'
|
||||
export default {
|
||||
mixins: [basicPage],
|
||||
@ -159,6 +136,7 @@ export default {
|
||||
},
|
||||
components: {
|
||||
AddOrUpdate,
|
||||
queryForm,
|
||||
},
|
||||
methods: {
|
||||
},
|
||||
|
248
src/views/spc-chart/echart-2line.vue
Normal file
248
src/views/spc-chart/echart-2line.vue
Normal file
@ -0,0 +1,248 @@
|
||||
<template>
|
||||
<div class="mod-demo-echarts">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-card>
|
||||
<div id="chart2Line" class="chart-box"></div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as echarts from "echarts";
|
||||
//import testdata from './testdata'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
//testdata
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.initChartLine();
|
||||
},
|
||||
activated() {
|
||||
// 由于给echart添加了resize事件, 在组件激活时需要重新resize绘画一次, 否则出现空白bug
|
||||
if (this.chart2Line) {
|
||||
this.chart2Line.resize();
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 折线图
|
||||
initChartLine() {
|
||||
var option = {
|
||||
title: {
|
||||
text: "2折线图",
|
||||
},
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
axisPointer: {
|
||||
type: "cross",
|
||||
crossStyle: {
|
||||
color: "#999",
|
||||
},
|
||||
},
|
||||
},
|
||||
toolbox: {
|
||||
feature: {
|
||||
dataView: { show: true, readOnly: false },
|
||||
magicType: { show: true, type: ["line", "bar"] },
|
||||
restore: { show: true },
|
||||
saveAsImage: { show: true },
|
||||
},
|
||||
},
|
||||
color: ["#f8f106", "#fe7576", "#a9b0d3", "#476fd4"],
|
||||
//多个图,就有多个grid,排序默认0、1、2....
|
||||
grid: [
|
||||
//0降雨
|
||||
{ x: "7%", y: "7%", height: "35%", left: "10%" },
|
||||
//1水位流量
|
||||
{ x: "7%", y2: "7%", height: "35%", left: "10%", bottom: "15%" },
|
||||
],
|
||||
legend: {
|
||||
data: ["降水量", "测试"],
|
||||
},
|
||||
xAxis: [
|
||||
{
|
||||
show: false, //隐藏了x轴
|
||||
type: "category",
|
||||
gridIndex: 0, //对应前面grid的索引位置(第一个)
|
||||
axisTick: {
|
||||
alignWithLabel: true,
|
||||
},
|
||||
axisLabel: {
|
||||
//interval:showNum, //x轴显示的数量,我这里是动态算的
|
||||
},
|
||||
data: [
|
||||
"1月",
|
||||
"2月",
|
||||
"3月",
|
||||
"4月",
|
||||
"5月",
|
||||
"6月",
|
||||
"7月",
|
||||
"8月",
|
||||
"9月",
|
||||
"10月",
|
||||
"11月",
|
||||
"12月",
|
||||
],
|
||||
},
|
||||
{
|
||||
type: "category",
|
||||
gridIndex: 1, //对应前面grid的索引位置(第二个)
|
||||
axisTick: {
|
||||
alignWithLabel: true,
|
||||
},
|
||||
axisLabel: {
|
||||
//interval:showNum,
|
||||
},
|
||||
data: [
|
||||
"1月",
|
||||
"2月",
|
||||
"3月",
|
||||
"4月",
|
||||
"5月",
|
||||
"6月",
|
||||
"7月",
|
||||
"8月",
|
||||
"9月",
|
||||
"10月",
|
||||
"11月",
|
||||
"12月",
|
||||
],
|
||||
},
|
||||
],
|
||||
//y轴,不管有几个x轴,几个y轴,或者图,只要找到他对应的grid图的序号索引就可以精准匹配
|
||||
|
||||
yAxis: [
|
||||
{
|
||||
type: "value",
|
||||
gridIndex: 1,
|
||||
nameLocation: "middle",
|
||||
name: "降水量",
|
||||
splitLine: { show: false },
|
||||
nameTextStyle: {
|
||||
padding: 25,
|
||||
},
|
||||
position: "left",
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
//color: colors[2]
|
||||
},
|
||||
},
|
||||
axisTick: {
|
||||
show: true,
|
||||
},
|
||||
axisLabel: {
|
||||
formatter: "{value}",
|
||||
},
|
||||
},
|
||||
{
|
||||
type: "value",
|
||||
gridIndex: 0,
|
||||
name: "测试",
|
||||
splitLine: { show: false },
|
||||
nameTextStyle: {
|
||||
padding: 25,
|
||||
},
|
||||
nameLocation: "middle",
|
||||
position: "left",
|
||||
//nameLocation: 'start',//y轴name的位置
|
||||
//inverse: true,
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
//color: colors[1]
|
||||
},
|
||||
},
|
||||
axisTick: {
|
||||
show: true,
|
||||
},
|
||||
axisLabel: {
|
||||
formatter: "{value}",
|
||||
textStyle: {
|
||||
fontSize: 12, //y轴坐标轴上的字体大小
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
dataZoom: [
|
||||
// 轴放大
|
||||
{
|
||||
type: 'inside',
|
||||
start: 0,
|
||||
end: 100
|
||||
},
|
||||
{
|
||||
start: 0,
|
||||
end: 100
|
||||
},
|
||||
{
|
||||
type: 'inside',
|
||||
xAxisIndex: [0,1],
|
||||
start: 0,
|
||||
end: 100
|
||||
},
|
||||
{
|
||||
show: true,
|
||||
yAxisIndex: 0,
|
||||
realtime: true,
|
||||
left: 6,
|
||||
start: 0,
|
||||
end: 100
|
||||
},
|
||||
{
|
||||
show: true,
|
||||
yAxisIndex: 1,
|
||||
realtime: true,
|
||||
left: 6,
|
||||
start: 0,
|
||||
end: 100
|
||||
},
|
||||
],
|
||||
series: [
|
||||
{
|
||||
name: "降水量",
|
||||
type: "line",
|
||||
xAxisIndex: 0,
|
||||
yAxisIndex: 1,
|
||||
data: [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3],
|
||||
},
|
||||
{
|
||||
name: "测试",
|
||||
type: "line",
|
||||
xAxisIndex: 1,
|
||||
yAxisIndex: 0,
|
||||
data: [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2],
|
||||
},
|
||||
],
|
||||
};
|
||||
this.chart2Line = echarts.init(document.getElementById("chart2Line"));
|
||||
this.chart2Line.setOption(option);
|
||||
window.addEventListener("resize", () => {
|
||||
this.chart2Line.resize();
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.mod-demo-echarts {
|
||||
> .el-row {
|
||||
margin-top: -10px;
|
||||
margin-bottom: -10px;
|
||||
.el-col {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
}
|
||||
.chart-box {
|
||||
min-height: 400px;
|
||||
}
|
||||
}
|
||||
</style>
|
Loading…
Reference in New Issue
Block a user