This commit is contained in:
lcw
2026-01-28 11:18:47 +08:00
parent 57f1e2a1e5
commit c724ff9e12
78 changed files with 1001 additions and 745 deletions

2
.gitignore vendored
View File

@ -1,6 +1,6 @@
.DS_Store .DS_Store
node_modules node_modules
/dist /jcz
# local env files # local env files
.env.local .env.local

BIN
jcz.zip

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-20cb6c30"],{"0918":function(e,t,c){"use strict";c.r(t);var o=c("7a23"),n=c("6605"),s=c("5d2d");const a=e=>(Object(o["pushScopeId"])("data-v-4a004690"),e=e(),Object(o["popScopeId"])(),e),d={class:"sso-redirect-container"},r=a(()=>Object(o["createElementVNode"])("div",{class:"loading-wrapper"},[Object(o["createElementVNode"])("div",{class:"loading-text"},"正在跳转...")],-1)),i=[r];var p={__name:"sso_redirect",setup(e){const t=Object(n["c"])(),c=Object(n["d"])(),a=()=>t.query.url||"",r=()=>{const e=a(),t=Object(s["a"])("SSOTOKEN")||Object(s["a"])("token");t?e?c.push(e):c.push("/"):(Object(s["c"])("FounderUrl",e),window.location.href="http://192.168.0.231:8006/mosty-api/mosty-base/fzSsoLogin")};return Object(o["onMounted"])(()=>{r()}),(e,t)=>(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",d,i))}},b=(c("1d74"),c("d959")),u=c.n(b);const l=u()(p,[["__scopeId","data-v-4a004690"]]);t["default"]=l},"1d74":function(e,t,c){"use strict";c("95eb")},"95eb":function(e,t,c){}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

581
package-lock.json generated
View File

