Commit 8e7daba3 by qinjianhui

feat: 对账单、发货单开发

parent 4e4e2b35
......@@ -22,7 +22,6 @@ declare module 'vue' {
ElForm: typeof import('element-plus/es')['ElForm']
ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElIcon: typeof import('element-plus/es')['ElIcon']
ElImage: typeof import('element-plus/es')['ElImage']
ElInput: typeof import('element-plus/es')['ElInput']
ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
......@@ -45,9 +44,12 @@ declare module 'vue' {
ImageView: typeof import('./src/components/ImageView.vue')['default']
LogList: typeof import('./src/components/LogList.vue')['default']
NavMenu: typeof import('./src/components/NavMenu.vue')['default']
RenderColumn: typeof import('./src/components/RenderColumn.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
ShipmentOrderDetail: typeof import('./src/components/ShipmentOrderDetail.vue')['default']
SplitDiv: typeof import('./src/components/splitDiv/splitDiv.vue')['default']
TableColumn: typeof import('./src/components/TableColumn.vue')['default']
TableView: typeof import('./src/components/TableView.vue')['default']
UploadImage: typeof import('./src/components/UploadImage.vue')['default']
WangEditor: typeof import('./src/components/WangEditor.vue')['default']
......
......@@ -26,6 +26,7 @@
"@typescript-eslint/eslint-plugin": "^7.1.1",
"@typescript-eslint/parser": "^7.1.1",
"@vitejs/plugin-vue": "^5.0.4",
"@vitejs/plugin-vue-jsx": "^4.1.0",
"@vue/eslint-config-typescript": "^12.0.0",
"eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0",
......@@ -48,6 +49,19 @@
"node": ">=0.10.0"
}
},
"node_modules/@ampproject/remapping": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
"integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
"dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@antfu/install-pkg": {
"version": "0.3.1",
"resolved": "https://registry.npmmirror.com/@antfu/install-pkg/-/install-pkg-0.3.1.tgz",
......@@ -69,10 +83,305 @@
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@babel/code-frame": {
"version": "7.26.2",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
"integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
"dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.25.9",
"js-tokens": "^4.0.0",
"picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/compat-data": {
"version": "7.26.2",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz",
"integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
"version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz",
"integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.26.0",
"@babel/generator": "^7.26.0",
"@babel/helper-compilation-targets": "^7.25.9",
"@babel/helper-module-transforms": "^7.26.0",
"@babel/helpers": "^7.26.0",
"@babel/parser": "^7.26.0",
"@babel/template": "^7.25.9",
"@babel/traverse": "^7.25.9",
"@babel/types": "^7.26.0",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
"json5": "^2.2.3",
"semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/babel"
}
},
"node_modules/@babel/core/node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/@babel/generator": {
"version": "7.26.2",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz",
"integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.26.2",
"@babel/types": "^7.26.0",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^3.0.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-annotate-as-pure": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
"integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
"dev": true,
"dependencies": {
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz",
"integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==",
"dev": true,
"dependencies": {
"@babel/compat-data": "^7.25.9",
"@babel/helper-validator-option": "^7.25.9",
"browserslist": "^4.24.0",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
"dependencies": {
"yallist": "^3.0.2"
}
},
"node_modules/@babel/helper-compilation-targets/node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/@babel/helper-compilation-targets/node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true
},
"node_modules/@babel/helper-create-class-features-plugin": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz",
"integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.25.9",
"@babel/helper-member-expression-to-functions": "^7.25.9",
"@babel/helper-optimise-call-expression": "^7.25.9",
"@babel/helper-replace-supers": "^7.25.9",
"@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
"@babel/traverse": "^7.25.9",
"semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz",
"integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==",
"dev": true,
"dependencies": {
"@babel/traverse": "^7.25.9",
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
"integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
"dev": true,
"dependencies": {
"@babel/traverse": "^7.25.9",
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
"version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
"integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
"dev": true,
"dependencies": {
"@babel/helper-module-imports": "^7.25.9",
"@babel/helper-validator-identifier": "^7.25.9",
"@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-optimise-call-expression": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz",
"integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==",
"dev": true,
"dependencies": {
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz",
"integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-replace-supers": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz",
"integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==",
"dev": true,
"dependencies": {
"@babel/helper-member-expression-to-functions": "^7.25.9",
"@babel/helper-optimise-call-expression": "^7.25.9",
"@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz",
"integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==",
"dev": true,
"dependencies": {
"@babel/traverse": "^7.25.9",
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
"integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
"integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
"integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
"version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz",
"integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==",
"dev": true,
"dependencies": {
"@babel/template": "^7.25.9",
"@babel/types": "^7.26.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
"version": "7.24.7",
"resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.24.7.tgz",
"integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==",
"version": "7.26.2",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz",
"integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==",
"dependencies": {
"@babel/types": "^7.26.0"
},
"bin": {
"parser": "bin/babel-parser.js"
},
......@@ -80,6 +389,55 @@
"node": ">=6.0.0"
}
},
"node_modules/@babel/plugin-syntax-jsx": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz",
"integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-typescript": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz",
"integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-typescript": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz",
"integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.25.9",
"@babel/helper-create-class-features-plugin": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
"@babel/plugin-syntax-typescript": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/runtime": {
"version": "7.25.7",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz",
......@@ -91,6 +449,59 @@
"node": ">=6.9.0"
}
},
"node_modules/@babel/template": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz",
"integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.25.9",
"@babel/parser": "^7.25.9",
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz",
"integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.25.9",
"@babel/generator": "^7.25.9",
"@babel/parser": "^7.25.9",
"@babel/template": "^7.25.9",
"@babel/types": "^7.25.9",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse/node_modules/globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/@babel/types": {
"version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
"integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
"dependencies": {
"@babel/helper-string-parser": "^7.25.9",
"@babel/helper-validator-identifier": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@ctrl/tinycolor": {
"version": "3.6.1",
"resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
......@@ -769,10 +1180,52 @@
"node": ">=6"
}
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
"integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
"dev": true,
"dependencies": {
"@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/set-array": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dev": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
......@@ -1339,6 +1792,24 @@
"vue": "^3.2.25"
}
},
"node_modules/@vitejs/plugin-vue-jsx": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-4.1.0.tgz",
"integrity": "sha512-KuRejz7KAFvhXDzOudlaS2IyygAwoAEEMtHAdcRSy/8cA5iKH043Qudcz48zsC0M0vvN5iKwIwNMuWbBYn6/Yg==",
"dev": true,
"dependencies": {
"@babel/core": "^7.26.0",
"@babel/plugin-transform-typescript": "^7.25.9",
"@vue/babel-plugin-jsx": "^1.2.5"
},
"engines": {
"node": "^18.0.0 || >=20.0.0"
},
"peerDependencies": {
"vite": "^5.0.0",
"vue": "^3.0.0"
}
},
"node_modules/@volar/language-core": {
"version": "1.11.1",
"resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-1.11.1.tgz",
......@@ -1367,6 +1838,110 @@
"path-browserify": "^1.0.1"
}
},
"node_modules/@vue/babel-helper-vue-transform-on": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.5.tgz",
"integrity": "sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==",
"dev": true
},
"node_modules/@vue/babel-plugin-jsx": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.5.tgz",
"integrity": "sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==",
"dev": true,
"dependencies": {
"@babel/helper-module-imports": "^7.24.7",
"@babel/helper-plugin-utils": "^7.24.8",
"@babel/plugin-syntax-jsx": "^7.24.7",
"@babel/template": "^7.25.0",
"@babel/traverse": "^7.25.6",
"@babel/types": "^7.25.6",
"@vue/babel-helper-vue-transform-on": "1.2.5",
"@vue/babel-plugin-resolve-type": "1.2.5",
"html-tags": "^3.3.1",
"svg-tags": "^1.0.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
},
"peerDependenciesMeta": {
"@babel/core": {
"optional": true
}
}
},
"node_modules/@vue/babel-plugin-resolve-type": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.5.tgz",
"integrity": "sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.24.7",
"@babel/helper-module-imports": "^7.24.7",
"@babel/helper-plugin-utils": "^7.24.8",
"@babel/parser": "^7.25.6",
"@vue/compiler-sfc": "^3.5.3"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-core": {
"version": "3.5.12",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.12.tgz",
"integrity": "sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.25.3",
"@vue/shared": "3.5.12",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.0"
}
},
"node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-dom": {
"version": "3.5.12",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.12.tgz",
"integrity": "sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==",
"dev": true,
"dependencies": {
"@vue/compiler-core": "3.5.12",
"@vue/shared": "3.5.12"
}
},
"node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-sfc": {
"version": "3.5.12",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.12.tgz",
"integrity": "sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.25.3",
"@vue/compiler-core": "3.5.12",
"@vue/compiler-dom": "3.5.12",
"@vue/compiler-ssr": "3.5.12",
"@vue/shared": "3.5.12",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.11",
"postcss": "^8.4.47",
"source-map-js": "^1.2.0"
}
},
"node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-ssr": {
"version": "3.5.12",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.12.tgz",
"integrity": "sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==",
"dev": true,
"dependencies": {
"@vue/compiler-dom": "3.5.12",
"@vue/shared": "3.5.12"
}
},
"node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/shared": {
"version": "3.5.12",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.12.tgz",
"integrity": "sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==",
"dev": true
},
"node_modules/@vue/compiler-core": {
"version": "3.4.20",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.20.tgz",
......@@ -2038,6 +2613,38 @@
"node": ">=8"
}
},
"node_modules/browserslist": {
"version": "4.24.2",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz",
"integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"dependencies": {
"caniuse-lite": "^1.0.30001669",
"electron-to-chromium": "^1.5.41",
"node-releases": "^2.0.18",
"update-browserslist-db": "^1.1.1"
},
"bin": {
"browserslist": "cli.js"
},
"engines": {
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
"node_modules/callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz",
......@@ -2047,6 +2654,26 @@
"node": ">=6"
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001680",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz",
"integrity": "sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
]
},
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
......@@ -2133,6 +2760,12 @@
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"dev": true
},
"node_modules/convert-source-map": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"dev": true
},
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz",
......@@ -2255,6 +2888,12 @@
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.7.tgz",
"integrity": "sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ=="
},
"node_modules/electron-to-chromium": {
"version": "1.5.55",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.55.tgz",
"integrity": "sha512-6maZ2ASDOTBtjt9FhqYPRnbvKU5tjG0IN9SztUOWYw2AzNDNpKJYLJmlK0/En4Hs/aiWnB+JZ+gW19PIGszgKg==",
"dev": true
},
"node_modules/element-plus": {
"version": "2.6.0",
"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.6.0.tgz",
......@@ -2385,6 +3024,15 @@
"@esbuild/win32-x64": "0.19.12"
}
},
"node_modules/escalade": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
......@@ -2846,6 +3494,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/get-stream": {
"version": "8.0.1",
"resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-8.0.1.tgz",
......@@ -2984,6 +3641,18 @@
"he": "bin/he"
}
},
"node_modules/html-tags": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
"integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
"dev": true,
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/html-void-elements": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
......@@ -3178,6 +3847,12 @@
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"dev": true
},
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
},
"node_modules/js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz",
......@@ -3190,6 +3865,18 @@
"js-yaml": "bin/js-yaml.js"
}
},
"node_modules/jsesc": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
"integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
"dev": true,
"bin": {
"jsesc": "bin/jsesc"
},
"engines": {
"node": ">=6"
}
},
"node_modules/json-buffer": {
"version": "3.0.1",
"resolved": "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz",
......@@ -3208,6 +3895,18 @@
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
"dev": true
},
"node_modules/json5": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
"bin": {
"json5": "lib/cli.js"
},
"engines": {
"node": ">=6"
}
},
"node_modules/jsonc-parser": {
"version": "3.3.1",
"resolved": "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
......@@ -3347,14 +4046,11 @@
}
},
"node_modules/magic-string": {
"version": "0.30.7",
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.7.tgz",
"integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==",
"version": "0.30.12",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz",
"integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.15"
},
"engines": {
"node": ">=12"
"@jridgewell/sourcemap-codec": "^1.5.0"
}
},
"node_modules/memoize-one": {
......@@ -3525,6 +4221,12 @@
"resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
"integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
},
"node_modules/node-releases": {
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
"integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
"dev": true
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
......@@ -3716,9 +4418,9 @@
"dev": true
},
"node_modules/picocolors": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.1.tgz",
"integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
},
"node_modules/picomatch": {
"version": "2.3.1",
......@@ -3794,9 +4496,9 @@
}
},
"node_modules/postcss": {
"version": "8.4.35",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.35.tgz",
"integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
"version": "8.4.48",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.48.tgz",
"integrity": "sha512-GCRK8F6+Dl7xYniR5a4FYbpBzU8XnZVeowqsQFYdcXuSbChgiks7qybSkbvnaeqv0G0B+dd9/jJgH8kkLDQeEA==",
"funding": [
{
"type": "opencollective",
......@@ -3813,8 +4515,8 @@
],
"dependencies": {
"nanoid": "^3.3.7",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
"picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
......@@ -4160,9 +4862,9 @@
}
},
"node_modules/source-map-js": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.0.tgz",
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"engines": {
"node": ">=0.10.0"
}
......@@ -4252,6 +4954,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/svg-tags": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
"integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
"dev": true
},
"node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz",
......@@ -4505,6 +5213,36 @@
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/update-browserslist-db": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
"integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"dependencies": {
"escalade": "^3.2.0",
"picocolors": "^1.1.0"
},
"bin": {
"update-browserslist-db": "cli.js"
},
"peerDependencies": {
"browserslist": ">= 4.21.0"
}
},
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
......
......@@ -28,6 +28,7 @@
"@typescript-eslint/eslint-plugin": "^7.1.1",
"@typescript-eslint/parser": "^7.1.1",
"@vitejs/plugin-vue": "^5.0.4",
"@vitejs/plugin-vue-jsx": "^4.1.0",
"@vue/eslint-config-typescript": "^12.0.0",
"eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0",
......
......@@ -28,4 +28,9 @@ div {
li {
list-style: none;
}
ul,
li {
margin: 0;
padding: 0;
}
</style>
import { BasePaginationData, BaseRespData, StatisticsData } from '@/types/api'
import { BasePaginationData, BaseRespData } from '@/types/api'
import axios from './axios'
import {
LogListData,
......@@ -10,16 +10,19 @@ import {
ShipmentOrderRes,
Tab,
InspectionData,
CountStatus,
Confirm,
} from '@/types/api/order'
import {
AccountStatementNote,
AccountStatementNoteSearchForm,
DeliveryNoteData,
DeliveryNoteSearchForm,
ProductionOrder,
ShipmentOrderDetailData,
} from '@/types/api/deliveryNote'
import {
AccountStatementNote,
AccountStatementNoteSearchForm,
BillOrderDetailData,
CountStatus,
} from '@/types/api/billOrder'
export function getOrderList(
data: SearchForm,
......@@ -232,8 +235,8 @@ export function customJomallReconciliation(
currentPage: number,
pageSize: number,
) {
return axios.post<never, StatisticsData<AccountStatementNote>>(
'factory/customJomallReconciliation/list_page',
return axios.post<never, BasePaginationData<AccountStatementNote>>(
'reconciliation/list',
{
...data,
currentPage,
......@@ -284,7 +287,7 @@ export function getOrderByIdApi(id?: number) {
export function getReconciliationAmount(id?: number) {
return axios.get<never, BaseRespData<CountStatus[]>>(
'factory/customJomallReconciliation/getReconciliationAmount',
'reconciliation/groupCount',
{
params: {
id,
......@@ -322,17 +325,30 @@ export function updateReconciliation(data: AccountStatementNote) {
)
}
export function getShipmentDetailsById(shipmentId?: string) {
return axios.get<never, BaseRespData<AccountStatementNote[]>>(
'factory/customJomallReconciliation/getShipmentDetailsById',
export function getShipmentDetailsById(shipmentId?: number) {
return axios.get<never, BaseRespData<BillOrderDetailData>>(
'reconciliation/getById',
{
params: {
shipmentId,
id: shipmentId,
},
},
)
}
export function factoryConfirm(data: Confirm[]) {
return axios.post('factory/customJomallReconciliation/factoryConfirm', data)
export function auditOrderApi(url: string, data: string) {
return axios.get(url, {
params: {
ids: data,
},
})
}
export function getShipmentOrderDetailById(id?: number | string) {
return axios.get<never, BaseRespData<ShipmentOrderDetailData>>(
'reconciliation/getShipmentByShipmentId',
{
params: {
id,
},
},
)
}
<template>
<template v-if="col.subs?.length">
<ElTableColumn header-align="center" :label="col.label" :align="col.align" v-bind="col">
<RenderColumn v-for="item in col.children" :col="item" :key="item.prop">
<template
v-for="slot in Object.keys($slots)"
#[slot]="scope: Record<string, any>"
>
<slot :name="slot" v-bind="scope" />
</template>
</RenderColumn>
<template #header="{ column, $index }">
<component
:is="col.headerRender"
v-if="col.headerRender"
:column="column"
:index="$index"
/>
<slot
v-else-if="col.headerSlot"
:name="col.headerSlot"
:column="column"
:index="$index"
></slot>
<span v-else>{{ column.label }}</span>
</template>
</ElTableColumn>
</template>
<ElTableColumn v-else header-align="center" v-bind="col">
<template #header="{ column, $index }">
<component
:is="col.headerRender"
v-if="col.headerRender"
:column="column"
:index="$index"
/>
<slot
v-else-if="col.headerSlot"
:name="col.headerSlot"
:column="column"
:index="$index"
></slot>
<span v-else>{{ column.label }}</span>
</template>
<template #default="{ row, $index }">
<template v-if="col.formatDate">
<span>{{ col.formatDate(row) }}</span>
</template>
<!-- 如果传递按钮数组,就展示按钮组 END-->
<!-- render函数 (START) 使用内置的component组件可以支持h函数渲染和txs语法-->
<component
:is="col.render"
v-if="col.render"
:row="row"
:index="$index"
/>
<slot
v-else-if="col.slot"
:name="col.slot"
:row="row"
:index="$index"
></slot>
<span v-else>{{ row[col.prop!] }}</span>
</template>
</ElTableColumn>
</template>
<script lang="ts" setup>
import type { Column } from 'element-plus'
import type { PropType } from 'vue'
defineProps({
col: {
type: Object as PropType<Column>,
required: true,
},
})
</script>
<template>
<div class="shipment-order-detail">
<div class="order-detail_order-info">
<div class="order-detail_order-info--title title">发货单详情</div>
<div class="order-detail_order-info--content">
<div class="order-detail_order-info--content-item flex">
<span class="order-detail_order-info__label label">收货人电话:</span>
<span class="order-detail_order-info__value value flex-1">{{
detail.lanshou_phone || '--'
}}</span>
</div>
<div class="order-detail_order-info--content-item flex">
<span class="order-detail_order-info__label label">收货人:</span>
<span class="order-detail_order-info__value value flex-1">{{
detail.lanshou_name || '--'
}}</span>
</div>
<div class="order-detail_order-info--content-item flex">
<span class="order-detail_order-info__label label">邮编:</span>
<span class="order-detail_order-info__value value flex-1">{{
detail.lanshou_post || '--'
}}</span>
</div>
<div class="order-detail_order-info--content-item flex overflow-hidden">
<span
style="white-space: nowrap"
class="order-detail_order-info__label label"
>收货地址:</span
>
<span
class="order-detail_order-info__value value flex-1 text-ellipsis"
style="white-space: nowrap"
:title="`${detail.lanshou_region}${detail.lanshou_address}`"
>{{ `${detail.lanshou_region}${detail.lanshou_address}` }}</span
>
</div>
</div>
</div>
<div class="product-detail mt-10">
<div class="product-detail-title">
<span>产品详情</span>
</div>
<div class="product-detail-content">
<div
v-for="item in detail.detailList"
:key="item.id"
class="order-list-expand_item"
>
<div class="order-list-expand_item_img">
<img :src="item.variant_image" style="width: 100%; height: 100%" />
</div>
<div class="order-list-expand_item_info">
<div
:title="item.sub_order_number || ''"
class="order-list-expand_item_info_title"
>
<span class="order-list-expand_item_label">生产单号:</span>
<span class="order-list-expand_item_value"
>{{ item.sub_order_number || '--'
}}<el-icon
class="icon"
@click="copy(item.sub_order_number || '')"
><DocumentCopy
/></el-icon>
</span>
</div>
<div class="order-list-expand_item_info_title">
<span class="order-list-expand_item_label">已发数:</span>
<span class="order-list-expand_item_value">{{
item.shipment_num || 0
}}</span>
</div>
<div class="order-list-expand_item_info_title">
<span class="order-list-expand_item_label">质检(通过):</span>
<span class="order-list-expand_item_value">{{
item.pass_num || 0
}}</span>
</div>
<div class="order-list-expand_item_info_title">
<span class="order-list-expand_item_label">质检(不通过):</span>
<span class="order-list-expand_item_value">{{
item.not_pass_num || 0
}}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { DocumentCopy } from '@element-plus/icons-vue'
defineProps({
detail: {
type: Object,
required: true,
},
})
const copy = (text: string) => {
navigator.clipboard.writeText(text)
ElMessage.success('复制成功')
}
</script>
<style lang="scss" scoped>
.order-detail_order-info--title.title {
font-size: 18px;
}
.order-detail_order-info--content {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 10px;
margin-top: 10px;
font-size: 14px;
}
.product-detail-title {
font-size: 18px;
}
.product-detail-content {
margin-top: 10px;
}
.order-list-expand_item {
display: grid;
font-size: 14px;
gap: 10px;
grid-template-columns: repeat(2, 1fr);
}
.order-list-expand_item_img {
width: 100px;
height: 100px;
}
.order-list-expand_item_info_title {
height: 30px;
line-height: 30px;
}
</style>
<template>
<div class="table-view">
<div></div>
<ElTable
:data="paginatedData"
border
:stripe="stripe"
header-align="center"
height="100%"
>
<template v-for="column in columns" :key="column.key">
<ElTableColumn
v-if="
column.type === 'index' ||
column.type === 'selection' ||
column.type === 'expand'
"
v-bind="column"
header-align="center"
>
<!-- 当type等于expand时, 配置通过h函数渲染、txs语法或者插槽自定义内容 -->
<template #default="{ row, $index }">
<component
:is="column.render"
v-if="column.render"
:row="row"
:index="$index"
/>
<slot
v-else-if="column.slot"
name="expand"
:row="row"
:index="$index"
></slot>
</template>
</ElTableColumn>
<RenderColumn v-else :col="column">
<template
v-for="slot in Object.keys($slots)"
#[slot]="scope: Record<string, any>"
>
<slot :name="slot" v-bind="scope" />
</template>
</RenderColumn>
</template>
</ElTable>
</div>
</template>
<script setup lang="ts">
<script setup lang="tsx">
import type { Column } from 'element-plus/lib/components/index.js'
import type { PropType } from 'vue'
import RenderColumn from './RenderColumn.vue'
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export type DataItemType = Record<string, any>
defineProps({
paginatedData: {
type: Array as PropType<DataItemType[]>,
required: true,
},
columns: {
type: Array as PropType<Column[]>,
required: true,
},
stripe: {
type: Boolean,
default: false,
},
defaultSortProp: {
type: String,
default: '',
},
defaultSortOrder: {
type: String,
default: '',
},
})
</script>
<style lang="scss" scoped></style>
\ No newline at end of file
<style lang="scss" scoped>
.table-view {
height: 100%;
overflow: hidden;
}
</style>
......@@ -60,6 +60,12 @@ img {
.margin-top-10 {
margin-top: 10px;
}
.mr-10 {
margin-right: 10px;
}
.mt-10 {
margin-top: 10px;
}
.margin-top-20 {
margin-top: 20px;
......@@ -95,3 +101,9 @@ img {
font-size: 16px;
cursor: pointer;
}
.text-ellipsis {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
export interface CountStatus {
id?: number
code?: number
count?: number
remark?: string
children?: CountStatus[]
}
export interface AccountStatementNoteSearchForm {
user_mark?: string
status?: number | string | null
dateRange?: string[]
bill_number?: string
rec_number?: string
factory_status?: string
erp_status?: string
start_time?: string
end_time?: string
}
export interface AccountStatementNote {
create_time?: string
pass_num?: number
factory_code?: string
num?: number
end_time?: string
rec_number?: string
not_pass_num?: number
factory_id?: number
start_time?: string
carriage_total_amount?: number
factory_status?: number
factory_total_amount?: number
user_mark?: string
erp_status?: number
id?: number
erp_total_amount?: number
dataVersion: ''
}
export interface BillOrderDetailData {
create_time?: string
pass_num: number
factory_code?: string
num?: number
end_time?: string
rec_number?: string
not_pass_num?: number
factory_id?: number
start_time?: string
carriage_total_amount?: number
factory_status?: number
factory_total_amount: number
user_mark?: string
logList?: LogList[]
erp_status?: number
itemList?: ItemList[]
id: number
erp_total_amount?: number
}
export interface LogList {
create_time?: string
employee_id?: number
info_id?: number
description?: string
id: string
employee_account?: string
}
export interface ItemList {
carriage_amount?: number
pass_num?: number
num?: number
factory_price?: number
shipment_id?: string
not_pass_num?: number
erp_order_number?: string
shipment_time?: string
bill_number?: string
erp_price?: number
info_id?: number
id: number
factory_order_number?: string
}
......@@ -9,12 +9,7 @@ export interface DeliveryNoteSearchForm {
orderNumber?: string
namespace?: string
shippingWay?: number
}
export interface AccountStatementNoteSearchForm {
status?: string | null | number
startTime?: string
endTime?: string
status?: number | null
}
export interface DeliveryNoteData {
......@@ -101,23 +96,89 @@ export interface ProductionOrder {
notPassNum?: number
passNum?: number
}
export interface AccountStatementNote{
billNumber?:string
shipmentId?:string
userMark?:string
shipmentNum?:string
dataVersion?:string
carriageName?:string
lanshouAddress?:string
totalPrice?:string
passNum?:string
lanshouPost?:string
notPassNum?:string
lanshouRegion?:string
orderNumber?:string
lanshouName?:string
lanshouPhone?:string
logisticsTracking?:string
totalAmount?:string
id?:number
export interface ShipmentOrderDetailData {
carriage_amount?: string | number
lanshou_post?: string
carriage_name?: string
create_time?: string
order_number?: string
lanshou_address?: string
logistics_tracking?: string
update_time?: string
bill_number?: string
lanshou_region?: string
user_mark?: string
detailList?: ShipmentDetailList[]
lanshou_phone?: string
id: string | number
shipping_way?: number
dbFactory?: DbFactory
lanshou_name?: string
inspection_status?: boolean
facotory_no?: number
}
export interface ShipmentDetailList {
product?: Product
create_time?: string
variant_image?: string
base_sku?: string
pass_num?: number
sub_order_number?: string
shipment_id?: string
custom_order_id?: string
custom_order_number?: string
not_pass_num?: number
update_time?: string
variant_sku?: string
id: number | string
shipment_num?: number
inspection_status?: boolean
}
export interface Product {
diy_id?: string
end_product_id?: string
base_sku?: string
num?: number
sub_order_number?: string
print_type?: number
custom_order_id?: string
erp_order_id?: string
erp_sub_order_number?: string
update_time?: string
erp_order_item_id?: string
price?: number
id: string
shipment_num?: number
cost_price?: string | number
erp_product_item_id?: number
erp_id?: string
create_time?: string
variant_image?: string
pass_num?: number
weight?: string | number
not_pass_num?: number
product_name?: string
version?: number
chima_id?: string
material?: string
variant_sku?: string
shop_number?: string
sales_price?: string | number
}
export interface DbFactory {
license?: string | number
goods_number?: number
type_id?: number
bianma?: string
name?: string
mobile?: string
ruzhu_date?: string
id: number
title?: string
create_date?: string
authorize_number?: number
status?: number
}
......@@ -24,11 +24,6 @@ export interface Tab {
quantity: number
}
export interface CountStatus {
count?: number
status?: number
totalSum?: number
}
export interface OrderData {
id: number
......@@ -255,11 +250,6 @@ export interface Reconciliation {
totalAmount?: string
id?: number
}
export interface Confirm {
id: number | undefined
dataVersion: string | undefined
}
export interface shopRemark {
resendNum?: number | undefined | null
remark?: string | undefined | null
......
<template>
<div class="page">
<div class="page card h-100 flex-gap-10 overflow-hidden flex">
<div class="left">
<ElTree
ref="treeRef" default-expand-all :expand-on-click-node="false" :default-expanded-keys="[]"
:highlight-current="true" node-key="id" :data="treeData" @node-click="nodeClick">
ref="treeRef"
default-expand-all
:expand-on-click-node="false"
:default-expanded-keys="[]"
:highlight-current="true"
node-key="code"
:data="treeData"
:props="{ children: 'children', label: 'remark' }"
@node-click="nodeClick"
>
<template #default="{ data }">
<div class="tree-node">
<div class="tree-node-label">{{ data.remark }}</div>
<div v-if="data.count || data.count === 0" class="tree-node-count">
{{ `(${data.count})` }}
</div>
</div>
</template>
</ElTree>
</div>
<div class="right">
......@@ -12,9 +28,9 @@
<template #top>
<div class="header-filter-form">
<ElForm :model="searchForm" inline>
<ElFormItem label="客户">
<!-- <ElFormItem label="客户">
<ElSelect
v-model="searchForm.userMark"
v-model="searchForm.user_mark"
clearable
placeholder="请选择客户"
style="width: 130px"
......@@ -26,11 +42,14 @@
:value="item"
></ElOption>
</ElSelect>
</ElFormItem>
</ElFormItem> -->
<ElFormItem label="创建时间">
<el-date-picker
v-model="dateRange"
:default-time="[new Date(0,0,0,0,0,0),new Date(0,0,0,23,59,59)]"
:default-time="[
new Date(0, 0, 0, 0, 0, 0),
new Date(0, 0, 0, 23, 59, 59),
]"
type="datetimerange"
start-placeholder="开始时间"
end-placeholder="结束时间"
......@@ -43,44 +62,44 @@
<ElFormItem label="发货单号">
<ElInput
v-model="searchForm.billNumber"
v-model="searchForm.bill_number"
clearable
placeholder="发货单号"
style="width: 130px"
/>
</ElFormItem>
<ElFormItem label="单号">
<ElFormItem label="对账单号">
<ElInput
v-model="searchForm.orderNumber"
v-model="searchForm.rec_number"
clearable
placeholder="单号"
placeholder="对账单号"
style="width: 160px"
/>
</ElFormItem>
<ElFormItem label="物流跟踪号">
<!-- <ElFormItem label="物流跟踪号">
<ElInput
v-model="searchForm.logisticsTracking"
placeholder="物流跟踪号"
clearable
style="width: 160px"
></ElInput>
</ElFormItem>
<ElFormItem label="物流名称">
</ElFormItem> -->
<!-- <ElFormItem label="物流名称">
<ElInput
v-model="searchForm.carriageName"
placeholder="物流名称"
clearable
style="width: 160px"
></ElInput>
</ElFormItem>
<ElFormItem label="收货人">
</ElFormItem> -->
<!-- <ElFormItem label="收货人">
<ElInput
v-model="searchForm.lanshouName"
v-model="searchForm.lanshou_name"
placeholder="收货人"
clearable
style="width: 160px"
></ElInput>
</ElFormItem>
</ElFormItem> -->
<ElFormItem>
<ElButton type="primary" @click="search">查询</ElButton>
......@@ -88,15 +107,34 @@
<ElFormItem>
<ElButton @click="resetSearchForm">重置</ElButton>
</ElFormItem>
</ElForm>
</div>
<div class="btn-list">
<el-button v-if="nodeId===0" type="primary" :disabled="selections.length===0" @click="sureFactory">
<el-button
v-if="nodeId === 10"
type="primary"
@click="auditOrder('confirm')"
>
确认对账单
</el-button>
<el-button
v-if="nodeId === 20"
type="warning"
@click="auditOrder('pay')"
>
付款
</el-button>
<el-button
v-if="nodeId === 30"
type="danger"
@click="auditOrder('archive')"
>
归档
</el-button>
</div>
<div class="delivery-note-content flex-1 flex-column overflow-hidden">
<div
class="delivery-note-content flex-1 flex-column overflow-hidden"
>
<div class="delivery-note-list flex-1 overflow-hidden">
<ElTable
ref="singleTableRef"
......@@ -110,7 +148,6 @@
border
@current-change="rowClick"
@selection-change="handleSelectionChange"
>
<ElTableColumn
type="selection"
......@@ -122,82 +159,124 @@
type="index"
label="序号"
width="60"
fixed="left"
header-align="center"
align="center"
></ElTableColumn>
<ElTableColumn
label="客户"
label="编码"
show-overflow-tooltip
prop="userMark"
prop="name"
width="200"
header-align="center"
align="center"
></ElTableColumn>
<ElTableColumn
label="发货单号"
<!-- <ElTableColumn
label="客户"
show-overflow-tooltip
prop="billNumber"
prop="user_mark"
width="200"
header-align="center"
align="center"
></ElTableColumn> -->
<ElTableColumn
label="对账单号"
show-overflow-tooltip
prop="rec_number"
min-width="200"
header-align="center"
align="center"
></ElTableColumn>
<ElTableColumn
<!-- <ElTableColumn
label="订单号"
show-overflow-tooltip
prop="orderNumber"
prop="order_number"
width="200"
header-align="center"
align="center"
></ElTableColumn> -->
<!-- <ElTableColumn
label="ERP总价格"
show-overflow-tooltip
width="130"
prop="erp_total_amount"
header-align="center"
align="center"
></ElTableColumn> -->
<ElTableColumn
label="商品总价"
show-overflow-tooltip
width="100"
prop="product_total_amount"
header-align="center"
align="center"
></ElTableColumn>
<ElTableColumn
label="质检未通过数量"
label="物流总价"
show-overflow-tooltip
width="130"
prop="notPassNum"
width="100"
prop="carriage_total_amount"
header-align="center"
align="center"
></ElTableColumn>
<ElTableColumn
label="发货数量"
label="发货数量"
show-overflow-tooltip
prop="shipmentNum"
prop="num"
width="130"
header-align="center"
align="center"
width="150"
></ElTableColumn>
<ElTableColumn
label="质检通过数量"
show-overflow-tooltip
prop="passNum"
width="150"
prop="pass_num"
width="130"
header-align="center"
align="center"
></ElTableColumn>
<!-- <ElTableColumn
label="ERP状态"
show-overflow-tooltip
width="130"
prop="erp_status"
header-align="center"
align="center"
></ElTableColumn> -->
<ElTableColumn
label="质检未通过数量"
show-overflow-tooltip
width="130"
prop="not_pass_num"
header-align="center"
align="center"
></ElTableColumn>
<!-- <ElTableColumn
label="发货数量"
show-overflow-tooltip
prop="shipment_num"
header-align="center"
align="center"
width="150"
></ElTableColumn>
<ElTableColumn
label="质检通过总价"
show-overflow-tooltip
prop="totalPrice"
prop="total_price"
width="200"
header-align="center"
align="center"
></ElTableColumn>
<ElTableColumn
label="收货人"
show-overflow-tooltip
width="200"
prop="lanshouName"
prop="lanshou_name"
header-align="center"
align="center"
></ElTableColumn>
<ElTableColumn
label="物流跟踪号"
......@@ -206,7 +285,6 @@
prop="logisticsTracking"
header-align="center"
align="center"
></ElTableColumn>
<ElTableColumn
label="物流名称"
......@@ -215,7 +293,6 @@
prop="carriageName"
header-align="center"
align="center"
></ElTableColumn>
<ElTableColumn
label="收货人电话"
......@@ -233,7 +310,6 @@
prop="lanshouRegion"
header-align="center"
align="center"
></ElTableColumn>
<ElTableColumn
label="揽收地址"
......@@ -242,7 +318,6 @@
width="200"
header-align="center"
align="center"
></ElTableColumn>
<ElTableColumn
label="揽收邮编"
......@@ -251,19 +326,33 @@
prop="lanshouPost"
header-align="center"
align="center"
></ElTableColumn> -->
<ElTableColumn
label="开始时间"
show-overflow-tooltip
width="200"
prop="start_time"
header-align="center"
align="center"
></ElTableColumn>
<ElTableColumn
label="结束时间"
show-overflow-tooltip
width="200"
prop="end_time"
header-align="center"
align="center"
></ElTableColumn>
<ElTableColumn
label="创建时间"
show-overflow-tooltip
width="200"
prop="createTime"
prop="create_time"
header-align="center"
align="center"
></ElTableColumn>
<ElTableColumn
<!-- <ElTableColumn
label="操作"
fixed="right"
header-align="center"
......@@ -273,14 +362,16 @@
>
<template #default="{ row }">
<div>
<ElButton v-if="nodeId===0" type="primary" link @click="onEditOrder(row)"
<ElButton
v-if="nodeId === 1"
type="primary"
link
@click="onEditOrder(row)"
>编辑
</ElButton
>
</ElButton>
</div>
</template>
</ElTableColumn>
</ElTableColumn> -->
</ElTable>
</div>
<ElPagination
......@@ -297,38 +388,112 @@
</div>
</template>
<template #bottom>
<el-tabs v-model="tabsValue" @tab-change="tabsClick">
<el-tabs v-model="tabsValue">
<el-tab-pane name="0" label="发货单详情">
<ElTable :data="detailList" height="100%" border>
<ElTableColumn show-overflow-tooltip width="60" align="center" label="序号" type="index" />
<ElTableColumn show-overflow-tooltip align="center" label="图片">
<template #default="{row}">
<el-image
preview-teleported style="height: 40px;width: 40px;" :src="row.variantImage"
:preview-src-list="[row.variantImage]"></el-image>
</template>
</ElTableColumn>
<ElTableColumn show-overflow-tooltip align="center" label="商品名称" prop="productName" />
<ElTableColumn show-overflow-tooltip align="center" label="baseSku" prop="baseSku" />
<ElTableColumn show-overflow-tooltip align="center" label="变体Sku" prop="variantSku" />
<ElTableColumn show-overflow-tooltip align="center" label="生产单号" prop="subOrderNumber" />
<ElTableColumn show-overflow-tooltip align="center" label="单价" prop="price" />
<ElTableColumn show-overflow-tooltip align="center" label="发货数" prop="shipmentNum" />
<ElTableColumn show-overflow-tooltip align="center" label="质检(通过)" prop="passNum" />
<ElTableColumn show-overflow-tooltip align="center" label="质检(不通过)" prop="notPassNum" />
<ElTable size="small" :data="detailList" height="100%" border>
<ElTableColumn
show-overflow-tooltip
width="60"
align="center"
label="序号"
type="index"
/>
<ElTableColumn
show-overflow-tooltip
align="center"
label="单号"
prop="factory_order_number"
/>
<!-- <ElTableColumn
show-overflow-tooltip
align="center"
label="ERP单号"
prop="erp_order_number"
/> -->
<ElTableColumn
show-overflow-tooltip
align="center"
label="发货单号"
prop="bill_number"
/>
<ElTableColumn
show-overflow-tooltip
align="center"
label="发货数"
prop="num"
/>
<ElTableColumn
show-overflow-tooltip
align="center"
label="质检通过"
prop="pass_num"
/>
<ElTableColumn
show-overflow-tooltip
align="center"
label="质检不通过"
prop="not_pass_num"
/>
<!-- <ElTableColumn
show-overflow-tooltip
align="center"
label="ERP价格"
prop="erp_price"
/> -->
<ElTableColumn
show-overflow-tooltip
align="center"
label="价格"
prop="price"
/>
<ElTableColumn
show-overflow-tooltip
align="center"
label="物流价格"
prop="carriage_amount"
/>
<ElTableColumn
show-overflow-tooltip
align="center"
label="发货时间"
prop="shipment_time"
/>
<ElTableColumn
width="100"
align="center"
header-align="center"
label="操作"
>
<template #default="{ row }">
<ElButton type="primary" link @click="onDetail(row)"
>查看详情
</ElButton>
</template>
</ElTableColumn>
</ElTable>
</el-tab-pane>
<el-tab-pane name="1" label="操作日志">
<ul style="color: #333; font-size: 12px; height: 100%; overflow: auto">
<li v-for="(item, index) in logList" :key="index" style="display: flex">
<ul
style="
color: #333;
font-size: 12px;
height: 100%;
overflow: auto;
"
>
<li
v-for="(item, index) in logList"
:key="index"
style="display: flex"
>
<span style="display: inline-block; width: 13%">
{{ item.createTime }}
{{ item.create_time }}
</span>
<span
style="display: inline-block; width: 80%"
v-html="item.description"></span>
<span style="display: inline-block; width: 80%">{{
item.description
}}</span>
</li>
</ul>
</el-tab-pane>
......@@ -338,8 +503,8 @@
</div>
</div>
</div>
<ElDialog v-model="dialogVisible" width="1100px" draggable title="编辑">
<el-form v-model="editForm" style="width: 100%;" inline label-width="120px">
<!-- <ElDialog v-model="dialogVisible" width="1100px" draggable title="编辑">
<el-form v-model="editForm" style="width: 100%" inline label-width="120px">
<el-form-item prop="billNumber" label="发货单号">
<el-input v-model="editForm.billNumber" disabled></el-input>
</el-form-item>
......@@ -377,109 +542,86 @@
</el-form-item>
</el-form>
<template #footer>
<el-button @click="dialogVisible=false">取消</el-button>
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitData">确认</el-button>
</template>
</ElDialog>
</ElDialog> -->
<ElDrawer
v-model="shipmentOrderDetailDrawerVisible"
title="发货单详情"
size="30%"
>
<shipmentOrderDetailInfo :detail="shipmentOrderDetail" />
</ElDrawer>
</template>
<script setup lang="ts">
import { ElMessage, ElTree, TableColumnCtx } from 'element-plus'
import splitDiv from '@/components/splitDiv/splitDiv.vue'
interface Tree {
label: string
count?: number
children?: Tree[],
id: number | string
}
interface Log {
createTime: string
description: string
}
import {
AccountStatementNote,
} from '@/types/api/deliveryNote'
import { ElTable } from 'element-plus'
import usePageList from '@/utils/hooks/usePageList'
import { useValue } from '@/utils/hooks/useValue'
import {
customJomallReconciliation, customJomallReconciliationLog, factoryConfirm,
getCustomJomallReconciliationById, getReconciliationAmount, getShipmentDetailsById, updateReconciliation,
customJomallReconciliation,
getReconciliationAmount,
getShipmentDetailsById,
auditOrderApi,
getShipmentOrderDetailById,
} from '@/api/order'
import { ref, onMounted, watch, nextTick } from 'vue'
import 'element-plus/dist/index.css'
import { Confirm, CountStatus } from '@/types/api/order.ts'
import { getUserMarkList } from '@/api/auth.ts'
import {
CountStatus,
AccountStatementNote,
ItemList,
LogList,
AccountStatementNoteSearchForm,
} from '@/types/api/billOrder.ts'
import { ShipmentOrderDetailData } from '@/types/api/deliveryNote'
import shipmentOrderDetailInfo from '@/components/ShipmentOrderDetail.vue'
// import { getUserMarkList } from '@/api/auth.ts'
interface Tree {
remark?: string
count?: number
code?: string
children?: Tree[]
}
interface SummaryMethodProps<T = AccountStatementNote> {
columns: TableColumnCtx<T>[]
data: T[]
}
const nameSpaceList = ref<string[]>([])
const treeData = ref<Tree[]>([
{
label: '全部',
id: '-1',
children: [
{
label: '草稿箱',
id: 0,
children: [],
},
{
label: '待确认',
id: 1,
children: [],
},
{
label: '待付款',
id: 2,
children: [],
}, {
label: '已付款',
id: 3,
children: [],
}, {
label: '归档',
id: 4,
children: [],
},
],
},
])
const [searchForm, resetSearchForm] = useValue<AccountStatementNote>({})
// const nameSpaceList = ref<string[]>([])
const treeData = ref<CountStatus[]>()
const [searchForm, resetSearchForm] = useValue<AccountStatementNoteSearchForm>(
{},
)
const dateRange = ref<string[]>([])
const selections = ref<AccountStatementNote[]>([])
const detailList = ref<AccountStatementNote[]>([])
const detailList = ref<ItemList[]>([])
const tabsValue = ref<string>('0')
const singleTableRef = ref<InstanceType<typeof ElTable>>()
const currentRow = ref<AccountStatementNote | null>(null)
const logList = ref<Log[]>([])
const logList = ref<LogList[]>([])
const nodeId = ref<number | string>('-1')
const nodeId = ref<number | string>(1)
const treeRef = ref<InstanceType<typeof ElTree>>()
const editForm = ref<AccountStatementNote>({
billNumber: '',
lanshouAddress: '',
shipmentId: '',
totalPrice: '',
shipmentNum: '',
passNum: '',
lanshouPost: '',
lanshouName: '',
lanshouPhone: '',
totalAmount: '',
})
// const editForm = ref<AccountStatementNote>({
// billNumber: '',
// lanshouAddress: '',
// shipmentId: '',
// totalPrice: '',
// shipmentNum: '',
// passNum: '',
// lanshouPost: '',
// lanshouName: '',
// lanshouPhone: '',
// totalAmount: '',
// })
const {
currentPage,
pageSize,
......@@ -490,132 +632,84 @@ const {
onCurrentPageChange: handleCurrentChange,
onPageSizeChange: handleSizeChange,
} = usePageList({
statistics: true,
query: (page, pageSize) => (customJomallReconciliation(
query: (page, pageSize) =>
customJomallReconciliation(
{
...searchForm.value,
status: nodeId.value === '-1' ? null : nodeId.value,
startTime: dateRange.value && dateRange.value[0],
endTime: dateRange.value && dateRange.value[1],
status: nodeId.value === -1 ? null : nodeId.value,
start_time: dateRange.value && dateRange.value[0],
end_time: dateRange.value && dateRange.value[1],
},
page,
pageSize,
).then((res) => res.data) as never),
).then((res) => res.data) as never,
})
onMounted(() => {
getNameSpaceList()
treeRef.value!.setCurrentKey(nodeId.value, true)
// getNameSpaceList()
})
const dialogVisible = ref<boolean>(false)
// const dialogVisible = ref<boolean>(false)
const getNameSpaceList = async () => {
try {
const res = await getUserMarkList()
nameSpaceList.value = res.data
} catch (e) {
// showError(e)
}
}
// const getNameSpaceList = async () => {
// try {
// const res = await getUserMarkList()
// nameSpaceList.value = res.data
// } catch (e) {
// // showError(e)
// }
// }
const getTreeNum = async () => {
try {
const res = await getReconciliationAmount()
treeData.value = [{
label: '全部',
id: '-1',
children: [
{
label: '草稿箱',
id: 0,
},
{
label: '待确认',
id: 1,
},
{
label: '待付款',
id: 2,
}, {
label: '已付款',
id: 3,
}, {
label: '归档',
id: 4,
},
],
}]
res.data = [{ code: -1, remark: '全部', children: res.data }]
treeData.value = res.data
await nextTick(() => {
treeRef.value!.setCurrentKey(nodeId.value, true)
})
treeData.value.forEach((el) => {
if (!el.children) {
el.children = []
}
el.children.forEach((it) => {
it.count = 0
})
el.children.forEach((it) => {
res.data.forEach((item: CountStatus) => {
if (it.id === item.status) {
it['count'] = item.count
}
})
if (it.id !== '-1') {
it.label = it.label + `(${it.count || 0})`
}
})
})
treeData.value[0].label = ''
treeData.value[0].label = '全部' + (res.data.find((el: CountStatus) => el.totalSum) ? `(${res.data.find((el: CountStatus) => el.totalSum)!.totalSum})` : '(0)')
}
const onEditOrder = async (item: AccountStatementNote) => {
try {
const res = await getCustomJomallReconciliationById(item.id)
editForm.value = (res.data) as never
dialogVisible.value = true
} catch (e) {
// showError(e)
}
}
const logOrder = async (item: AccountStatementNote) => {
try {
const res = await customJomallReconciliationLog(item.id)
logList.value = (res.data) as never
} catch (e) {
// showError(e)
}
}
const submitData = async () => {
try {
const res = await updateReconciliation(editForm.value)
logList.value = (res.data) as never
dialogVisible.value = false
ElMessage.success('修改成功')
search()
} catch (e) {
// showError(e)
console.error(e)
}
}
// const onEditOrder = async (item: AccountStatementNote) => {
// try {
// const res = await getCustomJomallReconciliationById(item.id)
// editForm.value = res.data as never
// dialogVisible.value = true
// } catch (e) {
// // showError(e)
// }
// }
// const submitData = async () => {
// try {
// const res = await updateReconciliation(editForm.value)
// logList.value = res.data as never
// dialogVisible.value = false
// ElMessage.success('修改成功')
// search()
// } catch (e) {
// // showError(e)
// }
// }
const rowClick = (row: AccountStatementNote) => {
currentRow.value = row
tabsValue.value = '0'
tabsClick(tabsValue.value)
tabsClick()
}
const tabsClick = async (name: string) => {
if (!currentRow.value) return
if (name === '0') {
const { data } = await getShipmentDetailsById(currentRow.value!.shipmentId)
detailList.value = data
} else if (name === '1') {
await logOrder(currentRow.value)
const tabsClick = async () => {
if (!currentRow.value) {
detailList.value = []
logList.value = []
return
}
try {
const res = await getShipmentDetailsById(currentRow.value.id)
detailList.value = res.data.itemList || []
logList.value = res.data.logList || []
} catch (e) {
console.error(e)
}
}
const handleSelectionChange = (v: AccountStatementNote[]) => {
......@@ -645,25 +739,41 @@ const getSummaries = (data: SummaryMethodProps) => {
})
return sums
}
const auditOrder = (key: string) => {
let url = ''
let text = ''
switch (key) {
case 'pay':
url = 'reconciliation/payment'
text = '确认付款'
break
case 'archiving':
url = 'reconciliation/archiving'
text = '确认归档'
break
case 'confirm':
url = 'reconciliation/confirm'
text = '确认'
break
}
const sureFactory = () => {
ElMessageBox.confirm(`确认对账单?`, '重要提示', {
if (selections.value.length === 0) {
return ElMessage.warning('请选择要操作的数据')
}
ElMessageBox.confirm(`${text}对账单?`, '重要提示', {
confirmButtonText: '确定',
type: 'warning',
}).then(async () => {
const data:Confirm[] = selections.value.map(el => {
return {
id: el.id,
dataVersion: el.dataVersion,
}
})
await factoryConfirm(data)
const ids = selections.value.map((el) => el.id).join(',')
await auditOrderApi(url, ids)
ElMessage.success('操作成功')
search()
await getTreeNum()
})
}
watch(() => tableData.value, () => {
watch(
() => tableData.value,
() => {
if (tableData.value && tableData.value.length > 0) {
if (singleTableRef.value) {
singleTableRef.value!.setCurrentRow(tableData.value[0])
......@@ -672,20 +782,31 @@ watch(() => tableData.value, () => {
} else {
detailList.value = []
}
}, { immediate: true })
},
{ immediate: true },
)
const nodeClick = (data: Tree) => {
nodeId.value = data.id
detailList.value = []
logList.value = []
nodeId.value = data.code ?? ''
search()
}
getTreeNum()
const shipmentOrderDetailDrawerVisible = ref(false)
const shipmentOrderDetail = ref({} as ShipmentOrderDetailData)
const onDetail = async (row: ItemList) => {
try {
const res = await getShipmentOrderDetailById(row.shipment_id)
shipmentOrderDetail.value = res.data
shipmentOrderDetailDrawerVisible.value = true
} catch (e) {
console.error(e)
}
}
onMounted(() => {
getTreeNum()
})
</script>
<style lang="scss" scoped>
.header-filter-form {
margin-bottom: 20px;
:deep(.el-form-item) {
margin-right: 14px;
margin-bottom: 10px;
......@@ -741,26 +862,54 @@ $border: solid 1px #ddd;
}
}
.page {
display: flex;
.left {
width: 160px;
:deep(.el-tree-node__content) {
height: 30px;
line-height: 30px;
}
:deep(.el-tree-node__label) {
font-size: 13px;
cursor: pointer;
display: inline-block;
width: 100%;
color: black !important;
height: 100%;
padding: 3px 7px;
}
.left {
min-width: 150px;
margin-right: 15px;
background: white;
background-color: white;
padding: 10px;
box-sizing: border-box;
:deep(.el-tree-node__expand-icon) {
display: none;
}
:deep(.is-current) {
.tree-node-label,
.tree-node-count {
background-color: #ecf5ff;
color: #409eff !important;
}
.right {
.el-tree-node__children {
.tree-node-label,
.tree-node-count {
background-color: transparent !important;
color: black !important;
}
}
}
}
.tree-node {
display: flex;
color: #333;
font-weight: 500;
}
.right {
flex: 1;
flex-shrink: 0;
background: white;
overflow: hidden;
}
}
::v-deep(.el-tree-node__label) {
......@@ -785,7 +934,6 @@ $border: solid 1px #ddd;
.el-tree-node__label {
background-color: #ecf5ff;
color: #409eff !important;
}
.el-tree-node__children {
......@@ -794,17 +942,14 @@ $border: solid 1px #ddd;
color: black !important;
}
}
}
::v-deep(.splitpanes__pane) {
display: flex;
flex-direction: column;
}
::v-deep(.splitpanes--horizontal>.splitpanes__splitter) {
::v-deep(.splitpanes--horizontal > .splitpanes__splitter) {
min-height: 5px;
margin-top: 10px;
}
......@@ -814,11 +959,6 @@ $border: solid 1px #ddd;
height: 5px;
background: #eff3f6;
}
.card {
background: transparent;
}
.btn-list {
margin-bottom: 10px;
}
......@@ -826,11 +966,9 @@ $border: solid 1px #ddd;
::v-deep(.el-tree-node) {
cursor: pointer;
margin-bottom: 5px;
}
::v-deep(.el-tree-node__label) {
font-size: 14px;
}
......@@ -849,4 +987,9 @@ $border: solid 1px #ddd;
}
}
}
.delivery-note-page {
:deep(#top) {
height: 100%;
}
}
</style>
{
"compilerOptions": {
"target": "ES2020",
"jsxImportSource": "vue",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment