From d3dc51406594c23e5d38cf6959d791da56068c56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=99=93=E4=BC=9F?= Date: Tue, 25 Feb 2025 13:07:09 +0800 Subject: [PATCH 001/141] =?UTF-8?q?:sparkles:=20=E6=96=B0=E5=A2=9E=20Vue?= =?UTF-8?q?=20=E5=BC=80=E5=8F=91=E5=B7=A5=E5=85=B7=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 1332 ++++++++++++++++++++++++++++++++++++++++++--- package.json | 5 +- vite.config.ts | 2 + 3 files changed, 1256 insertions(+), 83 deletions(-) diff --git a/package-lock.json b/package-lock.json index e390db49..03d35a8c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,19 @@ { "name": "pig-ui", - "version": "3.8.1", + "version": "3.8.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pig-ui", - "version": "3.8.1", + "version": "3.8.3", "license": "Apache-2.0", "dependencies": { "@element-plus/icons-vue": "2.3.1", "@wangeditor/editor": "5.1.23", "@wangeditor/editor-for-vue": "5.1.12", "autoprefixer": "10.4.20", - "axios": "1.7.8", + "axios": "1.7.9", "china-area-data": "^5.0.1", "codemirror": "5.65.18", "crypto-js": "4.2.0", @@ -23,14 +23,14 @@ "js-cookie": "3.0.5", "mitt": "3.0.1", "nprogress": "0.2.0", - "pinia": "2.2.6", + "pinia": "2.3.0", "postcss": "8.4.49", - "qs": "6.13.0", + "qs": "6.13.1", "screenfull": "6.0.2", "sm-crypto": "0.3.13", - "sortablejs": "1.15.3", - "splitpanes": "3.1.5", - "tailwindcss": "3.4.14", + "sortablejs": "1.15.6", + "splitpanes": "3.1.8", + "tailwindcss": "3.4.17", "vue": "3.5.13", "vue-clipboard3": "2.0.0", "vue-echarts": "7.0.3", @@ -50,10 +50,10 @@ "consola": "3.2.3", "cross-env": "7.0.3", "eslint": "9.14.0", - "eslint-plugin-vue": "9.30.0", + "eslint-plugin-vue": "9.32.0", "glob": "9.3.5", "pinia-plugin-persist": "1.0.0", - "prettier": "3.3.3", + "prettier": "3.4.2", "sass": "1.58.3", "terser": "5.36.0", "typescript": "5.6.3", @@ -62,6 +62,7 @@ "vite": "5.4.11", "vite-plugin-compression": "0.5.1", "vite-plugin-top-level-await": "1.4.4", + "vite-plugin-vue-devtools": "7.7.2", "vue-eslint-parser": "9.4.3" }, "engines": { @@ -80,6 +81,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/@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/utils": { "version": "0.7.10", "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.10.tgz", @@ -89,6 +103,260 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmmirror.com/@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/code-frame/node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.9", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.26.9.tgz", + "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.9", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", + "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.npmmirror.com/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.9", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.26.9.tgz", + "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9", + "@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.npmmirror.com/@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.26.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@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.npmmirror.com/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.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.26.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz", + "integrity": "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==", + "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.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.26.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.npmmirror.com/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.npmmirror.com/@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.npmmirror.com/@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.npmmirror.com/@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.npmmirror.com/@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.26.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.26.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" + }, + "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.npmmirror.com/@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.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", @@ -105,12 +373,34 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@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.9", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.26.9.tgz", + "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/parser": { - "version": "7.26.5", - "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.26.5.tgz", - "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==", + "version": "7.26.9", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.26.9.tgz", + "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", "dependencies": { - "@babel/types": "^7.26.5" + "@babel/types": "^7.26.9" }, "bin": { "parser": "bin/babel-parser.js" @@ -119,6 +409,114 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", + "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-decorators": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", + "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", + "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-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "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-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@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.npmmirror.com/@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.26.8", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz", + "integrity": "sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==", + "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.26.5", + "@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.26.0", "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.26.0.tgz", @@ -130,10 +528,51 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/template": { + "version": "7.26.9", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.26.9.tgz", + "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.9", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.26.9.tgz", + "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.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.npmmirror.com/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.5", - "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.26.5.tgz", - "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==", + "version": "7.26.9", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" @@ -920,6 +1359,12 @@ "node": ">=14" } }, + "node_modules/@polka/url": { + "version": "1.0.0-next.28", + "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.28.tgz", + "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", + "dev": true + }, "node_modules/@popperjs/core": { "name": "@sxzz/popperjs-es", "version": "2.11.7", @@ -1228,6 +1673,24 @@ "win32" ] }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@swc/core": { "version": "1.6.13", "resolved": "https://registry.npmmirror.com/@swc/core/-/core-1.6.13.tgz", @@ -1764,6 +2227,54 @@ "vue": "^3.2.25" } }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/@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.npmmirror.com/@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.npmmirror.com/@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/compiler-core": { "version": "3.5.13", "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz", @@ -1815,6 +2326,65 @@ "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz", "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" }, + "node_modules/@vue/devtools-core": { + "version": "7.7.2", + "resolved": "https://registry.npmmirror.com/@vue/devtools-core/-/devtools-core-7.7.2.tgz", + "integrity": "sha512-lexREWj1lKi91Tblr38ntSsy6CvI8ba7u+jmwh2yruib/ltLUcsIzEjCnrkh1yYGGIKXbAuYV2tOG10fGDB9OQ==", + "dev": true, + "dependencies": { + "@vue/devtools-kit": "^7.7.2", + "@vue/devtools-shared": "^7.7.2", + "mitt": "^3.0.1", + "nanoid": "^5.0.9", + "pathe": "^2.0.2", + "vite-hot-client": "^0.2.4" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-core/node_modules/nanoid": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-5.1.2.tgz", + "integrity": "sha512-b+CiXQCNMUGe0Ri64S9SXFcP9hogjAJ2Rd6GdVxhPLRm7mhGaM7VgOvCAJ1ZshfHbqVDI3uqTI5C8/GaKuLI7g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.2", + "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.7.2.tgz", + "integrity": "sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ==", + "dev": true, + "dependencies": { + "@vue/devtools-shared": "^7.7.2", + "birpc": "^0.2.19", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.1" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.2", + "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.7.2.tgz", + "integrity": "sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==", + "dev": true, + "dependencies": { + "rfdc": "^1.4.1" + } + }, "node_modules/@vue/reactivity": { "version": "3.5.13", "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.13.tgz", @@ -2230,9 +2800,9 @@ } }, "node_modules/axios": { - "version": "1.7.8", - "resolved": "https://registry.npmmirror.com/axios/-/axios-1.7.8.tgz", - "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==", + "version": "1.7.9", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -2255,6 +2825,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/birpc": { + "version": "0.2.19", + "resolved": "https://registry.npmmirror.com/birpc/-/birpc-0.2.19.tgz", + "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", @@ -2317,6 +2896,21 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/call-bind-apply-helpers": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", @@ -2511,6 +3105,27 @@ "node": "^14.18.0 || >=16.10.0" } }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dev": true, + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/cross-env": { "version": "7.0.3", "resolved": "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz", @@ -2603,6 +3218,46 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2712,6 +3367,15 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/error-stack-parser-es": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz", + "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", @@ -2900,9 +3564,9 @@ } }, "node_modules/eslint-plugin-vue": { - "version": "9.30.0", - "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.30.0.tgz", - "integrity": "sha512-CyqlRgShvljFkOeYK8wN5frh/OGTvkj1S7wlr2Q2pUvwq+X5VYiLd6ZjujpgSgLnys2W8qrBLkXQ41SUYaoPIQ==", + "version": "9.32.0", + "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.32.0.tgz", + "integrity": "sha512-b/Y05HYmnB/32wqVcjxjHZzNpwxj1onBOvqW89W+V+XNG1dRuaFbNd3vT9CLbr2LXjEoq+3vn8DanWf7XU22Ug==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", @@ -3097,6 +3761,32 @@ "es5-ext": "~0.10.14" } }, + "node_modules/execa": { + "version": "9.5.2", + "resolved": "https://registry.npmmirror.com/execa/-/execa-9.5.2.tgz", + "integrity": "sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==", + "dev": true, + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.3", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.0", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.0.0" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, "node_modules/ext": { "version": "1.7.0", "resolved": "https://registry.npmmirror.com/ext/-/ext-1.7.0.tgz", @@ -3157,6 +3847,21 @@ "reusify": "^1.0.4" } }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -3315,6 +4020,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmmirror.com/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-intrinsic": { "version": "1.2.7", "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.7.tgz", @@ -3350,6 +4064,22 @@ "node": ">= 0.4" } }, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "dev": true, + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/glob": { "version": "9.3.5", "resolved": "https://registry.npmmirror.com/glob/-/glob-9.3.5.tgz", @@ -3468,6 +4198,24 @@ "node": ">= 0.4" } }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/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.npmmirror.com/html-void-elements/-/html-void-elements-2.0.1.tgz", @@ -3477,6 +4225,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/human-signals": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-8.0.0.tgz", + "integrity": "sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==", + "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, "node_modules/i18next": { "version": "20.6.1", "resolved": "https://registry.npmmirror.com/i18next/-/i18next-20.6.1.tgz", @@ -3559,6 +4316,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3591,6 +4363,24 @@ "resolved": "https://registry.npmmirror.com/is-hotkey/-/is-hotkey-0.2.0.tgz", "integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==" }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", @@ -3599,12 +4389,48 @@ "node": ">=0.12.0" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-url": { @@ -3612,6 +4438,33 @@ "resolved": "https://registry.npmmirror.com/is-url/-/is-url-1.2.4.tgz", "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmmirror.com/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "dev": true, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", @@ -3670,6 +4523,18 @@ "resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-1.1.0.tgz", "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "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", @@ -3688,6 +4553,18 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", @@ -3709,6 +4586,12 @@ "json-buffer": "3.0.1" } }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz", @@ -3723,11 +4606,14 @@ } }, "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, "node_modules/lines-and-columns": { @@ -3940,6 +4826,15 @@ "ufo": "^1.5.4" } }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", @@ -4015,6 +4910,34 @@ "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/nprogress": { "version": "0.2.0", "resolved": "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz", @@ -4059,6 +4982,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz", @@ -4123,6 +5064,18 @@ "node": ">=6" } }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", @@ -4169,9 +5122,15 @@ } }, "node_modules/pathe": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.1.tgz", - "integrity": "sha512-6jpjMpOth5S9ITVu5clZ7NOgHNsv5vRQdheL9ztp2vZmM6fRbLvyua1tiBIL4lk8SAe3ARzeXEly6siXCjDHDw==", + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", "dev": true }, "node_modules/picocolors": { @@ -4199,9 +5158,9 @@ } }, "node_modules/pinia": { - "version": "2.2.6", - "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.2.6.tgz", - "integrity": "sha512-vIsR8JkDN5Ga2vAxqOE2cJj4VtsHnzpR1Fz30kClxlh0yCHfec6uoMeM3e/ddqmwFUejK3NlrcQa/shnpyT4hA==", + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.3.0.tgz", + "integrity": "sha512-ohZj3jla0LL0OH5PlLTDMzqKiVw2XARmC1XYLdLWIPBMdhDW/123ZWr4zVAhtJm+aoSkFa13pYXskAvAscIkhQ==", "dependencies": { "@vue/devtools-api": "^6.6.3", "vue-demi": "^0.14.10" @@ -4210,14 +5169,10 @@ "url": "https://github.com/sponsors/posva" }, "peerDependencies": { - "@vue/composition-api": "^1.4.0", "typescript": ">=4.4.4", - "vue": "^2.6.14 || ^3.5.11" + "vue": "^2.7.0 || ^3.5.11" }, "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - }, "typescript": { "optional": true } @@ -4413,17 +5368,6 @@ } } }, - "node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, "node_modules/postcss-nested": { "version": "6.2.0", "resolved": "https://registry.npmmirror.com/postcss-nested/-/postcss-nested-6.2.0.tgz", @@ -4484,9 +5428,9 @@ } }, "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "version": "3.4.2", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -4498,6 +5442,21 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/pretty-ms": { + "version": "9.2.0", + "resolved": "https://registry.npmmirror.com/pretty-ms/-/pretty-ms-9.2.0.tgz", + "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", + "dev": true, + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/prismjs": { "version": "1.29.0", "resolved": "https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz", @@ -4521,9 +5480,9 @@ } }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmmirror.com/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.13.1", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.13.1.tgz", + "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", "dependencies": { "side-channel": "^1.0.6" }, @@ -4614,6 +5573,12 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true + }, "node_modules/rollup": { "version": "4.30.1", "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.30.1.tgz", @@ -4652,6 +5617,18 @@ "fsevents": "~2.3.2" } }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", @@ -4831,6 +5808,20 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sirv": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/sirv/-/sirv-3.0.1.tgz", + "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/slate": { "version": "0.72.8", "resolved": "https://registry.npmmirror.com/slate/-/slate-0.72.8.tgz", @@ -4869,9 +5860,9 @@ } }, "node_modules/sortablejs": { - "version": "1.15.3", - "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.15.3.tgz", - "integrity": "sha512-zdK3/kwwAK1cJgy1rwl1YtNTbRmc8qW/+vgXf75A7NHag5of4pyI6uK86ktmQETyWRH7IGaE73uZOOBcGxgqZg==" + "version": "1.15.6", + "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.15.6.tgz", + "integrity": "sha512-aNfiuwMEpfBM/CN6LY0ibyhxPfPbyFeBTYJKCvzkJ2GkUpazIt3H+QIPAMHwqQ7tMKaHz1Qj+rJJCqljnf4p3A==" }, "node_modules/source-map": { "version": "0.6.1", @@ -4907,12 +5898,24 @@ "deprecated": "Please use @jridgewell/sourcemap-codec instead", "dev": true }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/splitpanes": { - "version": "3.1.5", - "resolved": "https://registry.npmmirror.com/splitpanes/-/splitpanes-3.1.5.tgz", - "integrity": "sha512-r3Mq2ITFQ5a2VXLOy4/Sb2Ptp7OfEO8YIbhVJqJXoFc9hc5nTXXkCvtVDjIGbvC0vdE7tse+xTM9BMjsszP6bw==", + "version": "3.1.8", + "resolved": "https://registry.npmmirror.com/splitpanes/-/splitpanes-3.1.8.tgz", + "integrity": "sha512-iYir0doakV9gYBfCuflGCxCD5Yhh09OGgT+epjfc6LZfTvGDdMXuD0Q4w6jI3hlkdRR1Ta3DlARcV3MOkybymg==", "funding": { "url": "https://github.com/sponsors/antoniandre" + }, + "peerDependencies": { + "vue": "^3.2.0" } }, "node_modules/ssr-window": { @@ -5008,6 +6011,18 @@ "node": ">=8" } }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -5080,6 +6095,18 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "dev": true, + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", @@ -5103,33 +6130,39 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, "node_modules/tailwindcss": { - "version": "3.4.14", - "resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.4.14.tgz", - "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", + "version": "3.4.17", + "resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", - "chokidar": "^3.5.3", + "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.3.0", + "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.21.0", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", @@ -5209,6 +6242,15 @@ "node": ">=8.0" } }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/ts-api-utils": { "version": "1.4.3", "resolved": "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz", @@ -5279,6 +6321,18 @@ "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", "dev": true }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unimport": { "version": "3.14.5", "resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.14.5.tgz", @@ -5534,6 +6588,18 @@ } } }, + "node_modules/vite-hot-client": { + "version": "0.2.4", + "resolved": "https://registry.npmmirror.com/vite-hot-client/-/vite-hot-client-0.2.4.tgz", + "integrity": "sha512-a1nzURqO7DDmnXqabFOliz908FRmIppkBKsJthS8rbe8hBEXwEwe4C3Pp33Z1JoFCYfVL4kTOMLKk0ZZxREIeA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0" + } + }, "node_modules/vite-plugin-compression": { "version": "0.5.1", "resolved": "https://registry.npmmirror.com/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz", @@ -5548,6 +6614,51 @@ "vite": ">=2.0.0" } }, + "node_modules/vite-plugin-inspect": { + "version": "0.8.9", + "resolved": "https://registry.npmmirror.com/vite-plugin-inspect/-/vite-plugin-inspect-0.8.9.tgz", + "integrity": "sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==", + "dev": true, + "dependencies": { + "@antfu/utils": "^0.7.10", + "@rollup/pluginutils": "^5.1.3", + "debug": "^4.3.7", + "error-stack-parser-es": "^0.1.5", + "fs-extra": "^11.2.0", + "open": "^10.1.0", + "perfect-debounce": "^1.0.0", + "picocolors": "^1.1.1", + "sirv": "^3.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite-plugin-inspect/node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/vite-plugin-top-level-await": { "version": "1.4.4", "resolved": "https://registry.npmmirror.com/vite-plugin-top-level-await/-/vite-plugin-top-level-await-1.4.4.tgz", @@ -5760,6 +6871,47 @@ "node": ">=10" } }, + "node_modules/vite-plugin-vue-devtools": { + "version": "7.7.2", + "resolved": "https://registry.npmmirror.com/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.7.2.tgz", + "integrity": "sha512-5V0UijQWiSBj32blkyPEqIbzc6HO9c1bwnBhx+ay2dzU0FakH+qMdNUT8nF9BvDE+i6I1U8CqCuJiO20vKEdQw==", + "dev": true, + "dependencies": { + "@vue/devtools-core": "^7.7.2", + "@vue/devtools-kit": "^7.7.2", + "@vue/devtools-shared": "^7.7.2", + "execa": "^9.5.1", + "sirv": "^3.0.0", + "vite-plugin-inspect": "0.8.9", + "vite-plugin-vue-inspector": "^5.3.1" + }, + "engines": { + "node": ">=v14.21.3" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/vite-plugin-vue-inspector": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.1.tgz", + "integrity": "sha512-cBk172kZKTdvGpJuzCCLg8lJ909wopwsu3Ve9FsL1XsnLBiRT9U3MePcqrgGHgCX2ZgkqZmAGR8taxw+TV6s7A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.0", + "@babel/plugin-proposal-decorators": "^7.23.0", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.22.15", + "@vue/babel-plugin-jsx": "^1.1.5", + "@vue/compiler-dom": "^3.3.4", + "kolorist": "^1.8.0", + "magic-string": "^0.30.4" + }, + "peerDependencies": { + "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0" + } + }, "node_modules/vue": { "version": "3.5.13", "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.13.tgz", @@ -6061,6 +7213,12 @@ "node": ">=12" } }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "node_modules/yaml": { "version": "2.7.0", "resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.7.0.tgz", @@ -6084,6 +7242,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/yoctocolors/-/yoctocolors-2.1.1.tgz", + "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zrender": { "version": "5.6.0", "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.0.tgz", diff --git a/package.json b/package.json index 210581d3..28889f8b 100644 --- a/package.json +++ b/package.json @@ -61,11 +61,12 @@ "sass": "1.58.3", "terser": "5.36.0", "typescript": "5.6.3", + "unplugin-auto-import": "0.18.6", + "unplugin-vue-setup-extend-plus": "1.0.1", "vite": "5.4.11", "vite-plugin-compression": "0.5.1", "vite-plugin-top-level-await": "1.4.4", - "unplugin-auto-import": "0.18.6", - "unplugin-vue-setup-extend-plus": "1.0.1", + "vite-plugin-vue-devtools": "7.7.2", "vue-eslint-parser": "9.4.3" }, "browserslist": [ diff --git a/vite.config.ts b/vite.config.ts index 6176072f..229d75c0 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,4 +1,5 @@ import vue from '@vitejs/plugin-vue'; +import vueDevTools from 'vite-plugin-vue-devtools'; import { resolve } from 'path'; import { defineConfig, loadEnv, ConfigEnv } from 'vite'; import vueSetupExtend from 'unplugin-vue-setup-extend-plus/vite'; @@ -24,6 +25,7 @@ const viteConfig = defineConfig((mode: ConfigEnv) => { return { plugins: [ vue(), // Vue 插件 + vueDevTools(), // Vue Devtools 插件 svgBuilder('./src/assets/icons/'), // 将 SVG 文件转换成 Vue 组件 vueSetupExtend({}), // setup语法糖增强插件 AutoImport({ -- Gitee From dfa910af558d5660a9ae3b2148f7711a1b74c2fa Mon Sep 17 00:00:00 2001 From: AC <1196417540@qq.com> Date: Thu, 24 Apr 2025 13:45:28 +0800 Subject: [PATCH 002/141] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auto-imports.d.ts | 1 + src/api/platform/question.ts | 100 +++++++++++ src/api/platform/questionCombination.ts | 100 +++++++++++ src/api/platform/questionOption.ts | 100 +++++++++++ src/api/platform/questionRecord.ts | 100 +++++++++++ src/api/platform/questionRecordDetails.ts | 100 +++++++++++ src/api/platform/questionTable.ts | 100 +++++++++++ src/api/platform/school.ts | 100 +++++++++++ src/api/platform/schoolClass.ts | 100 +++++++++++ src/api/platform/schoolStudent.ts | 100 +++++++++++ src/api/platform/schoolUser.ts | 100 +++++++++++ src/api/platform/userType.ts | 100 +++++++++++ src/stores/themeConfig.ts | 12 +- src/views/platform/question/form.vue | 125 +++++++++++++ src/views/platform/question/index.vue | 128 ++++++++++++++ .../platform/questionCombination/form.vue | 132 ++++++++++++++ .../platform/questionCombination/index.vue | 149 ++++++++++++++++ src/views/platform/questionOption/form.vue | 129 ++++++++++++++ src/views/platform/questionOption/index.vue | 148 ++++++++++++++++ src/views/platform/questionRecord/form.vue | 139 +++++++++++++++ src/views/platform/questionRecord/index.vue | 156 ++++++++++++++++ .../platform/questionRecordDetails/form.vue | 118 +++++++++++++ .../platform/questionRecordDetails/index.vue | 147 ++++++++++++++++ src/views/platform/questionTable/form.vue | 125 +++++++++++++ src/views/platform/questionTable/index.vue | 148 ++++++++++++++++ src/views/platform/school/form.vue | 112 ++++++++++++ src/views/platform/school/index.vue | 140 +++++++++++++++ src/views/platform/schoolClass/form.vue | 127 ++++++++++++++ src/views/platform/schoolClass/index.vue | 143 +++++++++++++++ src/views/platform/schoolStudent/form.vue | 166 ++++++++++++++++++ src/views/platform/schoolStudent/index.vue | 158 +++++++++++++++++ src/views/platform/schoolUser/form.vue | 129 ++++++++++++++ src/views/platform/schoolUser/index.vue | 147 ++++++++++++++++ src/views/platform/userType/form.vue | 107 +++++++++++ src/views/platform/userType/index.vue | 147 ++++++++++++++++ 35 files changed, 4127 insertions(+), 6 deletions(-) create mode 100644 src/api/platform/question.ts create mode 100644 src/api/platform/questionCombination.ts create mode 100644 src/api/platform/questionOption.ts create mode 100644 src/api/platform/questionRecord.ts create mode 100644 src/api/platform/questionRecordDetails.ts create mode 100644 src/api/platform/questionTable.ts create mode 100644 src/api/platform/school.ts create mode 100644 src/api/platform/schoolClass.ts create mode 100644 src/api/platform/schoolStudent.ts create mode 100644 src/api/platform/schoolUser.ts create mode 100644 src/api/platform/userType.ts create mode 100644 src/views/platform/question/form.vue create mode 100644 src/views/platform/question/index.vue create mode 100644 src/views/platform/questionCombination/form.vue create mode 100644 src/views/platform/questionCombination/index.vue create mode 100644 src/views/platform/questionOption/form.vue create mode 100644 src/views/platform/questionOption/index.vue create mode 100644 src/views/platform/questionRecord/form.vue create mode 100644 src/views/platform/questionRecord/index.vue create mode 100644 src/views/platform/questionRecordDetails/form.vue create mode 100644 src/views/platform/questionRecordDetails/index.vue create mode 100644 src/views/platform/questionTable/form.vue create mode 100644 src/views/platform/questionTable/index.vue create mode 100644 src/views/platform/school/form.vue create mode 100644 src/views/platform/school/index.vue create mode 100644 src/views/platform/schoolClass/form.vue create mode 100644 src/views/platform/schoolClass/index.vue create mode 100644 src/views/platform/schoolStudent/form.vue create mode 100644 src/views/platform/schoolStudent/index.vue create mode 100644 src/views/platform/schoolUser/form.vue create mode 100644 src/views/platform/schoolUser/index.vue create mode 100644 src/views/platform/userType/form.vue create mode 100644 src/views/platform/userType/index.vue diff --git a/auto-imports.d.ts b/auto-imports.d.ts index 9b48bed1..ea661e3e 100644 --- a/auto-imports.d.ts +++ b/auto-imports.d.ts @@ -3,6 +3,7 @@ // @ts-nocheck // noinspection JSUnusedGlobalSymbols // Generated by unplugin-auto-import +// biome-ignore lint: disable export {} declare global { const EffectScope: typeof import('vue')['EffectScope'] diff --git a/src/api/platform/question.ts b/src/api/platform/question.ts new file mode 100644 index 00000000..206ea614 --- /dev/null +++ b/src/api/platform/question.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/question/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/question', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/question/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/question', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/question', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/platform/questionCombination.ts b/src/api/platform/questionCombination.ts new file mode 100644 index 00000000..68e19fe5 --- /dev/null +++ b/src/api/platform/questionCombination.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/questionCombination/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/questionCombination', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/questionCombination/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/questionCombination', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/questionCombination', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/platform/questionOption.ts b/src/api/platform/questionOption.ts new file mode 100644 index 00000000..81fc684c --- /dev/null +++ b/src/api/platform/questionOption.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/questionOption/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/questionOption', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/questionOption/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/questionOption', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/questionOption', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/platform/questionRecord.ts b/src/api/platform/questionRecord.ts new file mode 100644 index 00000000..39fce902 --- /dev/null +++ b/src/api/platform/questionRecord.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/questionRecord/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/questionRecord', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/questionRecord/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/questionRecord', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/questionRecord', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/platform/questionRecordDetails.ts b/src/api/platform/questionRecordDetails.ts new file mode 100644 index 00000000..70ee5ddb --- /dev/null +++ b/src/api/platform/questionRecordDetails.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/questionRecordDetails/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/questionRecordDetails', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/questionRecordDetails/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/questionRecordDetails', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/questionRecordDetails', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/platform/questionTable.ts b/src/api/platform/questionTable.ts new file mode 100644 index 00000000..f3c5b907 --- /dev/null +++ b/src/api/platform/questionTable.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/questionTable/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/questionTable', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/questionTable/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/questionTable', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/questionTable', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/platform/school.ts b/src/api/platform/school.ts new file mode 100644 index 00000000..1facf993 --- /dev/null +++ b/src/api/platform/school.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/school/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/school', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/school/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/school', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/school', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/platform/schoolClass.ts b/src/api/platform/schoolClass.ts new file mode 100644 index 00000000..df6d24b2 --- /dev/null +++ b/src/api/platform/schoolClass.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/schoolClass/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/schoolClass', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/schoolClass/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/schoolClass', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/schoolClass', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/platform/schoolStudent.ts b/src/api/platform/schoolStudent.ts new file mode 100644 index 00000000..1b77a836 --- /dev/null +++ b/src/api/platform/schoolStudent.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/schoolStudent/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/schoolStudent', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/schoolStudent/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/schoolStudent', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/schoolStudent', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/platform/schoolUser.ts b/src/api/platform/schoolUser.ts new file mode 100644 index 00000000..2f0aedd8 --- /dev/null +++ b/src/api/platform/schoolUser.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/schoolUser/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/schoolUser', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/schoolUser/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/schoolUser', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/schoolUser', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/platform/userType.ts b/src/api/platform/userType.ts new file mode 100644 index 00000000..8d2758bb --- /dev/null +++ b/src/api/platform/userType.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/userType/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/userType', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/userType/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/userType', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/userType', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/stores/themeConfig.ts b/src/stores/themeConfig.ts index 9d744a09..007480a2 100644 --- a/src/stores/themeConfig.ts +++ b/src/stores/themeConfig.ts @@ -99,9 +99,9 @@ export const useThemeConfig = defineStore('themeConfig', { // 是否开启色弱模式 isInvert: false, // 是否开启水印 - isWartermark: true, + isWartermark: false, // 水印文案 - wartermarkText: 'Pig', + wartermarkText: '智眸心域', /** * 其它设置 @@ -123,7 +123,7 @@ export const useThemeConfig = defineStore('themeConfig', { */ // 布局切换:可选值"",默认 defaults layout: 'defaults', - + /** * 后端控制路由 */ @@ -133,11 +133,11 @@ export const useThemeConfig = defineStore('themeConfig', { * 全局网站标题 / 副标题 */ // 网站主标题(菜单导航、浏览器当前网页标题、登录form顶部右侧) - globalTitle: 'PIG ADMIN', + globalTitle: '智眸心域', // 网站副标题(登录左侧底部页顶部文字) - globalViceTitle: 'Pig 快速开发框架', + globalViceTitle: '智眸心域', // 网站副标题(登录页顶部文字) - globalViceTitleMsg: '专注、免费、开源、维护、解疑', + globalViceTitleMsg: '专注、解疑', // 默认初始语言,可选值"",默认 zh-cn globalI18n: 'zh-cn', // 默认全局组件大小,可选值"",默认 'default' diff --git a/src/views/platform/question/form.vue b/src/views/platform/question/form.vue new file mode 100644 index 00000000..768059f3 --- /dev/null +++ b/src/views/platform/question/form.vue @@ -0,0 +1,125 @@ + + + diff --git a/src/views/platform/question/index.vue b/src/views/platform/question/index.vue new file mode 100644 index 00000000..9269e50e --- /dev/null +++ b/src/views/platform/question/index.vue @@ -0,0 +1,128 @@ + + + diff --git a/src/views/platform/questionCombination/form.vue b/src/views/platform/questionCombination/form.vue new file mode 100644 index 00000000..51a247fc --- /dev/null +++ b/src/views/platform/questionCombination/form.vue @@ -0,0 +1,132 @@ + + + diff --git a/src/views/platform/questionCombination/index.vue b/src/views/platform/questionCombination/index.vue new file mode 100644 index 00000000..565b3a51 --- /dev/null +++ b/src/views/platform/questionCombination/index.vue @@ -0,0 +1,149 @@ + + + diff --git a/src/views/platform/questionOption/form.vue b/src/views/platform/questionOption/form.vue new file mode 100644 index 00000000..6b0301e8 --- /dev/null +++ b/src/views/platform/questionOption/form.vue @@ -0,0 +1,129 @@ + + + diff --git a/src/views/platform/questionOption/index.vue b/src/views/platform/questionOption/index.vue new file mode 100644 index 00000000..7ff012a5 --- /dev/null +++ b/src/views/platform/questionOption/index.vue @@ -0,0 +1,148 @@ + + + diff --git a/src/views/platform/questionRecord/form.vue b/src/views/platform/questionRecord/form.vue new file mode 100644 index 00000000..ba31378f --- /dev/null +++ b/src/views/platform/questionRecord/form.vue @@ -0,0 +1,139 @@ + + + diff --git a/src/views/platform/questionRecord/index.vue b/src/views/platform/questionRecord/index.vue new file mode 100644 index 00000000..28b7e8f6 --- /dev/null +++ b/src/views/platform/questionRecord/index.vue @@ -0,0 +1,156 @@ + + + diff --git a/src/views/platform/questionRecordDetails/form.vue b/src/views/platform/questionRecordDetails/form.vue new file mode 100644 index 00000000..7e8d0376 --- /dev/null +++ b/src/views/platform/questionRecordDetails/form.vue @@ -0,0 +1,118 @@ + + + diff --git a/src/views/platform/questionRecordDetails/index.vue b/src/views/platform/questionRecordDetails/index.vue new file mode 100644 index 00000000..4bf57501 --- /dev/null +++ b/src/views/platform/questionRecordDetails/index.vue @@ -0,0 +1,147 @@ + + + diff --git a/src/views/platform/questionTable/form.vue b/src/views/platform/questionTable/form.vue new file mode 100644 index 00000000..bf77e424 --- /dev/null +++ b/src/views/platform/questionTable/form.vue @@ -0,0 +1,125 @@ + + + diff --git a/src/views/platform/questionTable/index.vue b/src/views/platform/questionTable/index.vue new file mode 100644 index 00000000..2e6a745f --- /dev/null +++ b/src/views/platform/questionTable/index.vue @@ -0,0 +1,148 @@ + + + diff --git a/src/views/platform/school/form.vue b/src/views/platform/school/form.vue new file mode 100644 index 00000000..f1940714 --- /dev/null +++ b/src/views/platform/school/form.vue @@ -0,0 +1,112 @@ + + + diff --git a/src/views/platform/school/index.vue b/src/views/platform/school/index.vue new file mode 100644 index 00000000..b61600da --- /dev/null +++ b/src/views/platform/school/index.vue @@ -0,0 +1,140 @@ + + + diff --git a/src/views/platform/schoolClass/form.vue b/src/views/platform/schoolClass/form.vue new file mode 100644 index 00000000..f4d52277 --- /dev/null +++ b/src/views/platform/schoolClass/form.vue @@ -0,0 +1,127 @@ + + + diff --git a/src/views/platform/schoolClass/index.vue b/src/views/platform/schoolClass/index.vue new file mode 100644 index 00000000..0cbaabaf --- /dev/null +++ b/src/views/platform/schoolClass/index.vue @@ -0,0 +1,143 @@ + + + diff --git a/src/views/platform/schoolStudent/form.vue b/src/views/platform/schoolStudent/form.vue new file mode 100644 index 00000000..deb63157 --- /dev/null +++ b/src/views/platform/schoolStudent/form.vue @@ -0,0 +1,166 @@ + + + diff --git a/src/views/platform/schoolStudent/index.vue b/src/views/platform/schoolStudent/index.vue new file mode 100644 index 00000000..d6ffb487 --- /dev/null +++ b/src/views/platform/schoolStudent/index.vue @@ -0,0 +1,158 @@ + + + diff --git a/src/views/platform/schoolUser/form.vue b/src/views/platform/schoolUser/form.vue new file mode 100644 index 00000000..64eb24c1 --- /dev/null +++ b/src/views/platform/schoolUser/form.vue @@ -0,0 +1,129 @@ + + + diff --git a/src/views/platform/schoolUser/index.vue b/src/views/platform/schoolUser/index.vue new file mode 100644 index 00000000..981f455f --- /dev/null +++ b/src/views/platform/schoolUser/index.vue @@ -0,0 +1,147 @@ + + + diff --git a/src/views/platform/userType/form.vue b/src/views/platform/userType/form.vue new file mode 100644 index 00000000..3de5935c --- /dev/null +++ b/src/views/platform/userType/form.vue @@ -0,0 +1,107 @@ + + + diff --git a/src/views/platform/userType/index.vue b/src/views/platform/userType/index.vue new file mode 100644 index 00000000..f7c9d5dc --- /dev/null +++ b/src/views/platform/userType/index.vue @@ -0,0 +1,147 @@ + + + -- Gitee From 8d682c8e46f11d0c724e81a0b448a2f6ed79c89c Mon Sep 17 00:00:00 2001 From: AC <1196417540@qq.com> Date: Sun, 27 Apr 2025 10:47:17 +0800 Subject: [PATCH 003/141] =?UTF-8?q?=E9=87=8F=E8=A1=A8=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=961?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/platform/assessmentDescribe.ts | 100 +++++++++++++ src/api/platform/assessmentIndicators.ts | 100 +++++++++++++ src/api/platform/assessmentIndicatorsRange.ts | 100 +++++++++++++ src/api/platform/assessmentPeopleTag.ts | 100 +++++++++++++ src/api/platform/assessmentPublisherInfo.ts | 100 +++++++++++++ src/api/platform/assessmentType.ts | 100 +++++++++++++ .../platform/assessmentDescribe/form.vue | 118 ++++++++++++++++ .../platform/assessmentDescribe/index.vue | 131 +++++++++++++++++ .../platform/assessmentIndicators/form.vue | 125 ++++++++++++++++ .../platform/assessmentIndicators/index.vue | 132 +++++++++++++++++ .../assessmentIndicatorsRange/form.vue | 132 +++++++++++++++++ .../assessmentIndicatorsRange/index.vue | 133 ++++++++++++++++++ .../platform/assessmentPeopleTag/form.vue | 111 +++++++++++++++ .../platform/assessmentPeopleTag/index.vue | 130 +++++++++++++++++ .../platform/assessmentPublisherInfo/form.vue | 118 ++++++++++++++++ .../assessmentPublisherInfo/index.vue | 131 +++++++++++++++++ src/views/platform/assessmentType/form.vue | 111 +++++++++++++++ src/views/platform/assessmentType/index.vue | 130 +++++++++++++++++ 18 files changed, 2102 insertions(+) create mode 100644 src/api/platform/assessmentDescribe.ts create mode 100644 src/api/platform/assessmentIndicators.ts create mode 100644 src/api/platform/assessmentIndicatorsRange.ts create mode 100644 src/api/platform/assessmentPeopleTag.ts create mode 100644 src/api/platform/assessmentPublisherInfo.ts create mode 100644 src/api/platform/assessmentType.ts create mode 100644 src/views/platform/assessmentDescribe/form.vue create mode 100644 src/views/platform/assessmentDescribe/index.vue create mode 100644 src/views/platform/assessmentIndicators/form.vue create mode 100644 src/views/platform/assessmentIndicators/index.vue create mode 100644 src/views/platform/assessmentIndicatorsRange/form.vue create mode 100644 src/views/platform/assessmentIndicatorsRange/index.vue create mode 100644 src/views/platform/assessmentPeopleTag/form.vue create mode 100644 src/views/platform/assessmentPeopleTag/index.vue create mode 100644 src/views/platform/assessmentPublisherInfo/form.vue create mode 100644 src/views/platform/assessmentPublisherInfo/index.vue create mode 100644 src/views/platform/assessmentType/form.vue create mode 100644 src/views/platform/assessmentType/index.vue diff --git a/src/api/platform/assessmentDescribe.ts b/src/api/platform/assessmentDescribe.ts new file mode 100644 index 00000000..17315038 --- /dev/null +++ b/src/api/platform/assessmentDescribe.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/assessmentDescribe/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/assessmentDescribe', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/assessmentDescribe/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/assessmentDescribe', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/assessmentDescribe', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/platform/assessmentIndicators.ts b/src/api/platform/assessmentIndicators.ts new file mode 100644 index 00000000..d5ce7b71 --- /dev/null +++ b/src/api/platform/assessmentIndicators.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/assessmentIndicators/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/assessmentIndicators', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/assessmentIndicators/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/assessmentIndicators', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/assessmentIndicators', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/platform/assessmentIndicatorsRange.ts b/src/api/platform/assessmentIndicatorsRange.ts new file mode 100644 index 00000000..83ca5bde --- /dev/null +++ b/src/api/platform/assessmentIndicatorsRange.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/assessmentIndicatorsRange/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/assessmentIndicatorsRange', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/assessmentIndicatorsRange/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/assessmentIndicatorsRange', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/assessmentIndicatorsRange', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/platform/assessmentPeopleTag.ts b/src/api/platform/assessmentPeopleTag.ts new file mode 100644 index 00000000..6b56b5f3 --- /dev/null +++ b/src/api/platform/assessmentPeopleTag.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/assessmentPeopleTag/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/assessmentPeopleTag', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/assessmentPeopleTag/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/assessmentPeopleTag', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/assessmentPeopleTag', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/platform/assessmentPublisherInfo.ts b/src/api/platform/assessmentPublisherInfo.ts new file mode 100644 index 00000000..44796f80 --- /dev/null +++ b/src/api/platform/assessmentPublisherInfo.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/assessmentPublisherInfo/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/assessmentPublisherInfo', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/assessmentPublisherInfo/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/assessmentPublisherInfo', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/assessmentPublisherInfo', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/platform/assessmentType.ts b/src/api/platform/assessmentType.ts new file mode 100644 index 00000000..bd9d2931 --- /dev/null +++ b/src/api/platform/assessmentType.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/assessmentType/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/assessmentType', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/assessmentType/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/assessmentType', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/assessmentType', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/views/platform/assessmentDescribe/form.vue b/src/views/platform/assessmentDescribe/form.vue new file mode 100644 index 00000000..d7238a12 --- /dev/null +++ b/src/views/platform/assessmentDescribe/form.vue @@ -0,0 +1,118 @@ + + + diff --git a/src/views/platform/assessmentDescribe/index.vue b/src/views/platform/assessmentDescribe/index.vue new file mode 100644 index 00000000..ba1871c8 --- /dev/null +++ b/src/views/platform/assessmentDescribe/index.vue @@ -0,0 +1,131 @@ + + + diff --git a/src/views/platform/assessmentIndicators/form.vue b/src/views/platform/assessmentIndicators/form.vue new file mode 100644 index 00000000..c598bfea --- /dev/null +++ b/src/views/platform/assessmentIndicators/form.vue @@ -0,0 +1,125 @@ + + + diff --git a/src/views/platform/assessmentIndicators/index.vue b/src/views/platform/assessmentIndicators/index.vue new file mode 100644 index 00000000..e17cebe0 --- /dev/null +++ b/src/views/platform/assessmentIndicators/index.vue @@ -0,0 +1,132 @@ + + + diff --git a/src/views/platform/assessmentIndicatorsRange/form.vue b/src/views/platform/assessmentIndicatorsRange/form.vue new file mode 100644 index 00000000..d9d375f7 --- /dev/null +++ b/src/views/platform/assessmentIndicatorsRange/form.vue @@ -0,0 +1,132 @@ + + + diff --git a/src/views/platform/assessmentIndicatorsRange/index.vue b/src/views/platform/assessmentIndicatorsRange/index.vue new file mode 100644 index 00000000..76ff7b04 --- /dev/null +++ b/src/views/platform/assessmentIndicatorsRange/index.vue @@ -0,0 +1,133 @@ + + + diff --git a/src/views/platform/assessmentPeopleTag/form.vue b/src/views/platform/assessmentPeopleTag/form.vue new file mode 100644 index 00000000..8472aaee --- /dev/null +++ b/src/views/platform/assessmentPeopleTag/form.vue @@ -0,0 +1,111 @@ + + + diff --git a/src/views/platform/assessmentPeopleTag/index.vue b/src/views/platform/assessmentPeopleTag/index.vue new file mode 100644 index 00000000..301a8017 --- /dev/null +++ b/src/views/platform/assessmentPeopleTag/index.vue @@ -0,0 +1,130 @@ + + + diff --git a/src/views/platform/assessmentPublisherInfo/form.vue b/src/views/platform/assessmentPublisherInfo/form.vue new file mode 100644 index 00000000..3eb70a95 --- /dev/null +++ b/src/views/platform/assessmentPublisherInfo/form.vue @@ -0,0 +1,118 @@ + + + diff --git a/src/views/platform/assessmentPublisherInfo/index.vue b/src/views/platform/assessmentPublisherInfo/index.vue new file mode 100644 index 00000000..73cb6054 --- /dev/null +++ b/src/views/platform/assessmentPublisherInfo/index.vue @@ -0,0 +1,131 @@ + + + diff --git a/src/views/platform/assessmentType/form.vue b/src/views/platform/assessmentType/form.vue new file mode 100644 index 00000000..662f77f3 --- /dev/null +++ b/src/views/platform/assessmentType/form.vue @@ -0,0 +1,111 @@ + + + diff --git a/src/views/platform/assessmentType/index.vue b/src/views/platform/assessmentType/index.vue new file mode 100644 index 00000000..c61aa449 --- /dev/null +++ b/src/views/platform/assessmentType/index.vue @@ -0,0 +1,130 @@ + + + -- Gitee From 4ac1243d9f9251cf4d999d2f802ffc6c399df211 Mon Sep 17 00:00:00 2001 From: AC <1196417540@qq.com> Date: Tue, 20 May 2025 10:36:14 +0800 Subject: [PATCH 004/141] =?UTF-8?q?=E5=A4=A7=E9=87=8F=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/templates/vue.ejs | 56 ++ package-lock.json | 24 +- package.json | 3 + src/api/admin/user.ts | 8 + src/api/course/course.ts | 146 +++ src/api/course/series.ts | 98 ++ src/api/course/teacher.ts | 98 ++ src/api/message/consultMessageLog.ts | 100 ++ src/api/message/consultRecord.ts | 110 ++ src/api/message/message.ts | 100 ++ src/api/message/replyMessage.ts | 100 ++ src/api/message/userMessage.ts | 111 ++ src/api/platform/assessmentIndicators.ts | 88 +- src/api/platform/assessmentTheme.ts | 100 ++ src/api/platform/doctorSchedule.ts | 123 +++ src/api/platform/doctorScheduleLog.ts | 100 ++ src/api/platform/platformArticle.ts | 138 +++ src/api/platform/questionTable.ts | 137 ++- src/api/platform/starLog.ts | 100 ++ src/components/Editor/index.vue | 5 +- src/components/ImageUpload/index.vue | 105 ++ src/components/userbox/index.vue | 315 ++++++ src/main.ts | 23 +- src/stores/message/consult.ts | 17 + src/types/consult.ts | 5 + src/utils/other.ts | 675 +++++++------ src/views/course/course/form.vue | 258 +++++ src/views/course/course/index.vue | 244 +++++ src/views/course/series/form.vue | 132 +++ src/views/course/series/index.vue | 150 +++ src/views/course/teacher/form.vue | 144 +++ src/views/course/teacher/index.vue | 151 +++ src/views/message/consultMessageLog/form.vue | 125 +++ src/views/message/consultMessageLog/index.vue | 156 +++ .../message/consultRecord/consultList.vue | 74 ++ .../message/consultRecord/consultMain.vue | 46 + src/views/message/consultRecord/form.vue | 48 + src/views/message/consultRecord/index.vue | 156 +++ src/views/message/consultRecord/info.vue | 20 + src/views/message/message/form.vue | 139 +++ src/views/message/message/index.vue | 131 +++ src/views/message/replyMessage/form.vue | 125 +++ src/views/message/replyMessage/index.vue | 132 +++ src/views/message/userMessage/form.vue | 203 ++++ src/views/message/userMessage/index.vue | 155 +++ .../platform/assessmentPublisherInfo/form.vue | 134 +-- src/views/platform/assessmentTheme/form.vue | 160 +++ src/views/platform/assessmentTheme/index.vue | 134 +++ src/views/platform/doctorSchedule/form.vue | 315 ++++++ src/views/platform/doctorSchedule/index.vue | 131 +++ src/views/platform/doctorScheduleLog/form.vue | 111 ++ .../platform/doctorScheduleLog/index.vue | 127 +++ src/views/platform/platformArticle/form.vue | 263 +++++ src/views/platform/platformArticle/index.vue | 233 +++++ src/views/platform/questionRecord/form.vue | 174 ++-- src/views/platform/questionRecord/index.vue | 224 ++--- .../platform/questionRecordDetails/form.vue | 132 ++- .../questionTable/assessmentPublish.vue | 330 ++++++ src/views/platform/questionTable/form.vue | 323 ++++-- src/views/platform/questionTable/index.vue | 416 ++++++-- .../platform/questionTable/indicators.vue | 310 ++++++ src/views/platform/questionTable/info.vue | 949 ++++++++++++++++++ src/views/platform/questionTable/question.vue | 202 ++++ src/views/platform/questionTable/report.vue | 122 +++ src/views/platform/starLog/form.vue | 111 ++ src/views/platform/starLog/index.vue | 127 +++ 66 files changed, 9581 insertions(+), 921 deletions(-) create mode 100644 .vscode/templates/vue.ejs create mode 100644 src/api/course/course.ts create mode 100644 src/api/course/series.ts create mode 100644 src/api/course/teacher.ts create mode 100644 src/api/message/consultMessageLog.ts create mode 100644 src/api/message/consultRecord.ts create mode 100644 src/api/message/message.ts create mode 100644 src/api/message/replyMessage.ts create mode 100644 src/api/message/userMessage.ts create mode 100644 src/api/platform/assessmentTheme.ts create mode 100644 src/api/platform/doctorSchedule.ts create mode 100644 src/api/platform/doctorScheduleLog.ts create mode 100644 src/api/platform/platformArticle.ts create mode 100644 src/api/platform/starLog.ts create mode 100644 src/components/ImageUpload/index.vue create mode 100644 src/components/userbox/index.vue create mode 100644 src/stores/message/consult.ts create mode 100644 src/types/consult.ts create mode 100644 src/views/course/course/form.vue create mode 100644 src/views/course/course/index.vue create mode 100644 src/views/course/series/form.vue create mode 100644 src/views/course/series/index.vue create mode 100644 src/views/course/teacher/form.vue create mode 100644 src/views/course/teacher/index.vue create mode 100644 src/views/message/consultMessageLog/form.vue create mode 100644 src/views/message/consultMessageLog/index.vue create mode 100644 src/views/message/consultRecord/consultList.vue create mode 100644 src/views/message/consultRecord/consultMain.vue create mode 100644 src/views/message/consultRecord/form.vue create mode 100644 src/views/message/consultRecord/index.vue create mode 100644 src/views/message/consultRecord/info.vue create mode 100644 src/views/message/message/form.vue create mode 100644 src/views/message/message/index.vue create mode 100644 src/views/message/replyMessage/form.vue create mode 100644 src/views/message/replyMessage/index.vue create mode 100644 src/views/message/userMessage/form.vue create mode 100644 src/views/message/userMessage/index.vue create mode 100644 src/views/platform/assessmentTheme/form.vue create mode 100644 src/views/platform/assessmentTheme/index.vue create mode 100644 src/views/platform/doctorSchedule/form.vue create mode 100644 src/views/platform/doctorSchedule/index.vue create mode 100644 src/views/platform/doctorScheduleLog/form.vue create mode 100644 src/views/platform/doctorScheduleLog/index.vue create mode 100644 src/views/platform/platformArticle/form.vue create mode 100644 src/views/platform/platformArticle/index.vue create mode 100644 src/views/platform/questionTable/assessmentPublish.vue create mode 100644 src/views/platform/questionTable/indicators.vue create mode 100644 src/views/platform/questionTable/info.vue create mode 100644 src/views/platform/questionTable/question.vue create mode 100644 src/views/platform/questionTable/report.vue create mode 100644 src/views/platform/starLog/form.vue create mode 100644 src/views/platform/starLog/index.vue diff --git a/.vscode/templates/vue.ejs b/.vscode/templates/vue.ejs new file mode 100644 index 00000000..7fb667e0 --- /dev/null +++ b/.vscode/templates/vue.ejs @@ -0,0 +1,56 @@ +<%# + Component parameters: + - name {String} - Component name +-%> + + + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 03d35a8c..5457813f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,11 +17,13 @@ "china-area-data": "^5.0.1", "codemirror": "5.65.18", "crypto-js": "4.2.0", + "dayjs": "^1.11.13", "driver.js": "1.3.1", "echarts": "5.5.1", "element-plus": "2.8.7", "js-cookie": "3.0.5", "mitt": "3.0.1", + "moment": "^2.30.1", "nprogress": "0.2.0", "pinia": "2.3.0", "postcss": "8.4.49", @@ -40,6 +42,7 @@ }, "devDependencies": { "@swc/core": "1.6.13", + "@types/moment": "^2.11.29", "@types/node": "20.0.0", "@types/nprogress": "0.2.3", "@types/sortablejs": "1.15.8", @@ -1939,6 +1942,13 @@ "@types/lodash": "*" } }, + "node_modules/@types/moment": { + "version": "2.11.29", + "resolved": "https://registry.npmjs.org/@types/moment/-/moment-2.11.29.tgz", + "integrity": "sha512-D5WIgbLYQzvgfsDnBhZFSTnt/BjGPOE+Jsh3k1BYYijJAkrn7ceeLvU4jtjKKXXuXN42O3ARlU4D/P9ezbQYFA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { "version": "20.0.0", "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.0.0.tgz", @@ -3192,8 +3202,9 @@ }, "node_modules/dayjs": { "version": "1.11.13", - "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" }, "node_modules/debug": { "version": "4.4.0", @@ -4826,6 +4837,15 @@ "ufo": "^1.5.4" } }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz", diff --git a/package.json b/package.json index 28889f8b..e7266418 100644 --- a/package.json +++ b/package.json @@ -21,11 +21,13 @@ "china-area-data": "^5.0.1", "codemirror": "5.65.18", "crypto-js": "4.2.0", + "dayjs": "^1.11.13", "driver.js": "1.3.1", "echarts": "5.5.1", "element-plus": "2.8.7", "js-cookie": "3.0.5", "mitt": "3.0.1", + "moment": "^2.30.1", "nprogress": "0.2.0", "pinia": "2.3.0", "postcss": "8.4.49", @@ -44,6 +46,7 @@ }, "devDependencies": { "@swc/core": "1.6.13", + "@types/moment": "^2.11.29", "@types/node": "20.0.0", "@types/nprogress": "0.2.3", "@types/sortablejs": "1.15.8", diff --git a/src/api/admin/user.ts b/src/api/admin/user.ts index 383d8da8..2e8d438c 100644 --- a/src/api/admin/user.ts +++ b/src/api/admin/user.ts @@ -23,6 +23,14 @@ export const getObj = (id: String) => { }); }; +export const userDeptTree = (params?: Object) => { + return request({ + url: '/admin/user/userDeptTree', + method: 'get', + params, + }); +}; + export const delObj = (ids: Object) => { return request({ url: '/admin/user', diff --git a/src/api/course/course.ts b/src/api/course/course.ts new file mode 100644 index 00000000..1a9f6c92 --- /dev/null +++ b/src/api/course/course.ts @@ -0,0 +1,146 @@ +import request from '/@/utils/request'; +import { fetchItemList } from '/@/api/admin/dict'; + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function getSeriesList(query?: Object) { + return request({ + url: '/platform/series/list', + method: 'get', + params: query, + }); +} +/** + * 发布 + */ +export function publish(id: string) { + return request({ + url: '/platform/course/publish/' + id, + method: 'get', + }); +} +/** + * 下架 + */ +export function down(id: string) { + return request({ + url: '/platform/course/down/' + id, + method: 'get', + }); +} + +/** + * 根据分页查询参数获取列表数据。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function getCategoryList() { + return fetchItemList({ dictType: 'course_type', dictId: '1922951811520282626', current: 1, size: 1000 }); +} + +/** + * 根据分页查询参数获取列表数据。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function getTagList() { + return fetchItemList({ dictType: 'course_tag', dictId: '1922951881510633473', current: 1, size: 1000 }); +} + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/course/page', + method: 'get', + params: query, + }); +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/course', + method: 'post', + data: obj, + }); +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/course/details', + method: 'get', + params: obj, + }); +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/course', + method: 'delete', + data: ids, + }); +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/course', + method: 'put', + data: obj, + }); +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} diff --git a/src/api/course/series.ts b/src/api/course/series.ts new file mode 100644 index 00000000..5b07793e --- /dev/null +++ b/src/api/course/series.ts @@ -0,0 +1,98 @@ +import request from '/@/utils/request'; + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/series/page', + method: 'get', + params: query, + }); +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/series', + method: 'post', + data: obj, + }); +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/series/details', + method: 'get', + params: obj, + }); +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/series', + method: 'delete', + data: ids, + }); +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/series', + method: 'put', + data: obj, + }); +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} diff --git a/src/api/course/teacher.ts b/src/api/course/teacher.ts new file mode 100644 index 00000000..a0552393 --- /dev/null +++ b/src/api/course/teacher.ts @@ -0,0 +1,98 @@ +import request from '/@/utils/request'; + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/teacher/page', + method: 'get', + params: query, + }); +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/teacher', + method: 'post', + data: obj, + }); +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/teacher/details', + method: 'get', + params: obj, + }); +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/teacher', + method: 'delete', + data: ids, + }); +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/teacher', + method: 'put', + data: obj, + }); +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} diff --git a/src/api/message/consultMessageLog.ts b/src/api/message/consultMessageLog.ts new file mode 100644 index 00000000..201e7f19 --- /dev/null +++ b/src/api/message/consultMessageLog.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/message/consultMessageLog/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/message/consultMessageLog', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/message/consultMessageLog/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/message/consultMessageLog', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/message/consultMessageLog', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/message/consultRecord.ts b/src/api/message/consultRecord.ts new file mode 100644 index 00000000..de26a5b1 --- /dev/null +++ b/src/api/message/consultRecord.ts @@ -0,0 +1,110 @@ +import request from '/@/utils/request'; + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/message/consultRecord/page', + method: 'get', + params: query, + }); +} + +/** + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 获取咨询列表 + */ +export function getConsultList(query?: Object) { + return request({ + url: '/message/consultRecord/getConsultList', + method: 'get', + params: query, + }); +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/message/consultRecord', + method: 'post', + data: obj, + }); +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/message/consultRecord/details', + method: 'get', + params: obj, + }); +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/message/consultRecord', + method: 'delete', + data: ids, + }); +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/message/consultRecord', + method: 'put', + data: obj, + }); +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} diff --git a/src/api/message/message.ts b/src/api/message/message.ts new file mode 100644 index 00000000..7891fce7 --- /dev/null +++ b/src/api/message/message.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/message/message/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/message/message', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/message/message/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/message/message', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/message/message', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/message/replyMessage.ts b/src/api/message/replyMessage.ts new file mode 100644 index 00000000..3963424f --- /dev/null +++ b/src/api/message/replyMessage.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/message/replyMessage/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/message/replyMessage', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/message/replyMessage/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/message/replyMessage', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/message/replyMessage', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/message/userMessage.ts b/src/api/message/userMessage.ts new file mode 100644 index 00000000..f8e05d6d --- /dev/null +++ b/src/api/message/userMessage.ts @@ -0,0 +1,111 @@ +import request from '/@/utils/request'; + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/message/userMessage/list', + method: 'post', + data: query, + }); +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/message/userMessage', + method: 'post', + data: obj, + }); +} + +/** + * 后台手动推送消息 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function pushMessage(obj?: Object) { + return request({ + url: '/message/message/push', + method: 'post', + data: obj, + }); +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/message/userMessage/details', + method: 'get', + params: obj, + }); +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/message/userMessage', + method: 'delete', + data: ids, + }); +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/message/userMessage', + method: 'put', + data: obj, + }); +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} diff --git a/src/api/platform/assessmentIndicators.ts b/src/api/platform/assessmentIndicators.ts index d5ce7b71..73b0f072 100644 --- a/src/api/platform/assessmentIndicators.ts +++ b/src/api/platform/assessmentIndicators.ts @@ -1,4 +1,4 @@ -import request from "/@/utils/request" +import request from '/@/utils/request'; /** * 根据分页查询参数获取列表数据。 @@ -6,11 +6,11 @@ import request from "/@/utils/request" * @returns {Promise} 请求的 Promise 分页对象。 */ export function fetchList(query?: Object) { - return request({ - url: '/platform/assessmentIndicators/page', - method: 'get', - params: query - }) + return request({ + url: '/platform/assessmentIndicators/page', + method: 'get', + params: query, + }); } /** @@ -19,11 +19,11 @@ export function fetchList(query?: Object) { * @returns {Promise} 请求的 Promise 对象 (true/false)。 */ export function addObj(obj?: Object) { - return request({ - url: '/platform/assessmentIndicators', - method: 'post', - data: obj - }) + return request({ + url: '/platform/assessmentIndicators', + method: 'post', + data: obj, + }); } /** @@ -32,11 +32,11 @@ export function addObj(obj?: Object) { * @returns {Promise} 请求的 Promise 对象数组。 */ export function getObj(obj?: Object) { - return request({ - url: '/platform/assessmentIndicators/details', - method: 'get', - params: obj - }) + return request({ + url: '/platform/assessmentIndicators/details', + method: 'get', + params: obj, + }); } /** @@ -45,11 +45,11 @@ export function getObj(obj?: Object) { * @returns {Promise} 请求的 Promise 对象。 */ export function delObjs(ids?: Object) { - return request({ - url: '/platform/assessmentIndicators', - method: 'delete', - data: ids - }) + return request({ + url: '/platform/assessmentIndicators', + method: 'delete', + data: ids, + }); } /** @@ -58,11 +58,11 @@ export function delObjs(ids?: Object) { * @returns {Promise} 请求的 Promise 对象。 */ export function putObj(obj?: Object) { - return request({ - url: '/platform/assessmentIndicators', - method: 'put', - data: obj - }) + return request({ + url: '/platform/assessmentIndicators', + method: 'put', + data: obj, + }); } /** @@ -71,7 +71,7 @@ export function putObj(obj?: Object) { * @param {*} value - 要验证的值。 * @param {Function} callback - 验证完成后的回调函数。 * @param {boolean} isEdit - 当前操作是否为编辑。 - * + * * 示例用法: * 字段名: [ * { @@ -83,18 +83,28 @@ export function putObj(obj?: Object) { * ] */ export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { - if (isEdit) { - return callback(); - } + if (isEdit) { + return callback(); + } - getObj({ [rule.field]: value }).then((response) => { - const result = response.data; - if (result !== null && result.length > 0) { - callback(new Error('数据已经存在')); - } else { - callback(); - } - }); + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); } - +/** + * 根据分页查询参数获取列表数据。 + * @param {String} [tableId] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function getAssessmentIndicators(tableId?: String) { + return request({ + url: '/platform/assessmentIndicators/getAssessmentIndicators/' + tableId, + method: 'get', + }); +} diff --git a/src/api/platform/assessmentTheme.ts b/src/api/platform/assessmentTheme.ts new file mode 100644 index 00000000..80231f75 --- /dev/null +++ b/src/api/platform/assessmentTheme.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/assessmentTheme/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/assessmentTheme', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/assessmentTheme/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/assessmentTheme', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/assessmentTheme', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/platform/doctorSchedule.ts b/src/api/platform/doctorSchedule.ts new file mode 100644 index 00000000..fa496745 --- /dev/null +++ b/src/api/platform/doctorSchedule.ts @@ -0,0 +1,123 @@ +import request from '/@/utils/request'; + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function getDoctorSchedule(query?: Object) { + return request({ + url: '/platform/doctorSchedule/getDoctorSchedule', + method: 'get', + params: query, + }); +} + +/** + * 根据分页查询参数获取列表数据。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function saveDoctorSchedule(data?: any[]) { + return request({ + url: '/platform/doctorSchedule/saveDoctorSchedule', + method: 'post', + data: data, + }); +} + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/doctorSchedule/page', + method: 'get', + params: query, + }); +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/doctorSchedule', + method: 'post', + data: obj, + }); +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/doctorSchedule/details', + method: 'get', + params: obj, + }); +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/doctorSchedule', + method: 'delete', + data: ids, + }); +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/doctorSchedule', + method: 'put', + data: obj, + }); +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} diff --git a/src/api/platform/doctorScheduleLog.ts b/src/api/platform/doctorScheduleLog.ts new file mode 100644 index 00000000..89eb5fa1 --- /dev/null +++ b/src/api/platform/doctorScheduleLog.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/doctorScheduleLog/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/doctorScheduleLog', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/doctorScheduleLog/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/doctorScheduleLog', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/doctorScheduleLog', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/platform/platformArticle.ts b/src/api/platform/platformArticle.ts new file mode 100644 index 00000000..3d18efba --- /dev/null +++ b/src/api/platform/platformArticle.ts @@ -0,0 +1,138 @@ +import request from '/@/utils/request'; + +/** + * 获取类型下拉框 + */ +export function getTypeList() { + return request({ + url: '/platform/platformArticle/type/select', + method: 'get', + }); +} + +/** + * 发布 + */ +export function publish(id: string) { + return request({ + url: '/platform/platformArticle/publish/' + id, + method: 'get', + }); +} + +/** + * 获取类型下拉框 + */ +export function getShorting() { + return request({ + url: '/platform/platformArticle/getShorting', + method: 'get', + }); +} + +/** + * 下架 + */ +export function down(id: string) { + return request({ + url: '/platform/platformArticle/down/' + id, + method: 'get', + }); +} + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/platformArticle/page', + method: 'get', + params: query, + }); +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/platformArticle', + method: 'post', + data: obj, + }); +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/platformArticle/details', + method: 'get', + params: obj, + }); +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/platformArticle', + method: 'delete', + data: ids, + }); +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/platformArticle', + method: 'put', + data: obj, + }); +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} diff --git a/src/api/platform/questionTable.ts b/src/api/platform/questionTable.ts index f3c5b907..bcb3559b 100644 --- a/src/api/platform/questionTable.ts +++ b/src/api/platform/questionTable.ts @@ -1,4 +1,4 @@ -import request from "/@/utils/request" +import request from '/@/utils/request'; /** * 根据分页查询参数获取列表数据。 @@ -6,11 +6,11 @@ import request from "/@/utils/request" * @returns {Promise} 请求的 Promise 分页对象。 */ export function fetchList(query?: Object) { - return request({ - url: '/platform/questionTable/page', - method: 'get', - params: query - }) + return request({ + url: '/platform/questionTable/page', + method: 'get', + params: query, + }); } /** @@ -19,11 +19,46 @@ export function fetchList(query?: Object) { * @returns {Promise} 请求的 Promise 对象 (true/false)。 */ export function addObj(obj?: Object) { - return request({ - url: '/platform/questionTable', - method: 'post', - data: obj - }) + return request({ + url: '/platform/questionTable', + method: 'post', + data: obj, + }); +} + +/** + * 量表下架 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function assessmentDownTable(id?: Object) { + return request({ + url: '/platform/assessmentQuestionTable/assessmentDown/' + id, + method: 'get', + }); +} + +/** + * 量表发布 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function assessmentPublish(obj?: Object) { + return request({ + url: '/platform/assessmentQuestionTable/assessmentPublish', + method: 'post', + data: obj, + }); +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function getObjById(obj?: Object) { + return request({ + url: '/platform/questionTable/getDetailsById/' + obj, + method: 'get', + }); } /** @@ -32,11 +67,11 @@ export function addObj(obj?: Object) { * @returns {Promise} 请求的 Promise 对象数组。 */ export function getObj(obj?: Object) { - return request({ - url: '/platform/questionTable/details', - method: 'get', - params: obj - }) + return request({ + url: '/platform/questionTable/details', + method: 'get', + params: obj, + }); } /** @@ -45,11 +80,11 @@ export function getObj(obj?: Object) { * @returns {Promise} 请求的 Promise 对象。 */ export function delObjs(ids?: Object) { - return request({ - url: '/platform/questionTable', - method: 'delete', - data: ids - }) + return request({ + url: '/platform/questionTable', + method: 'delete', + data: ids, + }); } /** @@ -58,11 +93,35 @@ export function delObjs(ids?: Object) { * @returns {Promise} 请求的 Promise 对象。 */ export function putObj(obj?: Object) { - return request({ - url: '/platform/questionTable', - method: 'put', - data: obj - }) + return request({ + url: '/platform/questionTable', + method: 'put', + data: obj, + }); +} + +export function getPublisherList(obj?: Object) { + return request({ + url: '/platform/assessmentPublisherInfo/page', + method: 'get', + data: obj, + }); +} + +export function baseSave(obj?: Object) { + return request({ + url: '/platform/questionTable/baseSave', + method: 'post', + data: obj, + }); +} + +export function indicatorsSave(obj?: Object) { + return request({ + url: '/platform/questionTable/indicatorsSave', + method: 'post', + data: obj, + }); } /** @@ -71,7 +130,7 @@ export function putObj(obj?: Object) { * @param {*} value - 要验证的值。 * @param {Function} callback - 验证完成后的回调函数。 * @param {boolean} isEdit - 当前操作是否为编辑。 - * + * * 示例用法: * 字段名: [ * { @@ -83,18 +142,16 @@ export function putObj(obj?: Object) { * ] */ export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { - if (isEdit) { - return callback(); - } + if (isEdit) { + return callback(); + } - getObj({ [rule.field]: value }).then((response) => { - const result = response.data; - if (result !== null && result.length > 0) { - callback(new Error('数据已经存在')); - } else { - callback(); - } - }); + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); } - - diff --git a/src/api/platform/starLog.ts b/src/api/platform/starLog.ts new file mode 100644 index 00000000..57bc88eb --- /dev/null +++ b/src/api/platform/starLog.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/platform/starLog/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/platform/starLog', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/platform/starLog/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/platform/starLog', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/platform/starLog', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/components/Editor/index.vue b/src/components/Editor/index.vue index d17d4130..0c9d2df9 100644 --- a/src/components/Editor/index.vue +++ b/src/components/Editor/index.vue @@ -77,7 +77,10 @@ const uploadAttr = reactive({ server: proxy.baseURL + props.uploadFileUrl, headers: headers, customInsert(res, insertFn) { - insertFn(proxy.baseURL + res.data.url); + console.log(res); + + // insertFn(proxy.baseURL + res.data.url); + insertFn(res.data.url); //因为使用了阿里云oss,调整成这样 }, }); diff --git a/src/components/ImageUpload/index.vue b/src/components/ImageUpload/index.vue new file mode 100644 index 00000000..fc6e964a --- /dev/null +++ b/src/components/ImageUpload/index.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/src/components/userbox/index.vue b/src/components/userbox/index.vue new file mode 100644 index 00000000..a525f7b9 --- /dev/null +++ b/src/components/userbox/index.vue @@ -0,0 +1,315 @@ + + + + + diff --git a/src/main.ts b/src/main.ts index 4da62bad..d37f83b1 100644 --- a/src/main.ts +++ b/src/main.ts @@ -6,20 +6,23 @@ import { directive } from '/@/directive'; import { i18n } from '/@/i18n'; import other from '/@/utils/other'; -import ElementPlus from 'element-plus'; +import ElementPlus, { dayjs } from 'element-plus'; +import zhCn from 'element-plus/dist/locale/zh-cn.mjs'; +import 'dayjs/locale/zh-cn'; // 导入中文locale import '/@/theme/tailwind.css'; import 'element-plus/dist/index.css'; import '/@/theme/index.scss'; - import { ElementIcons, Pagination, RightToolbar, DictTag, UploadExcel, UploadFile, UploadImg, Editor, Tip, DelWrap } from '/@/components/index'; import { parseTime, parseDate, dateTimeStr, dateStr, timeStr } from '/@/utils/formatTime'; - +// 配置 dayjs 的周起始日为周一 +dayjs.locale('zh-cn', { + weekStart: 1, // 1 代表周一 +}); // 布局工具 import { Splitpanes, Pane } from 'splitpanes'; import 'splitpanes/dist/splitpanes.css'; const app = createApp(App); - // 导入通用自定义组件 app.component('DictTag', DictTag); app.component('Pagination', Pagination); @@ -30,6 +33,14 @@ app.component('UploadImg', UploadImg); app.component('Editor', Editor); app.component('Tip', Tip); app.component('DelWrap', DelWrap); +app.component( + 'userbox', + defineAsyncComponent(() => import('/@/components/userbox/index.vue')) +); +app.component( + 'thumbnail-upload', + defineAsyncComponent(() => import('/@/components/ImageUpload/index.vue')) +); // 导入布局插件 app.component('Splitpanes', Splitpanes); app.component('Pane', Pane); @@ -46,7 +57,9 @@ other.elSvg(app); app .use(pinia) // pinia 存储 .use(router) // 路由 - .use(ElementPlus) // ElementPlus 全局引入 + .use(ElementPlus, { + locale: zhCn, // ✅ 设置 ElementPlus 语言为中文 + }) // ElementPlus 全局引入 .use(ElementIcons) // elementIcons 图标全局引入 .use(i18n) // 国际化 .mount('#app'); diff --git a/src/stores/message/consult.ts b/src/stores/message/consult.ts new file mode 100644 index 00000000..4eeb8d80 --- /dev/null +++ b/src/stores/message/consult.ts @@ -0,0 +1,17 @@ +import { defineStore } from 'pinia'; +import { ref } from 'vue'; + +/** + * 当前选中会话对象缓存 + */ +export const currentConsult = defineStore('currentConsult', { + state: (): any => { + const data = ref({ + id: '', + username: '', + avatar: '', + }); + return { data }; + }, + actions: {}, +}); diff --git a/src/types/consult.ts b/src/types/consult.ts new file mode 100644 index 00000000..692c8cb8 --- /dev/null +++ b/src/types/consult.ts @@ -0,0 +1,5 @@ +declare interface Consult { + id: string; + username: string; + avatar: string; +} diff --git a/src/utils/other.ts b/src/utils/other.ts index 8f9b4489..145aa0d9 100644 --- a/src/utils/other.ts +++ b/src/utils/other.ts @@ -1,20 +1,20 @@ -import {nextTick, defineAsyncComponent} from 'vue'; -import type {App} from 'vue'; +import { nextTick, defineAsyncComponent } from 'vue'; +import type { App } from 'vue'; import * as svg from '@element-plus/icons-vue'; import router from '/@/router/index'; import pinia from '/@/stores/index'; -import {storeToRefs} from 'pinia'; -import {useThemeConfig} from '/@/stores/themeConfig'; -import {i18n} from '/@/i18n/index'; -import {Local} from '/@/utils/storage'; -import {verifyUrl} from '/@/utils/toolsValidate'; +import { storeToRefs } from 'pinia'; +import { useThemeConfig } from '/@/stores/themeConfig'; +import { i18n } from '/@/i18n/index'; +import { Local, Session } from '/@/utils/storage'; +import { verifyUrl } from '/@/utils/toolsValidate'; import request from '/@/utils/request'; -import {useMessage} from '/@/hooks/message'; +import { useMessage } from '/@/hooks/message'; // @ts-ignore import * as CryptoJS from 'crypto-js'; -import {sm4} from 'sm-crypto' -import {validateNull} from './validate'; -import {RouteItem, RouteItems, RouteToFrom} from '/@/types/global'; +import { sm4 } from 'sm-crypto'; +import { validateNull } from './validate'; +import { RouteItem, RouteItems, RouteToFrom } from '/@/types/global'; // 引入组件 const SvgIcon = defineAsyncComponent(() => import('/@/components/SvgIcon/index.vue')); @@ -25,11 +25,11 @@ const SvgIcon = defineAsyncComponent(() => import('/@/components/SvgIcon/index.v * @description 使用:https://element-plus.gitee.io/zh-CN/component/icon.html */ export function elSvg(app: App) { - const icons = svg as any; - for (const i in icons) { - app.component(`ele-${icons[i].name}`, icons[i]); - } - app.component('SvgIcon', SvgIcon); + const icons = svg as any; + for (const i in icons) { + app.component(`ele-${icons[i].name}`, icons[i]); + } + app.component('SvgIcon', SvgIcon); } /** @@ -37,13 +37,13 @@ export function elSvg(app: App) { * @method const title = useTitle(); ==> title() */ export function useTitle() { - const stores = useThemeConfig(pinia); - const {themeConfig} = storeToRefs(stores); - nextTick(() => { - let globalTitle: string = themeConfig.value.globalTitle; - let webTitle = setMenuI18n(router.currentRoute.value); - document.title = `${webTitle} - ${globalTitle}` || globalTitle; - }); + const stores = useThemeConfig(pinia); + const { themeConfig } = storeToRefs(stores); + nextTick(() => { + let globalTitle: string = themeConfig.value.globalTitle; + let webTitle = setMenuI18n(router.currentRoute.value); + document.title = `${webTitle} - ${globalTitle}` || globalTitle; + }); } /** @@ -54,12 +54,12 @@ export function useTitle() { * @returns {string} - 国际化后的名称 */ export function setMenuI18n(item: any) { - let name = i18n.global.t(item.name); - if (name !== item.name) { - return name; - } + let name = i18n.global.t(item.name); + if (name !== item.name) { + return name; + } - return i18n.global.locale.value === 'en' ? item.meta.enName : item.meta.title; + return i18n.global.locale.value === 'en' ? item.meta.enName : item.meta.title; } /** @@ -69,21 +69,21 @@ export function setMenuI18n(item: any) { * @description data-xxx 属性用于存储页面或应用程序的私有自定义数据 */ export const lazyImg = (el: string, arr: EmptyArrayType) => { - const io = new IntersectionObserver((res) => { - res.forEach((v: any) => { - if (v.isIntersecting) { - const {img, key} = v.target.dataset; - v.target.src = img; - v.target.onload = () => { - io.unobserve(v.target); - arr[key]['loading'] = false; - }; - } - }); - }); - nextTick(() => { - document.querySelectorAll(el).forEach((img) => io.observe(img)); - }); + const io = new IntersectionObserver((res) => { + res.forEach((v: any) => { + if (v.isIntersecting) { + const { img, key } = v.target.dataset; + v.target.src = img; + v.target.onload = () => { + io.unobserve(v.target); + arr[key]['loading'] = false; + }; + } + }); + }); + nextTick(() => { + document.querySelectorAll(el).forEach((img) => io.observe(img)); + }); }; /** @@ -91,9 +91,9 @@ export const lazyImg = (el: string, arr: EmptyArrayType) => { * @returns 返回 `window.localStorage` 中读取的缓存值 `globalComponentSize` */ export const globalComponentSize = (): string => { - const stores = useThemeConfig(pinia); - const {themeConfig} = storeToRefs(stores); - return Local.get('themeConfig')?.globalComponentSize || themeConfig.value?.globalComponentSize; + const stores = useThemeConfig(pinia); + const { themeConfig } = storeToRefs(stores); + return Local.get('themeConfig')?.globalComponentSize || themeConfig.value?.globalComponentSize; }; /** @@ -102,35 +102,35 @@ export const globalComponentSize = (): string => { * @returns 克隆后的对象 */ export function deepClone(obj: EmptyObjectType) { - let newObj: EmptyObjectType; - try { - newObj = obj.push ? [] : {}; - } catch (error) { - newObj = {}; - } - for (let attr in obj) { - if (obj[attr] && typeof obj[attr] === 'object') { - newObj[attr] = deepClone(obj[attr]); - } else { - newObj[attr] = obj[attr]; - } - } - return newObj; + let newObj: EmptyObjectType; + try { + newObj = obj.push ? [] : {}; + } catch (error) { + newObj = {}; + } + for (let attr in obj) { + if (obj[attr] && typeof obj[attr] === 'object') { + newObj[attr] = deepClone(obj[attr]); + } else { + newObj[attr] = obj[attr]; + } + } + return newObj; } /** * 判断是否是移动端 */ export function isMobile() { - if ( - navigator.userAgent.match( - /('phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone')/i - ) - ) { - return true; - } else { - return false; - } + if ( + navigator.userAgent.match( + /('phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone')/i + ) + ) { + return true; + } else { + return false; + } } /** @@ -140,18 +140,18 @@ export function isMobile() { * @returns 删除空值后的数组对象 */ export function handleEmpty(list: EmptyArrayType) { - const arr = [] as any[]; - for (const i in list) { - const d = [] as any[]; - for (const j in list[i]) { - d.push(list[i][j]); - } - const leng = d.filter((item) => item === '').length; - if (leng !== d.length) { - arr.push(list[i]); - } - } - return arr; + const arr = [] as any[]; + for (const i in list) { + const d = [] as any[]; + for (const j in list[i]) { + d.push(list[i][j]); + } + const leng = d.filter((item) => item === '').length; + if (leng !== d.length) { + arr.push(list[i]); + } + } + return arr; } /** @@ -159,56 +159,55 @@ export function handleEmpty(list: EmptyArrayType) { * @param val 当前点击项菜单 */ export function handleOpenLink(val: RouteItem) { - router.push(val.path); - if (verifyUrl(val.meta?.isLink)) window.open(val.meta?.isLink); - else window.open(`${val.meta?.isLink}`); + router.push(val.path); + if (verifyUrl(val.meta?.isLink)) window.open(val.meta?.isLink); + else window.open(`${val.meta?.isLink}`); } /** * 打开小窗口 */ export const openWindow = (url: string, title: string, w: number, h: number) => { - // @ts-ignore - const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : screen.left; - // @ts-ignore - const dualScreenTop = window.screenTop !== undefined ? window.screenTop : screen.top; - - const width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width; - const height = window.innerHeight - ? window.innerHeight - : document.documentElement.clientHeight - ? document.documentElement.clientHeight - : screen.height; - - const left = width / 2 - w / 2 + dualScreenLeft; - const top = height / 2 - h / 2 + dualScreenTop; - return window.open( - url, - title, - 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes, copyhistory=no, width=' + - w + - ', height=' + - h + - ', top=' + - top + - ', left=' + - left - ); + // @ts-ignore + const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : screen.left; + // @ts-ignore + const dualScreenTop = window.screenTop !== undefined ? window.screenTop : screen.top; + + const width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width; + const height = window.innerHeight + ? window.innerHeight + : document.documentElement.clientHeight + ? document.documentElement.clientHeight + : screen.height; + + const left = width / 2 - w / 2 + dualScreenLeft; + const top = height / 2 - h / 2 + dualScreenTop; + return window.open( + url, + title, + 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes, copyhistory=no, width=' + + w + + ', height=' + + h + + ', top=' + + top + + ', left=' + + left + ); }; - /** *加密处理 */ export function encryption(src: string, keyWord: string) { - const key = CryptoJS.enc.Utf8.parse(keyWord); - // 加密 - var encrypted = CryptoJS.AES.encrypt(src, key, { - iv: key, - mode: CryptoJS.mode.CFB, - padding: CryptoJS.pad.NoPadding, - }); - return encrypted.toString(); + const key = CryptoJS.enc.Utf8.parse(keyWord); + // 加密 + var encrypted = CryptoJS.AES.encrypt(src, key, { + iv: key, + mode: CryptoJS.mode.CFB, + padding: CryptoJS.pad.NoPadding, + }); + return encrypted.toString(); } /** @@ -217,22 +216,22 @@ export function encryption(src: string, keyWord: string) { * @returns 明文 */ export function decryption(src: string, keyWord: string) { - const key = CryptoJS.enc.Utf8.parse(keyWord); - // 解密逻辑 - var decryptd = CryptoJS.AES.decrypt(src, key, { - iv: key, - mode: CryptoJS.mode.CFB, - padding: CryptoJS.pad.NoPadding, - }); - - return decryptd.toString(CryptoJS.enc.Utf8); + const key = CryptoJS.enc.Utf8.parse(keyWord); + // 解密逻辑 + var decryptd = CryptoJS.AES.decrypt(src, key, { + iv: key, + mode: CryptoJS.mode.CFB, + padding: CryptoJS.pad.NoPadding, + }); + + return decryptd.toString(CryptoJS.enc.Utf8); } /** * SM4加密处理 */ export function sm4Encryption(src: string, keyWord: string) { - return sm4.encrypt(src, keyWord); + return sm4.encrypt(src, keyWord); } /** @@ -241,18 +240,17 @@ export function sm4Encryption(src: string, keyWord: string) { * @returns 明文 */ export function sm4Decryption(src: string, keyWord: string) { - return sm4.decrypt(src, keyWord); + return sm4.decrypt(src, keyWord); } - /** * Base64 加密 * @param {*} src 明文 * @returns 密文 */ export function base64Encrypt(src: string) { - const encodedWord = CryptoJS.enc.Utf8.parse(src); - return CryptoJS.enc.Base64.stringify(encodedWord); + const encodedWord = CryptoJS.enc.Utf8.parse(src); + return CryptoJS.enc.Base64.stringify(encodedWord); } /** @@ -263,14 +261,14 @@ export function base64Encrypt(src: string) { * @returns {*} */ export function downBlobFile(url: any, query: any, fileName: string) { - return request({ - url: url, - method: 'get', - responseType: 'blob', - params: query, - }).then((response) => { - handleBlobFile(response, fileName); - }); + return request({ + url: url, + method: 'get', + responseType: 'blob', + params: query, + }).then((response) => { + handleBlobFile(response, fileName); + }); } /** @@ -279,26 +277,26 @@ export function downBlobFile(url: any, query: any, fileName: string) { * @returns */ export function handleBlobFile(response: any, fileName: string) { - // 处理返回的文件流 - const blob = response; - if (blob && blob.size === 0) { - useMessage().error('内容为空,无法下载'); - return; - } - const link = document.createElement('a'); - - // 兼容一下 入参不是 File Blob 类型情况 - var binaryData = [] as any; - binaryData.push(response); - link.href = window.URL.createObjectURL(new Blob(binaryData)); - link.download = fileName; - document.body.appendChild(link); - link.click(); - window.setTimeout(function () { - // @ts-ignore - URL.revokeObjectURL(blob); - document.body.removeChild(link); - }, 0); + // 处理返回的文件流 + const blob = response; + if (blob && blob.size === 0) { + useMessage().error('内容为空,无法下载'); + return; + } + const link = document.createElement('a'); + + // 兼容一下 入参不是 File Blob 类型情况 + var binaryData = [] as any; + binaryData.push(response); + link.href = window.URL.createObjectURL(new Blob(binaryData)); + link.download = fileName; + document.body.appendChild(link); + link.click(); + window.setTimeout(function () { + // @ts-ignore + URL.revokeObjectURL(blob); + document.body.removeChild(link); + }, 0); } /** @@ -306,31 +304,68 @@ export function handleBlobFile(response: any, fileName: string) { * @return string */ export function generateUUID() { - if (typeof crypto === 'object') { - if (typeof crypto.randomUUID === 'function') { - return crypto.randomUUID(); - } - if (typeof crypto.getRandomValues === 'function' && typeof Uint8Array === 'function') { - const callback = (c: any) => { - const num = Number(c); - return (num ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (num / 4)))).toString(16); - }; - return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, callback); - } - } - let timestamp = new Date().getTime(); - let performanceNow = (typeof performance !== 'undefined' && performance.now && performance.now() * 1000) || 0; - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { - let random = Math.random() * 16; - if (timestamp > 0) { - random = (timestamp + random) % 16 | 0; - timestamp = Math.floor(timestamp / 16); - } else { - random = (performanceNow + random) % 16 | 0; - performanceNow = Math.floor(performanceNow / 16); - } - return (c === 'x' ? random : (random & 0x3) | 0x8).toString(16); - }); + if (typeof crypto === 'object') { + if (typeof crypto.randomUUID === 'function') { + return crypto.randomUUID(); + } + if (typeof crypto.getRandomValues === 'function' && typeof Uint8Array === 'function') { + const callback = (c: any) => { + const num = Number(c); + return (num ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (num / 4)))).toString(16); + }; + return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, callback); + } + } + let timestamp = new Date().getTime(); + let performanceNow = (typeof performance !== 'undefined' && performance.now && performance.now() * 1000) || 0; + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { + let random = Math.random() * 16; + if (timestamp > 0) { + random = (timestamp + random) % 16 | 0; + timestamp = Math.floor(timestamp / 16); + } else { + random = (performanceNow + random) % 16 | 0; + performanceNow = Math.floor(performanceNow / 16); + } + return (c === 'x' ? random : (random & 0x3) | 0x8).toString(16); + }); +} + +// export function deepReset(target: any, template: any) { +// Object.keys(template).forEach((key) => { +// if (typeof template[key] === 'object' && template[key] !== null) { +// // 递归处理嵌套对象 +// deepReset(target[key], template[key]); +// } else { +// // 基础类型直接赋值 +// target[key] = template[key]; +// } +// }); +// } + +export function deepReset(target: any, template: any) { + Object.keys(target).forEach((key) => { + if (template?.hasOwnProperty?.(key)) { + // 如果 target[key] 和 template[key] 都是对象,则递归处理 + if (typeof target[key] === 'object' && target[key] !== null && typeof template[key] === 'object' && template[key] !== null) { + deepReset(target[key], template[key]); + } else { + // 直接赋予 template 的值(保留基础类型或替换对象) + target[key] = template[key]; + } + } else { + // 如果 template 没有该属性,则重置为 null + target[key] = null; + } + }); +} + +// 请求头处理 +export function headers() { + return { + Authorization: 'Bearer ' + Session.get('token'), + 'TENANT-ID': Session.getTenant(), + }; } /** @@ -346,85 +381,97 @@ export function generateUUID() { * @method handleOpenLink 打开外部链接 */ const other = { - elSvg: (app: App) => { - elSvg(app); - }, - useTitle: () => { - useTitle(); - }, - setMenuI18n(item: RouteItems) { - return setMenuI18n(item); - }, - lazyImg: (el: string, arr: EmptyArrayType) => { - lazyImg(el, arr); - }, - globalComponentSize: () => { - return globalComponentSize(); - }, - deepClone: (obj: EmptyObjectType) => { - return deepClone(obj); - }, - isMobile: () => { - return isMobile(); - }, - handleEmpty: (list: EmptyArrayType) => { - return handleEmpty(list); - }, - handleOpenLink: (val: RouteItem) => { - handleOpenLink(val); - }, - encryption: (src: string, keyWord: string) => { - return encryption(src, keyWord); - }, - decryption: (src: string, keyWord: string) => { - return decryption(src, keyWord); - }, - base64Encrypt: (data: any) => { - return base64Encrypt(data); - }, - downBlobFile: (url: any, query: any, fileName: string) => { - return downBlobFile(url, query, fileName); - }, - toUnderline: (str: string) => { - return toUnderline(str); - }, - openWindow: (url: string, title: string, w: number, h: number) => { - return openWindow(url, title, w, h); - }, - getQueryString: (url: string, paraName: string) => { - return getQueryString(url, paraName); - }, - adaptationUrl: (url?: string) => { - return adaptationUrl(url); - }, - resolveAllEunuchNodeId: (json: any[], idArr: any[], temp: any[] = []) => { - return resolveAllEunuchNodeId(json, idArr, temp); - }, - getNonDuplicateID: () => { - return getNonDuplicateID(); - }, - - addUnit: (value: string | number, unit = 'px') => { - return addUnit(value, unit); - }, + elSvg: (app: App) => { + elSvg(app); + }, + useTitle: () => { + useTitle(); + }, + headers: () => { + return headers(); + }, + handleBlobFile: (response: any, fileName: string) => { + handleBlobFile(response, fileName); + }, + deepReset: (target: any, template: any) => { + deepReset(target, template); + }, + setMenuI18n(item: RouteItems) { + return setMenuI18n(item); + }, + lazyImg: (el: string, arr: EmptyArrayType) => { + lazyImg(el, arr); + }, + globalComponentSize: () => { + return globalComponentSize(); + }, + deepClone: (obj: EmptyObjectType) => { + return deepClone(obj); + }, + isMobile: () => { + return isMobile(); + }, + handleEmpty: (list: EmptyArrayType) => { + return handleEmpty(list); + }, + handleOpenLink: (val: RouteItem) => { + handleOpenLink(val); + }, + encryption: (src: string, keyWord: string) => { + return encryption(src, keyWord); + }, + decryption: (src: string, keyWord: string) => { + return decryption(src, keyWord); + }, + base64Encrypt: (data: any) => { + return base64Encrypt(data); + }, + downBlobFile: (url: any, query: any, fileName: string) => { + return downBlobFile(url, query, fileName); + }, + toUnderline: (str: string) => { + return toUnderline(str); + }, + openWindow: (url: string, title: string, w: number, h: number) => { + return openWindow(url, title, w, h); + }, + getQueryString: (url: string, paraName: string) => { + return getQueryString(url, paraName); + }, + adaptationUrl: (url?: string) => { + return adaptationUrl(url); + }, + resolveAllEunuchNodeId: (json: any[], idArr: any[], temp: any[] = []) => { + return resolveAllEunuchNodeId(json, idArr, temp); + }, + getNonDuplicateID: () => { + return getNonDuplicateID(); + }, + + addUnit: (value: string | number, unit = 'px') => { + return addUnit(value, unit); + }, + generateCode: () => { + return generateCode(); + }, }; export function getQueryString(url: string, paraName: string) { - const arrObj = url.split('?'); - if (arrObj.length > 1) { - const arrPara = arrObj[1].split('&'); - let arr; - for (let i = 0; i < arrPara.length; i++) { - arr = arrPara[i].split('='); - // eslint-disable-next-line eqeqeq - if (arr != null && arr[0] == paraName) { - return arr[1]; - } - } - return ''; - } else { - return ''; - } + const arrObj = url.split('?'); + if (arrObj.length > 1) { + const arrPara = arrObj[1].split('&'); + let arr; + for (let i = 0; i < arrPara.length; i++) { + arr = arrPara[i].split('='); + // eslint-disable-next-line eqeqeq + if (arr != null && arr[0] == paraName) { + return arr[1]; + } + } + return ''; + } else { + return ''; + } } /** @@ -437,31 +484,31 @@ export function getQueryString(url: string, paraName: string) { * @returns {*} */ export function handleTree(data: any, id: any, parentId: any, children: any, rootId: any) { - id = id || 'id'; - parentId = parentId || 'parentId'; - children = children || 'children'; - rootId = - rootId || - Math.min.apply( - Math, - data.map((item: any) => { - return item[parentId]; - }) - ) || - 0; - //对源数据深度克隆 - const cloneData = JSON.parse(JSON.stringify(data)); - //循环所有项 - const treeData = cloneData.filter((father: any) => { - const branchArr = cloneData.filter((child: any) => { - //返回每一项的子级数组 - return father[id] === child[parentId]; - }); - branchArr.length > 0 ? (father[children] = branchArr) : ''; - //返回第一层 - return father[parentId] === rootId; - }); - return treeData !== '' ? treeData : data; + id = id || 'id'; + parentId = parentId || 'parentId'; + children = children || 'children'; + rootId = + rootId || + Math.min.apply( + Math, + data.map((item: any) => { + return item[parentId]; + }) + ) || + 0; + //对源数据深度克隆 + const cloneData = JSON.parse(JSON.stringify(data)); + //循环所有项 + const treeData = cloneData.filter((father: any) => { + const branchArr = cloneData.filter((child: any) => { + //返回每一项的子级数组 + return father[id] === child[parentId]; + }); + branchArr.length > 0 ? (father[children] = branchArr) : ''; + //返回第一层 + return father[parentId] === rootId; + }); + return treeData !== '' ? treeData : data; } /** @@ -469,14 +516,14 @@ export function handleTree(data: any, id: any, parentId: any, children: any, roo * @returns */ const resolveAllEunuchNodeId = (json: any[], idArr: any[], temp: any[] = []) => { - for (const item of json) { - if (item.children && item.children.length !== 0) { - resolveAllEunuchNodeId(item.children, idArr, temp); - } else { - temp.push(...idArr.filter((id) => id === item.id)); - } - } - return temp; + for (const item of json) { + if (item.children && item.children.length !== 0) { + resolveAllEunuchNodeId(item.children, idArr, temp); + } else { + temp.push(...idArr.filter((id) => id === item.id)); + } + } + return temp; }; /** @@ -485,7 +532,7 @@ const resolveAllEunuchNodeId = (json: any[], idArr: any[], temp: any[] = []) => * @returns 下划线 */ export function toUnderline(str: string) { - return str.replace(/([A-Z])/g, '_$1').toLowerCase(); + return str.replace(/([A-Z])/g, '_$1').toLowerCase(); } /** @@ -496,14 +543,14 @@ export function toUnderline(str: string) { * @param originUrl 原始路径 */ const adaptationUrl = (originUrl?: string) => { - // 微服务架构 不做路径转换,为空不做路径转换 - const isMicro = import.meta.env.VITE_IS_MICRO; - if (validateNull(isMicro) || isMicro === 'true') { - return originUrl; - } - - // 转为 /admin 路由前缀的请求 - return `/admin/${originUrl?.split('/').splice(2).join('/')}`; + // 微服务架构 不做路径转换,为空不做路径转换 + const isMicro = import.meta.env.VITE_IS_MICRO; + if (validateNull(isMicro) || isMicro === 'true') { + return originUrl; + } + + // 转为 /admin 路由前缀的请求 + return `/admin/${originUrl?.split('/').splice(2).join('/')}`; }; /** @@ -512,9 +559,9 @@ const adaptationUrl = (originUrl?: string) => { * @return { String } id */ const getNonDuplicateID = (length = 8) => { - let idStr = Date.now().toString(36); - idStr += Math.random().toString(36).substring(3, length); - return idStr; + let idStr = Date.now().toString(36); + idStr += Math.random().toString(36).substring(3, length); + return idStr; }; /** @@ -523,8 +570,20 @@ const getNonDuplicateID = (length = 8) => { * @param {String} unit 单位 px em rem */ const addUnit = (value: string | number, unit = 'px') => { - return !Object.is(Number(value), NaN) ? `${value}${unit}` : value; + return !Object.is(Number(value), NaN) ? `${value}${unit}` : value; }; // 统一批量导出 export default other; + +export function generateCode() { + // 生成4位大写字母 + const letters = Array.from({ length: 4 }, () => String.fromCharCode(65 + Math.floor(Math.random() * 26))).join(''); + + // 生成4位数字 + const numbers = Array.from({ length: 4 }, () => Math.floor(Math.random() * 10)).join(''); + + // 组合成最终格式 + let generatedCode = `${letters}-${numbers}`; + return generatedCode; +} diff --git a/src/views/course/course/form.vue b/src/views/course/course/form.vue new file mode 100644 index 00000000..24184df1 --- /dev/null +++ b/src/views/course/course/form.vue @@ -0,0 +1,258 @@ + + + diff --git a/src/views/course/course/index.vue b/src/views/course/course/index.vue new file mode 100644 index 00000000..d21b07cc --- /dev/null +++ b/src/views/course/course/index.vue @@ -0,0 +1,244 @@ + + + diff --git a/src/views/course/series/form.vue b/src/views/course/series/form.vue new file mode 100644 index 00000000..e55b774c --- /dev/null +++ b/src/views/course/series/form.vue @@ -0,0 +1,132 @@ + + + diff --git a/src/views/course/series/index.vue b/src/views/course/series/index.vue new file mode 100644 index 00000000..39788241 --- /dev/null +++ b/src/views/course/series/index.vue @@ -0,0 +1,150 @@ + + + diff --git a/src/views/course/teacher/form.vue b/src/views/course/teacher/form.vue new file mode 100644 index 00000000..7393159e --- /dev/null +++ b/src/views/course/teacher/form.vue @@ -0,0 +1,144 @@ + + + diff --git a/src/views/course/teacher/index.vue b/src/views/course/teacher/index.vue new file mode 100644 index 00000000..3ad5bb1f --- /dev/null +++ b/src/views/course/teacher/index.vue @@ -0,0 +1,151 @@ + + + diff --git a/src/views/message/consultMessageLog/form.vue b/src/views/message/consultMessageLog/form.vue new file mode 100644 index 00000000..38eac080 --- /dev/null +++ b/src/views/message/consultMessageLog/form.vue @@ -0,0 +1,125 @@ + + + diff --git a/src/views/message/consultMessageLog/index.vue b/src/views/message/consultMessageLog/index.vue new file mode 100644 index 00000000..474bf2ee --- /dev/null +++ b/src/views/message/consultMessageLog/index.vue @@ -0,0 +1,156 @@ + + + diff --git a/src/views/message/consultRecord/consultList.vue b/src/views/message/consultRecord/consultList.vue new file mode 100644 index 00000000..4e1efead --- /dev/null +++ b/src/views/message/consultRecord/consultList.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/src/views/message/consultRecord/consultMain.vue b/src/views/message/consultRecord/consultMain.vue new file mode 100644 index 00000000..350e4b77 --- /dev/null +++ b/src/views/message/consultRecord/consultMain.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/src/views/message/consultRecord/form.vue b/src/views/message/consultRecord/form.vue new file mode 100644 index 00000000..a645e97a --- /dev/null +++ b/src/views/message/consultRecord/form.vue @@ -0,0 +1,48 @@ + + + diff --git a/src/views/message/consultRecord/index.vue b/src/views/message/consultRecord/index.vue new file mode 100644 index 00000000..60c6e08d --- /dev/null +++ b/src/views/message/consultRecord/index.vue @@ -0,0 +1,156 @@ + + + diff --git a/src/views/message/consultRecord/info.vue b/src/views/message/consultRecord/info.vue new file mode 100644 index 00000000..3dfaf989 --- /dev/null +++ b/src/views/message/consultRecord/info.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/src/views/message/message/form.vue b/src/views/message/message/form.vue new file mode 100644 index 00000000..b59d6ec5 --- /dev/null +++ b/src/views/message/message/form.vue @@ -0,0 +1,139 @@ + + + diff --git a/src/views/message/message/index.vue b/src/views/message/message/index.vue new file mode 100644 index 00000000..ecc3e191 --- /dev/null +++ b/src/views/message/message/index.vue @@ -0,0 +1,131 @@ + + + diff --git a/src/views/message/replyMessage/form.vue b/src/views/message/replyMessage/form.vue new file mode 100644 index 00000000..6ecc7b69 --- /dev/null +++ b/src/views/message/replyMessage/form.vue @@ -0,0 +1,125 @@ + + + diff --git a/src/views/message/replyMessage/index.vue b/src/views/message/replyMessage/index.vue new file mode 100644 index 00000000..8c3d74ef --- /dev/null +++ b/src/views/message/replyMessage/index.vue @@ -0,0 +1,132 @@ + + + + + diff --git a/src/views/message/userMessage/form.vue b/src/views/message/userMessage/form.vue new file mode 100644 index 00000000..a8b4b2f1 --- /dev/null +++ b/src/views/message/userMessage/form.vue @@ -0,0 +1,203 @@ + + + diff --git a/src/views/message/userMessage/index.vue b/src/views/message/userMessage/index.vue new file mode 100644 index 00000000..d7a54001 --- /dev/null +++ b/src/views/message/userMessage/index.vue @@ -0,0 +1,155 @@ + + + + + diff --git a/src/views/platform/assessmentPublisherInfo/form.vue b/src/views/platform/assessmentPublisherInfo/form.vue index 3eb70a95..63ffc483 100644 --- a/src/views/platform/assessmentPublisherInfo/form.vue +++ b/src/views/platform/assessmentPublisherInfo/form.vue @@ -1,84 +1,83 @@ diff --git a/src/views/platform/assessmentTheme/form.vue b/src/views/platform/assessmentTheme/form.vue new file mode 100644 index 00000000..408e1a2c --- /dev/null +++ b/src/views/platform/assessmentTheme/form.vue @@ -0,0 +1,160 @@ + + + diff --git a/src/views/platform/assessmentTheme/index.vue b/src/views/platform/assessmentTheme/index.vue new file mode 100644 index 00000000..9cc312b5 --- /dev/null +++ b/src/views/platform/assessmentTheme/index.vue @@ -0,0 +1,134 @@ + + + diff --git a/src/views/platform/doctorSchedule/form.vue b/src/views/platform/doctorSchedule/form.vue new file mode 100644 index 00000000..0db9eddf --- /dev/null +++ b/src/views/platform/doctorSchedule/form.vue @@ -0,0 +1,315 @@ + + + + + diff --git a/src/views/platform/doctorSchedule/index.vue b/src/views/platform/doctorSchedule/index.vue new file mode 100644 index 00000000..a1ba6b92 --- /dev/null +++ b/src/views/platform/doctorSchedule/index.vue @@ -0,0 +1,131 @@ + + + diff --git a/src/views/platform/doctorScheduleLog/form.vue b/src/views/platform/doctorScheduleLog/form.vue new file mode 100644 index 00000000..a8904d2d --- /dev/null +++ b/src/views/platform/doctorScheduleLog/form.vue @@ -0,0 +1,111 @@ + + + diff --git a/src/views/platform/doctorScheduleLog/index.vue b/src/views/platform/doctorScheduleLog/index.vue new file mode 100644 index 00000000..97351295 --- /dev/null +++ b/src/views/platform/doctorScheduleLog/index.vue @@ -0,0 +1,127 @@ + + + diff --git a/src/views/platform/platformArticle/form.vue b/src/views/platform/platformArticle/form.vue new file mode 100644 index 00000000..0cf8d25e --- /dev/null +++ b/src/views/platform/platformArticle/form.vue @@ -0,0 +1,263 @@ + + + + + diff --git a/src/views/platform/platformArticle/index.vue b/src/views/platform/platformArticle/index.vue new file mode 100644 index 00000000..62fafb87 --- /dev/null +++ b/src/views/platform/platformArticle/index.vue @@ -0,0 +1,233 @@ + + + + + diff --git a/src/views/platform/questionRecord/form.vue b/src/views/platform/questionRecord/form.vue index ba31378f..94d79c3b 100644 --- a/src/views/platform/questionRecord/form.vue +++ b/src/views/platform/questionRecord/form.vue @@ -1,105 +1,102 @@ diff --git a/src/views/platform/questionRecord/index.vue b/src/views/platform/questionRecord/index.vue index 28b7e8f6..622fc136 100644 --- a/src/views/platform/questionRecord/index.vue +++ b/src/views/platform/questionRecord/index.vue @@ -1,91 +1,96 @@ diff --git a/src/views/platform/questionRecordDetails/form.vue b/src/views/platform/questionRecordDetails/form.vue index 7e8d0376..f59692af 100644 --- a/src/views/platform/questionRecordDetails/form.vue +++ b/src/views/platform/questionRecordDetails/form.vue @@ -1,84 +1,81 @@ diff --git a/src/views/platform/questionTable/assessmentPublish.vue b/src/views/platform/questionTable/assessmentPublish.vue new file mode 100644 index 00000000..96cbf4b6 --- /dev/null +++ b/src/views/platform/questionTable/assessmentPublish.vue @@ -0,0 +1,330 @@ + + + + + diff --git a/src/views/platform/questionTable/form.vue b/src/views/platform/questionTable/form.vue index bf77e424..7ff95ec3 100644 --- a/src/views/platform/questionTable/form.vue +++ b/src/views/platform/questionTable/form.vue @@ -1,100 +1,211 @@ + + diff --git a/src/views/platform/questionTable/index.vue b/src/views/platform/questionTable/index.vue index 2e6a745f..a2b2bf0d 100644 --- a/src/views/platform/questionTable/index.vue +++ b/src/views/platform/questionTable/index.vue @@ -1,148 +1,344 @@ + + diff --git a/src/views/platform/questionTable/indicators.vue b/src/views/platform/questionTable/indicators.vue new file mode 100644 index 00000000..1651c685 --- /dev/null +++ b/src/views/platform/questionTable/indicators.vue @@ -0,0 +1,310 @@ + + + + + diff --git a/src/views/platform/questionTable/info.vue b/src/views/platform/questionTable/info.vue new file mode 100644 index 00000000..c1a6ca48 --- /dev/null +++ b/src/views/platform/questionTable/info.vue @@ -0,0 +1,949 @@ + + + + + diff --git a/src/views/platform/questionTable/question.vue b/src/views/platform/questionTable/question.vue new file mode 100644 index 00000000..d5c4520f --- /dev/null +++ b/src/views/platform/questionTable/question.vue @@ -0,0 +1,202 @@ + + + + + diff --git a/src/views/platform/questionTable/report.vue b/src/views/platform/questionTable/report.vue new file mode 100644 index 00000000..c77aadc7 --- /dev/null +++ b/src/views/platform/questionTable/report.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/src/views/platform/starLog/form.vue b/src/views/platform/starLog/form.vue new file mode 100644 index 00000000..802f16fe --- /dev/null +++ b/src/views/platform/starLog/form.vue @@ -0,0 +1,111 @@ + + + diff --git a/src/views/platform/starLog/index.vue b/src/views/platform/starLog/index.vue new file mode 100644 index 00000000..02435abf --- /dev/null +++ b/src/views/platform/starLog/index.vue @@ -0,0 +1,127 @@ + + + -- Gitee From 740af1eb00961e198ed67681102e1ef5b9a7d83d Mon Sep 17 00:00:00 2001 From: AC <1196417540@qq.com> Date: Mon, 26 May 2025 15:24:29 +0800 Subject: [PATCH 005/141] =?UTF-8?q?=E5=A4=A7=E9=87=8F=E6=8F=90=E4=BA=A42?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 9 +- package.json | 3 +- src/api/message/consultRecord.ts | 33 ++++ src/api/platform/assessmentIndicators.ts | 25 +++ src/components/Websocket/index.vue | 20 +- src/components/audio/index.vue | 144 ++++++++++++++ src/stores/message/consult.ts | 83 +++++++- src/types/consult.ts | 17 ++ src/views/config/carousel/index.vue | 20 ++ .../message/consultRecord/consultList.vue | 100 +++++++++- .../message/consultRecord/consultMain.vue | 119 ++++++++++-- src/views/message/consultRecord/content.vue | 183 ++++++++++++++++++ src/views/message/consultRecord/form.vue | 30 ++- src/views/message/consultRecord/info.vue | 52 ++++- src/views/message/consultRecord/send.vue | 68 +++++++ .../platform/questionTable/indicators.vue | 165 +++++++++++++++- 16 files changed, 1026 insertions(+), 45 deletions(-) create mode 100644 src/components/audio/index.vue create mode 100644 src/views/config/carousel/index.vue create mode 100644 src/views/message/consultRecord/content.vue create mode 100644 src/views/message/consultRecord/send.vue diff --git a/package-lock.json b/package-lock.json index 5457813f..b111d82e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,7 +38,8 @@ "vue-echarts": "7.0.3", "vue-i18n": "9.14.2", "vue-router": "4.4.5", - "vuedraggable": "4.1.0" + "vuedraggable": "4.1.0", + "wavesurfer.js": "^7.9.5" }, "devDependencies": { "@swc/core": "1.6.13", @@ -7109,6 +7110,12 @@ "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.14.0.tgz", "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==" }, + "node_modules/wavesurfer.js": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/wavesurfer.js/-/wavesurfer.js-7.9.5.tgz", + "integrity": "sha512-ioOG9chuAn0bF2NYYKkZtaxjcQK/hFskLg8ViLYbJHhWPk1N5wWtuqVhqeh2ZWT2SK3t0E8UkD7lLDLuZQQaSA==", + "license": "BSD-3-Clause" + }, "node_modules/webpack-virtual-modules": { "version": "0.6.2", "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", diff --git a/package.json b/package.json index e7266418..8db8bcf3 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,8 @@ "vue-echarts": "7.0.3", "vue-i18n": "9.14.2", "vue-router": "4.4.5", - "vuedraggable": "4.1.0" + "vuedraggable": "4.1.0", + "wavesurfer.js": "^7.9.5" }, "devDependencies": { "@swc/core": "1.6.13", diff --git a/src/api/message/consultRecord.ts b/src/api/message/consultRecord.ts index de26a5b1..ac0e837d 100644 --- a/src/api/message/consultRecord.ts +++ b/src/api/message/consultRecord.ts @@ -13,6 +13,31 @@ export function fetchList(query?: Object) { }); } +/** + * + * @param data + * @returns + */ +export function sendMessage(data?: Object) { + return request({ + url: '/message/consultRecord/sendMessage', + method: 'post', + data: data, + }); +} + +/** + * + * @param consultHash + * @returns + */ +export function setSysReadByConsultHash(consultHash?: string) { + return request({ + url: '/message/consultRecord/setSysReadByConsultHash/' + consultHash, + method: 'get', + }); +} + /** * @param {Object} [query] - 查询参数。 * @returns {Promise} 获取咨询列表 @@ -25,6 +50,14 @@ export function getConsultList(query?: Object) { }); } +export function getConsultMessageRecord(obj?: Object) { + return request({ + url: '/message/consultRecord/getConsultMessageRecord', + method: 'post', + data: obj, + }); +} + /** * 添加一个新对象。 * @param {Object} [obj] - 要添加的对象。 diff --git a/src/api/platform/assessmentIndicators.ts b/src/api/platform/assessmentIndicators.ts index 73b0f072..21844eac 100644 --- a/src/api/platform/assessmentIndicators.ts +++ b/src/api/platform/assessmentIndicators.ts @@ -13,6 +13,31 @@ export function fetchList(query?: Object) { }); } +/** + * 添加指标说明 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addIndicators(obj?: Object) { + return request({ + url: '/platform/assessmentIndicators/addIndicators', + method: 'post', + data: obj, + }); +} + +/** + * 移除指标说明 + * @param {indicatorsId} [String] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function removeIndicators(indicatorsId?: String) { + return request({ + url: '/platform/assessmentIndicators/removeIndicators/' + indicatorsId, + method: 'delete', + }); +} + /** * 添加一个新对象。 * @param {Object} [obj] - 要添加的对象。 diff --git a/src/components/Websocket/index.vue b/src/components/Websocket/index.vue index 55475a42..701241a7 100644 --- a/src/components/Websocket/index.vue +++ b/src/components/Websocket/index.vue @@ -4,7 +4,7 @@ + + diff --git a/src/stores/message/consult.ts b/src/stores/message/consult.ts index 4eeb8d80..06849ac0 100644 --- a/src/stores/message/consult.ts +++ b/src/stores/message/consult.ts @@ -1,6 +1,14 @@ +import { data } from 'autoprefixer'; import { defineStore } from 'pinia'; -import { ref } from 'vue'; +import { ref, computed } from 'vue'; +// 大整数安全比较[9](@ref) +const idSortedList = (dataList: MessageLog[]) => { + return [...dataList].sort((a, b) => { + return BigInt(a.id) > BigInt(b.id) ? 1 : -1; + }); +}; +type OverflowDownHandler = () => void; /** * 当前选中会话对象缓存 */ @@ -10,8 +18,77 @@ export const currentConsult = defineStore('currentConsult', { id: '', username: '', avatar: '', + param: '', + consultHash: '', + userUnreadCount: 0, + sysUnreadCount: 0, + currentMessage: '', + currentMessageType: '', + lastActivityTime: '', }); - return { data }; + const newMessage = ref({ + consultHash: '', + consultId: '', + content: '', + id: '', + messageType: '', + sendTime: '', + senderType: '', + }); + const dataList = ref([]); + + const messageMap = ref>(new Map()); + const overflowDownHandler = ref(null); + const consultListHandler = ref(null); + return { data, newMessage, messageMap, overflowDownHandler, consultListHandler, dataList }; + }, + actions: { + setOverflowDown(handler: () => void) { + this.overflowDownHandler = handler; + }, + setConsultListHandler(handler: () => void) { + this.consultListHandler = handler; + }, + gainMessage(message: MessageLog) { + //获取到新的消息.对此消息进行验证 + if (message.consultId === this.data.id) { + //如果是当前会话,则直接将其插入 + this.messageMap.get(message.consultHash)?.push(message); + this.overflowDownHandler?.call(null); + } + this.consultListHandler?.call(null); + }, + addMoreMessage(list: MessageLog[]) { + if (!list || list.length <= 0) { + return; + } + let messageList = this.messageMap.get(list[0].consultHash); + //将所有新消息插入到当前会话的缓存中 + if (messageList && messageList.length > 0) { + //验证是否有新内容,有则变更,没有则不动 + let oldMessage = messageList[0]; + let newMessage = list[0]; + if (oldMessage.consultHash == newMessage.consultHash) { + this.messageMap.set(list[0].consultHash, idSortedList([...messageList, ...list])); + } + } + }, + setMessageData(list: MessageLog[]) { + if (!list || list.length <= 0) { + return; + } + let consultHash = list[0].consultHash; + let messageList = this.messageMap.get(consultHash); + if (messageList && messageList.length > 0) { + //验证是否有新内容,有则变更,没有则不动 + let oldMessage = messageList[0]; + let newMessage = list[0]; + if (oldMessage.id !== newMessage.id) { + this.messageMap.set(consultHash, idSortedList(list)); + } + } else { + this.messageMap.set(consultHash, idSortedList(list)); + } + }, }, - actions: {}, }); diff --git a/src/types/consult.ts b/src/types/consult.ts index 692c8cb8..3572b286 100644 --- a/src/types/consult.ts +++ b/src/types/consult.ts @@ -2,4 +2,21 @@ declare interface Consult { id: string; username: string; avatar: string; + param: string; + consultHash: string; + userUnreadCount: number; + sysUnreadCount: number; + currentMessage: string; + currentMessageType: string; + lastActivityTime: string; +} + +declare interface MessageLog { + consultHash: string; + consultId: string; + content: string; + id: string; + messageType: string; + sendTime: string; + senderType: string; } diff --git a/src/views/config/carousel/index.vue b/src/views/config/carousel/index.vue new file mode 100644 index 00000000..3dfaf989 --- /dev/null +++ b/src/views/config/carousel/index.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/src/views/message/consultRecord/consultList.vue b/src/views/message/consultRecord/consultList.vue index 4e1efead..5c0e0878 100644 --- a/src/views/message/consultRecord/consultList.vue +++ b/src/views/message/consultRecord/consultList.vue @@ -1,33 +1,83 @@ diff --git a/src/views/message/consultRecord/content.vue b/src/views/message/consultRecord/content.vue new file mode 100644 index 00000000..e2be275a --- /dev/null +++ b/src/views/message/consultRecord/content.vue @@ -0,0 +1,183 @@ + + + + + diff --git a/src/views/message/consultRecord/form.vue b/src/views/message/consultRecord/form.vue index a645e97a..4aa75b3c 100644 --- a/src/views/message/consultRecord/form.vue +++ b/src/views/message/consultRecord/form.vue @@ -1,13 +1,14 @@ + }, 500); + <\/script> `); printWindow.document.close(); }; - - -// export const handlePrintUtil = (elementRef) => { +// export const handlePrintECharts = ( +// elementRef: any, +// echartsInstance?: any, +// options?: { +// margin?: string; +// header?: string; +// footer?: string; +// landscape?: boolean; +// } +// ) => { // const content = elementRef?.rootElement; // if (!content) return; // const originalDisplay = content.style.display; // content.style.display = 'block'; +// // 配置默认选项 +// const printOptions = { +// margin: options?.margin || '20mm 15mm 25mm 15mm', // 默认边距 +// header: options?.header || '', +// footer: options?.footer || '', +// landscape: options?.landscape || false, +// }; + +// // 计算实际可打印高度 +// const PAGE_HEIGHT_MM = printOptions.landscape ? 210 : 297; // A4高度(mm) +// const MM_TO_PX = 3.78; // 毫米到像素的近似转换 +// const MARGIN_TOP = parseInt(printOptions.margin.split(/\s+/)[0]) || 15; // 取顶部边距 +// const CONTENT_HEIGHT = (PAGE_HEIGHT_MM - MARGIN_TOP * 2) * MM_TO_PX; + +// // 定义页眉页脚高度 (需要根据实际样式调整) +// const HEADER_HEIGHT_PX = 40; // 页眉高度估算值 +// const FOOTER_HEIGHT_PX = 40; // 页脚高度估算值 + // const clone = content.cloneNode(true); -// const styles = [...document.querySelectorAll('style, link[rel="stylesheet"]')] -// .map(el => el.outerHTML).join(''); +// const styles = [...document.querySelectorAll('style, link[rel="stylesheet"]')].map((el) => el.outerHTML).join(''); -// // 自动分页处理 -// const A4_HEIGHT = 1122; +// // 正确分页逻辑 - 基于实际内容高度 +// const contentContainer = document.createElement('div'); +// let currentPage = document.createElement('div'); +// currentPage.className = 'page-content'; // let currentHeight = 0; -// Array.from(clone.children).forEach(child => { -// currentHeight += child.offsetHeight; -// if (currentHeight >= A4_HEIGHT) { -// child.classList.add('page-break'); +// // 计算每页的实际可用高度(扣除页眉页脚高度) +// const AVAILABLE_PAGE_HEIGHT = CONTENT_HEIGHT - HEADER_HEIGHT_PX - FOOTER_HEIGHT_PX; + +// Array.from(clone.children).forEach((child) => { +// const childHeight = child.scrollHeight; + +// // 如果当前页已满(超过内容高度)就创建新页面 +// if (currentHeight + childHeight > AVAILABLE_PAGE_HEIGHT && currentPage.children.length > 0) { +// contentContainer.appendChild(currentPage); +// currentPage = document.createElement('div'); +// currentPage.className = 'page-content'; // currentHeight = 0; // } + +// currentPage.appendChild(child); +// currentHeight += childHeight; // }); +// // 添加最后一页 +// if (currentPage.children.length > 0) { +// contentContainer.appendChild(currentPage); +// } + +// // 创建打印文档结构 +// const printContainer = document.createElement('div'); +// printContainer.className = 'print-root'; + +// // 构建带页眉页脚的页面 +// const pageNodes = Array.from(contentContainer.children); +// const pageCount = pageNodes.length; + +// pageNodes.forEach((pageNode, index) => { +// const pageWrapper = document.createElement('div'); +// pageWrapper.className = 'print-page'; + +// // 添加页眉 +// if (printOptions.header) { +// const header = document.createElement('div'); +// header.className = 'print-header'; +// header.innerHTML = printOptions.header; +// pageWrapper.appendChild(header); +// } + +// // 在每页添加分隔符 +// const separator = document.createElement('div'); +// separator.className = 'page-separator'; +// separator.innerHTML = '
33333333333333
'; +// pageWrapper.appendChild(separator); + +// // 添加内容区域 +// const contentDiv = document.createElement('div'); +// contentDiv.className = 'page-content-container'; // 添加新容器 +// contentDiv.appendChild(pageNode); +// pageWrapper.appendChild(contentDiv); + +// // 添加页脚 +// if (printOptions.footer) { +// const footer = document.createElement('div'); +// footer.className = 'print-footer'; +// // 替换页码占位符 +// footer.innerHTML = printOptions.footer.replace('&P', (index + 1).toString()).replace('&N', pageCount.toString()); +// pageWrapper.appendChild(footer); +// } +// printContainer.appendChild(pageWrapper); +// }); +// // 在构建打印页面后添加 +// console.log('打印页面数量:', pageNodes.length); +// console.log('打印容器内容:', printContainer.outerHTML); + +// // 在打印窗口的脚本部分添加 +// console.log('打印文档内容:', document.documentElement.outerHTML); +// // 创建打印窗口 // const printWindow = window.open('', '_blank'); // printWindow.document.write(` // @@ -474,46 +851,150 @@ export const handlePrintECharts = (elementRef, echartsInstance) => { // // 打印内容 // // ${styles} // // -// +// ${printContainer.outerHTML} // diff --git a/src/views/home/work.vue b/src/views/home/work.vue new file mode 100644 index 00000000..54d51f44 --- /dev/null +++ b/src/views/home/work.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/src/views/message/guideOption/form.vue b/src/views/message/guideOption/form.vue index 19a2e430..a8b3f619 100644 --- a/src/views/message/guideOption/form.vue +++ b/src/views/message/guideOption/form.vue @@ -15,6 +15,15 @@ + + + + + + + + + @@ -74,6 +83,7 @@ const form = reactive({ id: '', value: '', label: '', + isDefault: false, content: '' as string, keywordList: [{}] as any[], }); @@ -86,6 +96,9 @@ const dataRules = ref({ label: [ { required: true, message: '请输入字典标签', trigger: 'blur' }, ], + isDefault: [ + { required: true, message: '请选择是否默认引导项', trigger: 'change' }, + ], }) const addKeyword = () => { diff --git a/src/views/message/onlineMessage/consultList.vue b/src/views/message/onlineMessage/consultList.vue index 043df6a0..5c6547bf 100644 --- a/src/views/message/onlineMessage/consultList.vue +++ b/src/views/message/onlineMessage/consultList.vue @@ -1,17 +1,34 @@ @@ -21,6 +38,7 @@ import { ref } from 'vue'; import { getConsultList, setSysReadByConsultHash } from '/@/api/message/consultRecord'; import { currentConsult } from '/@/stores/message/consult'; import dayjs from 'dayjs'; +import other from '/@/utils/other'; import isToday from 'dayjs/plugin/isToday'; import isYesterday from 'dayjs/plugin/isYesterday'; dayjs.extend(isToday); @@ -30,57 +48,16 @@ const consult = currentConsult(); const query = ref({}); -const getCurrentMessage = (item: any) => { - const { currentMessage, currentMessageType } = item; - // 处理空消息情况 - if (!currentMessage) { - return '[空消息]'; - } - try { - switch (currentMessageType) { - case 'text': - // 清理 HTML 标签(包括自闭合标签和嵌套标签) - return currentMessage.replace(/<[^>]*>?/g, '').trim() || '[...]'; - - case 'image': - return '[图片]'; - case 'guide': - return '[系统引导]'; - case 'file': - // 提取文件名,处理类似 report.pdf 的情况 - const fileName = currentMessage.replace(/<.*?>/g, '') || '未知文件'; - return `[文件] ${fileName}`; - - case 'voice': - return '[语音]'; - - case 'video': - return '[视频]'; - - case 'location': - return '[位置]'; - - // 处理富媒体卡片等复合类型 - case 'richText': - const textContent = currentMessage.replace(/<[^>]*>/g, ''); - return textContent ? textContent.substring(0, 50) + '...' : '[富文本内容]'; - - default: - // 自动检测处理未知类型 - if (typeof currentMessage === 'string') { - if (//.test(currentMessage)) { - return '[内嵌图片]'; - } - return currentMessage.replace(/<[^>]*>?/g, '').trim(); - } - return '[未知消息类型]'; - } - } catch (e) { - console.error('消息解析错误:', e); - return '[消息内容解析失败]'; + +const getRoleTagClass = (param: string) => { + if (param.includes('consultant_to_staff')) { + return "role-tag-13"; + } else { + return "role-tag-7"; } }; + const getTimeText = (time: string) => { //2025-05-21 11:06:57 const targetDate = dayjs(time); @@ -143,76 +120,122 @@ defineExpose({}); + +/* ===== 消息预览样式 ===== */ +.message-preview { + width: 100%; + overflow: hidden; + + .preview-text { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + /* 限制显示行数 */ + overflow: hidden; + text-overflow: ellipsis; + font-size: 14px; + color: #666; + line-height: 1.5; + max-height: 3em; + /* = 2 * line-height */ + } +} + +.role-tag {} + +.role-tag-7 { + margin-left: -7px; +} + +.role-tag-13 { + margin-left: -13px; +} + \ No newline at end of file diff --git a/src/views/message/onlineMessage/consultMain.vue b/src/views/message/onlineMessage/consultMain.vue index 48cfe6cb..67a7526e 100644 --- a/src/views/message/onlineMessage/consultMain.vue +++ b/src/views/message/onlineMessage/consultMain.vue @@ -118,7 +118,7 @@ defineExpose({}); .consult-main { .consult-header { padding: 0; - height: 80px; + height: 85px; border: 1px solid #18257aee; width: 100%; margin-bottom: 5px; diff --git a/src/views/message/onlineMessage/content.vue b/src/views/message/onlineMessage/content.vue index 31c316a1..b47e3809 100644 --- a/src/views/message/onlineMessage/content.vue +++ b/src/views/message/onlineMessage/content.vue @@ -3,19 +3,15 @@
向上滚动加载更多内容
diff --git a/src/views/platform/questionTable/assessmentPublish.vue b/src/views/platform/questionTable/assessmentPublish.vue index b2c938f4..16897cca 100644 --- a/src/views/platform/questionTable/assessmentPublish.vue +++ b/src/views/platform/questionTable/assessmentPublish.vue @@ -261,6 +261,10 @@ const openDialog = (row: any) => { // 获取questionTable信息 if (row.id) { form.id = row.id; + form.pay = row.pay; + if (form.pay && row.mainGoods) { + form.recommendPrice = row.mainGoods.actualPrice; + } getPublishData(row.id); if (row.schoolMake) { form.publishSchool = true; diff --git a/src/views/platform/questionTable/form.vue b/src/views/platform/questionTable/form.vue index 05c88aa7..8e3011d2 100644 --- a/src/views/platform/questionTable/form.vue +++ b/src/views/platform/questionTable/form.vue @@ -1,6 +1,14 @@ + + + + +>>>>>>> master diff --git a/src/components/echartsLine/index.vue b/src/components/echartsLine/index.vue index 5ec5141c..2f06a57d 100644 --- a/src/components/echartsLine/index.vue +++ b/src/components/echartsLine/index.vue @@ -1,4 +1,5 @@ - \ No newline at end of file + +======= +
+
+ 折线图数据 +
{{ data.name }}
+
+ + + + + +>>>>>>> master diff --git a/src/components/echartsRadar/index.vue b/src/components/echartsRadar/index.vue index 3401ff5e..f4ad03c0 100644 --- a/src/components/echartsRadar/index.vue +++ b/src/components/echartsRadar/index.vue @@ -1,4 +1,5 @@ - \ No newline at end of file + +======= +
+
+ 销售数据图表 +
{{ data.name }}
+
+ + + + + +>>>>>>> master diff --git a/src/components/gauge/index.vue b/src/components/gauge/index.vue new file mode 100644 index 00000000..ff98c5e3 --- /dev/null +++ b/src/components/gauge/index.vue @@ -0,0 +1,247 @@ + + + + + diff --git a/src/components/printResult/index.vue b/src/components/printResult/index.vue index 3fa6a2cc..b06d1803 100644 --- a/src/components/printResult/index.vue +++ b/src/components/printResult/index.vue @@ -1,463 +1,650 @@ diff --git a/src/components/progressCard/index.vue b/src/components/progressCard/index.vue index 223fb8c4..3cd61229 100644 --- a/src/components/progressCard/index.vue +++ b/src/components/progressCard/index.vue @@ -1,4 +1,5 @@ + + +>>>>>>> master diff --git a/src/components/userbox/index.vue b/src/components/userbox/index.vue index 3cc83948..6297433e 100644 --- a/src/components/userbox/index.vue +++ b/src/components/userbox/index.vue @@ -1,12 +1,7 @@ + + + @@ -289,6 +465,9 @@ const rangeType = ref(1); const isAllScoreExpression = ref(false); const handleAddItem = (indicatorItem: any, index: any) => { + if (!index) { + index = indicatorItem.indicatorItemList.length; + } // 确保每次新增都有完整响应式结构 const newItem = reactive({ rangeStart: '', @@ -297,14 +476,38 @@ const handleAddItem = (indicatorItem: any, index: any) => { scoreExpression: indicatorItem.scoreExpression, // 添加其他必要字段 indicatorItemList: reactive([]), + sorting: 99, }); // 在指定索引后插入新元素 indicatorItem.indicatorItemList.splice(index + 1, 0, newItem); //强制vue重新渲染 - forceRerender(); + // forceRerender(); +}; + +const hasItemScoreRange = (chartType: string) => { + return chartType === '8' || chartType === '1' || chartType === '11' || chartType === '2' || chartType === '21'; +}; + +const indicatorItemSortingChange = (indicatorItem: any) => { + indicatorItem.indicatorItemList.sort((a: any, b: any) => a.sorting - b.sorting); }; +const sortingChange = () => { + //记录排序前activeName + let oldActiveName = activeName.value; + + let oldIndicatorName = props.form.indicatorList[oldActiveName].name; + //对form.attrIndicatorList以sorting进行排序 + props.form.indicatorList.sort((a: any, b: any) => a.sorting - b.sorting); + + //查找新的activeName是第几个 + let newActiveName = props.form.indicatorList.findIndex((item: any) => item.name === oldIndicatorName); + if (newActiveName === -1) { + return; + } + activeName.value = newActiveName; +}; //刷新标准类型 const refreshIndicators = (newActiveName: any = 0) => { getAssessmentIndicators(props.form.id).then((res) => { @@ -414,6 +617,10 @@ const resetCurrentRange = (item: any) => { const handleRemoveItem = (list: any, index: any) => { // 使用 splice 保证响应式 list.splice(index, 1); + //如果删除的是最后一个,则添加一个空对象 + if (list.length === 0) { + list.push({}); + } }; const handleScoreExpressionChange = (isAllScoreExpression: boolean) => { @@ -518,4 +725,29 @@ defineExpose({ diff --git a/src/views/platform/questionTable/info.vue b/src/views/platform/questionTable/info.vue index aabd8d20..e32450a3 100644 --- a/src/views/platform/questionTable/info.vue +++ b/src/views/platform/questionTable/info.vue @@ -8,12 +8,7 @@ - - - - - - + @@ -58,7 +53,16 @@ - + + + + + + + + + + + - - - - - - - - - + + -
+ + + + + + + + + + + + + + + + + + + + + + + + + - + - +
- + @@ -104,8 +143,12 @@ import { useMessage, useMessageBox } from '/@/hooks/message'; import request from '/@/utils/request'; import other from '/@/utils/other'; import { ElMessage } from 'element-plus'; +import { t } from '@wangeditor/editor'; const Indicators = defineAsyncComponent(() => import('./indicators.vue')); +const ScoreIndicators = defineAsyncComponent(() => import('./scoreIndicators.vue')); +const formDialog = defineAsyncComponent(() => import('./questionOption.vue')); const indicatorsRef = ref(); +const attrIndicatorsRef = ref(); const state: BasicTableProps = reactive({ queryForm: {}, @@ -115,7 +158,10 @@ const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, do const questionTableId = ref(''); +const activeName = ref('first') + const excelUploadRef = ref(); +const formDialogRef = ref(); const props = defineProps({ form: { type: Object, @@ -142,6 +188,8 @@ const tempDialogVisible = ref(false); const tempDialogOpen = () => { tempDialogVisible.value = true; }; + + const tempDown = () => { request({ url: '/platform/questionTable/createExcelTemplate', @@ -158,6 +206,7 @@ const tempDown = () => { const formRef = ref(); const refreshIndicators = () => { indicatorsRef.value.refreshIndicators(); + attrIndicatorsRef.value.refreshIndicators(); //新增获取所有因子 refreshIndicatorList(); }; @@ -167,10 +216,62 @@ const refreshIndicatorList = async () => { indicatorList.value = data; }; +interface MathLable { + name: string; + tips: string; +} +let mathListData: MathLable[] = [ + { + name: '+', + tips: '加法', + }, + { + name: '-', + tips: '减法', + }, + { + name: '*', + tips: '乘法', + }, + { + name: '/', + tips: '除法', + }, + { + name: 'avg', + tips: '计算平均分,返回数值,里面必须是因子参数"${因子X}",不能是其他内容', + }, + { + name: 'sum', + tips: '求和方法,返回数值,里面必须是因子参数"${因子X}",不能是其他内容', + }, + { + name: 'min', + tips: '计算最小值,返回数值,里面必须是因子参数"${因子X}",不能是其他内容', + }, + { + name: 'max', + tips: '计算最大值,返回数值,里面必须是因子参数"${因子X}",不能是其他内容', + }, + { + name: 'and', + tips: '且条件,连接左右两边表达式,左右两边表达式必须返回true和false,而不能是返回数值结果', + }, + { + name: 'or', + tips: '或条件,连接左右两边表达式,左右两边表达式必须返回true和false,而不能是返回数值结果', + }, + { + name: 'FindMath', + tips: '特殊函数,返回数值,计算数组参数中符合判断条件的数量,例:"FindMath(sum(${同伴信任}),sum(${同伴沟通}),sum(${同伴疏离}),15,ge) >= 2",其中15代表判断值,ge代表判断条件,ge作为最后一个参数可以不传,默认就是ge,此外还支持gt,lt,le,ne,eq', + } +]; +const mathList = ref([...mathListData]); + const handleUploadSuccess = (responseData: any) => { // 保留事件参数 getDataList(); // 原刷新逻辑 - refreshIndicators(); // 新增逻辑 + // refreshIndicators(); // 新增逻辑 console.log('上传响应数据:', responseData); // 可访问事件参数 }; @@ -178,29 +279,25 @@ onMounted(() => { state.pagination.size = 7; }); -const copyIndicator = async (text: string) => { - try { - // 现代浏览器方案 - if (navigator.clipboard?.writeText) { - await navigator.clipboard.writeText(text); - ElMessage.success('复制成功'); - } - // 兼容旧版浏览器方案 - else { - const textarea = document.createElement('textarea'); - textarea.value = text; - textarea.style.position = 'fixed'; - document.body.appendChild(textarea); - textarea.select(); - document.execCommand('copy'); - document.body.removeChild(textarea); - ElMessage.success('复制成功'); - } - } catch (err) { - ElMessage.error('复制失败,请手动复制'); +const copyMath = async (text: string) => { + if (text.length == 1) { + return; } + text = text + "()"; + other.copy(text); +}; + +const copyQuestionIndex = async (text: string) => { + text = "!<" + text + ">"; + other.copy(text); +}; + +const copyIndicator = async (text: string) => { + text = "${" + text + "}"; + other.copy(text); }; + // 删除操作 const handleDelete = async (ids: string[]) => { try { @@ -235,14 +332,27 @@ defineExpose({ .layout-padding { width: 100%; } + .indicators-container { margin-top: 15px; } + .indicator-desc { margin-left: 50px; color: rgba(90, 90, 105, 0.571); } + .indicator-tag { margin-left: 10px; } + +.indicator-math-desc { + margin-top: 5px; + margin-left: 105px; + color: rgba(90, 90, 105, 0.571); +} + +.indicator-math-tag { + margin-left: 10px; +} diff --git a/src/views/platform/questionTable/questionOption.vue b/src/views/platform/questionTable/questionOption.vue new file mode 100644 index 00000000..fe9d11f4 --- /dev/null +++ b/src/views/platform/questionTable/questionOption.vue @@ -0,0 +1,197 @@ + + + + diff --git a/src/views/platform/questionTable/reportIndicators.vue b/src/views/platform/questionTable/reportIndicators.vue new file mode 100644 index 00000000..9c90d8bf --- /dev/null +++ b/src/views/platform/questionTable/reportIndicators.vue @@ -0,0 +1,510 @@ + + + + + diff --git a/src/views/platform/questionTable/scoreIndicators.vue b/src/views/platform/questionTable/scoreIndicators.vue new file mode 100644 index 00000000..d1d325ff --- /dev/null +++ b/src/views/platform/questionTable/scoreIndicators.vue @@ -0,0 +1,402 @@ + + + + + diff --git a/src/views/platform/remark/form.vue b/src/views/platform/remark/form.vue index 197f3027..a546a6a3 100644 --- a/src/views/platform/remark/form.vue +++ b/src/views/platform/remark/form.vue @@ -23,25 +23,91 @@ - - + + + + + + + + + - - + + + + + + + + + + + + - - + + + + + @@ -61,6 +127,11 @@ import { useDict } from '/@/hooks/dict'; import { useMessage } from '/@/hooks/message'; import { getObj, addObj, putObj, validateExist, getGroupList } from '/@/api/platform/remark'; import { rule } from '/@/utils/validate'; +import { fetchList as getAssessmentList } from '/@/api/platform/questionTable'; +import { fetchList as getSeriesList } from '/@/api/course/series'; +import { fetchList as getConsultantList } from '/@/api/consultant/consultant'; +import { fetchList as getArticleList } from '/@/api/platform/platformArticle'; + const emit = defineEmits(['refresh']); // 定义变量内容 @@ -68,18 +139,33 @@ const dataFormRef = ref(); const visible = ref(false); const loading = ref(false); // 定义字典 - +const pageUrl = reactive({ + assessment: "/psychometricsPages/scaleIntroduce/index?", + series: "/famousTeacherPages/worksDetils/index?", + consultant: "/servicePages/consultantDetils/index?", + article: "/famousTeacherPages/developDetils/index?" +}) // 提交表单数据 const form = reactive({ id: '', label: '', - type: 1, + contentType: 1, content: '', version: '', + sorting: 99, + urlType: 1, + isJump: 0, + url: '', remark: '', group: '', }); +const handleIsJumpChange = () => { + if (form.isJump == 0) { + form.url = ''; + } +}; + const groupOptions = ref([]); const getGroupOptions = async () => { @@ -89,9 +175,9 @@ const getGroupOptions = async () => { const handleTypeChange = () => { //根据不同类型,调取不同数据 - if (form.type == 1) { + if (form.contentType == 1) { // form.content = ''; - } else if (form.type == 2) { + } else if (form.contentType == 2) { form.content = ''; } }; @@ -104,6 +190,8 @@ const dataRules = ref({ ], content: [{ required: true, message: '请输入内容', trigger: 'blur' }], version: [{ required: true, message: '请输入说明', trigger: 'blur' }], + contentType: [{ required: true, message: '请选择内容类型', trigger: 'blur' }], + sorting: [{ required: true, message: '请输入排序', trigger: 'blur' }], }); // 打开弹窗 @@ -125,7 +213,7 @@ const openDialog = (id: string) => { // 提交 const onSubmit = async () => { - const valid = await dataFormRef.value.validate().catch(() => {}); + const valid = await dataFormRef.value.validate().catch(() => { }); if (!valid) return false; try { @@ -148,6 +236,104 @@ const convertToArrayFormat = (obj: any) => { })); }; +////////////////////////////////////////////////////////////////////////// +const articleOptions = ref([]); +const getArticleOptions = async () => { + const res = await getArticleList({ size: 1000 }); + return res.data.records.filter((item: any) => item.publishStatus == 1); +}; +const article = reactive({ + id: '', +}); +const articleChange = () => { + form.url = pageUrl.article + "id=" + article.id; +}; +const consultantOptions = ref([]); +const getConsultantOptions = async () => { + const res = await getConsultantList({ size: 1000 }); + return res.data.records; +}; +const consultant = reactive({ + id: '', +}); +const consultantChange = () => { + form.url = pageUrl.consultant + "id=" + consultant.id; +}; +const seriesChange = () => { + let seriesDto = seriesOptions.value.find((item: any) => item.id == series.id); + series.title = seriesDto.title; + series.teacherId = seriesDto.teacherId; + + form.url = pageUrl.series + "id=" + series.id + "&teacherId=" + series.teacherId + "&title=" + series.title; +}; +const seriesOptions = ref([]); +const series = reactive({ + id: '', + teacherId: '', + title: '', +}); +const getSeriesOptions = async () => { + const res = await getSeriesList({ size: 1000 }); + return res.data.records; +}; + +const assessmentChange = () => { + form.url = pageUrl.assessment + "id=" + assessment.id; +}; +const assessment = reactive({ + id: '', +}); +const assessmentOptions = ref([]); +const getAssessmentOptions = async () => { + const res = await getAssessmentList({ size: 1000 }); + //过滤掉没有publishId的 + return res.data.records.filter((item: any) => item.publishId); +}; +const handleUrlTypeChange = async () => { + if (form.urlType == 1) { + // + } + else if (form.urlType == 2) { + assessmentOptions.value = await getAssessmentOptions(); + } + else if (form.urlType == 3) { + seriesOptions.value = await getSeriesOptions(); + } + else if (form.urlType == 4) { + consultantOptions.value = await getConsultantOptions(); + } + else if (form.urlType == 5) { + articleOptions.value = await getArticleOptions(); + } +}; +///////////////////////////////////////////////////////////////////////////////// +const setUrlType = () => { + if (form.url.includes(pageUrl.assessment)) { + form.urlType = 2; + assessment.id = form.url.split('id=')[1]; + } + else if (form.url.includes(pageUrl.series)) { + form.urlType = 3; + series.id = form.url.split('id=')[1] + series.id = series.id.substring(0, series.id.indexOf('&')); + series.teacherId = form.url.split('teacherId=')[1]; + series.teacherId = series.teacherId.substring(0, series.teacherId.indexOf('&')); + series.title = form.url.split('title=')[1]; + series.title = series.title.substring(series.teacherId.indexOf('&')); + } + else if (form.url.includes(pageUrl.consultant)) { + form.urlType = 4; + consultant.id = form.url.split('id=')[1]; + } + else if (form.url.includes(pageUrl.article)) { + form.urlType = 5; + article.id = form.url.split('id=')[1]; + } + else { + form.urlType = 1; + } +}; + // 初始化表单数据 const getRemarkData = (id: string) => { // 获取数据 @@ -155,12 +341,10 @@ const getRemarkData = (id: string) => { getObj({ id: id }) .then((res: any) => { Object.assign(form, res.data[0]); - if (form.content.startsWith('<')) { - form.type = 1; - } else if (form.content.startsWith('http')) { - form.type = 3; - } else { - form.type = 2; + if (form.url) { + form.isJump = 1; + setUrlType(); + handleUrlTypeChange(); } }) .finally(() => { diff --git a/src/views/platform/remark/index.vue b/src/views/platform/remark/index.vue index 925326ed..ea56f375 100644 --- a/src/views/platform/remark/index.vue +++ b/src/views/platform/remark/index.vue @@ -3,9 +3,12 @@
- + + + + @@ -17,41 +20,32 @@
- + 新 增 - 导 入 - + 导 入 + 删 除 - +
- + @@ -62,13 +56,8 @@ - +
diff --git a/src/views/school/schoolInfo/form.vue b/src/views/school/schoolInfo/form.vue new file mode 100644 index 00000000..cf6ddccf --- /dev/null +++ b/src/views/school/schoolInfo/form.vue @@ -0,0 +1,283 @@ + + + + + diff --git a/src/views/school/schoolInfo/index.vue b/src/views/school/schoolInfo/index.vue new file mode 100644 index 00000000..8113e466 --- /dev/null +++ b/src/views/school/schoolInfo/index.vue @@ -0,0 +1,213 @@ + + + diff --git a/src/views/user/service/assessmentCard.vue b/src/views/user/service/assessmentCard.vue index bc45ea61..1d4c089c 100644 --- a/src/views/user/service/assessmentCard.vue +++ b/src/views/user/service/assessmentCard.vue @@ -20,26 +20,27 @@
- -
{{ recordData.updateTime }}
+ +
{{ recordData?.updateTime }}
未完成
-
{{ recordData.tableInfo.name }}
-
{{ recordData.tableInfo.shortInfo }}
+
{{ recordData?.tableInfo?.name }}
+
{{ recordData?.tableInfo?.shortInfo }}
- 打印 + 打印
- - + + diff --git a/src/views/user/service/visitingSituation.vue b/src/views/user/service/visitingSituation.vue index df83d02d..4588031e 100644 --- a/src/views/user/service/visitingSituation.vue +++ b/src/views/user/service/visitingSituation.vue @@ -44,8 +44,9 @@ import printBlank from '/@/components/printText/printBlank.vue'; import { useDict } from '/@/hooks/dict'; import { useMessage } from '/@/hooks/message'; import { putObj } from '/@/api/consultant/consultantTag'; -import { createQrCode, createWxQr, visitingSituationDetail } from '/@/api/user/user'; -import { handlePrintUtil } from '/@/utils/toolsValidate' +import { createWxQr, visitingSituationDetail } from '/@/api/user/user'; +import { createQrCode } from '/@/api/consultant/visitingSituation'; +import { handlePrintECharts } from '/@/utils/toolsValidate' const emit = defineEmits(['refresh']); const imgHisShow = ref(false) @@ -63,9 +64,9 @@ const userInfoFrom = ref({}) const handleQrcode = () => { imgHisShow.value = true; printBlankShow.value = false; - createQrCode(form.userId) + createQrCode(form.userId, form.orderId) .then((res) => { - createWxQr({ page: 'setUpPages/userInfoOne/index', scene: res.data }) + createWxQr({ page: 'setUpPages/userInfoVisitingSituation/index', scene: res.data }) .then(async (res) => { imgUrl.value = res.data; }) @@ -90,7 +91,8 @@ const handleBntsm = () => { const form = reactive({ id: '', name: '', - userId: '' + userId: '', + orderId: "", }); const rowObj = ref({}); @@ -121,6 +123,7 @@ const openDialog = (rowObj: any) => { visible.value = true; form.id = rowObj.id; form.userId = rowObj.userId; + form.orderId = rowObj.id; userInfoFrom.value = rowObj; visitingSituationDetailFn(form.id); }; @@ -128,7 +131,7 @@ const openDialog = (rowObj: any) => { // 提交 const onSubmit = async () => { if (printBlankShow.value) { - handlePrintUtil(printBlankRef.value) + handlePrintECharts(printBlankRef.value) } visible.value = false // const valid = await dataFormRef.value.validate().catch(() => { }); diff --git a/src/views/user/user/add.vue b/src/views/user/user/add.vue index e27b779a..c99769e8 100644 --- a/src/views/user/user/add.vue +++ b/src/views/user/user/add.vue @@ -5,7 +5,8 @@ - + @@ -97,7 +98,7 @@ const openDialog = (rowObj: any) => { // 提交 const onSubmit = async () => { - const valid = await dataFormRef.value.validate().catch(() => {}); + const valid = await dataFormRef.value.validate().catch(() => { }); if (!valid) return false; try { @@ -107,6 +108,12 @@ const onSubmit = async () => { visible.value = false; emit('refresh'); } catch (err: any) { + if (err.msg === '手机号已存在!') { + useMessage().error("手机号已存在!已将用户排序到最前"); + visible.value = false; + emit('refresh'); + return; + } useMessage().error(err.msg); } finally { loading.value = false; diff --git a/src/views/user/user/addFollow.vue b/src/views/user/user/addFollow.vue index 44800c99..03b4e45d 100644 --- a/src/views/user/user/addFollow.vue +++ b/src/views/user/user/addFollow.vue @@ -5,7 +5,8 @@ - + @@ -20,19 +21,14 @@
- + - + @@ -115,7 +111,7 @@ const openDialog = (userId: any) => { // 提交 const onSubmit = async () => { - const valid = await dataFormRef.value.validate().catch(() => {}); + const valid = await dataFormRef.value.validate().catch(() => { }); if (!valid) return false; try { diff --git a/src/views/user/user/index.vue b/src/views/user/user/index.vue index bd863259..9e219865 100644 --- a/src/views/user/user/index.vue +++ b/src/views/user/user/index.vue @@ -87,14 +87,16 @@ 跟进记录 - {{ item.follow?.createTime }}{{ item.follow?.channel }}:{{ item.follow?.initiator }}-{{ + {{ item.follow?.createTime }}    {{ item.follow?.channel }}:{{ + item.follow?.initiator + }} - {{ item.follow?.followUserName }} {{ item.follow?.remark }} - - - + 全部记录 -- Gitee From 0d24652ab94ae688eb0ed9a0b50877d952d14c25 Mon Sep 17 00:00:00 2001 From: AC <1196417540@qq.com> Date: Mon, 1 Sep 2025 16:32:23 +0800 Subject: [PATCH 064/141] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/school/schoolPsychologicalTag.ts | 100 +++++++++++ src/api/school/schoolReferralGency.ts | 100 +++++++++++ src/assets/report/assessment.svg | 1 + src/assets/report/report.svg | 1 + src/assets/report/score.svg | 1 + src/assets/report/user_info.svg | 1 + src/assets/report/woman.svg | 1 + .../school/schoolPsychologicalTag/form.vue | 153 +++++++++++++++++ .../school/schoolPsychologicalTag/index.vue | 133 +++++++++++++++ src/views/school/schoolReferralGency/form.vue | 160 ++++++++++++++++++ .../school/schoolReferralGency/index.vue | 134 +++++++++++++++ 11 files changed, 785 insertions(+) create mode 100644 src/api/school/schoolPsychologicalTag.ts create mode 100644 src/api/school/schoolReferralGency.ts create mode 100644 src/assets/report/assessment.svg create mode 100644 src/assets/report/report.svg create mode 100644 src/assets/report/score.svg create mode 100644 src/assets/report/user_info.svg create mode 100644 src/assets/report/woman.svg create mode 100644 src/views/school/schoolPsychologicalTag/form.vue create mode 100644 src/views/school/schoolPsychologicalTag/index.vue create mode 100644 src/views/school/schoolReferralGency/form.vue create mode 100644 src/views/school/schoolReferralGency/index.vue diff --git a/src/api/school/schoolPsychologicalTag.ts b/src/api/school/schoolPsychologicalTag.ts new file mode 100644 index 00000000..1dcbddee --- /dev/null +++ b/src/api/school/schoolPsychologicalTag.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/school/schoolPsychologicalTag/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/school/schoolPsychologicalTag', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/school/schoolPsychologicalTag/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/school/schoolPsychologicalTag', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/school/schoolPsychologicalTag', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/api/school/schoolReferralGency.ts b/src/api/school/schoolReferralGency.ts new file mode 100644 index 00000000..a64bc038 --- /dev/null +++ b/src/api/school/schoolReferralGency.ts @@ -0,0 +1,100 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/school/schoolReferralGency/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/school/schoolReferralGency', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/school/schoolReferralGency/details', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/school/schoolReferralGency', + method: 'delete', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/school/schoolReferralGency', + method: 'put', + data: obj + }) +} + +/** + * 验证某个字段的值是否已经存在。 + * @param {Object} rule - 验证规则对象。 + * @param {*} value - 要验证的值。 + * @param {Function} callback - 验证完成后的回调函数。 + * @param {boolean} isEdit - 当前操作是否为编辑。 + * + * 示例用法: + * 字段名: [ + * { + * validator: (rule, value, callback) => { + * validateExist(rule, value, callback, form.id !== ''); + * }, + * trigger: 'blur', + * }, + * ] + */ +export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) { + if (isEdit) { + return callback(); + } + + getObj({ [rule.field]: value }).then((response) => { + const result = response.data; + if (result !== null && result.length > 0) { + callback(new Error('数据已经存在')); + } else { + callback(); + } + }); +} + + diff --git a/src/assets/report/assessment.svg b/src/assets/report/assessment.svg new file mode 100644 index 00000000..0ec5aaae --- /dev/null +++ b/src/assets/report/assessment.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/report/report.svg b/src/assets/report/report.svg new file mode 100644 index 00000000..8f1bd0dc --- /dev/null +++ b/src/assets/report/report.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/report/score.svg b/src/assets/report/score.svg new file mode 100644 index 00000000..37b36204 --- /dev/null +++ b/src/assets/report/score.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/report/user_info.svg b/src/assets/report/user_info.svg new file mode 100644 index 00000000..157de349 --- /dev/null +++ b/src/assets/report/user_info.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/report/woman.svg b/src/assets/report/woman.svg new file mode 100644 index 00000000..b39fdb25 --- /dev/null +++ b/src/assets/report/woman.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/views/school/schoolPsychologicalTag/form.vue b/src/views/school/schoolPsychologicalTag/form.vue new file mode 100644 index 00000000..f3502dd0 --- /dev/null +++ b/src/views/school/schoolPsychologicalTag/form.vue @@ -0,0 +1,153 @@ + + + diff --git a/src/views/school/schoolPsychologicalTag/index.vue b/src/views/school/schoolPsychologicalTag/index.vue new file mode 100644 index 00000000..29c00870 --- /dev/null +++ b/src/views/school/schoolPsychologicalTag/index.vue @@ -0,0 +1,133 @@ + + + diff --git a/src/views/school/schoolReferralGency/form.vue b/src/views/school/schoolReferralGency/form.vue new file mode 100644 index 00000000..9e2f42b7 --- /dev/null +++ b/src/views/school/schoolReferralGency/form.vue @@ -0,0 +1,160 @@ + + + diff --git a/src/views/school/schoolReferralGency/index.vue b/src/views/school/schoolReferralGency/index.vue new file mode 100644 index 00000000..32b9f05d --- /dev/null +++ b/src/views/school/schoolReferralGency/index.vue @@ -0,0 +1,134 @@ + + + -- Gitee From 61f063f8a06803be5acb76b92bbfc6a4f092268f Mon Sep 17 00:00:00 2001 From: zq Date: Mon, 1 Sep 2025 17:16:37 +0800 Subject: [PATCH 065/141] fix --- .env.development | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.env.development b/.env.development index 8cad6820..3b190891 100644 --- a/.env.development +++ b/.env.development @@ -8,4 +8,7 @@ VITE_OPEN = true ENV = 'development' # ADMIN 服务地址 -VITE_ADMIN_PROXY_PATH = http://127.0.0.1:9999 +VITE_ADMIN_PROXY_PATH = http://192.168.110.170:9999 + +# 代码生成服务地址 (单体架构有效) +VITE_GEN_PROXY_PATH = http://127.0.0.1:5003 -- Gitee From d5737fbdeff0f4e0ff08a9b5c65072b9fd940d75 Mon Sep 17 00:00:00 2001 From: zq Date: Tue, 2 Sep 2025 15:27:54 +0800 Subject: [PATCH 066/141] fix --- src/api/school/schoolMinistryEducation.ts | 13 + src/api/school/schoolPsychologicalTag.ts | 53 +++- src/api/school/schoolReferralGency.ts | 23 +- src/views/school/schoolClassInfo/form.vue | 3 +- .../school/schoolMinistryEducation/form.vue | 10 +- .../school/schoolMinistryEducation/index.vue | 28 +- .../school/schoolPsychologicalTag/form.vue | 293 ++++++++++++------ .../school/schoolPsychologicalTag/index.vue | 69 +++-- src/views/school/schoolReferralGency/form.vue | 212 +++++++------ .../school/schoolReferralGency/index.vue | 89 ++++-- src/views/school/schoolUser/index.vue | 3 +- 11 files changed, 520 insertions(+), 276 deletions(-) diff --git a/src/api/school/schoolMinistryEducation.ts b/src/api/school/schoolMinistryEducation.ts index 9c933ecf..f0e9e99f 100644 --- a/src/api/school/schoolMinistryEducation.ts +++ b/src/api/school/schoolMinistryEducation.ts @@ -39,6 +39,19 @@ export function getObj(obj?: Object) { }) } +/** + * 状态修改 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function updateStatus(obj?: Object) { + return request({ + url: '/school/schoolMinistryEducation/updateStatus', + method: 'post', + data: obj + }) +} + /** * 根据 ID 删除对象。 * @param {Object} [ids] - 要删除的对象 ID。 diff --git a/src/api/school/schoolPsychologicalTag.ts b/src/api/school/schoolPsychologicalTag.ts index 1dcbddee..4b7fa4a8 100644 --- a/src/api/school/schoolPsychologicalTag.ts +++ b/src/api/school/schoolPsychologicalTag.ts @@ -7,20 +7,19 @@ import request from "/@/utils/request" */ export function fetchList(query?: Object) { return request({ - url: '/school/schoolPsychologicalTag/page', + url: '/school/schoolPsychologicalTag/getPageData', method: 'get', params: query }) } - /** - * 添加一个新对象。 + * 添加一个新对象---up。 * @param {Object} [obj] - 要添加的对象。 * @returns {Promise} 请求的 Promise 对象 (true/false)。 */ export function addObj(obj?: Object) { return request({ - url: '/school/schoolPsychologicalTag', + url: '/school/schoolPsychologicalTag/saveData', method: 'post', data: obj }) @@ -39,6 +38,45 @@ export function getObj(obj?: Object) { }) } +/** + * 学生心理标签 获取分类下拉框数据 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getTypeList(obj?: Object) { + return request({ + url: '/school/schoolPsychologicalTag/getTypeList', + method: 'get', + params: obj + }) +} + +/** + * 学生心理标签 获取分组.分组下拉框数据 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getGroupList(obj?: Object) { + return request({ + url: '/school/schoolPsychologicalTag/getGroupList', + method: 'get', + params: obj + }) +} + +/** + * 学生心理标签 获取列表数据 + * @param {Object} [obj] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象数组。 + */ +export function getTagList(obj?: Object) { + return request({ + url: '/school/schoolPsychologicalTag/getTagList', + method: 'get', + params: obj + }) +} + /** * 根据 ID 删除对象。 * @param {Object} [ids] - 要删除的对象 ID。 @@ -53,18 +91,17 @@ export function delObjs(ids?: Object) { } /** - * 更新一个已存在的对象。 + * 更新一个已存在的对象---up。 * @param {Object} [obj] - 要更新的对象。 * @returns {Promise} 请求的 Promise 对象。 */ export function putObj(obj?: Object) { return request({ - url: '/school/schoolPsychologicalTag', - method: 'put', + url: '/school/schoolPsychologicalTag/saveData', + method: 'post', data: obj }) } - /** * 验证某个字段的值是否已经存在。 * @param {Object} rule - 验证规则对象。 diff --git a/src/api/school/schoolReferralGency.ts b/src/api/school/schoolReferralGency.ts index a64bc038..64bddccf 100644 --- a/src/api/school/schoolReferralGency.ts +++ b/src/api/school/schoolReferralGency.ts @@ -7,7 +7,7 @@ import request from "/@/utils/request" */ export function fetchList(query?: Object) { return request({ - url: '/school/schoolReferralGency/page', + url: '/school/schoolReferralAgency/page', method: 'get', params: query }) @@ -20,7 +20,20 @@ export function fetchList(query?: Object) { */ export function addObj(obj?: Object) { return request({ - url: '/school/schoolReferralGency', + url: '/school/schoolReferralAgency', + method: 'post', + data: obj + }) +} + +/** + * 转介机构状态修改 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function updateStatus(obj?: Object) { + return request({ + url: '/school/schoolReferralAgency/updateStatus', method: 'post', data: obj }) @@ -33,7 +46,7 @@ export function addObj(obj?: Object) { */ export function getObj(obj?: Object) { return request({ - url: '/school/schoolReferralGency/details', + url: '/school/schoolReferralAgency/details', method: 'get', params: obj }) @@ -46,7 +59,7 @@ export function getObj(obj?: Object) { */ export function delObjs(ids?: Object) { return request({ - url: '/school/schoolReferralGency', + url: '/school/schoolReferralAgency', method: 'delete', data: ids }) @@ -59,7 +72,7 @@ export function delObjs(ids?: Object) { */ export function putObj(obj?: Object) { return request({ - url: '/school/schoolReferralGency', + url: '/school/schoolReferralAgency', method: 'put', data: obj }) diff --git a/src/views/school/schoolClassInfo/form.vue b/src/views/school/schoolClassInfo/form.vue index 7b6efb11..590d98fe 100644 --- a/src/views/school/schoolClassInfo/form.vue +++ b/src/views/school/schoolClassInfo/form.vue @@ -53,8 +53,7 @@ diff --git a/src/views/school/schoolMinistryEducation/form.vue b/src/views/school/schoolMinistryEducation/form.vue index 5959eca1..8ac2f3e6 100644 --- a/src/views/school/schoolMinistryEducation/form.vue +++ b/src/views/school/schoolMinistryEducation/form.vue @@ -16,7 +16,7 @@ - + @@ -124,7 +124,13 @@ const dataRules = ref({ // 打开弹窗 const openDialog = (id: string) => { visible.value = true - form.id = '' + form.id = ''; + form.adminUserId = ''; + form.adminUserName = ''; + form.province = ''; + form.city = ''; + form.region = ''; + form.regionOptions = []; // 重置表单数据 nextTick(() => { diff --git a/src/views/school/schoolMinistryEducation/index.vue b/src/views/school/schoolMinistryEducation/index.vue index fe9500cc..969ee0c7 100644 --- a/src/views/school/schoolMinistryEducation/index.vue +++ b/src/views/school/schoolMinistryEducation/index.vue @@ -26,7 +26,7 @@ - + @@ -34,17 +34,26 @@ {{ filterAddres(scope.row) }} - + + + - + @@ -64,7 +73,7 @@ + + diff --git a/src/views/school/schoolPsychologicalTag/index.vue b/src/views/school/schoolPsychologicalTag/index.vue index 29c00870..e43f7df4 100644 --- a/src/views/school/schoolPsychologicalTag/index.vue +++ b/src/views/school/schoolPsychologicalTag/index.vue @@ -7,38 +7,48 @@ v-auth="'school_schoolPsychologicalTag_add'"> 新 增 - - 导 入 - + + 导 入 + 删 除 - - - - - - - - - - + + + + + + + + + + + + @@ -49,13 +59,8 @@ - + @@ -84,6 +89,18 @@ const state: BasicTableProps = reactive({ pageList: fetchList }) +const filterColor = (num: any) => { + if (1 == num) { + return '#67C23A' + } else if (2 == num) { + return '#eebe77' + } else if (3 == num) { + return '#E6A23C' + } else if (4 == num) { + return '#F56C6C' + } +} + // table hook const { getDataList, @@ -91,7 +108,7 @@ const { sizeChangeHandle, sortChangeHandle, downBlobFile, - tableStyle + tableStyle } = useTable(state) // 清空搜索条件 diff --git a/src/views/school/schoolReferralGency/form.vue b/src/views/school/schoolReferralGency/form.vue index 9e2f42b7..7256028a 100644 --- a/src/views/school/schoolReferralGency/form.vue +++ b/src/views/school/schoolReferralGency/form.vue @@ -1,77 +1,79 @@ diff --git a/src/views/flow/flowExecution/index.vue b/src/views/flow/flowExecution/index.vue new file mode 100644 index 00000000..1ca7c882 --- /dev/null +++ b/src/views/flow/flowExecution/index.vue @@ -0,0 +1,133 @@ + + + diff --git a/src/views/flow/flowModel/form.vue b/src/views/flow/flowModel/form.vue new file mode 100644 index 00000000..07937e02 --- /dev/null +++ b/src/views/flow/flowModel/form.vue @@ -0,0 +1,160 @@ + + + diff --git a/src/views/flow/flowModel/index.vue b/src/views/flow/flowModel/index.vue new file mode 100644 index 00000000..5bd33599 --- /dev/null +++ b/src/views/flow/flowModel/index.vue @@ -0,0 +1,134 @@ + + + diff --git a/src/views/flow/flowNode/form.vue b/src/views/flow/flowNode/form.vue new file mode 100644 index 00000000..32938cae --- /dev/null +++ b/src/views/flow/flowNode/form.vue @@ -0,0 +1,202 @@ + + + diff --git a/src/views/flow/flowNode/index.vue b/src/views/flow/flowNode/index.vue new file mode 100644 index 00000000..aeca98f1 --- /dev/null +++ b/src/views/flow/flowNode/index.vue @@ -0,0 +1,140 @@ + + + diff --git a/src/views/flow/flowParam/form.vue b/src/views/flow/flowParam/form.vue new file mode 100644 index 00000000..4eeb54c7 --- /dev/null +++ b/src/views/flow/flowParam/form.vue @@ -0,0 +1,153 @@ + + + diff --git a/src/views/flow/flowParam/index.vue b/src/views/flow/flowParam/index.vue new file mode 100644 index 00000000..3afcf495 --- /dev/null +++ b/src/views/flow/flowParam/index.vue @@ -0,0 +1,133 @@ + + + diff --git a/src/views/flow/flowTask/form.vue b/src/views/flow/flowTask/form.vue new file mode 100644 index 00000000..a320015a --- /dev/null +++ b/src/views/flow/flowTask/form.vue @@ -0,0 +1,160 @@ + + + diff --git a/src/views/flow/flowTask/index.vue b/src/views/flow/flowTask/index.vue new file mode 100644 index 00000000..3f5d1183 --- /dev/null +++ b/src/views/flow/flowTask/index.vue @@ -0,0 +1,134 @@ + + + -- Gitee From f3391d43963a4e071769a09f90ce0bf1ac749423 Mon Sep 17 00:00:00 2001 From: AC <1196417540@qq.com> Date: Wed, 3 Sep 2025 10:03:45 +0800 Subject: [PATCH 068/141] =?UTF-8?q?=E5=A4=A7=E9=87=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/goods/goodsOrder.ts | 2 +- src/components/Websocket/index.vue | 2 +- src/components/echartsBar/index.vue | 20 +- src/components/printResult/index.vue | 161 +++++-- src/utils/toolsValidate.ts | 2 +- src/views/goods/goodsOrder/index.vue | 259 +++++----- src/views/platform/assessmentType/form.vue | 6 + src/views/platform/assessmentType/index.vue | 1 + .../questionTable/assessmentPublish.vue | 63 ++- src/views/platform/questionTable/index.vue | 114 +++-- .../questionTable/indicatorOption.vue | 441 +++++++++--------- .../questionTable/scoreIndicators.vue | 128 ++--- src/views/user/service/assessment.vue | 89 ++-- src/views/user/service/assessmentCard.vue | 352 +++++++------- 14 files changed, 926 insertions(+), 714 deletions(-) diff --git a/src/api/goods/goodsOrder.ts b/src/api/goods/goodsOrder.ts index fd9da295..3648ff62 100644 --- a/src/api/goods/goodsOrder.ts +++ b/src/api/goods/goodsOrder.ts @@ -7,7 +7,7 @@ import request from '/@/utils/request'; */ export function fetchList(query?: Object) { return request({ - url: '/goods/goodsOrder/page', + url: '/platform/goodsOrder/page', method: 'get', params: query, }); diff --git a/src/components/Websocket/index.vue b/src/components/Websocket/index.vue index d290220d..701241a7 100644 --- a/src/components/Websocket/index.vue +++ b/src/components/Websocket/index.vue @@ -54,7 +54,7 @@ const initWebSocket = () => { let host = window.location.host; // baseURL let baseURL = import.meta.env.VITE_API_URL; - let wsUri = `wss://${host}${baseURL}${other.adaptationUrl(props.uri)}?access_token=${token.value}&TENANT-ID=${tenant.value}`; + let wsUri = `ws://${host}${baseURL}${other.adaptationUrl(props.uri)}?access_token=${token.value}&TENANT-ID=${tenant.value}`; // 建立连接 state.webSocket = new WebSocket(wsUri); // 连接成功 diff --git a/src/components/echartsBar/index.vue b/src/components/echartsBar/index.vue index 40f7a46e..bb4dfea8 100644 --- a/src/components/echartsBar/index.vue +++ b/src/components/echartsBar/index.vue @@ -50,7 +50,7 @@ onMounted(() => { if (chartRef.value) { chartInstance.value = echarts.init(chartRef.value); renderChart(); - // window.addEventListener('resize', handleResize); + window.addEventListener('resize', handleResize); setTimeout(() => { convertToImage(); }, 1000); @@ -80,9 +80,9 @@ const renderChart = () => { // 计算图表高度 - 根据数据项数量动态调整 const itemCount = resultData.nameList?.length || 0; - chartHeight.value = Math.max(300, Math.min(800, itemCount * 60)); // 最小300px,最大800px,每项60px + chartHeight.value = Math.max(200, Math.min(800, itemCount * 40)); // 最小300px,最大800px,每项60px - let fontSize = 22; + let fontSize = 18; let yMin = props.data?.rangeStart; if (yMin === null) { yMin = 0; @@ -93,8 +93,8 @@ const renderChart = () => { } // 计算柱子宽度 - 根据数据项数量动态调整 - const barWidth = itemCount > 10 ? '40%' : '60%'; - const horizontalBarWidth = itemCount > 10 ? 20 : 30; // 横向柱状图使用固定像素值 + const barWidth = itemCount > 6 ? '30%' : '45%'; + const horizontalBarWidth = itemCount > 6 ? 18 : 28; // 横向柱状图使用固定像素值 let option = { tooltip: { @@ -153,7 +153,7 @@ const renderChart = () => { itemStyle: { color: function (params) { // 可以设置不同颜色,这里使用渐变色 - const colorList = ['#f6c374', '#e0ae65', '#c99956', '#b28447', '#9b6f38']; + const colorList = ['#2d5b5d', '#2d5b5d', '#2d5b5d', '#2d5b5d', '#2d5b5d']; return colorList[params.dataIndex % colorList.length]; }, borderRadius: [0, 4, 4, 0], // 右侧圆角 @@ -221,7 +221,7 @@ const renderChart = () => { itemStyle: { color: function (params) { // 可以设置不同颜色,这里使用渐变色 - const colorList = ['#f6c374', '#e0ae65', '#c99956', '#b28447', '#9b6f38']; + const colorList = ['#2d5b5d', '#2d5b5d', '#2d5b5d', '#2d5b5d', '#2d5b5d']; return colorList[params.dataIndex % colorList.length]; }, borderRadius: [0, 4, 4, 0], // 右侧圆角 @@ -241,7 +241,7 @@ const convertToImage = () => { try { chartImage.value = chartInstance.value.getDataURL({ type: 'png', - pixelRatio: 2, + pixelRatio: 5, backgroundColor: '#fff', }); } catch (error) { @@ -267,8 +267,8 @@ defineExpose({ display: flex; flex-direction: column; align-items: center; - padding: 35px; - margin: 15px; + padding-left: 35px; + margin-bottom: 15px; } .chart-canvas { diff --git a/src/components/printResult/index.vue b/src/components/printResult/index.vue index b06d1803..c91e00d8 100644 --- a/src/components/printResult/index.vue +++ b/src/components/printResult/index.vue @@ -18,10 +18,14 @@ -->
-
-
-
个人信息
+
+
+ + +
+
个人信息
+
-
-
-
评测答题
+
+
+ + +
+
评测答题
+
测评时间:{{ recordData.updateTime }}
答题数量:{{ questionList.length }}
@@ -97,10 +118,17 @@
-
-
-
-
测评得分
+ -
-
-
-
解析
+
+
+
+ + +
+
报告解析
+
-
-