@ -443,11 +443,18 @@
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helper-string-parser": {
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": { "node_modules/@babel/helper-validator-identifier": {
"version": "7.18.6", "version": "7.28.5",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
"integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
"dev": true,
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
@ -505,9 +512,12 @@
} }
}, },
"node_modules/@babel/parser": { "node_modules/@babel/parser": {
"version": "7.18.9", "version": "7.28.6",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz", "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.6.tgz",
"integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==", "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==",
"dependencies": {
"@babel/types": "^7.28.6"
},
"bin": { "bin": {
"parser": "bin/babel-parser.js" "parser": "bin/babel-parser.js"
}, },
@ -1733,13 +1743,12 @@
} }
}, },
"node_modules/@babel/types": { "node_modules/@babel/types": {
"version": "7.18.9", "version": "7.28.6",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz", "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.6.tgz",
"integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==", "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==",
"dev": true,
"dependencies": { "dependencies": {
"@babel/helper-validator-identifier": "^7.18.6", "@babel/helper-string-parser": "^7.27.1",
"to-fast-properties": "^2.0.0" "@babel/helper-validator-identifier": "^7.28.5"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@ -1948,10 +1957,9 @@
} }
}, },
"node_modules/@jridgewell/sourcemap-codec": { "node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.14", "version": "1.5.5",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
"integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="
"dev": true
}, },
"node_modules/@jridgewell/trace-mapping": { "node_modules/@jridgewell/trace-mapping": {
"version": "0.3.14", "version": "0.3.14",
@ -2296,6 +2304,21 @@
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
"dev": true "dev": true
}, },
"node_modules/@types/lodash": {
"version": "4.17.23",
"resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.23.tgz",
"integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==",
"peer": true
},
"node_modules/@types/lodash-es": {
"version": "4.17.12",
"resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz",
"integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
"peer": true,
"dependencies": {
"@types/lodash": "*"
}
},
"node_modules/@types/mime": { "node_modules/@types/mime": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.0.tgz", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.0.tgz",
@ -2961,49 +2984,60 @@
"dev": true "dev": true
}, },
"node_modules/@vue/compiler-core": { "node_modules/@vue/compiler-core": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.27.tgz",
"integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==", "integrity": "sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==",
"dependencies": { "dependencies": {
"@babel/parser": "^7.16.4", "@babel/parser": "^7.28.5",
"@vue/shared": "3.2.37", "@vue/shared": "3.5.27",
"entities": "^7.0.0",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"source-map": "^0.6.1" "source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-core/node_modules/entities": {
"version": "7.0.1",
"resolved": "https://registry.npmmirror.com/entities/-/entities-7.0.1.tgz",
"integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
"engines": {
"node": ">=0.12"
},
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
} }
}, },
"node_modules/@vue/compiler-dom": { "node_modules/@vue/compiler-dom": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.27.tgz",
"integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==", "integrity": "sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==",
"dependencies": { "dependencies": {
"@vue/compiler-core": "3.2.37", "@vue/compiler-core": "3.5.27",
"@vue/shared": "3.2.37" "@vue/shared": "3.5.27"
} }
}, },
"node_modules/@vue/compiler-sfc": { "node_modules/@vue/compiler-sfc": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.27.tgz",
"integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==", "integrity": "sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ==",
"dependencies": { "dependencies": {
"@babel/parser": "^7.16.4", "@babel/parser": "^7.28.5",
"@vue/compiler-core": "3.2.37", "@vue/compiler-core": "3.5.27",
"@vue/compiler-dom": "3.2.37", "@vue/compiler-dom": "3.5.27",
"@vue/compiler-ssr": "3.2.37", "@vue/compiler-ssr": "3.5.27",
"@vue/reactivity-transform": "3.2.37", "@vue/shared": "3.5.27",
"@vue/shared": "3.2.37",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"magic-string": "^0.25.7", "magic-string": "^0.30.21",
"postcss": "^8.1.10", "postcss": "^8.5.6",
"source-map": "^0.6.1" "source-map-js": "^1.2.1"
} }
}, },
"node_modules/@vue/compiler-ssr": { "node_modules/@vue/compiler-ssr": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.27.tgz",
"integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==", "integrity": "sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw==",
"dependencies": { "dependencies": {
"@vue/compiler-dom": "3.2.37", "@vue/compiler-dom": "3.5.27",
"@vue/shared": "3.2.37" "@vue/shared": "3.5.27"
} }
}, },
"node_modules/@vue/component-compiler-utils": { "node_modules/@vue/component-compiler-utils": {
@ -3141,60 +3175,49 @@
} }
}, },
"node_modules/@vue/reactivity": { "node_modules/@vue/reactivity": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.27.tgz",
"integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", "integrity": "sha512-vvorxn2KXfJ0nBEnj4GYshSgsyMNFnIQah/wczXlsNXt+ijhugmW+PpJ2cNPe4V6jpnBcs0MhCODKllWG+nvoQ==",
"dependencies": { "dependencies": {
"@vue/shared": "3.2.37" "@vue/shared": "3.5.27"
}
},
"node_modules/@vue/reactivity-transform": {
"version": "3.2.37",
"resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz",
"integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==",
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.37",
"@vue/shared": "3.2.37",
"estree-walker": "^2.0.2",
"magic-string": "^0.25.7"
} }
}, },
"node_modules/@vue/runtime-core": { "node_modules/@vue/runtime-core": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.27.tgz",
"integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", "integrity": "sha512-fxVuX/fzgzeMPn/CLQecWeDIFNt3gQVhxM0rW02Tvp/YmZfXQgcTXlakq7IMutuZ/+Ogbn+K0oct9J3JZfyk3A==",
"dependencies": { "dependencies": {
"@vue/reactivity": "3.2.37", "@vue/reactivity": "3.5.27",
"@vue/shared": "3.2.37" "@vue/shared": "3.5.27"
} }
}, },
"node_modules/@vue/runtime-dom": { "node_modules/@vue/runtime-dom": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.27.tgz",
"integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", "integrity": "sha512-/QnLslQgYqSJ5aUmb5F0z0caZPGHRB8LEAQ1s81vHFM5CBfnun63rxhvE/scVb/j3TbBuoZwkJyiLCkBluMpeg==",
"dependencies": { "dependencies": {
"@vue/runtime-core": "3.2.37", "@vue/reactivity": "3.5.27",
"@vue/shared": "3.2.37", "@vue/runtime-core": "3.5.27",
"csstype": "^2.6.8" "@vue/shared": "3.5.27",
"csstype": "^3.2.3"
} }
}, },
"node_modules/@vue/server-renderer": { "node_modules/@vue/server-renderer": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.27.tgz",
"integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", "integrity": "sha512-qOz/5thjeP1vAFc4+BY3Nr6wxyLhpeQgAE/8dDtKo6a6xdk+L4W46HDZgNmLOBUDEkFXV3G7pRiUqxjX0/2zWA==",
"dependencies": { "dependencies": {
"@vue/compiler-ssr": "3.2.37", "@vue/compiler-ssr": "3.5.27",
"@vue/shared": "3.2.37" "@vue/shared": "3.5.27"
}, },
"peerDependencies": { "peerDependencies": {
"vue": "3.2.37" "vue": "3.5.27"
} }
}, },
"node_modules/@vue/shared": { "node_modules/@vue/shared": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.27.tgz",
"integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==" "integrity": "sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ=="
}, },
"node_modules/@vue/web-component-wrapper": { "node_modules/@vue/web-component-wrapper": {
"version": "1.3.0", "version": "1.3.0",
@ -4235,6 +4258,16 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"dev": true,
"optional": true,
"dependencies": {
"file-uri-to-path": "1.0.0"
}
},
"node_modules/birpc": { "node_modules/birpc": {
"version": "0.2.19", "version": "0.2.19",
"resolved": "https://registry.npmmirror.com/birpc/-/birpc-0.2.19.tgz", "resolved": "https://registry.npmmirror.com/birpc/-/birpc-0.2.19.tgz",
@ -6443,9 +6476,9 @@
"dev": true "dev": true
}, },
"node_modules/csstype": { "node_modules/csstype": {
"version": "2.6.20", "version": "3.2.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz",
"integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="
}, },
"node_modules/cyclist": { "node_modules/cyclist": {
"version": "1.0.1", "version": "1.0.1",
@ -8105,7 +8138,7 @@
}, },
"node_modules/estree-walker": { "node_modules/estree-walker": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
}, },
"node_modules/esutils": { "node_modules/esutils": {
@ -8627,6 +8660,13 @@
"node": ">=4.0.0" "node": ">=4.0.0"
} }
}, },
"node_modules/file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"dev": true,
"optional": true
},
"node_modules/filesize": { "node_modules/filesize": {
"version": "3.6.1", "version": "3.6.1",
"resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
@ -11863,11 +11903,11 @@
} }
}, },
"node_modules/magic-string": { "node_modules/magic-string": {
"version": "0.25.9", "version": "0.30.21",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz",
"integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
"dependencies": { "dependencies": {
"sourcemap-codec": "^1.4.8" "@jridgewell/sourcemap-codec": "^1.5.5"
} }
}, },
"node_modules/make-dir": { "node_modules/make-dir": {
@ -12331,10 +12371,23 @@
"thenify-all": "^1.0.0" "thenify-all": "^1.0.0"
} }
}, },
"node_modules/nan": {
"version": "2.24.0",
"resolved": "https://registry.npmmirror.com/nan/-/nan-2.24.0.tgz",
"integrity": "sha512-Vpf9qnVW1RaDkoNKFUvfxqAbtI8ncb8OJlqZ9wwpXzWPEsvsB1nvdUi6oYrHIkQ1Y/tMDnr1h4nczS0VB9Xykg==",
"dev": true,
"optional": true
},
"node_modules/nanoid": { "node_modules/nanoid": {
"version": "3.3.4", "version": "3.3.11",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"bin": { "bin": {
"nanoid": "bin/nanoid.cjs" "nanoid": "bin/nanoid.cjs"
}, },
@ -13199,9 +13252,9 @@
"dev": true "dev": true
}, },
"node_modules/picocolors": { "node_modules/picocolors": {
"version": "1.0.0", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
}, },
"node_modules/picomatch": { "node_modules/picomatch": {
"version": "2.3.1", "version": "2.3.1",
@ -13339,9 +13392,9 @@
} }
}, },
"node_modules/postcss": { "node_modules/postcss": {
"version": "8.4.14", "version": "8.5.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz",
"integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@ -13350,12 +13403,16 @@
{ {
"type": "tidelift", "type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/postcss" "url": "https://tidelift.com/funding/github/npm/postcss"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
} }
], ],
"dependencies": { "dependencies": {
"nanoid": "^3.3.4", "nanoid": "^3.3.11",
"picocolors": "^1.0.0", "picocolors": "^1.1.1",
"source-map-js": "^1.0.2" "source-map-js": "^1.2.1"
}, },
"engines": { "engines": {
"node": "^10 || ^12 || >=14" "node": "^10 || ^12 || >=14"
@ -16582,14 +16639,15 @@
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/source-map-js": { "node_modules/source-map-js": {
"version": "1.0.2", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@ -16625,12 +16683,6 @@
"deprecated": "See https://github.com/lydell/source-map-url#deprecated", "deprecated": "See https://github.com/lydell/source-map-url#deprecated",
"dev": true "dev": true
}, },
"node_modules/sourcemap-codec": {
"version": "1.4.8",
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
"deprecated": "Please use @jridgewell/sourcemap-codec instead"
},
"node_modules/spdx-correct": { "node_modules/spdx-correct": {
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
@ -17855,15 +17907,6 @@
"integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==",
"dev": true "dev": true
}, },
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/to-object-path": { "node_modules/to-object-path": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
@ -18534,15 +18577,23 @@
"dev": true "dev": true
}, },
"node_modules/vue": { "node_modules/vue": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.27.tgz",
"integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", "integrity": "sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==",
"dependencies": { "dependencies": {
"@vue/compiler-dom": "3.2.37", "@vue/compiler-dom": "3.5.27",
"@vue/compiler-sfc": "3.2.37", "@vue/compiler-sfc": "3.5.27",
"@vue/runtime-dom": "3.2.37", "@vue/runtime-dom": "3.5.27",
"@vue/server-renderer": "3.2.37", "@vue/server-renderer": "3.5.27",
"@vue/shared": "3.2.37" "@vue/shared": "3.5.27"
},
"peerDependencies": {
"typescript": "*"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
} }
}, },
"node_modules/vue-cli-plugin-element-plus": { "node_modules/vue-cli-plugin-element-plus": {
@ -20212,11 +20263,15 @@
"@babel/types": "^7.18.6" "@babel/types": "^7.18.6"
} }
}, },
"@babel/helper-string-parser": {
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="
},
"@babel/helper-validator-identifier": { "@babel/helper-validator-identifier": {
"version": "7.18.6", "version": "7.28.5",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
"integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="
"dev": true
}, },
"@babel/helper-validator-option": { "@babel/helper-validator-option": {
"version": "7.18.6", "version": "7.18.6",
@ -20259,9 +20314,12 @@
} }
}, },
"@babel/parser": { "@babel/parser": {
"version": "7.18.9", "version": "7.28.6",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz", "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.6.tgz",
"integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==" "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==",
"requires": {
"@babel/types": "^7.28.6"
}
}, },
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
"version": "7.18.6", "version": "7.18.6",
@ -21073,13 +21131,12 @@
} }
}, },
"@babel/types": { "@babel/types": {
"version": "7.18.9", "version": "7.28.6",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz", "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.6.tgz",
"integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==", "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==",
"dev": true,
"requires": { "requires": {
"@babel/helper-validator-identifier": "^7.18.6", "@babel/helper-string-parser": "^7.27.1",
"to-fast-properties": "^2.0.0" "@babel/helper-validator-identifier": "^7.28.5"
} }
}, },
"@ctrl/tinycolor": { "@ctrl/tinycolor": {
@ -21254,10 +21311,9 @@
"dev": true "dev": true
}, },
"@jridgewell/sourcemap-codec": { "@jridgewell/sourcemap-codec": {
"version": "1.4.14", "version": "1.5.5",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
"integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="
"dev": true
}, },
"@jridgewell/trace-mapping": { "@jridgewell/trace-mapping": {
"version": "0.3.14", "version": "0.3.14",
@ -21540,6 +21596,21 @@
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
"dev": true "dev": true
}, },
"@types/lodash": {
"version": "4.17.23",
"resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.23.tgz",
"integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==",
"peer": true
},
"@types/lodash-es": {
"version": "4.17.12",
"resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz",
"integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
"peer": true,
"requires": {
"@types/lodash": "*"
}
},
"@types/mime": { "@types/mime": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.0.tgz", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.0.tgz",
@ -22081,49 +22152,56 @@
} }
}, },
"@vue/compiler-core": { "@vue/compiler-core": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.27.tgz",
"integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==", "integrity": "sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==",
"requires": { "requires": {
"@babel/parser": "^7.16.4", "@babel/parser": "^7.28.5",
"@vue/shared": "3.2.37", "@vue/shared": "3.5.27",
"entities": "^7.0.0",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"source-map": "^0.6.1" "source-map-js": "^1.2.1"
},
"dependencies": {
"entities": {
"version": "7.0.1",
"resolved": "https://registry.npmmirror.com/entities/-/entities-7.0.1.tgz",
"integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA=="
}
} }
}, },
"@vue/compiler-dom": { "@vue/compiler-dom": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.27.tgz",
"integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==", "integrity": "sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==",
"requires": { "requires": {
"@vue/compiler-core": "3.2.37", "@vue/compiler-core": "3.5.27",
"@vue/shared": "3.2.37" "@vue/shared": "3.5.27"
} }
}, },
"@vue/compiler-sfc": { "@vue/compiler-sfc": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.27.tgz",
"integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==", "integrity": "sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ==",
"requires": { "requires": {
"@babel/parser": "^7.16.4", "@babel/parser": "^7.28.5",
"@vue/compiler-core": "3.2.37", "@vue/compiler-core": "3.5.27",
"@vue/compiler-dom": "3.2.37", "@vue/compiler-dom": "3.5.27",
"@vue/compiler-ssr": "3.2.37", "@vue/compiler-ssr": "3.5.27",
"@vue/reactivity-transform": "3.2.37", "@vue/shared": "3.5.27",
"@vue/shared": "3.2.37",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"magic-string": "^0.25.7", "magic-string": "^0.30.21",
"postcss": "^8.1.10", "postcss": "^8.5.6",
"source-map": "^0.6.1" "source-map-js": "^1.2.1"
} }
}, },
"@vue/compiler-ssr": { "@vue/compiler-ssr": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.27.tgz",
"integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==", "integrity": "sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw==",
"requires": { "requires": {
"@vue/compiler-dom": "3.2.37", "@vue/compiler-dom": "3.5.27",
"@vue/shared": "3.2.37" "@vue/shared": "3.5.27"
} }
}, },
"@vue/component-compiler-utils": { "@vue/component-compiler-utils": {
@ -22236,57 +22314,46 @@
"requires": {} "requires": {}
}, },
"@vue/reactivity": { "@vue/reactivity": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.27.tgz",
"integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", "integrity": "sha512-vvorxn2KXfJ0nBEnj4GYshSgsyMNFnIQah/wczXlsNXt+ijhugmW+PpJ2cNPe4V6jpnBcs0MhCODKllWG+nvoQ==",
"requires": { "requires": {
"@vue/shared": "3.2.37" "@vue/shared": "3.5.27"
}
},
"@vue/reactivity-transform": {
"version": "3.2.37",
"resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz",
"integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==",
"requires": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.37",
"@vue/shared": "3.2.37",
"estree-walker": "^2.0.2",
"magic-string": "^0.25.7"
} }
}, },
"@vue/runtime-core": { "@vue/runtime-core": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.27.tgz",
"integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", "integrity": "sha512-fxVuX/fzgzeMPn/CLQecWeDIFNt3gQVhxM0rW02Tvp/YmZfXQgcTXlakq7IMutuZ/+Ogbn+K0oct9J3JZfyk3A==",
"requires": { "requires": {
"@vue/reactivity": "3.2.37", "@vue/reactivity": "3.5.27",
"@vue/shared": "3.2.37" "@vue/shared": "3.5.27"
} }
}, },
"@vue/runtime-dom": { "@vue/runtime-dom": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.27.tgz",
"integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", "integrity": "sha512-/QnLslQgYqSJ5aUmb5F0z0caZPGHRB8LEAQ1s81vHFM5CBfnun63rxhvE/scVb/j3TbBuoZwkJyiLCkBluMpeg==",
"requires": { "requires": {
"@vue/runtime-core": "3.2.37", "@vue/reactivity": "3.5.27",
"@vue/shared": "3.2.37", "@vue/runtime-core": "3.5.27",
"csstype": "^2.6.8" "@vue/shared": "3.5.27",
"csstype": "^3.2.3"
} }
}, },
"@vue/server-renderer": { "@vue/server-renderer": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.27.tgz",
"integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", "integrity": "sha512-qOz/5thjeP1vAFc4+BY3Nr6wxyLhpeQgAE/8dDtKo6a6xdk+L4W46HDZgNmLOBUDEkFXV3G7pRiUqxjX0/2zWA==",
"requires": { "requires": {
"@vue/compiler-ssr": "3.2.37", "@vue/compiler-ssr": "3.5.27",
"@vue/shared": "3.2.37" "@vue/shared": "3.5.27"
} }
}, },
"@vue/shared": { "@vue/shared": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.27.tgz",
"integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==" "integrity": "sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ=="
}, },
"@vue/web-component-wrapper": { "@vue/web-component-wrapper": {
"version": "1.3.0", "version": "1.3.0",
@ -23098,6 +23165,16 @@
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true "dev": true
}, },
"bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"dev": true,
"optional": true,
"requires": {
"file-uri-to-path": "1.0.0"
}
},
"birpc": { "birpc": {
"version": "0.2.19", "version": "0.2.19",
"resolved": "https://registry.npmmirror.com/birpc/-/birpc-0.2.19.tgz", "resolved": "https://registry.npmmirror.com/birpc/-/birpc-0.2.19.tgz",
@ -24883,9 +24960,9 @@
} }
}, },
"csstype": { "csstype": {
"version": "2.6.20", "version": "3.2.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz",
"integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="
}, },
"cyclist": { "cyclist": {
"version": "1.0.1", "version": "1.0.1",
@ -26189,7 +26266,7 @@
}, },
"estree-walker": { "estree-walker": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
}, },
"esutils": { "esutils": {
@ -26612,6 +26689,13 @@
} }
} }
}, },
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"dev": true,
"optional": true
},
"filesize": { "filesize": {
"version": "3.6.1", "version": "3.6.1",
"resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
@ -29074,11 +29158,11 @@
} }
}, },
"magic-string": { "magic-string": {
"version": "0.25.9", "version": "0.30.21",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz",
"integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
"requires": { "requires": {
"sourcemap-codec": "^1.4.8" "@jridgewell/sourcemap-codec": "^1.5.5"
} }
}, },
"make-dir": { "make-dir": {
@ -29462,10 +29546,17 @@
"thenify-all": "^1.0.0" "thenify-all": "^1.0.0"
} }
}, },
"nan": {
"version": "2.24.0",
"resolved": "https://registry.npmmirror.com/nan/-/nan-2.24.0.tgz",
"integrity": "sha512-Vpf9qnVW1RaDkoNKFUvfxqAbtI8ncb8OJlqZ9wwpXzWPEsvsB1nvdUi6oYrHIkQ1Y/tMDnr1h4nczS0VB9Xykg==",
"dev": true,
"optional": true
},
"nanoid": { "nanoid": {
"version": "3.3.4", "version": "3.3.11",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="
}, },
"nanomatch": { "nanomatch": {
"version": "1.2.13", "version": "1.2.13",
@ -30163,9 +30254,9 @@
"dev": true "dev": true
}, },
"picocolors": { "picocolors": {
"version": "1.0.0", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
}, },
"picomatch": { "picomatch": {
"version": "2.3.1", "version": "2.3.1",
@ -30268,13 +30359,13 @@
"dev": true "dev": true
}, },
"postcss": { "postcss": {
"version": "8.4.14", "version": "8.5.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz",
"integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"requires": { "requires": {
"nanoid": "^3.3.4", "nanoid": "^3.3.11",
"picocolors": "^1.0.0", "picocolors": "^1.1.1",
"source-map-js": "^1.0.2" "source-map-js": "^1.2.1"
} }
}, },
"postcss-calc": { "postcss-calc": {
@ -32883,12 +32974,13 @@
"source-map": { "source-map": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
}, },
"source-map-js": { "source-map-js": {
"version": "1.0.2", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
}, },
"source-map-resolve": { "source-map-resolve": {
"version": "0.5.3", "version": "0.5.3",
@ -32919,11 +33011,6 @@
"integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
"dev": true "dev": true
}, },
"sourcemap-codec": {
"version": "1.4.8",
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
},
"spdx-correct": { "spdx-correct": {
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
@ -33907,12 +33994,6 @@
"integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==",
"dev": true "dev": true
}, },
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
"dev": true
},
"to-object-path": { "to-object-path": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
@ -34451,15 +34532,15 @@
"dev": true "dev": true
}, },
"vue": { "vue": {
"version": "3.2.37", "version": "3.5.27",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.2.37.tgz", "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.27.tgz",
"integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", "integrity": "sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==",
"requires": { "requires": {
"@vue/compiler-dom": "3.2.37", "@vue/compiler-dom": "3.5.27",
"@vue/compiler-sfc": "3.2.37", "@vue/compiler-sfc": "3.5.27",
"@vue/runtime-dom": "3.2.37", "@vue/runtime-dom": "3.5.27",
"@vue/server-renderer": "3.2.37", "@vue/server-renderer": "3.5.27",
"@vue/shared": "3.2.37" "@vue/shared": "3.5.27"
} }
}, },
"vue-cli-plugin-element-plus": { "vue-cli-plugin-element-plus": {

View File

@ -783,3 +783,11 @@ export const RyGjDeleteById = (id) => {
}); });
}; };
// 检查站列表
export const selectJczFullList = (params) => {
return request({
url: api + `/jcz/selectJczFullList `,
method: "get",
params
});
};

