初次对接

This commit is contained in:
刘晓鹏 2025-04-11 18:00:39 +08:00
parent 5465099c77
commit 0d3bf51c2b
11 changed files with 792 additions and 413 deletions

350
package-lock.json generated
View File

@ -20,6 +20,7 @@
"echarts-gl": "^2.0.9",
"echarts-wordcloud": "^2.1.0",
"element-plus": "^2.6.1",
"html2canvas": "^1.4.1",
"js-cookie": "^3.0.5",
"js-table2excel": "^1.1.2",
"jsplumb": "^2.15.6",
@ -37,6 +38,7 @@
"vue-demi": "^0.14.7",
"vue-grid-layout": "^3.0.0-beta1",
"vue-i18n": "^9.10.2",
"vue-qr": "^4.0.9",
"vue-router": "^4.3.0"
},
"devDependencies": {
@ -1798,8 +1800,16 @@
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"node_modules/base64-arraybuffer": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
"integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
"license": "MIT",
"engines": {
"node": ">= 0.6.0"
}
},
"node_modules/batch-processor": {
"version": "1.0.0",
@ -2004,6 +2014,15 @@
"node": ">= 8"
}
},
"node_modules/css-line-break": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz",
"integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
"license": "MIT",
"dependencies": {
"utrie": "^1.0.2"
}
},
"node_modules/cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
@ -2052,6 +2071,21 @@
}
}
},
"node_modules/decompress-response": {
"version": "6.0.0",
"resolved": "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz",
"integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
"license": "MIT",
"dependencies": {
"mimic-response": "^3.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
@ -2652,8 +2686,7 @@
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
"dev": true
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
"node_modules/fsevents": {
"version": "2.3.3",
@ -2855,6 +2888,19 @@
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/html2canvas": {
"version": "1.4.1",
"resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz",
"integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
"license": "MIT",
"dependencies": {
"css-line-break": "^2.1.0",
"text-segmentation": "^1.0.3"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/i18next": {
"version": "20.6.1",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-20.6.1.tgz",
@ -2916,7 +2962,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"dev": true,
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@ -2925,8 +2970,7 @@
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"node_modules/is-binary-path": {
"version": "2.1.0",
@ -3012,6 +3056,12 @@
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"dev": true
},
"node_modules/js-binary-schema-parser": {
"version": "2.0.3",
"resolved": "https://registry.npmmirror.com/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz",
"integrity": "sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg==",
"license": "MIT"
},
"node_modules/js-cookie": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz",
@ -3230,6 +3280,18 @@
"node": ">= 0.6"
}
},
"node_modules/mimic-response": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz",
"integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@ -3329,7 +3391,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dev": true,
"dependencies": {
"wrappy": "1"
}
@ -3393,6 +3454,12 @@
"node": ">=6"
}
},
"node_modules/parenthesis": {
"version": "3.1.8",
"resolved": "https://registry.npmmirror.com/parenthesis/-/parenthesis-3.1.8.tgz",
"integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==",
"license": "MIT"
},
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@ -3827,6 +3894,51 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/simple-concat": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/simple-concat/-/simple-concat-1.0.1.tgz",
"integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
],
"license": "MIT"
},
"node_modules/simple-get": {
"version": "4.0.1",
"resolved": "https://registry.npmmirror.com/simple-get/-/simple-get-4.0.1.tgz",
"integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
],
"license": "MIT",
"dependencies": {
"decompress-response": "^6.0.0",
"once": "^1.3.1",
"simple-concat": "^1.0.0"
}
},
"node_modules/slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@ -3898,6 +4010,15 @@
"resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-3.0.0.tgz",
"integrity": "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA=="
},
"node_modules/string-split-by": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/string-split-by/-/string-split-by-1.0.0.tgz",
"integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==",
"license": "MIT",
"dependencies": {
"parenthesis": "^3.1.5"
}
},
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@ -3934,6 +4055,15 @@
"node": ">=8"
}
},
"node_modules/text-segmentation": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz",
"integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
"license": "MIT",
"dependencies": {
"utrie": "^1.0.2"
}
},
"node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@ -4051,6 +4181,15 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true
},
"node_modules/utrie": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz",
"integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
"license": "MIT",
"dependencies": {
"base64-arraybuffer": "^1.0.2"
}
},
"node_modules/vite": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.1.6.tgz",
@ -4281,6 +4420,59 @@
"vue": "^3.0.0"
}
},
"node_modules/vue-qr": {
"version": "4.0.9",
"resolved": "https://registry.npmmirror.com/vue-qr/-/vue-qr-4.0.9.tgz",
"integrity": "sha512-pAISV94T0MNEYA3NGjykUpsXRE2QfaNxlu9ZhEL6CERgqNc21hJYuP3hRVzAWfBQlgO18DPmZTbrFerJC3+Ikw==",
"license": "MIT",
"dependencies": {
"glob": "^8.0.1",
"js-binary-schema-parser": "^2.0.2",
"simple-get": "^4.0.1",
"string-split-by": "^1.0.0"
}
},
"node_modules/vue-qr/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/vue-qr/node_modules/glob": {
"version": "8.1.0",
"resolved": "https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz",
"integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"deprecated": "Glob versions prior to v9 are no longer supported",
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^5.0.1",
"once": "^1.3.0"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/vue-qr/node_modules/minimatch": {
"version": "5.1.6",
"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=10"
}
},
"node_modules/vue-router": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.3.0.tgz",
@ -4318,8 +4510,7 @@
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
"dev": true
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"node_modules/xml-name-validator": {
"version": "4.0.0",
@ -5474,8 +5665,12 @@
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"base64-arraybuffer": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
"integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ=="
},
"batch-processor": {
"version": "1.0.0",
@ -5638,6 +5833,14 @@
"which": "^2.0.1"
}
},
"css-line-break": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz",
"integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
"requires": {
"utrie": "^1.0.2"
}
},
"cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
@ -5672,6 +5875,14 @@
"ms": "2.1.2"
}
},
"decompress-response": {
"version": "6.0.0",
"resolved": "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz",
"integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
"requires": {
"mimic-response": "^3.1.0"
}
},
"deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
@ -6138,8 +6349,7 @@
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
"dev": true
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
"fsevents": {
"version": "2.3.3",
@ -6276,6 +6486,15 @@
"resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
"integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A=="
},
"html2canvas": {
"version": "1.4.1",
"resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz",
"integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
"requires": {
"css-line-break": "^2.1.0",
"text-segmentation": "^1.0.3"
}
},
"i18next": {
"version": "20.6.1",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-20.6.1.tgz",
@ -6321,7 +6540,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
@ -6330,8 +6548,7 @@
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"is-binary-path": {
"version": "2.1.0",
@ -6399,6 +6616,11 @@
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"dev": true
},
"js-binary-schema-parser": {
"version": "2.0.3",
"resolved": "https://registry.npmmirror.com/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz",
"integrity": "sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg=="
},
"js-cookie": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz",
@ -6581,6 +6803,11 @@
"mime-db": "1.52.0"
}
},
"mimic-response": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz",
"integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="
},
"minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@ -6656,7 +6883,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dev": true,
"requires": {
"wrappy": "1"
}
@ -6702,6 +6928,11 @@
"callsites": "^3.0.0"
}
},
"parenthesis": {
"version": "3.1.8",
"resolved": "https://registry.npmmirror.com/parenthesis/-/parenthesis-3.1.8.tgz",
"integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw=="
},
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@ -6967,6 +7198,21 @@
"object-inspect": "^1.13.1"
}
},
"simple-concat": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/simple-concat/-/simple-concat-1.0.1.tgz",
"integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="
},
"simple-get": {
"version": "4.0.1",
"resolved": "https://registry.npmmirror.com/simple-get/-/simple-get-4.0.1.tgz",
"integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
"requires": {
"decompress-response": "^6.0.0",
"once": "^1.3.1",
"simple-concat": "^1.0.0"
}
},
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@ -7022,6 +7268,14 @@
"resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-3.0.0.tgz",
"integrity": "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA=="
},
"string-split-by": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/string-split-by/-/string-split-by-1.0.0.tgz",
"integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==",
"requires": {
"parenthesis": "^3.1.5"
}
},
"strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@ -7046,6 +7300,14 @@
"has-flag": "^4.0.0"
}
},
"text-segmentation": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz",
"integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
"requires": {
"utrie": "^1.0.2"
}
},
"text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@ -7136,6 +7398,14 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true
},
"utrie": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz",
"integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
"requires": {
"base64-arraybuffer": "^1.0.2"
}
},
"vite": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.1.6.tgz",
@ -7270,6 +7540,47 @@
"@vue/devtools-api": "^6.5.0"
}
},
"vue-qr": {
"version": "4.0.9",
"resolved": "https://registry.npmmirror.com/vue-qr/-/vue-qr-4.0.9.tgz",
"integrity": "sha512-pAISV94T0MNEYA3NGjykUpsXRE2QfaNxlu9ZhEL6CERgqNc21hJYuP3hRVzAWfBQlgO18DPmZTbrFerJC3+Ikw==",
"requires": {
"glob": "^8.0.1",
"js-binary-schema-parser": "^2.0.2",
"simple-get": "^4.0.1",
"string-split-by": "^1.0.0"
},
"dependencies": {
"brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"requires": {
"balanced-match": "^1.0.0"
}
},
"glob": {
"version": "8.1.0",
"resolved": "https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz",
"integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^5.0.1",
"once": "^1.3.0"
}
},
"minimatch": {
"version": "5.1.6",
"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"requires": {
"brace-expansion": "^2.0.1"
}
}
}
},
"vue-router": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.3.0.tgz",
@ -7295,8 +7606,7 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
"dev": true
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"xml-name-validator": {
"version": "4.0.0",

View File

@ -21,6 +21,7 @@
"echarts-gl": "^2.0.9",
"echarts-wordcloud": "^2.1.0",
"element-plus": "^2.6.1",
"html2canvas": "^1.4.1",
"js-cookie": "^3.0.5",
"js-table2excel": "^1.1.2",
"jsplumb": "^2.15.6",
@ -38,6 +39,7 @@
"vue-demi": "^0.14.7",
"vue-grid-layout": "^3.0.0-beta1",
"vue-i18n": "^9.10.2",
"vue-qr": "^4.0.9",
"vue-router": "^4.3.0"
},
"devDependencies": {

View File

@ -35,16 +35,16 @@ service.interceptors.response.use(
(response) => {
// 对响应数据做点什么
const res = response.data;
if (res.code && res.code !== 0) {
// `token` 过期或者账号已在别处登录
if (res.code === 401 || res.code === 4001) {
if(res.resultCode != 0){
ElMessage.error(res.errorMessage);
if(res.resultCode === -2){
Session.clear(); // 清除浏览器全部临时缓存
window.location.href = '/'; // 去登录页
ElMessageBox.alert('你已被登出,请重新登录', '提示', {})
.then(() => {})
.catch(() => {});
}
return Promise.reject(service.interceptors.response);
// return Promise.reject(service.interceptors.response);
} else {
return res;
}

View File

@ -78,6 +78,7 @@ const onSignIn = () => {
userName: state.ruleForm.userName,
passWord: state.ruleForm.password,
}).then( async (res:any) => {
state.loading.signIn = false;
console.log(res)
if(res.data !== null){
// token

View File

@ -2,35 +2,69 @@
<div class="orderPrinting" ref="orderPrintingRef">
<div class="title">采购送货单</div>
<div class="orderPrintingTop">
<div class="item item1"></div>
<div class="item item1">
<VueQr style="width: 150px; height: 150px" :text="state.pageData.fBillNo" :size="150"></VueQr>
</div>
<div class="item item2">
<div class="dataText">
<span class="span1">收料通知单编号送货单号</span>
<span class="span2">123465</span>
<span class="span2">{{ state.pageData.fBillNo }}</span>
</div>
<div class="dataText">
<span class="span1">供应商名称</span>
<span class="span2">123465</span>
<span class="span2">{{ state.pageData.supplierName }}</span>
</div>
<div class="dataText">
<span class="span1">送货日期</span>
<span class="span2">123465</span>
<span class="span2">{{ state.pageData.deliveryDate }}</span>
</div>
<div class="dataText">
<span class="span1">发票号</span>
<span class="span2">123465</span>
<span class="span2">{{ state.pageData.f_VHUB_Text }}</span>
</div>
</div>
<div class="item item3"></div>
<div class="item item3">
<VueQr style="width: 150px; height: 150px" :text="state.pageData.f_VHUB_Text" :size="150"></VueQr>
</div>
<avue-crud ref="crudRef" :data="state.data" :option="state.option"> </avue-crud>
</div>
<avue-crud ref="crudRef" :data="props.data" :option="state.option"></avue-crud>
</div>
</template>
<script setup lang="ts">
import { reactive,ref } from 'vue';
const orderPrintingRef = ref()
import { reactive, ref, defineProps, watch } from 'vue';
import VueQr from 'vue-qr/src/packages/vue-qr.vue';
const orderPrintingRef = ref();
const props = defineProps({
data: {
type: Array,
default: () => [],
},
});
watch(
() => props.data,
(newData) => {
// console.log(JSON.parse(JSON.stringify(newData)))
let arr = []
arr = JSON.parse(JSON.stringify(newData))
// console.log(arr.length)
// debugger
if(arr.length !== 0){
state.pageData.fBillNo = arr[0].fBillNo
state.pageData.supplierName = arr[0].supplierName
state.pageData.deliveryDate = arr[0].deliveryDate
state.pageData.f_VHUB_Text = arr[0].f_VHUB_Text
}
}
);
const state = reactive({
pageData: {
fBillNo: '',
supplierName: '',
deliveryDate: '',
f_VHUB_Text: '',
},
option: {
tip: false,
index: false,
@ -46,34 +80,43 @@ const state = reactive({
menu: false,
column: [
{ label: 'PO号', prop: 'purchaseOrderFBillNo' },
{ label: '物料代码', prop: 'sheet' },
{ label: '物料名称', prop: 'fBillNo' },
{ label: '单位', prop: 'mssSupplierLot' },
{ label: 'PO数量', prop: 'fSupplierLot' },
{ label: '实收数量', prop: 'materialCode' },
{ label: '美金单价', prop: 'materialName' },
{ label: '供应商批号', prop: 'sendedQty' },
{ label: '物料代码', prop: 'materialCode' },
{ label: '物料名称', prop: 'materialName' },
{ label: '单位', prop: 'unitName' },
{ label: 'PO数量', prop: 'purchaseQty' },
{ label: '送货数量', prop: 'qty' },
{ label: '美塞斯批号', prop: 'mssSupplierLot' },
{ label: '供应商批号', prop: 'fSupplierLot' },
],
},
data: [
{
purchaseOrderFBillNo: 1,
sheet: 1,
fBillNo: 1,
mssSupplierLot: 1,
fSupplierLot: 1,
materialCode: 1,
materialName: 1,
sendedQty: 1,
}
],
});
defineExpose({
orderPrintingRef
orderPrintingRef,
});
</script>
<style scoped lang="scss">
:deep(.el-table__inner-wrapper) {
box-sizing: border-box;
//border: 1px solid black;
}
:deep(.is-leaf) {
border-color: black;
}
:deep(.el-table__cell) {
border-color: black;
}
:deep(.el-table__cell) {
border-color: black !important;
}
:deep(.el-card) {
border: 1px solid black !important;
}
:deep(.avue-crud__header) {
display: none;
}
@ -97,35 +140,47 @@ defineExpose({
}
.orderPrintingTop {
height: 200px;
border: 1px solid #c2c4ca;
height: 161px;
border: 1px solid #000000;
box-sizing: border-box;
display: flex;
.item1 {
width: 33.33%;
height: 199px;
border-right: 1px solid #c2c4ca;
height: 160px;
border-right: 1px solid #000000;
display: flex;
justify-content: center;
align-items: center;
}
.item2 {
width: 33.33%;
height: 199px;
border-right: 1px solid #c2c4ca;
height: 160px;
border-right: 1px solid #000000;
box-sizing: border-box;
padding: 16px;
.dataText {
font-size: 16px;
margin-bottom: 16px;
color: #000000;
}
}
.item2 {
width: 33.33%;
height: 199px;
height: 160px;
//border-right: 1px solid black;
}
.item3 {
width: 33.33%;
height: 160px;
display: flex;
justify-content: center;
align-items: center;
}
}
}
</style>

View File

@ -27,7 +27,7 @@
<template #menu-left>
<div class="selectBoxes">
<div class="selectItem">
<el-input v-model="state.formData.fBillNo" style="width: 240px" placeholder="单据编号" size="default" />
<el-input v-model="state.formData.purchaseOrderFBillNo" style="width: 240px" placeholder="采购单号" size="default" />
</div>
<div class="selectItem">
<el-date-picker
@ -52,24 +52,25 @@
</template>
<template #menu>
<div class="btnList">
<el-button type="text" @click="state.selectedDataShow = true">打印单据</el-button>
<el-button type="text" @click="state.selectedDataShow = true">打印条码</el-button>
</div>
</template>
</avue-crud>
</el-card>
<selectedData :showes="state.selectedDataShow"/>
<selectedData :listData="state.selectedData" :showes="state.selectedDataShow" @close="() => {state.selectedDataShow = false}"/>
</div>
</template>
<script lang="ts" setup>
import { reactive, onMounted, computed, nextTick, ref } from 'vue';
import { useRouter } from 'vue-router';
import { reactive, onMounted, computed, nextTick } from 'vue';
// import { useRouter } from 'vue-router';
import { listApi } from '../../api/list/index';
import { useI18n } from 'vue-i18n';
import SelectedData from '/@/views/materialReceiptNotice/selectedData.vue';
import { ElMessage } from 'element-plus';
// import { ElMessage } from 'element-plus';
const { t } = useI18n();
const router = useRouter();
// const router = useRouter();
//
const state = reactive({
page: {
@ -78,7 +79,7 @@ const state = reactive({
pageSize: 30,
},
option: {
height: '720',
height: computed(() => window.innerHeight - (window.innerHeight * 0.25) + '') ,
tip: false,
index: false,
menuWidth: 120,
@ -86,7 +87,6 @@ const state = reactive({
delBtn: false,
editBtn: false,
align: 'center',
// searchLabelWidth:100,
selection: true,
searchMenuSpan: 3,
addBtn: false,
@ -99,14 +99,14 @@ const state = reactive({
searchRange: true,
width:'160'
},
{ label: '采购单号', prop: 'purchaseOrderFBillNo',width:'120' },
{ label: '采购单号', prop: 'purchaseOrderFBillNo',width:'120' },
{ label: '发货单号', prop: 'sheet',width:'135' },
{ label: '收料单号', prop: 'fBillNo',width:'120' },
{ label: '收料单号', prop: 'fBillNo',width:'110' },
{ label: '美塞斯批号', prop: 'mssSupplierLot',width:'90' },
{ label: '供应商批号', prop: 'fSupplierLot',width:'90' },
{ label: '物料编码', prop: 'materialCode',width:'120' },
{ label: '物料名称', prop: 'materialName' },
{ label: computed(() => t('message.list.PONumber2')), prop: 'purchaseOrderFBillNo',width:'110' },
{ label: computed(() => t('message.list.SupplierCode2')), prop: 'supplierId',width:'90' },
{ label: computed(() => t('message.list.SupplierName2')), prop: 'supplierName',width:'120' },
{ label: '累计收料数量', prop: 'sendedQty',width:'110' },
@ -118,7 +118,7 @@ const state = reactive({
data: [],
elDatePicker: '',
formData: {
fBillNo: '',
purchaseOrderFBillNo: '',
fDateBegin: '',
fDateEmd: '',
fmrpCloseStatus: '',
@ -126,7 +126,7 @@ const state = reactive({
selectedData: [],
chengNuoJiaoQiP: '',
newChengNuoJiaoQiP: '',
selectedDataShow: true,
selectedDataShow: false,
loading: false,
});
const selectionChange = (list: any) => {
@ -134,66 +134,7 @@ const selectionChange = (list: any) => {
state.selectedData = JSON.parse(JSON.stringify(list));
});
};
const chengNuoJiaoQiPFun = (e: string) => {
if (state.selectedData.length != 0) {
let arr: any = [];
if (e === '0') {
state.selectedData.forEach((item: any) => {
arr.push({ id: item.id, newTime: state.chengNuoJiaoQiP });
});
batchSetChengNuoJiaoQiFun(arr);
}
if (e === '1') {
state.selectedData.forEach((item: any) => {
arr.push({ id: item.id, newTime: state.newChengNuoJiaoQiP });
});
batchSetNewChengNuoJiaoQiFun(arr);
}
} else {
ElMessage.warning('请先选中数据');
}
};
const batchSetChengNuoJiaoQiFun = (arr: any) => {
listApi()
.batchSetChengNuoJiaoQi(arr)
.then((res: any) => {
if (res.resultCode === 0) {
ElMessage.success('操作成功');
getList();
state.chengNuoJiaoQiP = '';
}
if (res.resultCode === -1) {
ElMessage.success(res.errorMessage);
state.newChengNuoJiaoQiP = '';
}
});
};
const batchSetNewChengNuoJiaoQiFun = (arr: any) => {
listApi()
.batchSetNewChengNuoJiaoQi(arr)
.then((res: any) => {
if (res.resultCode === 0) {
ElMessage.success('操作成功');
getList();
}
if (res.resultCode === -1) {
ElMessage.success(res.errorMessage);
}
});
};
const generateDocumentsFun = () => {
state.selectedDataShow = false;
getList();
};
//
const toPurchaseDetails = (item: any) => {
router.push({
path: '/purchaseDetails',
query: {
topId: item.fiD,
},
});
};
const elDatePickerFun = (val: any) => {
state.formData.fDateBegin = val[0];
state.formData.fDateEmd = val[1];
@ -206,10 +147,10 @@ const selectFun = () => {
};
const resetFun = () => {
state.page.currentPage = 1;
state.page.pageSize = 20;
state.page.pageSize = 30;
state.elDatePicker = '';
state.formData = {
fBillNo: '',
purchaseOrderFBillNo: '',
fDateBegin: '',
fDateEmd: '',
fmrpCloseStatus: '',
@ -238,7 +179,9 @@ const getList = () => {
});
};
//
onMounted(() => {});
onMounted(() => {
// console.log(window.innerHeight - 400)
});
</script>
<style lang="scss" scoped>
@ -249,7 +192,10 @@ onMounted(() => {});
:deep(.avue-crud__left) {
flex: 1;
}
:deep(.el-button--text){
padding: 0 !important;
height: auto !important;
}
:deep(.avue-crud__refreshBtn) {
display: none;
}

View File

@ -1,17 +1,21 @@
<template>
<el-dialog :model-value="props.showes" width="70%">
<ceshi ref="ceshiRef"></ceshi>
<el-dialog :model-value="props.showes" @close="closeFun" width="70%">
<div ref="ceshiRef">
<ceshi id="ceshi" :data="props.listData"></ceshi>
</div>
<div class="btnList">
<el-button type="primary" @click="printElement">打印</el-button>
</div>
</el-dialog>
</template>
<script setup lang="ts">
import { defineProps, reactive, ref, nextTick } from 'vue';
import { defineProps, reactive, ref, nextTick, defineEmits } from 'vue';
import ceshi from './ceshi.vue';
import printJS from 'print-js';
import html2canvas from 'html2canvas';
const ceshiRef = ref(null);
const ceshiRef = ref();
const emits = defineEmits(['close']);
const props = defineProps({
listData: {
type: Array,
@ -23,29 +27,43 @@ const props = defineProps({
},
});
const state = reactive({
dialogVisible: true,
snapshotUrl: '',
});
const closeFun = () => {
emits('close');
};
const printElement = () => {
captureSnapshot();
// DOM HTML
nextTick(() => {
console.log(ceshiRef.value.orderPrintingRef);
// // 使 print-js
printJS({
printable: ceshiRef.value.orderPrintingRef,
type: 'html', // HTML
printable: state.snapshotUrl,
type: 'image',
style: `
@page {
margin: 0;
size: auto;
margin: 0mm;
}
@page :header, @page :footer {
display: none;
body {
margin: 0;
padding: 36px;
}
`,
});
});
};
//
const captureSnapshot = async () => {
// 使 html2canvas div Canvas
const canvas = await html2canvas(ceshiRef.value, {
allowTaint: true, //
useCORS: true, // 使 CORS
scale: 2, //
width: ceshiRef.value.clientWidth,
height: ceshiRef.value.clientHeight,
});
state.snapshotUrl = canvas.toDataURL('image/png');
};
</script>
<style scoped lang="scss">
.btnList {

View File

@ -137,11 +137,11 @@ const state = reactive({
pageSize: 30,
},
option: {
height: '730',
height: computed(() => window.innerHeight - (window.innerHeight * 0.23) + ''),
tip: false,
index: true,
menu: true,
menuWidth: 120,
menuWidth: 85,
border: true,
delBtn: false,
editBtn: false,
@ -152,7 +152,7 @@ const state = reactive({
searchMenuSpan: 3,
addBtn: false,
column: [
{ label: '据编号', prop: 'fBillNo', /*search: true,*/ searchSpan: 3, width: '125' },
{ label: '采购单号', prop: 'fBillNo', /*search: true,*/ searchSpan: 3, width: '125' },
{ label: '采购日期', prop: 'fDate', /*search: true,*/ type: 'datetime', searchSpan: 6, searchRange: true },
{
label: '关闭状态',
@ -180,8 +180,8 @@ const state = reactive({
},
{ label: '累计收料数量', prop: 'sendedQty', width: '110' },
{ label: '剩余收料数量', prop: 'notSendQty', width: '110' },
{ label: '供应商承诺交期', prop: 'chengNuoJiaoQi', width: '220' },
{ label: '供应商承诺最新交期', prop: 'newChengNuoJiaoQi', width: '220' },
{ label: '供应商承诺交期', prop: 'chengNuoJiaoQi', width: '160' },
{ label: '供应商承诺最新交期', prop: 'newChengNuoJiaoQi', width: '160' },
],
},
data: [],
@ -259,7 +259,7 @@ const toPurchaseDetails = (item: any) => {
router.push({
path: '/purchaseDetails',
query: {
topId: item.fiD,
fBillNo: item.fBillNo ,
},
});
};
@ -275,7 +275,7 @@ const selectFun = () => {
};
const resetFun = () => {
state.page.currentPage = 1;
state.page.pageSize = 20;
state.page.pageSize = 30;
state.elDatePicker = '';
state.formData = {
fBillNo: '',
@ -300,20 +300,16 @@ const getList = () => {
})
.then((res: any) => {
state.loading = false;
if (res.resultCode === 0) {
state.data = res.data.dataList;
state.page.total = res.data.total;
setTimeout(() => {
console.log(document.querySelector('.avue-crud__body').scrollHeight)
},1000)
}
});
};
//
onMounted(() => {
console.log(window.innerHeight - window.innerHeight * 0.25 + '')
});
</script>

View File

@ -1,6 +1,32 @@
<template>
<div class="system-user-container layout-padding">
<el-card class="layout-padding-auto" shadow="hover">
<div class="selectBoxes">
<div class="selectItem" style="flex: 1;margin-right: 0">
<div class="piliang">
<el-button type="primary" size="small" @click="state.selectedDataShow = true">
<span>已选中 {{ state.selectedData.length }} 条数据去查看</span>
</el-button>
<el-date-picker
v-model="state.chengNuoJiaoQiP"
type="date"
placeholder="批量修改选中承诺日期"
size="small"
style="width: 45%; margin-left: 12px"
@change="chengNuoJiaoQiPFun('0')"
/>
<el-date-picker
v-model="state.newChengNuoJiaoQiP"
type="date"
placeholder="批量修改选中承诺最新交期"
size="small"
style="width: 45%; margin-left: 12px"
@change="chengNuoJiaoQiPFun('1')"
/>
</div>
</div>
</div>
<avue-crud
ref="crudRef"
:data="state.data"
@ -65,7 +91,7 @@ const state = reactive({
pageSize: 25,
},
option: {
height: '790',
height: computed(() => window.innerHeight - (window.innerHeight * 0.18) + ''),
tip: false,
index: true,
menuWidth: 120,
@ -129,6 +155,7 @@ const state = reactive({
const selectionChange = (list: any) => {
state.selectedData = list;
};
const chengNuoJiaoQiPFun = (e: string) => {
if (state.selectedData.length != 0) {
let arr: any = [];
@ -136,13 +163,13 @@ const chengNuoJiaoQiPFun = (e: string) => {
state.selectedData.forEach((item: any) => {
arr.push({ id: item.id, newTime: state.chengNuoJiaoQiP });
});
batchSetChengNuoJiaoQiFun(arr)
batchSetChengNuoJiaoQiFun(arr);
}
if (e === '1') {
state.selectedData.forEach((item: any) => {
arr.push({ id: item.id, newTime: state.newChengNuoJiaoQiP });
});
batchSetNewChengNuoJiaoQiFun(arr)
batchSetNewChengNuoJiaoQiFun(arr);
}
} else {
ElMessage.warning('请先选中数据');
@ -176,52 +203,28 @@ const generateDocumentsFun = () => {
state.selectedDataShow = false
getList()
}
//
const toPurchaseDetails = (item: any) => {
router.push({
path: '/purchaseDetails',
query: {
topId: item.fiD,
},
});
};
const elDatePickerFun = (val: any) => {
state.formData.fDateBegin = val[0];
state.formData.fDateEmd = val[1];
};
//
const selectFun = () => {
state.page.currentPage = 1;
state.page.pageSize = 20;
getList();
};
const resetFun = () => {
state.page.currentPage = 1;
state.page.pageSize = 20;
state.elDatePicker = '';
state.formData = {
fBillNo: '',
fDateBegin: '',
fDateEmd: '',
fmrpCloseStatus: '',
};
getList();
};
const getList = () => {
state.loading = true
listApi().getPurchaseOrderItemList({
fid:state.topId
}).then((res:any) => {
state.loading = false
if(res.resultCode === 0){
state.data = res.data
}
state.loading = true;
listApi()
.getPageList({
condition: {
fBillNo:state.formData.fBillNo
},
pageSize: state.page.pageSize,
page: state.page.currentPage,
})
.then((res: any) => {
state.loading = false;
if (res.resultCode === 0) {
state.data = res.data.dataList;
state.page.total = res.data.total;
}
});
};
//
onMounted(() => {
state.topId = route.query.topId as string
state.formData.fBillNo = route.query.fBillNo as string
getList()
});
</script>
@ -281,6 +284,7 @@ onMounted(() => {
.selectBoxes {
display: flex;
flex-wrap: wrap;
width: 650px;
.selectItem {
margin-right: 16px;
display: flex;

View File

@ -1,15 +1,18 @@
<template>
<el-dialog :model-value="props.showes" @close="closeFun" width="80%">
<avue-crud
ref="crudRef"
:data="state.data"
:option="state.option"
>
<div style="display: flex; align-items: center; margin-bottom: 16px">
<div>发票号</div>
<el-input style="width: 300px" v-model="state.f_VHUB_Text" placeholder="请填写发票号" size="default" />
</div>
<avue-crud ref="crudRef" :data="state.data" :option="state.option">
<template #fSupplierLot="{ row }">
<div style="display: flex; align-items: center; justify-content: center">
<el-input v-model="row.fSupplierLot" placeholder="批号" size="small" />
</div>
</template>
<template #notSendQtyText="{ row }">
<div>{{row.notSendQty}}</div>
</template>
<template #notSendQty="{ row }">
<div style="display: flex; align-items: center; justify-content: center">
<el-input-number v-model="row.notSendQty" size="small" />
@ -17,14 +20,26 @@
</template>
<template #chengNuoJiaoQi="{ row }">
<div style="display: flex; align-items: center; justify-content: center">
<el-date-picker v-model="row.chengNuoJiaoQi" type="date" size="small" style="width: 100%" format="YYYY/MM/DD"
@change="batchSetChengNuoJiaoQiFun([{id:row.id,newTime:row.chengNuoJiaoQi}])"/>
<el-date-picker
v-model="row.chengNuoJiaoQi"
type="date"
size="small"
style="width: 100%"
format="YYYY/MM/DD"
@change="batchSetChengNuoJiaoQiFun([{ id: row.id, newTime: row.chengNuoJiaoQi }])"
/>
</div>
</template>
<template #newChengNuoJiaoQi="{ row }">
<div style="display: flex; align-items: center; justify-content: center">
<el-date-picker v-model="row.newChengNuoJiaoQi" type="date" size="small" style="width: 100%" format="YYYY/MM/DD"
@change="batchSetNewChengNuoJiaoQiFun([{id:row.id,newTime:row.newChengNuoJiaoQi}])"/>
<el-date-picker
v-model="row.newChengNuoJiaoQi"
type="date"
size="small"
style="width: 100%"
format="YYYY/MM/DD"
@change="batchSetNewChengNuoJiaoQiFun([{ id: row.id, newTime: row.newChengNuoJiaoQi }])"
/>
</div>
</template>
<template #menu-left>
@ -33,7 +48,7 @@
v-model="state.chengNuoJiaoQiP"
type="date"
placeholder="批量修改选中承诺日期"
style="width: 190px;"
style="width: 190px"
@change="chengNuoJiaoQiPFun('0')"
/>
<el-date-picker
@ -48,16 +63,18 @@
</template>
</avue-crud>
<div class="btnList">
<el-button type="primary" @click="batchAddInvoiceOrderFun">确定</el-button>
<el-button type="primary" :loading="state.loading" @click="batchAddInvoiceOrderFun">确定</el-button>
</div>
</el-dialog>
</template>
<script setup lang="ts">
import { defineProps, reactive, defineEmits, watch } from 'vue';
import { listApi } from '../../api/list/index'
import { listApi } from '../../api/list/index';
const emits = defineEmits(['generateDocuments', 'close']);
import { useI18n } from 'vue-i18n';
import {ElMessage} from "element-plus";
import { ElMessage } from 'element-plus';
const { t } = useI18n();
const props = defineProps({
listData: {
@ -71,6 +88,8 @@ const props = defineProps({
});
const state = reactive({
loading:false,
f_VHUB_Text: '',
fSupplierLot: '',
dialogVisible: true,
data: [],
@ -96,6 +115,7 @@ const state = reactive({
{ label: '采购单位', prop: 'unitName' },
{ label: '采购数量', prop: 'qty' },
{ label: '已发货数量', prop: 'sendedQty' },
{ label: '剩余收料数量', prop: 'notSendQtyText' },
{ label: '批号', prop: 'fSupplierLot' },
{ label: '本次发货数量', prop: 'notSendQty', width: '180' },
{ label: '供应商承诺交期', prop: 'chengNuoJiaoQi', width: '180' },
@ -106,38 +126,43 @@ const state = reactive({
chengNuoJiaoQiP: '',
newChengNuoJiaoQiP: '',
});
watch(() => props.listData,() => {
state.data = props.listData
})
watch(
() => props.listData,
() => {
state.data = props.listData;
}
);
const fSupplierLotFun = () => {
state.data.forEach((item: any) => {
item.fSupplierLot = state.fSupplierLot
})
console.log(state.data)
item.fSupplierLot = state.fSupplierLot;
});
console.log(state.data);
// state.fSupplierLot = '';
}
};
const chengNuoJiaoQiPFun = (e: string) => {
let arr: any = [];
if (e === '0') {
state.data.forEach((item: any) => {
arr.push({ id: item.id, newTime: state.chengNuoJiaoQiP });
});
batchSetChengNuoJiaoQiFun(arr)
batchSetChengNuoJiaoQiFun(arr);
}
if (e === '1') {
state.data.forEach((item: any) => {
arr.push({ id: item.id, newTime: state.newChengNuoJiaoQiP });
});
batchSetNewChengNuoJiaoQiFun(arr)
batchSetNewChengNuoJiaoQiFun(arr);
}
};
const batchSetChengNuoJiaoQiFun = (arr: any) => {
listApi().batchSetChengNuoJiaoQi(arr).then((res: any) => {
listApi()
.batchSetChengNuoJiaoQi(arr)
.then((res: any) => {
if (res.resultCode === 0) {
ElMessage.success('操作成功');
state.data.forEach((item: any) => {
item.chengNuoJiaoQi = state.chengNuoJiaoQiP
})
item.chengNuoJiaoQi = state.chengNuoJiaoQiP;
});
// state.chengNuoJiaoQiP = '';
}
if (res.resultCode === -1) {
@ -145,15 +170,17 @@ const batchSetChengNuoJiaoQiFun = (arr:any) => {
// state.newChengNuoJiaoQiP = '';
}
});
}
};
const batchSetNewChengNuoJiaoQiFun = (arr: any) => {
listApi().batchSetNewChengNuoJiaoQi(arr).then((res: any) => {
listApi()
.batchSetNewChengNuoJiaoQi(arr)
.then((res: any) => {
if (res.resultCode === 0) {
ElMessage.success('操作成功');
state.data.forEach((item: any) => {
item.newChengNuoJiaoQi = state.newChengNuoJiaoQiP
})
item.newChengNuoJiaoQi = state.newChengNuoJiaoQiP;
});
// state.chengNuoJiaoQiP = '';
}
if (res.resultCode === -1) {
@ -161,36 +188,51 @@ const batchSetNewChengNuoJiaoQiFun = (arr:any) => {
// state.newChengNuoJiaoQiP = '';
}
});
}
};
const batchAddInvoiceOrderFun = () => {
console.log(props.listData)
let arr:any = []
if(props.listData.length != 0){
state.loading = true
console.log(props.listData);
let arr: any = [];
props.listData.forEach((item: any) => {
arr.push({
id: item.id,
qty:item.notSendQty
})
})
listApi().batchAddInvoiceOrder(arr).then((res:any) => {
qty: item.notSendQty,
});
});
listApi()
.batchAddInvoiceOrder({ f_VHUB_Text: state.f_VHUB_Text, upDateList: arr })
.then((res: any) => {
state.loading = false
if (res.resultCode === 0) {
ElMessage.success('操作成功');
emits('generateDocuments')
emits('generateDocuments');
}
if (res.resultCode === -1) {
ElMessage.error(res.errorMessage);
}
})
});
} else {
ElMessage.error('没有数据')
}
};
const closeFun = () => {
emits('close')
}
emits('close');
};
</script>
<style scoped lang="scss">
:deep(.el-card) {
padding: 0 !important;
//height: 56px !important;
}
.btnList {
margin-top: 26px;
display: flex;
justify-content: center;
}
:deep(.avue-crud__left) {
flex: 1;
}

View File

@ -1,20 +1,20 @@
<template>
<div class="system-user-dialog-container">
<el-dialog :title="state.dialog.title" v-model="state.dialog.isShowDialog" width="769px">
<el-dialog :title="state.dialog.title" v-model="state.dialog.isShowDialog" width="769px" @close="closeDialog">
<el-form ref="userDialogFormRef" :model="state.ruleForm" size="default" label-width="90px">
<el-row :gutter="35">
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="账号">
<el-form-item label="账号" prop="login">
<el-input v-model="state.ruleForm.login" placeholder="请输入账号" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="名称">
<el-form-item label="名称" prop="name">
<el-input v-model="state.ruleForm.name" placeholder="请输入名称" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="国外账号">
<el-form-item label="国外账号" prop="ifForeign">
<el-select placeholder="业务状态" size="default" style="width: 240px" v-model="state.ruleForm.ifForeign">
<el-option label="是" value="1" />
<el-option label="否" value="0" />
@ -22,25 +22,25 @@
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="手机号">
<el-form-item label="手机号" prop="mobile">
<el-input v-model="state.ruleForm.mobile" placeholder="请输入手机号" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="账号类型">
<el-form-item label="账号类型" prop="systemType">
<el-select placeholder="账号类型" size="default" style="width: 240px" v-model="state.ruleForm.systemType">
<el-option label="管理员" value="1" />
<el-option label="供应商" value="0" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="供应商">
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="state.ruleForm.systemType === '0'">
<el-form-item label="供应商" prop="supplierId">
<el-select
placeholder="请选择供应商"
size="default"
style="width: 240px"
v-model="state.BDSupplierListItem"
v-model="state.ruleForm.supplierId"
@change="BDSupplierListItemChange"
>
<el-option :label="item.text" :value="item.value" v-for="(item, index) of state.BDSupplierList" :key="index" />
@ -48,7 +48,7 @@
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="账户密码">
<el-form-item label="账户密码" prop="password">
<el-input v-model="state.ruleForm.password" placeholder="请输入" type="password" clearable></el-input>
</el-form-item>
</el-col>
@ -75,10 +75,10 @@ const emit = defineEmits(['refresh']);
const userDialogFormRef = ref();
const state = reactive({
BDSupplierList:[],
BDSupplierListItem:{},
BDSupplierListItem:null,
ruleForm: {
ifForeign:'',
systemType:0,
ifForeign:'0',
systemType:'0',
login: '', //
name: '', //
mobile: '', //
@ -103,6 +103,7 @@ const openDialog = (type: string, row: any) => {
state.ruleForm.login = row.login
state.ruleForm.name = row.name
state.ruleForm.mobile = row.mobile
state.ruleForm.password = '******'
state.BDSupplierListItem = row.supplierId
state.dialog.title = '修改用户';
state.dialog.submitTxt = '修 改';
@ -110,9 +111,7 @@ const openDialog = (type: string, row: any) => {
state.dialog.title = '新增用户';
state.dialog.submitTxt = '新 增';
// 使
nextTick(() => {
userDialogFormRef.value.resetFields();
});
}
state.dialog.isShowDialog = true;
getMenuData();
@ -120,6 +119,9 @@ const openDialog = (type: string, row: any) => {
//
const closeDialog = () => {
state.dialog.isShowDialog = false;
nextTick(() => {
userDialogFormRef.value.resetFields();
});
};
//
const onCancel = () => {
@ -127,14 +129,17 @@ const onCancel = () => {
};
//
const onSubmit = () => {
closeDialog();
closeDialog();
emit('refresh', {...state.ruleForm,dataState:state.dialog.title === '新增用户' ? '0':'1'});
};
const BDSupplierListItemChange = (item:any) => {
state.ruleForm.supplierId = item.value
state.ruleForm.supplierName = item.text
const BDSupplierListItemChange = (val:any) => {
let dbsObj:any = state.BDSupplierList.find(item => item.value === val);
console.log(dbsObj)
state.ruleForm.supplierId = dbsObj.value
state.ruleForm.supplierName = dbsObj.text
}
//