BIN
src/assets/images/jc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
src/assets/images/lsjt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
src/assets/images/lsza.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
src/assets/images/znzp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -0,0 +1,175 @@
<template>
<div class="base-chart">
<div ref="chartRef" class="chart-container"></div>
</div>
</template>
<script setup>
import { ref, onMounted, onUnmounted, watch } from "vue";
import * as echarts from "echarts";
const props = defineProps({
data: {
type: Array,
required: true
},
colors: {
type: Array,
default: () => ["#00f0ff", "#0066ff", "#ff9900", "#00cc66"]
},
total: {
type: Number,
default: 0
}
});
const chartRef = ref(null);
let chart = null;
const createChartOption = (data, colors, total) => {
return {
title: {
text: `${total}`,
subtext: "总数",
left: "center",
top: "center",
textStyle: {
color: "#fff",
fontSize: 24,
fontWeight: "normal"
},
subtextStyle: {
color: "#fff",
fontSize: 14
}
},
tooltip: {
trigger: "item"
},
legend: {
type: 'scroll',
orient: 'vertical',
top: 0,
right: 0,
bottom: "50px",
textStyle: {
color: "#fff",
rich: {
value: {
color: "#fff"
},
percentage: {
padding: [0, 0, 0, 10]
},
blue: {
color: colors[0]
},
lightBlue: {
color: colors[1]
},
orange: {
color: colors[2]
},
green: {
color: colors[3]
}
}
},
formatter: (name) => {
const item = data.find((d) => d.name === name);
return `${name} ${item.value}`;
}
},
series: [
{
type: "pie",
radius: ["55%", "70%"],
center: ["50%", "55%"],
data: data.map((item) => ({
...item,
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: item.color[0] },
{ offset: 1, color: item.color[1] }
])
}
})),
label: {
show: false
},
emphasis: {
scale: false,
focus: "none"
},
z: 2
},
{
type: "pie",
radius: ["65%", "85%"],
center: ["50%", "55%"],
data: data.map((item) => ({
...item,
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: item.color1[0] },
{ offset: 1, color: item.color1[1] }
])
}
})),
label: {
show: false
},
emphasis: {
scale: false,
focus: "none"
},
z: 1,
silent: true
}
]
};
};
const initChart = () => {
if (chartRef.value) {
chart = echarts.init(chartRef.value);
chart.setOption(createChartOption(props.data, props.colors, props.total));
}
};
const handleResize = () => {
chart?.resize();
};
watch(
() => [props.data, props.total],
() => {
if (chart) {
chart.setOption(createChartOption(props.data, props.colors, props.total));
}
},
{ deep: true }
);
onMounted(() => {
initChart();
window.addEventListener("resize", handleResize);
});
onUnmounted(() => {
window.removeEventListener("resize", handleResize);
chart?.dispose();
});
</script>
<style scoped lang="scss">
.base-chart {
height: 100%;
}
.chart-container {
height: 100%;
width: 100%;
}
</style>

View File

@ -0,0 +1,132 @@
<template>
<el-form ref="elform" :model="listQuery" :label-width="props.labelWidth" :rules="props.rules" :inline="props.inline" :label-position="props.position" :disabled="props.disabled">
<el-form-item v-for="(item, idx) in props.formList" :style="item.width && { width: item.width }" :prop="item.prop" :label="item.label" :label-width="item.labelWidth" :key="idx">
<!-- input表单 input-->
<MOSTY.Other v-if="item.type == 'input'" width="100%" clearable v-model="listQuery[item.prop]" :placeholder="`请输入${item.label}`" :disabled="item.disabled" :readonly="item.readonly" @blur="inputBlur($event,item)" />
<el-input v-model="listQuery[item.prop]" v-else-if="item.type == 'textarea'" type="textarea" :rows="item.rows || 3" :placeholder="`请输入${item.label}`" :disabled="item.disabled" @blur="inputBlur($event,item)"/>
<!-- 数值 inputNumber-->
<el-input type="number" v-model="listQuery[item.prop]" v-else-if="item.type == 'inputNumber'" :placeholder="`请输入${item.label}`" :disabled="item.disabled" @blur="inputBlur($event,item)"/>
<!-- 数值 number-->
<el-input-number v-model="listQuery[item.prop]" v-else-if="item.type == 'number'" :step="item.step || 1" style="width: 100%" :min="item.min || 0" :max="item.max || 1000" :disabled="item.disabled" />
<!--选择 select-->
<MOSTY.Select v-else-if="item.type == 'select'" filterable :multiple="item.multiple" v-model="listQuery[item.prop]" :dictEnum="item.options" width="100%" clearable :placeholder="`请选择${item.label}`" :disabled="item.disabled" />
<!-- 部门department -->
<template v-else-if="item.type === 'department'">
<MOSTY.Department style="width: 100%;" clearable :isAll="item.isAll" @getDepValue="getdep($event, item.depMc)" :multiple="item.multiple" v-model="listQuery[item.prop]" :placeholder="listQuery[item.depMc] ? listQuery[item.depMc] : '请选择'" :disabled="item.disabled" />
</template>
<!-- 上传 upload -->
<MOSTY.Upload v-else-if="item.type == 'upload'" width="100%" v-model="listQuery[item.prop]" :isImg="item.isImg" :limit="item.limit" :disabled="item.disabled" />
<!--选择checkbox -->
<MOSTY.CheckBox v-else-if="item.type == 'checkbox'" width="100%" clearable v-model="listQuery[item.prop]" :checkList="item.options" :placeholder="`请选择${item.label}`" :disabled="item.disabled" />
<!-- 单选radio -->
<el-radio-group v-model="listQuery[item.prop]" v-else-if="item.type == 'radio'" :disabled="item.disabled">
<el-radio v-for="obj in item.options" :key="obj.value" :label="obj.value">{{ obj.label }}</el-radio>
</el-radio-group>
<!-- 时间选择 -->
<el-time-picker v-else-if="item.type == 'time'" v-model="listQuery[item.prop]" placeholder="选择时间" style="width: 100%" :disabled="item.disabled" />
<el-date-picker v-else-if="item.type == 'date'" v-model="listQuery[item.prop]" type="date" value-format="YYYY-MM-DD" placeholder="请选择日期" style="width: 100%" :disabled="item.disabled" />
<el-date-picker v-else-if="item.type == 'datetime'" v-model="listQuery[item.prop]" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择时间" style="width: 100%" :disabled="item.disabled" />
<el-date-picker v-else-if="item.type == 'datetimerange'" v-model="listQuery[item.prop]" type="datetimerange" :shortcuts="shortcuts" range-separator="To" value-format="YYYY-MM-DD HH:mm:ss" start-placeholder="选择开始时间" end-placeholder="选择结束时间" style="width: 100%" :disabled="item.disabled" />
<el-date-picker v-else-if="item.type == 'daterange'" v-model="listQuery[item.prop]" type="daterange" range-separator="To" value-format="YYYY-MM-DD" start-placeholder="选择开始日期" end-placeholder="选择开始日期" style="width: 100%" :disabled="item.disabled" />
<el-switch v-else-if="item.type == 'switch'" v-model="listQuery[item.prop]" class="ml-2" :disabled="item.disabled" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949" />
<template v-else-if="item.type === 'slot'">
<slot :name="item.prop"></slot>
</template>
</el-form-item>
</el-form>
</template>
<script setup>
import * as MOSTY from "@/components/MyComponents/index";
import { ref, defineProps, defineEmits, defineExpose, watch, watchEffect, readonly } from "vue";
const props = defineProps({
//循环的值
formList: {
default: [],
type: Array
},
rules: {
default: {},
type: Object
},
labelWidth: {
default: "140px",
type: String
},
modelValue: {
type: Object,
default: {}
},
inline: {
type: Boolean,
default: true
},
disabled: {
type: Boolean,
default: false
},
position: {
default: 'right',
type: String
},
});
const elform = ref();
const listQuery = ref({});
const emits = defineEmits(["update:modelValue", "blur"]);
// 提交
const submit = (resfun) => {
elform.value.validate((valid) => {
if (!valid) return false;
resfun(listQuery.value);
});
};
const getdep = (e, val) => {
if (val) {
if (Array.isArray(e)) {
listQuery.value[val] = e ? e.map(item => item.orgName) : '';
} else {
listQuery.value[val] = e ? e.orgName : '';
}
}
}
const reset = () => {
elform.value.resetFields()
}
// 修改这里的watch逻辑避免无限循环
let isUpdatingFromProps = false;
const inputBlur = (e,item) => {
if(typeof item?.blur == 'function') {
item.blur();
}
// emits('blur', e, item);
}
watch(() => listQuery.value, (newVal) => {
if (newVal && !isUpdatingFromProps) {
emits("update:modelValue", newVal);
}
}, { deep: true });
watch(() => props.modelValue, (newVal) => {
// 只有在新值确实变化时才更新(避免空值覆盖)
if (newVal && Object.keys(newVal).length > 0) {
isUpdatingFromProps = true;
listQuery.value = { ...newVal };
setTimeout(() => {
isUpdatingFromProps = false;
}, 0);
}
}, { immediate: true, deep: true });
defineExpose({ submit, reset });
</script>

View File

@ -1,6 +1,9 @@
<template> <template>
<el-dialog v-model="modelValue" width="60%" custom-class="container" @close="close" :title="title" align-center> <el-dialog v-model="modelValue" width="60%" custom-class="container" @close="close" :title="title" align-center>
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" />
</div>
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight" <MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
@chooseData="chooseData" > @chooseData="chooseData" >
@ -21,7 +24,8 @@
</template> </template>
<script setup> <script setup>
import { reactive, ref,watch,getCurrentInstance } from 'vue' import { reactive, ref, watch, getCurrentInstance } from 'vue'
import Search from "@/components/aboutTable/Search.vue";
import MyTable from '@/components/aboutTable/MyTable.vue' import MyTable from '@/components/aboutTable/MyTable.vue'
import Pages from "@/components/aboutTable/Pages.vue"; import Pages from "@/components/aboutTable/Pages.vue";
import { ysSxtgetPageList } from "@/api/yszx"; import { ysSxtgetPageList } from "@/api/yszx";
@ -40,6 +44,29 @@ const props = defineProps({
default: '选择感知源' default: '选择感知源'
} }
}) })
const searchConfiger = ref([
{
label: "编号",
prop: "sbbh",
placeholder: "请输入编号",
showType: "input"
},
{
label: "感知源名称",
prop: "sbmc",
placeholder: "请输入感知源名称",
showType: "input"
}
]);
const queryCondition=ref()
// 搜索
const onSearch = (val) => {
queryCondition.value = { ...queryCondition.value, ...val };
getList()
};
const emit = defineEmits(["update:modelValue", "choose"]) const emit = defineEmits(["update:modelValue", "choose"])
const dataLsit= ref(); const dataLsit= ref();
const pageData = reactive({ const pageData = reactive({
@ -70,7 +97,8 @@ const pageData = reactive({
}) })
const getList = () => { const getList = () => {
pageData.tableConfiger.loading = true; pageData.tableConfiger.loading = true;
const promes={ const promes = {
...queryCondition.value,
// ssbm: propsGzyList.ssbm, // ssbm: propsGzyList.ssbm,
pageSize: pageData.pageConfiger.pageSize, pageSize: pageData.pageConfiger.pageSize,
pageCurrent: pageData.pageConfiger.pageCurrent, pageCurrent: pageData.pageConfiger.pageCurrent,

View File

@ -3,8 +3,6 @@
* @Description: 系统切换窗口 * @Description: 系统切换窗口
--> -->
<template> <template>
<!-- append-to-body -->
<div class="a">
<el-dialog <el-dialog
@ -12,9 +10,10 @@
class="switch-sys-dialog" class="switch-sys-dialog"
modal-class="switch-sys-dialog-modal" modal-class="switch-sys-dialog-modal"
:show-close="false" :show-close="false"
width="75%" width="1600"
background-color='#00000080'
align-center align-center
append-to-body
destroy-on-close destroy-on-close
@close="handleModalClick" @close="handleModalClick"
> >
@ -32,7 +31,6 @@
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
</div>
</template> </template>
<script setup> <script setup>
@ -70,11 +68,6 @@ const handleModalClick = () => {
</style> </style>
<style lang="scss" scoped> <style lang="scss" scoped>
.a{
::v-deep(.el-dialog){
background-color: transparent !important;
}
}
body .el-overlay .el-overlay-dialog .el-dialog{ body .el-overlay .el-overlay-dialog .el-dialog{
background-color: transparent !important; background-color: transparent !important;
} }
@ -128,6 +121,8 @@ body .el-overlay .el-overlay-dialog .el-dialog{
} }
} }
} }
::v-deep(.el-dialog) {
background-color: red;
}
</style> </style>

View File

@ -0,0 +1,72 @@
import { ref } from "vue";
import { jczgetYjbqtj } from "@/api/mosty-jcz";
import { choseRbgb } from "@/utils/tools";
export function useWarningData() {
const loading = ref(false);
const error = ref(null);
// 定义颜色数组,为每个预警类型分配不同的颜色
const colorPairs = [
["#00f0ff", "#0066ff"], // 蓝色渐变
["#ff9900", "#ff6600"], // 橙色渐变
["#00cc66", "#009933"], // 绿色渐变
["#ff6699", "#ff3366"], // 粉色渐变
["#9966ff", "#6633ff"], // 紫色渐变
["#ffcc00", "#ff9900"] // 黄色渐变
];
const fetchWarningData = async (warningType) => {
loading.value = true;
error.value = null;
try {
const res = await jczgetYjbqtj({ yjLx: warningType });
return res;
} catch (err) {
error.value = err;
return [];
} finally {
loading.value = false;
}
};
const processWarningData = (data) => {
const total = data
.map((el) => el.sl)
.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
const processedData = data.map((item, index) => {
// 为每个预警类型分配不同的颜色,循环使用颜色数组
const colorIndex = index % colorPairs.length;
const [color, color2] = colorPairs[colorIndex];
return {
value: item.sl,
name: item.yjbq,
color: [color, color2],
color1: [choseRbgb(color, 0.3), choseRbgb(color2, 0.3)]
};
});
return { processedData, total };
};
const getVehicleWarningData = async () => {
const data = await fetchWarningData(1);
return processWarningData(data);
};
const getPersonWarningData = async () => {
const data = await fetchWarningData(2);
return processWarningData(data);
};
return {
loading,
error,
getVehicleWarningData,
getPersonWarningData,
fetchWarningData,
processWarningData
};
}

View File

@ -1,7 +1,7 @@
<template> <template>
<header> <header>
<div class="logo flex align-center" @click="goToHome"><img width="45" class="mr10" src="@/assets/images/jinghui.png" <div class="logo flex align-center" @click="goToHome"><img width="45" class="mr10" src="@/assets/images/jinghui.png"
alt="">林芝公安治安防控管理平台</div> alt="">林芝市智慧公安检查</div>
<div class="right"> <div class="right">
<div><img src="@/assets/images/peo.png" /></div> <div><img src="@/assets/images/peo.png" /></div>
<div class="detail"> <div class="detail">

View File

@ -219,6 +219,7 @@
import { ref, reactive, watch } from "vue"; import { ref, reactive, watch } from "vue";
import * as MOSTY from "@/components/MyComponents/index"; import * as MOSTY from "@/components/MyComponents/index";
import { jczsavel, Xfbbupdate } from "@/api/mosty-jcz.js"; import { jczsavel, Xfbbupdate } from "@/api/mosty-jcz.js";
import { qcckGet } from "@/api/qcckApi";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import ChooseTable from "@/components/chooseList/chooseTable.vue"; import ChooseTable from "@/components/chooseList/chooseTable.vue";
import { timeValidate } from "@/utils/tools.js"; import { timeValidate } from "@/utils/tools.js";
@ -253,8 +254,18 @@ let pageType = ref("add");
const mjData = ref([]); const mjData = ref([]);
const fjData = ref([]); const fjData = ref([]);
const isDetail=ref(false) const isDetail=ref(false)
//
const getjyqx = () => {
qcckGet({}, "/mosty-jcz/tpJczJyqx/getJyqxList").then((res) => {
console.log(res);
listQuery.value.qxList = res;
});
}
// 初始化数据 // 初始化数据
const init = (type, row) => { const init = (type, row) => {
getjyqx()
pageType.value = type; pageType.value = type;
dialogForm.value = true; dialogForm.value = true;
// 根据type和row初始化表单数据 // 根据type和row初始化表单数据

View File

@ -3,116 +3,30 @@
<div class="head_box"> <div class="head_box">
<span class="title">{{ pageInfo[pageType].title }}</span> <span class="title">{{ pageInfo[pageType].title }}</span>
<div> <div>
<el-button <el-button size="small" type="primary" v-if="['add', 'edit'].includes(pageType)" @click="_onSave">保存</el-button>
size="small"
type="primary"
v-if="['add', 'edit'].includes(pageType)"
@click="_onSave"
>保存</el-button
>
<el-button size="small" @click="close">关闭</el-button> <el-button size="small" @click="close">关闭</el-button>
</div> </div>
</div> </div>
<div class="cntinfo"> <div class="cntinfo">
<el-form ref="elform" :model="form" :inline="true" label-position="top"> <FormMessage :disabled="true" v-model="listQuery" :formList="formData" ref="elform" :rules="rules" position="top">
<el-form-item prop="ssbmdm" label="预警类型" style="width: 40%"> <template #yjRyxm="{ row }">
<el-select <el-input v-if="listQuery.yjLx == '1'" v-model="listQuery.yjRyxm" placeholder="请输入预警接收人姓名" clearable
clearable style="width: 100%" />
disabled <el-input v-else v-model="listQuery.yjClcph" placeholder="请输入预警接收人手机号" clearable style="width: 100%" />
v-model="listQuery.yjLx" </template>
placeholder="请选择" <template #yjTp="{ row }">
style="width: 100%" <el-image :preview-src-list="[listQuery.yjTp]" fit="cover" style="width: 100px; height: 100px"
> :src="listQuery.yjTp"></el-image>
<el-option </template>
v-for="(item, index) in dict.D_BZ_YJLX" </FormMessage>
:key="index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="感知源名称" style="width: 40%">
<el-input
v-model="listQuery.yjGzymc"
placeholder="感知源名称"
clearable
disabled
style="width: 100%"
/>
</el-form-item>
<el-form-item prop="scode" label="预警发生时间" style="width: 40%">
<el-date-picker
v-model="listQuery.yjSj"
type="datetime"
placeholder="请选中开始时间"
format="YYYY-MM-DD hh:mm:ss"
disabled
value-format="YYYY-MM-DD hh:mm:ss"
/>
</el-form-item>
<el-form-item prop="sbmc" label="预警对象" style="width: 40%">
<el-input
v-model="DX"
placeholder="请输入装备名称"
clearable
disabled
style="width: 100%"
/>
</el-form-item>
<el-form-item label="预警地址" style="width: 40%">
<el-input
v-model="listQuery.yjDz"
placeholder="请输入预警地址"
disabled
clearable
style="width: 100%"
/>
</el-form-item>
<el-form-item label="预警级别" style="width: 40%">
<el-select
clearable
disabled
v-model="listQuery.yjJb"
placeholder="请选择"
style="width: 100%"
>
<el-option
v-for="(item, index) in dict.D_BZ_YJJB"
:key="index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="预警内容" style="width: 100%">
<el-input
v-model="listQuery.yjNr"
disabled
placeholder="请输入关键字"
show-word-limit
type="textarea"
/>
</el-form-item>
<el-form-item label="预警图片">
<el-image
:preview-src-list="[listQuery.yjTp]"
fit="cover"
style="width: 100px; height: 100px"
:src="listQuery.yjTp"
></el-image>
</el-form-item>
</el-form>
</div> </div>
</div> </div>
</template> </template>
<script setup> <script setup>
import { ref, reactive, onMounted } from "vue"; import { ref, reactive, onMounted, watch } from "vue";
import * as MOSTY from "@/components/MyComponents/index"; import * as MOSTY from "@/components/MyComponents/index";
import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { TcsbsaveTcsbsave, Tcsbupdate } from "@/api/mosty-jcz.js"; import { TcsbsaveTcsbsave, Tcsbupdate } from "@/api/mosty-jcz.js";
import { Right, Back } from "@element-plus/icons-vue"; import { Right, Back } from "@element-plus/icons-vue";
import { baseselectPage } from "@/api/mosty-base"; import { baseselectPage } from "@/api/mosty-base";
@ -120,7 +34,7 @@ import { ElMessage } from "element-plus";
const props = defineProps({ const props = defineProps({
dict: { dict: {
type: Object, type: Object,
default: () => {} default: () => { }
} }
}); });
@ -147,14 +61,12 @@ const propsTree = ref({
multiple: false multiple: false
}); });
// 初始化数据 // 初始化数据
const DX = ref();
const init = (type, row) => { const init = (type, row) => {
pageType.value = type; pageType.value = type;
dialogForm.value = true; dialogForm.value = true;
// 根据type和row初始化表单数据 // 根据type和row初始化表单数据
tabHeightFn(); tabHeightFn();
if (type == "edit" || type == "detail") { if (type == "edit" || type == "detail") {
DX.value = row.yjRyxm ? row.yjRyxm : row.yjClcph;
listQuery.value = { ...row }; listQuery.value = { ...row };
} else { } else {
listQuery.value = {}; listQuery.value = {};
@ -165,8 +77,26 @@ const init = (type, row) => {
const close = () => { const close = () => {
dialogForm.value = false; dialogForm.value = false;
listQuery.value = {}; listQuery.value = {};
DX.value = "";
}; };
const formData = ref()
watch(() => props.dict, (newVal, oldVal) => {
if (newVal) {
formData.value = [
{ label: "预警类型", prop: "yjLx", type: "select", options: props.dict.D_BZ_YJLX, width: '45%' },
{ label: "感知源名称", prop: "yjGzymc", type: "input", width: '45%' },
{ label: "请选中开始时间", prop: "yjSj", type: "datetime", width: '45%' },
{ label: "预警对象", prop: "yjRyxm", type: "slot", width: '45%' },
{ label: "预警标签", prop: "yjbqmc", type: "input", width: '45%' },
{ label: "所属部门", prop: "ssbm", type: "input", width: '45%' },
{ label: "预警地址", prop: "yjDz", type: "input", width: '45%' },
{ label: "预警级别", prop: "yjJb", type: "select", options: props.dict.D_BZ_YJJB, width: '45%' },
{ label: "预警内容", prop: "yjNr", type: "textarea", width: '100%' },
{ label: "预警图片", prop: "yjTp", type: "slot", width: '100%' }
]
}
});
// 表格高度计算 // 表格高度计算
const tableHeight1 = ref(); const tableHeight1 = ref();
const tabHeightFn = () => { const tabHeightFn = () => {
@ -179,21 +109,25 @@ defineExpose({ init });
<style lang="scss" scoped> <style lang="scss" scoped>
.dialog { .dialog {
padding: 20px; padding: 20px;
.head_box { .head_box {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
margin-bottom: 20px; margin-bottom: 20px;
} }
.cntinfo { .cntinfo {
height: calc(100% - 70px); height: calc(100% - 70px);
overflow: hidden; overflow: hidden;
overflow-y: auto; overflow-y: auto;
} }
} }
.my_transfer { .my_transfer {
height: calc(100% - 50px); height: calc(100% - 50px);
display: flex; display: flex;
.btn { .btn {
width: 50px; width: 50px;
display: flex; display: flex;
@ -201,53 +135,65 @@ defineExpose({ init });
justify-content: center; justify-content: center;
margin: 0 10px; margin: 0 10px;
} }
.left { .left {
margin: 12px; margin: 12px;
flex: 1; flex: 1;
position: relative; position: relative;
.tableBox { .tableBox {
position: absolute; position: absolute;
width: 100%; width: 100%;
} }
.serch { .serch {
position: relative; position: relative;
width: 100%; width: 100%;
// height: 96px; // height: 96px;
> .el-form--inline { >.el-form--inline {
display: block; display: block;
width: 100%; width: 100%;
padding: 0; padding: 0;
> .el-form-item--default {
>.el-form-item--default {
width: 31%; width: 31%;
} }
} }
} }
.tableBox { .tableBox {
width: 100%; width: 100%;
} }
} }
.right { .right {
width: 380px; width: 380px;
margin: 12px; margin: 12px;
} }
} }
.phone { .phone {
width: 95px; width: 95px;
height: 120px; height: 120px;
.el-image { .el-image {
width: 95px; width: 95px;
max-height: 120px; max-height: 120px;
} }
} }
::v-deep .el-upload { ::v-deep .el-upload {
width: 90px; width: 90px;
height: 100px; height: 100px;
border: 1px dashed #e0e0e0; border: 1px dashed #e0e0e0;
margin-bottom: 14px; margin-bottom: 14px;
.el-icon { .el-icon {
margin-top: 34px; margin-top: 34px;
font-size: 26px; font-size: 26px;
} }
.el-image { .el-image {
width: 100%; width: 100%;
height: 100%; height: 100%;

View File

@ -8,15 +8,9 @@
<Search :searchArr="searchConfiger" @submit="onSearch" /> <Search :searchArr="searchConfiger" @submit="onSearch" />
</div> </div>
<div class="tabBox"> <div class="tabBox">
<MyTable <MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:tableData="pageData.tableData" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
:tableColumn="pageData.tableColumn" @chooseData="chooseData">
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"
>
<template #yjTp="{ row }"> <template #yjTp="{ row }">
<div class="phone"> <div class="phone">
<el-image v-if="row.tp" :src="urlImg + row.yjTp" fit="cover" lazy /> <el-image v-if="row.tp" :src="urlImg + row.yjTp" fit="cover" lazy />
@ -32,15 +26,10 @@
<el-link type="primary" @click="addEdit('detail', row)">详情</el-link> <el-link type="primary" @click="addEdit('detail', row)">详情</el-link>
</template> </template>
</MyTable> </MyTable>
<Pages <Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger, ...pageData.pageConfiger,
total: pageData.total total: pageData.total
}" }"></Pages>
></Pages>
</div> </div>
<!-- 编辑详情 --> <!-- 编辑详情 -->
<!-- 编辑详情 --> <!-- 编辑详情 -->
@ -54,11 +43,12 @@ import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue"; import Pages from "@/components/aboutTable/Pages.vue";
import EditAddForm from "./components/editAddForm.vue"; import EditAddForm from "./components/editAddForm.vue";
import Search from "@/components/aboutTable/Search.vue"; import Search from "@/components/aboutTable/Search.vue";
import { jczgetPageList } from "@/api/mosty-jcz.js"; import { jczgetPageList, selectJczFullList } from "@/api/mosty-jcz.js";
import { reactive, ref, onMounted, getCurrentInstance, watch } from "vue"; import { reactive, ref, onMounted, getCurrentInstance, watch } from "vue";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const urlImg = "/mosty-api/mosty-base/minio/image/download/"; const urlImg = "/mosty-api/mosty-base/minio/image/download/";
const { D_BZ_YJLX, D_BZ_YJJB } = proxy.$dict("D_BZ_YJLX", "D_BZ_YJJB"); const { D_BZ_YJLX, D_BZ_YJJB } = proxy.$dict("D_BZ_YJLX", "D_BZ_YJJB");
const jczList = ref()
const searchConfiger = ref([ const searchConfiger = ref([
{ {
label: "预警类型", label: "预警类型",
@ -66,6 +56,12 @@ const searchConfiger = ref([
placeholder: "预警类型", placeholder: "预警类型",
showType: "select", showType: "select",
options: D_BZ_YJLX options: D_BZ_YJLX
}, {
label: "所属检查站",
prop: "jczid",
placeholder: "所属检查站",
showType: "select",
options: {}
}, },
{ {
label: "发生时间", label: "发生时间",
@ -73,12 +69,6 @@ const searchConfiger = ref([
placeholder: "发生时间", placeholder: "发生时间",
showType: "datetimerange" showType: "datetimerange"
} }
// {
// label: "预警对象",
// prop: "yjLx",
// placeholder: "请输入预警对象",
// showType: "input"
// }
]); ]);
const detailDiloag = ref(); const detailDiloag = ref();
@ -107,6 +97,8 @@ const pageData = reactive({
}); });
onMounted(() => { onMounted(() => {
tabHeightFn(); tabHeightFn();
getselectJczFullList()
}); });
//查询条件 //查询条件
@ -124,17 +116,34 @@ const getjczgetXfllList = () => {
pageData.tableConfiger.loading = false; pageData.tableConfiger.loading = false;
}); });
}; };
// 获取检查站数据
const getselectJczFullList = () => {
selectJczFullList().then((res) => {
console.log(res);
jczList.value = res.map(item => ({
label: item.jczmc,
value: item.id
}))
searchConfiger.value[1].options = jczList.value
})
}
getjczgetXfllList(); getjczgetXfllList();
// 搜索 // 搜索
const onSearch = (val) => { const onSearch = (val) => {
console.log(val); console.log(val);
const startTime = { const startTime = {
startTime : val.startTime[0], ...val,
endTime : val.startTime[1] startTime: val.startTime ? val.startTime[0] : "",
endTime: val.startTime ? val.startTime[1] : ""
} }
queryCondition.value = { ...queryCondition.value,...startTime}; queryCondition.value = { ...queryCondition.value, ...startTime };
getjczgetXfllList(); getjczgetXfllList();
}; };

View File

@ -1,13 +1,19 @@
<template> <template>
<div class="mian_box"> <div class="mian_box">
<div class="item" v-for="item in dataList" :key="item">{{ item.zdmc }}:<span <div class="item" v-for="item in dataList" :key="item">
@click="openDialog(item.dm)">{{ item.num }}</span></div> <img :src="item.img" alt="" class="item-img" />
<div class="item-content">
<div class="item-title">{{ item.zdmc }}</div>
<div @click="openDialog(item.dm)" class="item-num">{{ item.num }}</div>
</div>
</div>
</div> </div>
<pointList v-model="pointListShow" :lxType="lxType" /> <pointList v-model="pointListShow" :lxType="lxType" />
</template> </template>
<script setup> <script setup>
import pointList from "./pointList.vue"; import pointList from "./pointList.vue";
import { qcckGet, qcckPost } from "@/api/qcckApi.js"; import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import { divide } from "lodash";
import { ref, onMounted, reactive } from "vue"; import { ref, onMounted, reactive } from "vue";
const lxType = ref(); const lxType = ref();
const pointListShow = ref(false); const pointListShow = ref(false);
@ -23,9 +29,37 @@ const openDialog = (val) => {
onMounted(() => { onMounted(() => {
getTotal() getTotal()
}) })
const dataContent = [
{
key: '临时交通卡点',
img: require('@/assets/images/lsjt.png'),
},
{
key: '智能抓拍',
img: require('@/assets/images/znzp.png'),
},
{
key: '公安检查站',
img: require('@/assets/images/jc.png'),
}, {
key: '临时治安卡点',
img: require('@/assets/images/lsza.png'),
},
]
const getTotal = () => { const getTotal = () => {
qcckGet({}, "/mosty-jcz/jcztj/jczZqlxtj").then(res => { qcckGet({}, "/mosty-jcz/jcztj/jczZqlxtj").then(res => {
dataList.value = res; dataList.value = res.map(item => {
const content = dataContent.findIndex(items => items.key == item.zdmc)
return {
...item,
img: dataContent[content].img
}
});
console.log(dataList.value);
}) })
} }
</script> </script>
@ -37,5 +71,35 @@ const getTotal = () => {
color: #fff; color: #fff;
align-items: center; align-items: center;
height: 100%; height: 100%;
flex-wrap: wrap;
width: 90%;
margin: auto;
.item {
cursor: pointer;
display: flex;
align-items: center;
width: 50%;
}
.item-img {
width: 50px;
height: 50px;
margin-right: 10px;
}
.item-content {
flex: 1;
}
.item-title {
text-align: center;
font-size: 14px;
}
.item-num {
text-align: center;
color: #00f0ff;
cursor: pointer;
}
} }
</style> </style>

View File

@ -2,234 +2,56 @@
<div class="warning-analysis"> <div class="warning-analysis">
<div class="chart-section"> <div class="chart-section">
<h2 class="section-title">人员预警分析</h2> <h2 class="section-title">人员预警分析</h2>
<div ref="vehicleChartRef" class="chart-container"></div> <BaseChart :data="vehicleData" :total="vehicleTotal" />
</div> </div>
<div class="chart-section"> <div class="chart-section">
<h2 class="section-title">车辆预警分析</h2> <h2 class="section-title">车辆预警分析</h2>
<div ref="personChartRef" class="chart-container"></div> <BaseChart :data="personData" :total="personTotal" />
</div> </div>
</div> </div>
</template> </template>
<script setup> <script setup>
import { choseRbgb } from "@/utils/tools"; import { ref, onMounted } from "vue";
import { ref, onMounted, onUnmounted } from "vue"; import BaseChart from "@/components/BaseChart.vue";
import { jczgetYjbqtj } from "@/api/mosty-jcz"; import { useWarningData } from "@/composables/useWarningData";
import * as echarts from "echarts";
const vehicleChartRef = ref(null); const { getVehicleWarningData, getPersonWarningData } = useWarningData();
const personChartRef = ref(null);
let vehicleChart = null;
let personChart = null;
const createChartOption = (data, colors, total) => {
return {
title: {
text: `${total}`,
subtext: "总数",
left: "center",
top: "center", //top待调整
textStyle: {
color: "#fff",
fontSize: 24,
fontWeight: "normal"
},
subtextStyle: {
color: "#fff",
fontSize: 14
}
},
tooltip: {
trigger: "item"
},
legend: {
orient: "horizontal",
top: 0,
bottom: "50px",
textStyle: {
color: "#fff",
rich: {
value: {
color: "#fff"
},
percentage: {
padding: [0, 0, 0, 10]
},
blue: {
color: colors[0]
},
lightBlue: {
color: colors[1]
},
orange: {
color: colors[2]
},
green: {
color: colors[3]
}
}
},
formatter: (name) => {
const item = data.find((d) => d.name === name);
return `${name} ${item.value}`;
}
},
series: [
{
type: "pie",
radius: ["55%", "70%"],
center: ["50%", "55%"],
data: data.map((item) => ({
...item,
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: item.color[0] },
{ offset: 1, color: item.color[1] }
])
}
})),
label: {
show: false
},
emphasis: {
scale: false,
focus: "none"
},
z: 2
},
{
type: "pie",
radius: ["65%", "85%"],
center: ["50%", "55%"],
data: data.map((item) => ({
...item,
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: item.color1[0] },
{ offset: 1, color: item.color1[1] }
])
}
})),
label: {
show: false
},
emphasis: {
scale: false,
focus: "none"
},
z: 1,
silent: true
}
]
};
};
const randomHexColor = () => {
return "#" + Math.floor(Math.random() * 16777215).toString(16);
};
const initCharts = async () => { const vehicleData = ref([]);
let clTotal = 0; const vehicleTotal = ref(0);
let ryTotal = 0; const personData = ref([]);
vehicleChart = echarts.init(vehicleChartRef.value); const personTotal = ref(0);
personChart = echarts.init(personChartRef.value);
const colors = ["#00f0ff", "#0066ff", "#ff9900", "#00cc66"];
// 车辆预警数据
const res = await jczgetYjbqtj({ yjLx: 1 });
const res2 = await jczgetYjbqtj({ yjLx: 2 });
clTotal = res2
.map((el) => el.sl)
.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
ryTotal = res
.map((el) => el.sl)
.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
const vehicleData = res.map((item) => { const initData = async () => {
const color = randomHexColor(); const vehicleResult = await getVehicleWarningData();
const color2 = randomHexColor(); vehicleData.value = vehicleResult.processedData;
return { vehicleTotal.value = vehicleResult.total;
value: item.sl,
name: item.yjbq,
// colorType: color,
color: [color, color2],
color1: [choseRbgb(color, 0.3), choseRbgb(color2, 0.3)]
};
});
// 人员预警数据 const personResult = await getPersonWarningData();
const personData = res2.map((item) => { personData.value = personResult.processedData;
const color = randomHexColor(); personTotal.value = personResult.total;
const color2 = randomHexColor();
return {
value: item.sl,
name: item.yjbq,
// colorType: color,
color: [color, color2],
color1: [choseRbgb(color, 0.3), choseRbgb(color2, 0.3)]
};
});
// [
// {
// value: 25,
// name: "涉稳人员",
// colorType: "blue",
// color: ["#00f0ff", "#00a0cc"],
// color1: [choseRbgb("#00f0ff", 0.3), choseRbgb("#00a0cc", 0.3)]
// },
// {
// value: 30,
// name: "涉毒人员",
// colorType: "lightBlue",
// color: ["#0066ff", "#0044cc"],
// color1: [choseRbgb("#0066ff", 0.3), choseRbgb("#0044cc", 0.3)]
// },
// {
// value: 17,
// name: "涉黄人员",
// colorType: "orange",
// color: ["#ff9900", "#cc7a00"],
// color1: [choseRbgb("#ff9900", 0.3), choseRbgb("#cc7a00", 0.3)]
// },
// {
// value: 28,
// name: "前科人员",
// colorType: "green",
// color: ["#00cc66", "#009944"],
// color1: [choseRbgb("#00cc66", 0.3), choseRbgb("#009944", 0.3)]
// }
// ];
vehicleChart.setOption(createChartOption(vehicleData, colors, ryTotal));
personChart.setOption(createChartOption(personData, colors, clTotal));
};
const handleResize = () => {
vehicleChart?.resize();
personChart?.resize();
}; };
onMounted(() => { onMounted(() => {
initCharts(); initData();
window.addEventListener("resize", handleResize);
});
onUnmounted(() => {
window.removeEventListener("resize", handleResize);
vehicleChart?.dispose();
personChart?.dispose();
}); });
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.warning-analysis { .warning-analysis {
padding: 20px; // padding: 20px;
height: 100%; height: 100%;
} }
.chart-section { .chart-section {
height: 50%; height: 40%;
margin-bottom: 20px;
} }
.section-title { .section-title {
font-size: 18px; font-size: 18px;
// margin-bottom: 20px; margin-bottom: 10px;
position: relative; position: relative;
padding-left: 12px; padding-left: 12px;
background: linear-gradient(0deg, #59a6f4 0%, #ffffff 90%); background: linear-gradient(0deg, #59a6f4 0%, #ffffff 90%);
@ -248,9 +70,4 @@ onUnmounted(() => {
background: url("~@/assets/images/bg_02.png"); background: url("~@/assets/images/bg_02.png");
background-size: 100% 100%; background-size: 100% 100%;
} }
.chart-container {
height: calc(100% - 40px);
width: 100%;
}
</style> </style>

View File

@ -266,6 +266,7 @@ const getMapData = () => {
// background: url("~@/assets/images/border_L_T.png") no-repeat center center; // background: url("~@/assets/images/border_L_T.png") no-repeat center center;
background-size: 100% 100%; background-size: 100% 100%;
} }
} }
// 右边 // 右边
@ -275,13 +276,13 @@ const getMapData = () => {
box-sizing: border-box; box-sizing: border-box;
.asideL-top { .asideL-top {
height: 20%; height: 25%;
background: url("~@/assets/images/border_R_T.png") no-repeat center center; background: url("~@/assets/images/border_R_T.png") no-repeat center center;
background-size: 100% 100%; background-size: 100% 100%;
} }
.asideL-bottom { .asideL-bottom {
height: 60%; height: 50%;
background: url("~@/assets/images/border_R_B.png") no-repeat center center; background: url("~@/assets/images/border_R_B.png") no-repeat center center;
background-size: 100% 100%; background-size: 100% 100%;
} }

View File

@ -203,10 +203,10 @@
<div class="btItem">警用器械</div> <div class="btItem">警用器械</div>
<div class="info"> <div class="info">
<el-form-item> <el-form-item>
<div v-for="(item, index) in listQuery.qxList" :key="index" style="width: 50%; margin-bottom: 10px"> <div v-for="(item, index) in listQuery.qxList" :key="index" class="qx-item">
<div class="flex"> <div class="flex align-center qx-item-inner">
<div style="width: 30%">{{ item.qxmc }}</div> <div class="qx-name">{{ item.qxmc }}</div>
<el-input-number v-model="item.qxsl" :step="1" /> <el-input-number v-model="item.qxsl" :step="1" class="qx-input" />
</div> </div>
</div> </div>
</el-form-item> </el-form-item>
@ -222,6 +222,7 @@ import { ref, reactive, getCurrentInstance, onMounted, watch } from "vue";
import * as MOSTY from "@/components/MyComponents/index"; import * as MOSTY from "@/components/MyComponents/index";
import { jczqueryById } from "@/api/mosty-jcz"; import { jczqueryById } from "@/api/mosty-jcz";
import { jczsavel, Xfbbupdate } from "@/api/mosty-jcz.js"; import { jczsavel, Xfbbupdate } from "@/api/mosty-jcz.js";
import { qcckGet } from "@/api/qcckApi";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import ChooseTable from "@/components/chooseList/chooseTable.vue"; import ChooseTable from "@/components/chooseList/chooseTable.vue";
import ChoosePersonnel from "@/components/chooseList/choosePersonnel.vue"; import ChoosePersonnel from "@/components/chooseList/choosePersonnel.vue";
@ -288,32 +289,39 @@ const fz = (val) => {
}); });
return data; return data;
}; };
const getjyqx = () => {
qcckGet({
pageSize: 1000,
pageCurrent: 1
}, "/mosty-jcz/tpJczJyqx/getJyqxList").then((res) => {
listQuery.value.qxList = res.records.map((item) => {
return {
qxmc: item.qxMc,
qxsl: 0
}
}) || []
init();
});
}
// 初始化数据 // 初始化数据
const init = (type) => { const init = (type) => {
console.log(type);
pageType.value = type == undefined || type == 'add' ? "add" : "detail";
dialogForm.value = true; dialogForm.value = true;
// 根据type和row初始化表单数据 // 根据type和row初始化表单数据
if (props.row) { if (props.row.data) {
pageType.value = "detail"
listQuery.value = { ...props.row }; listQuery.value = { ...props.row };
if (props.row.ryList && props.row.ryList.length > 0) { if (props.row.ryList && props.row.ryList.length > 0) {
const data = fz(props.row.ryList); const data = fz(props.row.ryList);
mjData.value = data.filter((item) => item.fl == "01"); mjData.value = data.filter((item) => item.fl == "01");
fjData.value = data.filter((item) => item.fl == "02"); fjData.value = data.filter((item) => item.fl == "02");
} }
if (listQuery.value.qxList && listQuery.value.qxList.length == 0) {
listQuery.value.qxList = props.dic.D_BZ_JYQXFL.map((item) => {
return { qxmc: item.label, qxsl: 0 };
});
}
} else { } else {
pageType.value = "add"; pageType.value = "add";
listQuery.value.qxList = props.dic.D_BZ_JYQXFL.map((item) => {
return { qxmc: item.label, qxsl: 0 };
});
} }
}; };
watch( watch(
() => props.row, () => props.row,
@ -324,7 +332,7 @@ watch(
); );
const routerList = ref({}) const routerList = ref({})
onMounted(() => { onMounted(() => {
init(); getjyqx()
routerList.value = route.query routerList.value = route.query
}); });
// 验证规则 // 验证规则
@ -521,6 +529,7 @@ const chooseDataGzy = (val) => {
margin-top: 1px; margin-top: 1px;
padding: 10px; padding: 10px;
box-sizing: border-box; box-sizing: border-box;
width: 100%;
.gapline { .gapline {
height: 1px; height: 1px;
@ -585,6 +594,27 @@ const chooseDataGzy = (val) => {
padding-left: 100px; padding-left: 100px;
box-sizing: border-box; box-sizing: border-box;
} }
.qx-item {
width: 50%;
margin-bottom: 10px;
}
.qx-item-inner {
justify-content: space-between;
}
.qx-name {
min-width: 100px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.qx-input {
flex: 1;
min-width: 100px;
}
} }
::v-deep .el-form-item--default { ::v-deep .el-form-item--default {

View File

@ -5,10 +5,10 @@ function resolve(dir) {
} }
// const serverHost = "http://183.222.39.242:38006"//波哥 // const serverHost = "http://183.222.39.242:38006"//波哥
// const serverHost = "http://47.108.232.77:9537"; // const serverHost = "http://47.108.232.77:9537";
const serverHost = "http://j96926b5.natappfree.cc" // const serverHost = "http://j96926b5.natappfree.cc"
// const serverHost = "http://192.168.1.98:8006" // const serverHost = "http://192.168.1.98:8006"
// const serverHost = "http://n5e6d39a.natappfree.cc"//周 // const serverHost = "http://n5e6d39a.natappfree.cc"//周
// const serverHost = "http://192.168.2.206:8006"//线上 const serverHost = "http://183.222.39.242:38006"//线上
module.exports = { module.exports = {
publicPath: "./", publicPath: "./",
outputDir: "jcz", outputDir: "jcz",