Compare commits
40 Commits
820d543f4a
...
main
Author | SHA1 | Date | |
---|---|---|---|
71487ac647 | |||
2b06febd8e | |||
42e9bd894c | |||
a5c48d796c | |||
058b870b35 | |||
951ff3cba2 | |||
24351e4f7d | |||
33a5f56d83 | |||
81b2319acc | |||
b3b30026c9 | |||
1c3a25f527 | |||
bcbf0be923 | |||
78c589bf3c | |||
4f4530bc2a | |||
cd4b85c587 | |||
326d0f0d13 | |||
73fc5e2a00 | |||
a961f32d93 | |||
1e1cbdf6f1 | |||
1dc72750f6 | |||
18e569cdd0 | |||
3b30b2b834 | |||
03d2e9f459 | |||
2eb2a41b06 | |||
3d439b62e6 | |||
63442217fc | |||
b6e8df30ff | |||
e453742024 | |||
6396f9c13c | |||
3870addd51 | |||
677f2c4a3b | |||
7d809e52d2 | |||
36d23fcbdb | |||
3c1c42a8c5 | |||
6d106674bd | |||
33ceb7a85a | |||
8ea67fd810 | |||
a334d9f61e | |||
08ba25b66a | |||
fdab1188c0 |
4
.gitignore
vendored
@ -1,6 +1,8 @@
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
node_modules
|
node_modules
|
||||||
/dist
|
# dist/
|
||||||
|
# build/
|
||||||
|
gsxt/
|
||||||
|
|
||||||
# local env files
|
# local env files
|
||||||
.env.local
|
.env.local
|
||||||
|
262
package-lock.json
generated
@ -1431,28 +1431,38 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@paddlejs-mediapipe/opencv": {
|
"@paddlejs-mediapipe/opencv": {
|
||||||
"version": "0.0.4",
|
"version": "0.0.3",
|
||||||
"resolved": "https://registry.npmmirror.com/@paddlejs-mediapipe/opencv/-/opencv-0.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/@paddlejs-mediapipe/opencv/-/opencv-0.0.3.tgz",
|
||||||
"integrity": "sha512-bfwixZPKGFh7JcAtLToTBmBiu/nyQjVrm0gf/pn92apHJQEYyhnAFGvgDubmqQbijmtP2/fbOMR4CuSSlq2g8w=="
|
"integrity": "sha512-ISSZVIeCUQDV4JBHmMXH4t2FQ0p/Qdz3+I1CuMPUg9qyqqYL5SbqL9ji0b6MOQyCOkO7MV37pSFjx9WjZEzP/g=="
|
||||||
},
|
},
|
||||||
"@paddlejs-models/ocr": {
|
"@paddlejs-models/ocr": {
|
||||||
"version": "1.2.4",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmmirror.com/@paddlejs-models/ocr/-/ocr-1.2.4.tgz",
|
"resolved": "https://registry.npmjs.org/@paddlejs-models/ocr/-/ocr-1.1.2.tgz",
|
||||||
"integrity": "sha512-mdvaWXQaCmLULEvCxcsUzHtDgmoDVzJX2LsqyMmJxSzfhgrtnscF1eLiLbaouDwg6n08koXP0BCzeB+0oAv/AQ==",
|
"integrity": "sha512-uIsyO2bINgEFU2qmSdKWuUhnmyZX03Ktozh93CloiSTbWq66r0qI6KEuxzIQtm+j6pgugLXrvmtoo2tk0SbpVA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@paddlejs-mediapipe/opencv": "0.0.4",
|
"@paddlejs-mediapipe/opencv": "0.0.3",
|
||||||
"@paddlejs/paddlejs-backend-webgl": "^1.1.19",
|
"@paddlejs/paddlejs-backend-webgl": "^1.1.4",
|
||||||
"@paddlejs/paddlejs-core": "^2.1.17"
|
"@paddlejs/paddlejs-core": "^2.1.7"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@paddlejs-models/ocrdet": {
|
||||||
|
"version": "0.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@paddlejs-models/ocrdet/-/ocrdet-0.0.3.tgz",
|
||||||
|
"integrity": "sha512-V7sH8cbyhlR7wkpd1/ycfdA+HiD9XuwIQiFlnwOClFIlZ31EyW10LcMrkhaU7x8uG2BYANFeOz4mBrhE9JRElQ==",
|
||||||
|
"requires": {
|
||||||
|
"@paddlejs-mediapipe/opencv": "0.0.3",
|
||||||
|
"@paddlejs/paddlejs-backend-webgl": "^1.1.0",
|
||||||
|
"@paddlejs/paddlejs-core": "^2.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@paddlejs/paddlejs-backend-webgl": {
|
"@paddlejs/paddlejs-backend-webgl": {
|
||||||
"version": "1.2.9",
|
"version": "1.2.9",
|
||||||
"resolved": "https://registry.npmmirror.com/@paddlejs/paddlejs-backend-webgl/-/paddlejs-backend-webgl-1.2.9.tgz",
|
"resolved": "https://registry.npmjs.org/@paddlejs/paddlejs-backend-webgl/-/paddlejs-backend-webgl-1.2.9.tgz",
|
||||||
"integrity": "sha512-cVDa0/Wbw2EyfsYqdYUPhFeqKsET79keEUWjyhYQmQkJfWg8j1qdR6yp7g6nx9qAGrqFvwuj1s0EqkYA1dok6A=="
|
"integrity": "sha512-cVDa0/Wbw2EyfsYqdYUPhFeqKsET79keEUWjyhYQmQkJfWg8j1qdR6yp7g6nx9qAGrqFvwuj1s0EqkYA1dok6A=="
|
||||||
},
|
},
|
||||||
"@paddlejs/paddlejs-core": {
|
"@paddlejs/paddlejs-core": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@paddlejs/paddlejs-core/-/paddlejs-core-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@paddlejs/paddlejs-core/-/paddlejs-core-2.2.0.tgz",
|
||||||
"integrity": "sha512-P3rPkF9fFHtq8uSte5gA7fJQwBNl9Ytsvj6aTcfQSsirnBO/HxMNu0gJyh7+lItvEtF92PR15eI0eOwJYfZDhQ=="
|
"integrity": "sha512-P3rPkF9fFHtq8uSte5gA7fJQwBNl9Ytsvj6aTcfQSsirnBO/HxMNu0gJyh7+lItvEtF92PR15eI0eOwJYfZDhQ=="
|
||||||
},
|
},
|
||||||
"@petamoriken/float16": {
|
"@petamoriken/float16": {
|
||||||
@ -2124,51 +2134,6 @@
|
|||||||
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
|
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"ansi-styles": {
|
|
||||||
"version": "4.3.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
|
||||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"color-convert": "^2.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"chalk": {
|
|
||||||
"version": "4.1.2",
|
|
||||||
"resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
|
|
||||||
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"ansi-styles": "^4.1.0",
|
|
||||||
"supports-color": "^7.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"color-convert": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
|
|
||||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"color-name": "~1.1.4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"color-name": {
|
|
||||||
"version": "1.1.4",
|
|
||||||
"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
|
|
||||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"has-flag": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
|
|
||||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"ssri": {
|
"ssri": {
|
||||||
"version": "8.0.1",
|
"version": "8.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
|
||||||
@ -2177,28 +2142,6 @@
|
|||||||
"requires": {
|
"requires": {
|
||||||
"minipass": "^3.1.1"
|
"minipass": "^3.1.1"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"supports-color": {
|
|
||||||
"version": "7.2.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
|
|
||||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"has-flag": "^4.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"vue-loader-v16": {
|
|
||||||
"version": "npm:vue-loader@16.8.3",
|
|
||||||
"resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
|
|
||||||
"integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"chalk": "^4.1.0",
|
|
||||||
"hash-sum": "^2.0.0",
|
|
||||||
"loader-utils": "^2.0.0"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -3356,6 +3299,16 @@
|
|||||||
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
|
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"blueimp-canvas-to-blob": {
|
||||||
|
"version": "3.29.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.29.0.tgz",
|
||||||
|
"integrity": "sha512-0pcSSGxC0QxT+yVkivxIqW0Y4VlO2XSDPofBAqoJ1qJxgH9eiUDLv50Rixij2cDuEfx4M6DpD9UGZpRhT5Q8qg=="
|
||||||
|
},
|
||||||
|
"bmp-js": {
|
||||||
|
"version": "0.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz",
|
||||||
|
"integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw=="
|
||||||
|
},
|
||||||
"bn.js": {
|
"bn.js": {
|
||||||
"version": "5.2.1",
|
"version": "5.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
|
||||||
@ -6949,7 +6902,7 @@
|
|||||||
},
|
},
|
||||||
"file-saver": {
|
"file-saver": {
|
||||||
"version": "2.0.5",
|
"version": "2.0.5",
|
||||||
"resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
|
||||||
"integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
|
"integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
|
||||||
},
|
},
|
||||||
"file-uri-to-path": {
|
"file-uri-to-path": {
|
||||||
@ -7905,6 +7858,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"idb-keyval": {
|
||||||
|
"version": "6.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.2.tgz",
|
||||||
|
"integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg=="
|
||||||
|
},
|
||||||
"ieee754": {
|
"ieee754": {
|
||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
|
||||||
@ -7922,6 +7880,15 @@
|
|||||||
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
|
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"image-compressor.js": {
|
||||||
|
"version": "1.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/image-compressor.js/-/image-compressor.js-1.1.4.tgz",
|
||||||
|
"integrity": "sha512-DF1YFSw+m6FqpXsleD4+q9eu/wFFkm8sHuYhgYy5GWFVencXeuB1/UqC12xz+dCZooPetf5LIb8JOGkgEWmlcg==",
|
||||||
|
"requires": {
|
||||||
|
"blueimp-canvas-to-blob": "^3.14.0",
|
||||||
|
"is-blob": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"image-size": {
|
"image-size": {
|
||||||
"version": "0.5.5",
|
"version": "0.5.5",
|
||||||
"resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
|
"resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
|
||||||
@ -8285,6 +8252,11 @@
|
|||||||
"binary-extensions": "^2.0.0"
|
"binary-extensions": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"is-blob": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-blob/-/is-blob-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-QIZDHQZpRfMEZwSTD7egdNZS7H/awVW9FZ3yJv+gg1z8d8GPXEs76QWL67fZs2BoBqp2dGtamTJpEYFJHmD73g=="
|
||||||
|
},
|
||||||
"is-boolean-object": {
|
"is-boolean-object": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
|
||||||
@ -9952,6 +9924,14 @@
|
|||||||
"lower-case": "^1.1.1"
|
"lower-case": "^1.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node-fetch": {
|
||||||
|
"version": "2.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
|
||||||
|
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
|
||||||
|
"requires": {
|
||||||
|
"whatwg-url": "^5.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node-forge": {
|
"node-forge": {
|
||||||
"version": "0.10.0",
|
"version": "0.10.0",
|
||||||
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
|
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
|
||||||
@ -10273,6 +10253,11 @@
|
|||||||
"is-wsl": "^1.1.0"
|
"is-wsl": "^1.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"opencollective-postinstall": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz",
|
||||||
|
"integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q=="
|
||||||
|
},
|
||||||
"opener": {
|
"opener": {
|
||||||
"version": "1.5.2",
|
"version": "1.5.2",
|
||||||
"resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
|
"resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
|
||||||
@ -14284,6 +14269,27 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"tesseract.js": {
|
||||||
|
"version": "6.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/tesseract.js/-/tesseract.js-6.0.1.tgz",
|
||||||
|
"integrity": "sha512-/sPvMvrCtgxnNRCjbTYbr7BRu0yfWDsMZQ2a/T5aN/L1t8wUQN6tTWv6p6FwzpoEBA0jrN2UD2SX4QQFRdoDbA==",
|
||||||
|
"requires": {
|
||||||
|
"bmp-js": "^0.1.0",
|
||||||
|
"idb-keyval": "^6.2.0",
|
||||||
|
"is-url": "^1.2.4",
|
||||||
|
"node-fetch": "^2.6.9",
|
||||||
|
"opencollective-postinstall": "^2.0.3",
|
||||||
|
"regenerator-runtime": "^0.13.3",
|
||||||
|
"tesseract.js-core": "^6.0.0",
|
||||||
|
"wasm-feature-detect": "^1.2.11",
|
||||||
|
"zlibjs": "^0.3.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tesseract.js-core": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tesseract.js-core/-/tesseract.js-core-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-1Qncm/9oKM7xgrQXZXNB+NRh19qiXGhxlrR8EwFbK5SaUbPZnS5OMtP/ghtqfd23hsr1ZvZbZjeuAGcMxd/ooA=="
|
||||||
|
},
|
||||||
"text-table": {
|
"text-table": {
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
|
||||||
@ -14468,6 +14474,11 @@
|
|||||||
"punycode": "^2.1.1"
|
"punycode": "^2.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"tr46": {
|
||||||
|
"version": "0.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
||||||
|
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
|
||||||
|
},
|
||||||
"traverse": {
|
"traverse": {
|
||||||
"version": "0.6.6",
|
"version": "0.6.6",
|
||||||
"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
|
"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
|
||||||
@ -15043,6 +15054,75 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vue-loader-v16": {
|
||||||
|
"version": "npm:vue-loader@16.8.3",
|
||||||
|
"resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
|
||||||
|
"integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"chalk": "^4.1.0",
|
||||||
|
"hash-sum": "^2.0.0",
|
||||||
|
"loader-utils": "^2.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": {
|
||||||
|
"version": "4.3.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||||
|
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"color-convert": "^2.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"chalk": {
|
||||||
|
"version": "4.1.2",
|
||||||
|
"resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
|
||||||
|
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"ansi-styles": "^4.1.0",
|
||||||
|
"supports-color": "^7.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"color-convert": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"color-name": "~1.1.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"color-name": {
|
||||||
|
"version": "1.1.4",
|
||||||
|
"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
|
||||||
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"has-flag": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"supports-color": {
|
||||||
|
"version": "7.2.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
|
||||||
|
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"has-flag": "^4.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"vue-router": {
|
"vue-router": {
|
||||||
"version": "4.1.3",
|
"version": "4.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.3.tgz",
|
||||||
@ -15109,6 +15189,11 @@
|
|||||||
"integrity": "sha512-WJrK7i6w+ULuZsGscCezbCH4Aev5U3xY87vnSimzzEgPQhb0Sa0a1rE3c2jtEwrFtSfi61Jefw3jI5/DD/3jbQ==",
|
"integrity": "sha512-WJrK7i6w+ULuZsGscCezbCH4Aev5U3xY87vnSimzzEgPQhb0Sa0a1rE3c2jtEwrFtSfi61Jefw3jI5/DD/3jbQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"wasm-feature-detect": {
|
||||||
|
"version": "1.8.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wasm-feature-detect/-/wasm-feature-detect-1.8.0.tgz",
|
||||||
|
"integrity": "sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ=="
|
||||||
|
},
|
||||||
"watchpack": {
|
"watchpack": {
|
||||||
"version": "1.7.5",
|
"version": "1.7.5",
|
||||||
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
|
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
|
||||||
@ -15263,6 +15348,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz",
|
||||||
"integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA=="
|
"integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA=="
|
||||||
},
|
},
|
||||||
|
"webidl-conversions": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||||
|
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
|
||||||
|
},
|
||||||
"webpack": {
|
"webpack": {
|
||||||
"version": "4.46.0",
|
"version": "4.46.0",
|
||||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz",
|
"resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz",
|
||||||
@ -15784,6 +15874,15 @@
|
|||||||
"integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
|
"integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"whatwg-url": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
|
||||||
|
"requires": {
|
||||||
|
"tr46": "~0.0.3",
|
||||||
|
"webidl-conversions": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"which": {
|
"which": {
|
||||||
"version": "1.3.1",
|
"version": "1.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
|
||||||
@ -16047,6 +16146,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"zlibjs": {
|
||||||
|
"version": "0.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/zlibjs/-/zlibjs-0.3.1.tgz",
|
||||||
|
"integrity": "sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w=="
|
||||||
|
},
|
||||||
"zrender": {
|
"zrender": {
|
||||||
"version": "5.3.2",
|
"version": "5.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/zrender/-/zrender-5.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/zrender/-/zrender-5.3.2.tgz",
|
||||||
|
@ -15,7 +15,8 @@
|
|||||||
"@fullcalendar/list": "^5.9.0",
|
"@fullcalendar/list": "^5.9.0",
|
||||||
"@fullcalendar/timegrid": "^5.9.0",
|
"@fullcalendar/timegrid": "^5.9.0",
|
||||||
"@fullcalendar/vue3": "^5.9.0",
|
"@fullcalendar/vue3": "^5.9.0",
|
||||||
"@paddlejs-models/ocr": "^1.2.4",
|
"@paddlejs-models/ocr": "^1.1.2",
|
||||||
|
"@paddlejs-models/ocrdet": "^0.0.3",
|
||||||
"@types/video.js": "^7.3.42",
|
"@types/video.js": "^7.3.42",
|
||||||
"@wangeditor/editor": "^5.1.23",
|
"@wangeditor/editor": "^5.1.23",
|
||||||
"@wangeditor/editor-for-vue": "^5.1.12",
|
"@wangeditor/editor-for-vue": "^5.1.12",
|
||||||
@ -27,11 +28,13 @@
|
|||||||
"element-plus": "2.0.2",
|
"element-plus": "2.0.2",
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
"gifler": "^0.1.0",
|
"gifler": "^0.1.0",
|
||||||
|
"image-compressor.js": "^1.1.4",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"mitt": "^3.0.0",
|
"mitt": "^3.0.0",
|
||||||
"moment": "^2.30.1",
|
"moment": "^2.30.1",
|
||||||
"ol": "^6.14.1",
|
"ol": "^6.14.1",
|
||||||
"pinia": "^3.0.1",
|
"pinia": "^3.0.1",
|
||||||
|
"tesseract.js": "^6.0.1",
|
||||||
"vue": "^3.2.8",
|
"vue": "^3.2.8",
|
||||||
"vue-router": "^4.0.11",
|
"vue-router": "^4.0.11",
|
||||||
"vuex": "^4.0.2",
|
"vuex": "^4.0.2",
|
||||||
|
BIN
public/ocr_v2_det_new/chunk_1.dat
Normal file
10846
public/ocr_v2_det_new/model.json
Normal file
BIN
public/ocr_v2_rec_320/chunk_1.dat
Normal file
BIN
public/ocr_v2_rec_320/chunk_2.dat
Normal file
42769
public/ocr_v2_rec_320/model.json
Normal file
@ -9,7 +9,7 @@
|
|||||||
import * as ocr from "@paddlejs-models/ocr";
|
import * as ocr from "@paddlejs-models/ocr";
|
||||||
import { ref, nextTick, provide, onMounted,getCurrentInstance } from "vue";
|
import { ref, nextTick, provide, onMounted,getCurrentInstance } from "vue";
|
||||||
import { useStore } from "vuex";
|
import { useStore } from "vuex";
|
||||||
import { getItem } from "@/utils/storage";
|
import { getItem, setItem} from "@/utils/storage";
|
||||||
import { generateNewStyle, writeNewStyle } from "@/utils/theme";
|
import { generateNewStyle, writeNewStyle } from "@/utils/theme";
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
@ -26,7 +26,7 @@ const reload = () => {
|
|||||||
provide("reload", reload);
|
provide("reload", reload);
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
document.title = "林芝";
|
document.title = "林芝";
|
||||||
initPage()
|
// initPage()
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -41,7 +41,6 @@ const initPage = async () => {
|
|||||||
} catch (err) {
|
} catch (err) {
|
||||||
proxy.$message({ type: "error", message: "加载失败,请刷新页面" });
|
proxy.$message({ type: "error", message: "加载失败,请刷新页面" });
|
||||||
imgIsLoad = false;
|
imgIsLoad = false;
|
||||||
// initPage()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -599,7 +599,7 @@ export const selectUserDeptPage = (data = {}) => {
|
|||||||
///unifiedLogin
|
///unifiedLogin
|
||||||
export const unifiedLogin = (data) => {
|
export const unifiedLogin = (data) => {
|
||||||
return request({
|
return request({
|
||||||
url: api + `/unifiedLogin`,
|
url: api + `/ssoLogin`,
|
||||||
method: "POST",
|
method: "POST",
|
||||||
data
|
data
|
||||||
});
|
});
|
||||||
|
@ -3,261 +3,306 @@
|
|||||||
-webkit-background-clip: text;
|
-webkit-background-clip: text;
|
||||||
-webkit-text-fill-color: transparent;
|
-webkit-text-fill-color: transparent;
|
||||||
}
|
}
|
||||||
.homeBox{
|
|
||||||
|
.homeBox {
|
||||||
|
width: 100%;
|
||||||
|
height: 100vh;
|
||||||
|
|
||||||
|
.home-aside {
|
||||||
|
position: relative;
|
||||||
|
width: 442px;
|
||||||
|
top: 70px;
|
||||||
|
height: 100%;
|
||||||
|
height: calc(100vh - 72px);
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 10;
|
||||||
|
|
||||||
|
.asideTitle {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 0 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background: linear-gradient(90deg, #124CB3 0%, rgba(18, 76, 179, 0.23) 77%, rgba(18, 76, 179, 0) 100%);
|
||||||
|
border-radius: 0px 0px 0px 0px;
|
||||||
|
height: 40px;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #FFFFFF;
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.asideCnt {
|
||||||
|
height: calc(100% - 40px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.aside-middle {
|
||||||
|
height: calc(100%/2);
|
||||||
|
padding: 4px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.homeBtn {
|
||||||
|
height: 302px;
|
||||||
|
width: calc(100% - 894px);
|
||||||
|
position: absolute;
|
||||||
|
bottom: 2px;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 头部
|
||||||
|
.headBox {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100vh;
|
height: 70px;
|
||||||
.home-aside{
|
background: rgba(0, 0, 0, 0.8);
|
||||||
position: relative;
|
z-index: 2;
|
||||||
width: 442px;
|
|
||||||
top: 70px;
|
.headBoxBg {
|
||||||
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
height: calc(100vh - 72px);
|
background: url("~@/assets/images/home_head.png") no-repeat center center;
|
||||||
overflow: hidden;
|
background-size: 100% 100%;
|
||||||
z-index: 10;
|
height: 151px;
|
||||||
.asideTitle{
|
}
|
||||||
|
|
||||||
|
.top-center {
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: 2%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
font-size: 56px;
|
||||||
|
letter-spacing: 2px;
|
||||||
|
font-family: "YSBTH";
|
||||||
|
white-space: nowrap;
|
||||||
|
background: linear-gradient(180deg, #FFFFFF 0%, #66B5FF 100%);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
text-shadow: 4px 4px 4px rgba(54, 255, 243, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
.topBtn {
|
||||||
|
display: flex;
|
||||||
|
position: absolute;
|
||||||
|
top: 22px;
|
||||||
|
|
||||||
|
.topBtn-item {
|
||||||
|
width: 190px;
|
||||||
|
height: 38px;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: center;
|
||||||
padding: 0 10px;
|
background: url("~@/assets/images/home_btns.png") no-repeat center center;
|
||||||
box-sizing: border-box;
|
|
||||||
background: linear-gradient( 90deg, #124CB3 0%, rgba(18,76,179,0.23) 77%, rgba(18,76,179,0) 100%);
|
|
||||||
border-radius: 0px 0px 0px 0px;
|
|
||||||
height: 40px;
|
|
||||||
.title{
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #FFFFFF;
|
|
||||||
margin-right: 20px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.asideCnt{
|
|
||||||
height: calc(100% - 40px);
|
|
||||||
}
|
|
||||||
.aside-middle{
|
|
||||||
height: calc(100%/2);
|
|
||||||
padding: 4px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.homeBtn{
|
|
||||||
height: 302px;
|
|
||||||
width: calc(100% - 894px);
|
|
||||||
position: absolute;
|
|
||||||
bottom: 2px;
|
|
||||||
left: 50%;
|
|
||||||
transform: translateX(-50%);
|
|
||||||
}
|
|
||||||
// 头部
|
|
||||||
.headBox {
|
|
||||||
position: fixed;
|
|
||||||
top: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 70px;
|
|
||||||
background: rgba(0,0,0,0.8);
|
|
||||||
z-index: 2;
|
|
||||||
.headBoxBg{
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
background: url("~@/assets/images/home_head.png") no-repeat center center;
|
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
height: 151px;
|
font-size: 18px;
|
||||||
}
|
cursor: pointer;
|
||||||
.top-center {
|
|
||||||
position: absolute;
|
span {
|
||||||
left: 50%;
|
|
||||||
top: 2%;
|
|
||||||
transform: translateX(-50%);
|
|
||||||
font-size: 56px;
|
|
||||||
letter-spacing: 2px;
|
|
||||||
font-family: "YSBTH";
|
|
||||||
white-space: nowrap;
|
|
||||||
background: linear-gradient(180deg, #FFFFFF 0%, #66B5FF 100%);
|
|
||||||
-webkit-background-clip: text;
|
|
||||||
-webkit-text-fill-color: transparent;
|
|
||||||
text-shadow: 4px 4px 4px rgba(54, 255, 243, 0.15);
|
|
||||||
}
|
|
||||||
.topBtn {
|
|
||||||
display: flex;
|
|
||||||
position: absolute;
|
|
||||||
top: 22px;
|
|
||||||
.topBtn-item {
|
|
||||||
width: 190px;
|
|
||||||
height: 38px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
background: url("~@/assets/images/home_btns.png") no-repeat center center;
|
|
||||||
background-size: 100% 100%;
|
|
||||||
font-size: 18px;
|
|
||||||
cursor: pointer;
|
|
||||||
span {
|
|
||||||
font-family: "YSBTH";
|
|
||||||
margin-top: -4px;
|
|
||||||
@include textColor(#a1d6ff, #ffffff);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
.topBtn-left {
|
|
||||||
left: 30px;
|
|
||||||
font-size: 12px;
|
|
||||||
.text {
|
|
||||||
font-family: "YSBTH";
|
font-family: "YSBTH";
|
||||||
color: #0bb7ff;
|
margin-top: -4px;
|
||||||
}
|
|
||||||
.tests {
|
|
||||||
color: #0a99ff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.leftBtn-yjbtn{
|
|
||||||
position: absolute;
|
|
||||||
left: 360px;
|
|
||||||
top: 20px;
|
|
||||||
.leftBtn-item{
|
|
||||||
width: 155px;
|
|
||||||
height: 38px;
|
|
||||||
line-height: 38px;
|
|
||||||
text-align: center;
|
|
||||||
background: url("~@/assets/images/home_btns.png") no-repeat center center;
|
|
||||||
background-size: 100% 100%;
|
|
||||||
font-size: 16px;
|
|
||||||
font-family: "YSBTH";
|
|
||||||
}
|
|
||||||
.btms{
|
|
||||||
@include textColor(#a1d6ff, #ffffff);
|
@include textColor(#a1d6ff, #ffffff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.yjbtnActive{
|
|
||||||
background: url("~@/assets/images/home_btns_active.png") no-repeat center center;
|
}
|
||||||
|
|
||||||
|
.topBtn-left {
|
||||||
|
left: 30px;
|
||||||
|
font-size: 12px;
|
||||||
|
|
||||||
|
.text {
|
||||||
|
font-family: "YSBTH";
|
||||||
|
color: #0bb7ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tests {
|
||||||
|
color: #0a99ff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.leftBtn-yjbtn {
|
||||||
|
position: absolute;
|
||||||
|
left: 360px;
|
||||||
|
top: 20px;
|
||||||
|
|
||||||
|
.leftBtn-item {
|
||||||
|
width: 155px;
|
||||||
|
height: 38px;
|
||||||
|
line-height: 38px;
|
||||||
|
text-align: center;
|
||||||
|
background: url("~@/assets/images/home_btns.png") no-repeat center center;
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
.btms{
|
font-size: 16px;
|
||||||
|
font-family: "YSBTH";
|
||||||
|
}
|
||||||
|
|
||||||
|
.btms {
|
||||||
|
@include textColor(#a1d6ff, #ffffff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.yjbtnActive {
|
||||||
|
background: url("~@/assets/images/home_btns_active.png") no-repeat center center;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
|
||||||
|
.btms {
|
||||||
|
@include textColor(#00ffff, #faff00);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.topBtn-right {
|
||||||
|
right: 270px;
|
||||||
|
top: 22px;
|
||||||
|
|
||||||
|
.topBtn-item {
|
||||||
|
background: url("~@/assets/images/home_btns_right.png") no-repeat center center;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active-topBtn {
|
||||||
|
background: url("~@/assets/images/home_btns_right_active.png") no-repeat center center;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
|
||||||
|
span {
|
||||||
@include textColor(#00ffff, #faff00);
|
@include textColor(#00ffff, #faff00);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.topBtn-right {
|
|
||||||
right: 270px;
|
|
||||||
top: 22px;
|
|
||||||
.topBtn-item {
|
|
||||||
background: url("~@/assets/images/home_btns_right.png") no-repeat center
|
|
||||||
center;
|
|
||||||
background-size: 100% 100%;
|
|
||||||
}
|
|
||||||
.active-topBtn {
|
|
||||||
background: url("~@/assets/images/home_btns_right_active.png") no-repeat
|
|
||||||
center center;
|
|
||||||
background-size: 100% 100%;
|
|
||||||
span {
|
|
||||||
@include textColor(#00ffff, #faff00);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.rightIcon {
|
|
||||||
position: absolute;
|
|
||||||
right: 20px;
|
|
||||||
top: 22px;
|
|
||||||
font-size: 17px;
|
|
||||||
z-index: 9;
|
|
||||||
span {
|
|
||||||
color: #0bb7ff;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
img {
|
|
||||||
width: 20px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// 左边
|
|
||||||
.asideL{
|
.rightIcon {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
box-sizing: border-box;
|
right: 20px;
|
||||||
left: 0px;
|
top: 22px;
|
||||||
.asideL-top{
|
font-size: 17px;
|
||||||
width: 100%;
|
|
||||||
height: 141px;
|
|
||||||
background: #052249;
|
|
||||||
}
|
|
||||||
.asideL-Bottom{
|
|
||||||
height: calc(100% - 141px);
|
|
||||||
.commom-aside{
|
|
||||||
height: calc((100%/3) - 6px);
|
|
||||||
margin-top: 7px;
|
|
||||||
background: #052249;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 右边
|
|
||||||
.asideR{
|
|
||||||
position: absolute;
|
|
||||||
right: 0px;
|
|
||||||
.commom-aside-small{
|
|
||||||
height: calc(((100% - 146px) /3) - 6px);
|
|
||||||
background: #052249;
|
|
||||||
margin-top: 9px;
|
|
||||||
}
|
|
||||||
.commom-aside-big{
|
|
||||||
height: calc(((100% - (100% - 146px) /3)/2) - 6px);
|
|
||||||
margin-bottom: 9px;
|
|
||||||
background: #052249;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.home-center{
|
|
||||||
position: absolute;
|
|
||||||
left: 50%;
|
|
||||||
top: 70px;
|
|
||||||
transform: translateX(-50%);
|
|
||||||
width: calc(100% - 890px);
|
|
||||||
height: 80px;
|
|
||||||
z-index: 9;
|
z-index: 9;
|
||||||
|
|
||||||
|
span {
|
||||||
|
color: #0bb7ff;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 左边
|
||||||
|
.asideL {
|
||||||
|
position: absolute;
|
||||||
|
box-sizing: border-box;
|
||||||
|
left: 0px;
|
||||||
|
|
||||||
|
.asideL-top {
|
||||||
|
width: 100%;
|
||||||
|
height: 141px;
|
||||||
background: #052249;
|
background: #052249;
|
||||||
}
|
}
|
||||||
|
|
||||||
.home-foot-t{
|
.asideL-Bottom {
|
||||||
position: absolute;
|
height: calc(100% - 141px);
|
||||||
left: 50%;
|
|
||||||
bottom: 2px;
|
.commom-aside {
|
||||||
transform: translateX(-50%);
|
height: calc((100%/3) - 6px);
|
||||||
width: calc(100% - 920px);
|
margin-top: 7px;
|
||||||
height: calc((100% - 141px)/3 - 32px);
|
background: #052249;
|
||||||
min-width: 560px;
|
|
||||||
overflow: hidden;
|
|
||||||
z-index: 9;
|
|
||||||
background: url("~@/assets/images/right-1.png") no-repeat center center;
|
|
||||||
background-size: 100% 100%;
|
|
||||||
.comom-title{
|
|
||||||
background: url("~@/assets/images/bg18.png") no-repeat center center;
|
|
||||||
background-size: 100% 100%;
|
|
||||||
.title{
|
|
||||||
font-size: 22px;
|
|
||||||
font-family: 'YSBTH';
|
|
||||||
padding-left: 35px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// 公用
|
|
||||||
.comom-title{
|
// 右边
|
||||||
background: url("~@/assets/images/bg17.png") no-repeat center center;
|
.asideR {
|
||||||
|
position: absolute;
|
||||||
|
right: 0px;
|
||||||
|
|
||||||
|
.commom-aside-small {
|
||||||
|
height: calc(((100% - 146px) /3) - 6px);
|
||||||
|
background: #052249;
|
||||||
|
margin-top: 9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.commom-aside-big {
|
||||||
|
height: calc(((100% - (100% - 146px) /3)/2) - 6px);
|
||||||
|
margin-bottom: 9px;
|
||||||
|
background: #052249;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-center {
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: 70px;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
width: calc(100% - 890px);
|
||||||
|
z-index: 9;
|
||||||
|
background: #052249;
|
||||||
|
height: calc(100% - (100% - 141px) / 3 - 45px);
|
||||||
|
|
||||||
|
.middle-top {
|
||||||
|
height: 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.middle-bottom {
|
||||||
|
height: calc(100% - 90px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-foot-t {
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
bottom: 2px;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
width: calc(100% - 920px);
|
||||||
|
height: calc((100% - 141px)/3 - 32px);
|
||||||
|
min-width: 560px;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 9;
|
||||||
|
background: url("~@/assets/images/right-1.png") no-repeat center center;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
|
||||||
|
.comom-title {
|
||||||
|
background: url("~@/assets/images/bg18.png") no-repeat center center;
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
width: 100%;
|
|
||||||
height: 35px;
|
.title {
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
padding: 0 10px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
.title{
|
|
||||||
font-size: 22px;
|
font-size: 22px;
|
||||||
font-family: 'YSBTH';
|
font-family: 'YSBTH';
|
||||||
padding-left: 35px;
|
padding-left: 35px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.comom-cnt{
|
}
|
||||||
height: calc(100% - 35px);
|
|
||||||
padding: 4px 10px;
|
// 公用
|
||||||
box-sizing: border-box;
|
.comom-title {
|
||||||
background: url("~@/assets/images/bg_13.png") no-repeat center center;
|
background: url("~@/assets/images/bg17.png") no-repeat center center;
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
|
width: 100%;
|
||||||
|
height: 35px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 22px;
|
||||||
|
font-family: 'YSBTH';
|
||||||
|
padding-left: 35px;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
|
||||||
|
.comom-cnt {
|
||||||
|
height: calc(100% - 35px);
|
||||||
|
padding: 4px 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background: url("~@/assets/images/bg_13.png") no-repeat center center;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Before Width: | Height: | Size: 540 KiB |
Before Width: | Height: | Size: 212 KiB |
Before Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 948 B |
Before Width: | Height: | Size: 209 B |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 3.3 KiB |
BIN
src/assets/images/ddtb.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 4.0 KiB |
@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path d="M16 2C10.477 2 6 6.477 6 12C6 19.5 16 30 16 30C16 30 26 19.5 26 12C26 6.477 21.523 2 16 2ZM16 16C13.791 16 12 14.209 12 12C12 9.791 13.791 8 16 8C18.209 8 20 9.791 20 12C20 14.209 18.209 16 16 16Z" fill="#00f0ff" stroke="#ffffff" stroke-width="1"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 401 B |
Before Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 6.8 KiB |
BIN
src/assets/images/xxxxxx.png
Normal file
After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 571 B |
Before Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 792 B |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.7 KiB |
104
src/components/ChooseList/ChooseCl/addPeo.vue
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog v-model="showDialog" :destroy-on-close="true" title="新增车辆" @close="close" :close-on-click-modal="false">
|
||||||
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform" :rules="rules">
|
||||||
|
<template #bqList>
|
||||||
|
<div class="marks pointer" @click="chooseMarksVisible = true">
|
||||||
|
<span style="color: rgb(175 178 184);padding-left: 10px;"
|
||||||
|
v-if="!listQuery.bqList || listQuery.bqList.length == 0">请选择标签</span>
|
||||||
|
<span v-else>
|
||||||
|
<el-tag @close.stop="closeTag(idx)" type="success" closable v-for="(it, idx) in listQuery.bqList"
|
||||||
|
:key="idx">{{ it.bqMc }}</el-tag>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</FormMessage>
|
||||||
|
<template #footer>
|
||||||
|
<div class="flex just-center">
|
||||||
|
<el-button @click="close">取消</el-button>
|
||||||
|
<el-button type="primary" @click="submitForm">确认</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
<ChooseMarks v-model="chooseMarksVisible" @choosed="choosed" :roleIds="roleIds" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import ChooseMarks from "@/components/ChooseList/ChooseMarks/index.vue";
|
||||||
|
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||||
|
import { reactive, ref, getCurrentInstance } from 'vue';
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const { D_BZ_XB } = proxy.$dict("D_BZ_XB"); // 获取字典数据
|
||||||
|
const elform = ref()
|
||||||
|
const roleIds = ref([])
|
||||||
|
const showDialog = ref(false)
|
||||||
|
const chooseMarksVisible = ref(false)
|
||||||
|
const emit = defineEmits(['change'])
|
||||||
|
const listQuery = ref({})
|
||||||
|
const formData = ref([
|
||||||
|
{ label: "车牌号", prop: "hphm", type: "input" },
|
||||||
|
{ label: "车架号", prop: "clCjh", type: "input" },
|
||||||
|
{
|
||||||
|
label: "车辆颜色",
|
||||||
|
prop: "clYs",
|
||||||
|
type: "input",
|
||||||
|
},
|
||||||
|
{ label: "车辆所有人", prop: "clSyr", type: "input" },
|
||||||
|
{ label: "人员身份证", prop: "clSyrsfzh", type: "input" },
|
||||||
|
{ label: "责任单位", prop: "zrSsbmdm", depMc: 'zrSsbmmc', type: "department" },
|
||||||
|
{ label: "管辖单位", prop: "gxSsbmdm", depMc: 'gxSsbmmc', type: "department" },
|
||||||
|
{ label: "管控民警姓名", prop: "gkMjXm", type: "input" },
|
||||||
|
{ label: "管控民警警号", prop: "gkMjJh", type: "input" },
|
||||||
|
{ label: "管控原因", prop: "clLkyy", type: "textarea", width: "100%" },
|
||||||
|
{ label: "车辆照片", prop: "fjdz", type: "upload", width: "100%" },
|
||||||
|
])
|
||||||
|
const rules = reactive({
|
||||||
|
hphm: [{ required: true, message: "请输入车牌号", trigger: "blur" }],
|
||||||
|
clCjh: [{ required: true, message: "请输入车架号", trigger: "blur" }],
|
||||||
|
clYs: [{ required: true, message: "请输入车辆颜色", trigger: "blur" }],
|
||||||
|
clSyr: [{ required: true, message: "请输入车辆所有人", trigger: "blur" }],
|
||||||
|
clSyrsfzh: [{ required: true, message: "请输入人员身份证", trigger: "blur" }],
|
||||||
|
})
|
||||||
|
const init = () => {
|
||||||
|
showDialog.value = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 选择标签
|
||||||
|
const choosed = (val) => {
|
||||||
|
listQuery.value.bqList = val.map(v => {
|
||||||
|
return { bqZl: v.bqLb, bqId: v.id, bqLx: v.bqLx, bqLb: v.bqLb, bqMc: v.bqMc, bqDm: v.bqDm }
|
||||||
|
});
|
||||||
|
roleIds.value = val.map(v => v.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除数据
|
||||||
|
const closeTag = (idx) => {
|
||||||
|
listQuery.value.bqList.splice(idx, 1)
|
||||||
|
roleIds.value.splice(idx, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
const submitForm = () => {
|
||||||
|
elform.value.submit((val) => {
|
||||||
|
val.id = new Date().getTime()
|
||||||
|
emit('change', val)
|
||||||
|
showDialog.value = false;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const close = () => {
|
||||||
|
elform.value.reset();
|
||||||
|
listQuery.value.bqList = []
|
||||||
|
roleIds.value = []
|
||||||
|
showDialog.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({ init })
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.marks {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 32px;
|
||||||
|
border: 1px solid #e9e9e9;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
</style>
|
204
src/components/ChooseList/ChooseCl/index.vue
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog width="1400px" :model-value="modelValue" append-to-body @close="closed">
|
||||||
|
<template #title>
|
||||||
|
<span class="mr10 f16">选择布控车辆</span>
|
||||||
|
<el-button type="primary" size="small" @click="zdyaddPerson">添加其他车辆</el-button>
|
||||||
|
</template>
|
||||||
|
<el-form :model="listQuery" :inline="true">
|
||||||
|
<el-form-item label="车牌号">
|
||||||
|
<el-input placeholder="请输入车牌号" v-model="listQuery.hphm" clearable ></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="车架号">
|
||||||
|
<el-input placeholder="请输入车架号" v-model="listQuery.clCjh" clearable ></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="车辆所有人">
|
||||||
|
<el-input placeholder="请输入车辆所有人" v-model="listQuery.clSyr" clearable ></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="success" @click="handleFilter">查询</el-button>
|
||||||
|
<el-button type="info" @click="reset()"> 重置 </el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div class="tabBox" :class="props.Single ? 'tabBoxRadio' : ''" style="margin-top: 0px">
|
||||||
|
<el-table ref="multipleUserRef" :key="keyTabel" v-loading="loading" @selection-change="handleSelectionChange" :data="tableData" border :row-key="keyid" style="width: 100%" height="450">
|
||||||
|
<el-table-column type="selection" width="55" :reserve-selection="true"/>
|
||||||
|
<el-table-column prop="hphm" align="center" label="车牌号"/>
|
||||||
|
<el-table-column prop="clCjh" align="center" label="车架号"/>
|
||||||
|
<el-table-column prop="clYs" align="center" label="车辆颜色"/>
|
||||||
|
<el-table-column prop="clSyr" align="center" label="车辆所有人"/>
|
||||||
|
<el-table-column prop="gxSsbmmc" align="center" label="管辖单位"/>
|
||||||
|
<el-table-column prop="gkMjXm" align="center" label="管控民警"/>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
<div class="fenye flex just-end " :style="{ top: tableHeight + 'px' }">
|
||||||
|
<el-pagination
|
||||||
|
class="pagination"
|
||||||
|
@size-change="handleSizeChange"
|
||||||
|
@current-change="handleCurrentChange"
|
||||||
|
:current-page="listQuery.pageCurrent"
|
||||||
|
:page-sizes="[10, 20, 50, 100]"
|
||||||
|
:page-size="listQuery.pageSize"
|
||||||
|
layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
:total="total"
|
||||||
|
></el-pagination>
|
||||||
|
</div>
|
||||||
|
<template #footer>
|
||||||
|
<div class="flex just-center">
|
||||||
|
<el-button @click="closed">取消</el-button>
|
||||||
|
<el-button type="primary" @click="onComfirm">确认</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
<!-- 自定义选添加人 -->
|
||||||
|
<AddPeo ref="addPerson" @change="changeZdy"></AddPeo>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import AddPeo from './addPeo.vue'
|
||||||
|
import { qcckGet} from "@/api/qcckApi.js";
|
||||||
|
import { defineProps, ref ,getCurrentInstance, watch} from "vue";
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const { D_BZ_XB,D_BZ_MZ } = proxy.$dict("D_BZ_XB","D_BZ_MZ"); //获取字典数据
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue: {
|
||||||
|
type: Boolean,
|
||||||
|
default:false
|
||||||
|
},
|
||||||
|
LeaderType: {
|
||||||
|
type: String,
|
||||||
|
default: ""
|
||||||
|
},
|
||||||
|
//是否单选
|
||||||
|
Single: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
roleIds: {
|
||||||
|
type: Array,
|
||||||
|
default: []
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const loading = ref(false)
|
||||||
|
const total = ref(0);
|
||||||
|
const listQuery = ref({
|
||||||
|
pageCurrent: 1,
|
||||||
|
pageSize: 20
|
||||||
|
});
|
||||||
|
const addPerson = ref()
|
||||||
|
const multipleUserRef = ref(null);
|
||||||
|
const multipleSelectionUser = ref([]);
|
||||||
|
const tableData = ref([]);
|
||||||
|
const emits = defineEmits(["update:modelValue", "choosed","choosedAdd"]);
|
||||||
|
const keyTabel = ref(0)
|
||||||
|
const keyid = (row) => {
|
||||||
|
return row.id;
|
||||||
|
};
|
||||||
|
|
||||||
|
const closed = () => {
|
||||||
|
emits("update:modelValue", false);
|
||||||
|
};
|
||||||
|
const reset = () => {
|
||||||
|
listQuery.value = { pageCurrent: 1, pageSize: 20, };
|
||||||
|
getListData();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 为用户分配角色
|
||||||
|
const onComfirm = () => {
|
||||||
|
const userList = multipleSelectionUser.value;
|
||||||
|
let list = [];
|
||||||
|
let listId = [];
|
||||||
|
userList.forEach((val) => {
|
||||||
|
if (listId.indexOf(val.id) == -1) {
|
||||||
|
list.push(val);
|
||||||
|
listId.push(val.id);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
emits("choosed", list);
|
||||||
|
closed();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 自定义加人
|
||||||
|
const changeZdy = (val) => {
|
||||||
|
emits("choosedAdd", val);
|
||||||
|
closed();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* pageSize 改变触发
|
||||||
|
*/
|
||||||
|
const handleSizeChange = (currentSize) => {
|
||||||
|
listQuery.value.pageSize = currentSize;
|
||||||
|
getListData();
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* 页码改变触发
|
||||||
|
*/
|
||||||
|
const handleCurrentChange = (currentPage) => {
|
||||||
|
listQuery.value.pageCurrent = currentPage;
|
||||||
|
getListData();
|
||||||
|
};
|
||||||
|
const getListData = () => {
|
||||||
|
keyTabel.value++
|
||||||
|
const params = {...listQuery.value}
|
||||||
|
loading.value = true;
|
||||||
|
qcckGet(params,'/mosty-gsxt/tbGsxtZdcl/selectPage').then(res=>{
|
||||||
|
loading.value = false;
|
||||||
|
tableData.value = res.records || [];
|
||||||
|
total.value = res.total;
|
||||||
|
multipleUser();
|
||||||
|
}).catch(()=>{
|
||||||
|
loading.value = false;
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
//列表回显
|
||||||
|
function multipleUser() {
|
||||||
|
tableData.value.forEach((item) => {
|
||||||
|
multipleUserRef.value.toggleRowSelection(item, false);
|
||||||
|
if (props.roleIds.some((id) => id == item.id)) {
|
||||||
|
multipleUserRef.value.toggleRowSelection(item, true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleFilter = () => {
|
||||||
|
listQuery.value.pageCurrent = 1;
|
||||||
|
getListData();
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleSelectionChange = (val) => {
|
||||||
|
if (props.Single) {
|
||||||
|
if (val.length > 1) {
|
||||||
|
let del_row = val.shift();
|
||||||
|
multipleUserRef.value.toggleRowSelection(del_row, false);
|
||||||
|
}
|
||||||
|
multipleSelectionUser.value = val;
|
||||||
|
} else {
|
||||||
|
multipleSelectionUser.value = val;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const zdyaddPerson = () => {
|
||||||
|
addPerson.value.init();
|
||||||
|
};
|
||||||
|
|
||||||
|
watch(()=>props.modelValue,val=>{
|
||||||
|
if(val) handleFilter();
|
||||||
|
},{immediate:true})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "@/assets/css/layout.scss";
|
||||||
|
@import "@/assets/css/element-plus.scss";
|
||||||
|
</style>
|
||||||
|
<style>
|
||||||
|
.tabBoxRadio .el-checkbox__inner {
|
||||||
|
border-radius: 50% !important;
|
||||||
|
}
|
||||||
|
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
@ -46,11 +46,15 @@ const mMap = ref(null); //地图对象
|
|||||||
const mapUtil = ref(null); //地图工具对象
|
const mapUtil = ref(null); //地图工具对象
|
||||||
const zoomTarget = ref(6);
|
const zoomTarget = ref(6);
|
||||||
|
|
||||||
|
// 定义组件发出的事件
|
||||||
|
const emit = defineEmits(['mapLoaded'])
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
mapid: {
|
mapid: {
|
||||||
type: String,
|
type: String,
|
||||||
default: "mapDiv"
|
default: "mapDiv"
|
||||||
},
|
},
|
||||||
|
|
||||||
//是否显示可以切换地图底图
|
//是否显示可以切换地图底图
|
||||||
isShow: {
|
isShow: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
@ -79,13 +83,15 @@ let map;
|
|||||||
let mapLayer;
|
let mapLayer;
|
||||||
let mapLayer1;
|
let mapLayer1;
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
console.log("xxxxxxx");
|
||||||
|
|
||||||
emitter.on("followUp", (res) => {
|
emitter.on("followUp", (res) => {
|
||||||
let box = document.getElementsByClassName("changeMap_box");
|
let box = document.getElementsByClassName("changeMap_box");
|
||||||
if (!box) return;
|
if (!box) return;
|
||||||
box[0].style.right = !res ? "4px" : "398px";
|
box[0].style.right = !res ? "4px" : "398px";
|
||||||
box[0].style.transition = "0.5s";
|
box[0].style.transition = "0.5s";
|
||||||
});
|
});
|
||||||
|
|
||||||
map = new EliMap({
|
map = new EliMap({
|
||||||
id: props.mapid,
|
id: props.mapid,
|
||||||
crs: "EPSG:3857",
|
crs: "EPSG:3857",
|
||||||
@ -110,6 +116,8 @@ onMounted(() => {
|
|||||||
url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
|
url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
|
||||||
})
|
})
|
||||||
zoomTarget.value = map.mapboxGLMap.getZoom();
|
zoomTarget.value = map.mapboxGLMap.getZoom();
|
||||||
|
// 地图加载完成后发出事件
|
||||||
|
emit('mapLoaded')
|
||||||
});
|
});
|
||||||
mapUtil.value = new MapUtil(map);
|
mapUtil.value = new MapUtil(map);
|
||||||
|
|
||||||
@ -253,7 +261,7 @@ const mapSetLayer = (id, source) => {
|
|||||||
|
|
||||||
//获取地图绘制的数据
|
//获取地图绘制的数据
|
||||||
const resFun = (coord, type, flag, data) => {
|
const resFun = (coord, type, flag, data) => {
|
||||||
|
|
||||||
emitter.emit("coordString", {
|
emitter.emit("coordString", {
|
||||||
coord: coord,
|
coord: coord,
|
||||||
type: type,
|
type: type,
|
||||||
|
125
src/components/MarkdownEdit/index.vue
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
<template>
|
||||||
|
<div style="border: 1px solid #ccc">
|
||||||
|
<!-- 工具栏 -->
|
||||||
|
<Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig" :mode="mode" />
|
||||||
|
<!-- 编辑器 -->
|
||||||
|
<Editor :style="`height: ${props.heightNumber}px; overflow-y: hidden`" v-model="editorVal" :defaultConfig="editorConfig" :mode="mode" @onCreated="handleCreated" @onChange="handChange" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { compressImage } from "@/utils/tools.js";
|
||||||
|
import "@wangeditor/editor/dist/css/style.css";
|
||||||
|
import { qcckPost } from "@/api/qcckApi.js";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
|
||||||
|
import {
|
||||||
|
ref,
|
||||||
|
onMounted,
|
||||||
|
shallowRef,
|
||||||
|
onBeforeUnmount,
|
||||||
|
defineEmits,
|
||||||
|
defineProps,
|
||||||
|
watch
|
||||||
|
} from "vue";
|
||||||
|
const props = defineProps({
|
||||||
|
// 编辑器内容
|
||||||
|
modelValue: {
|
||||||
|
type: String,
|
||||||
|
default: ""
|
||||||
|
},
|
||||||
|
markitVal: {
|
||||||
|
type: String,
|
||||||
|
default: ""
|
||||||
|
},
|
||||||
|
placeholder: {
|
||||||
|
type: String,
|
||||||
|
default: "请输入内容。。。。"
|
||||||
|
},
|
||||||
|
heightNumber: {
|
||||||
|
type: Number,
|
||||||
|
default: 500
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const editorVal = ref("");
|
||||||
|
const editorRef = shallowRef();
|
||||||
|
const mode = "default";
|
||||||
|
const valueHtml = ref(""); //内容
|
||||||
|
//工具配置
|
||||||
|
const toolbarConfig = {
|
||||||
|
excludeKeys: ["blockquote", "codeBlock"] //清除不必要的工具,引用和代码块
|
||||||
|
};
|
||||||
|
const emits = defineEmits(["update:modelValue", "changeFn"]);
|
||||||
|
//编辑器配置
|
||||||
|
const editorConfig = {
|
||||||
|
withCredentials: true, //允许跨域
|
||||||
|
placeholder: props.placeholder, //提示语
|
||||||
|
MENU_CONF: {
|
||||||
|
uploadImage: {
|
||||||
|
// 自定义上传图片
|
||||||
|
async customUpload(file, insertFn) {
|
||||||
|
let fileBlob = await compressImage(file);
|
||||||
|
let fileData = new File([fileBlob], fileBlob.name, {
|
||||||
|
type: fileBlob.type
|
||||||
|
});
|
||||||
|
if (fileData.size > 2 * 1024 * 1024) {
|
||||||
|
ElMessage({
|
||||||
|
message: "图片超过2MB",
|
||||||
|
type: "success"
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
await uploadFn(fileData, insertFn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// server: "/mosty-api/mosty-base/minio/image/upload",
|
||||||
|
// base64LimitSize: 10000 * 1024,
|
||||||
|
},
|
||||||
|
uploadVideo: {
|
||||||
|
// 自定义上传视频
|
||||||
|
async customUpload(file, insertFn) {
|
||||||
|
await uploadFn(file, insertFn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
watch(
|
||||||
|
[() => props.markitVal, () => editorRef.value],
|
||||||
|
(val) => {
|
||||||
|
// if (val) editorRef.value = val;
|
||||||
|
if ((val[0] && val[1]) || val[0] == "") {
|
||||||
|
editorVal.value = val[0];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ deep: true, immediate: true }
|
||||||
|
);
|
||||||
|
|
||||||
|
const uploadFn = (file, insertFn) => {
|
||||||
|
let param = new FormData();
|
||||||
|
param.append("file", file);
|
||||||
|
qcckPost(param, "/mosty-base/minio/image/upload").then((res) => {
|
||||||
|
insertFn(res);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//编辑器创建成功
|
||||||
|
const handleCreated = (editor) => {
|
||||||
|
editorRef.value = editor;
|
||||||
|
};
|
||||||
|
//内容发生变化
|
||||||
|
const handChange = (editor) => {
|
||||||
|
// console.log(editor.getHtml(),'editor.getText()');
|
||||||
|
// 判断是否是一个空段落,是空就传空文本
|
||||||
|
if (editor.isEmpty()) {
|
||||||
|
emits("changeFn", editor.getText());
|
||||||
|
} else {
|
||||||
|
emits("changeFn", editor.getHtml());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
onBeforeUnmount(() => {
|
||||||
|
const editor = editorRef.value;
|
||||||
|
if (editor) editor.destroy();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
</style>
|
@ -1,12 +1,21 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="form-item-box" :style="{ width: width }">
|
<div class="form-item-box" :style="{ width: width }">
|
||||||
<el-date-picker style="width:100%" v-model="modelValue" type="date" v-bind="$attrs" @change="onInput" :placeholder="placeholder" :value-format="props.format"/>
|
<el-date-picker
|
||||||
|
style="width:100%"
|
||||||
|
v-model="localModelValue"
|
||||||
|
:type="props.type"
|
||||||
|
v-bind="$attrs"
|
||||||
|
@change="onInput"
|
||||||
|
:placeholder="placeholder"
|
||||||
|
:value-format="props.format"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { COMPONENT_WIDTH } from "@/constant";
|
import { COMPONENT_WIDTH } from "@/constant";
|
||||||
import { ref, defineProps, defineEmits, defineExpose } from "vue";
|
import { ref, defineProps, defineEmits, defineExpose, computed } from "vue";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
//获取组件传值
|
//获取组件传值
|
||||||
placeholder: {
|
placeholder: {
|
||||||
@ -25,12 +34,21 @@ const props = defineProps({
|
|||||||
default: COMPONENT_WIDTH,
|
default: COMPONENT_WIDTH,
|
||||||
type: String
|
type: String
|
||||||
},
|
},
|
||||||
|
type: {
|
||||||
|
default: "date",
|
||||||
|
type: String
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const emits = defineEmits(["update:modelValue"]);
|
const emits = defineEmits(["update:modelValue"]);
|
||||||
|
|
||||||
|
// 使用计算属性处理双向绑定
|
||||||
|
const localModelValue = computed({
|
||||||
|
get: () => props.modelValue,
|
||||||
|
set: (value) => emits("update:modelValue", value)
|
||||||
|
});
|
||||||
|
|
||||||
const onInput = (e) => {
|
const onInput = (e) => {
|
||||||
emits("update:modelValue", e);
|
emits("update:modelValue", e);
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -83,6 +83,10 @@ const props = defineProps({
|
|||||||
inline: {
|
inline: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: true
|
default: true
|
||||||
|
},
|
||||||
|
disabled: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const elform = ref();
|
const elform = ref();
|
||||||
@ -103,18 +107,25 @@ const reset = () => {
|
|||||||
elform.value.resetFields()
|
elform.value.resetFields()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 修改这里的watch逻辑,避免无限循环
|
||||||
|
let isUpdatingFromProps = false;
|
||||||
|
|
||||||
watch(() => listQuery.value, (newVal) => {
|
watch(() => listQuery.value, (newVal) => {
|
||||||
if (newVal) emits("update:modelValue", newVal);
|
if (newVal && !isUpdatingFromProps) {
|
||||||
}, { immediate: true, deep: true });
|
emits("update:modelValue", newVal);
|
||||||
|
}
|
||||||
|
}, { deep: true });
|
||||||
|
|
||||||
watch(() => props.modelValue, (newVal) => {
|
watch(() => props.modelValue, (newVal) => {
|
||||||
// 只有在新值确实变化时才更新(避免空值覆盖)
|
// 只有在新值确实变化时才更新(避免空值覆盖)
|
||||||
if (newVal && Object.keys(newVal).length > 0) {
|
if (newVal && Object.keys(newVal).length > 0) {
|
||||||
|
isUpdatingFromProps = true;
|
||||||
listQuery.value = { ...newVal };
|
listQuery.value = { ...newVal };
|
||||||
|
setTimeout(() => {
|
||||||
|
isUpdatingFromProps = false;
|
||||||
|
}, 0);
|
||||||
}
|
}
|
||||||
}, { immediate: true, deep: true });
|
}, { immediate: true, deep: true });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
defineExpose({ submit, reset });
|
defineExpose({ submit, reset });
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div style="width: 100%">
|
<div style="width: 100%" :class="getConfiger.showSelectType === 'radio' ? 'tabBoxRadio' : ''">
|
||||||
<!-- hasChildren要在tableData中定义表示当前行有没有下一级 children要在tableData中定义表示下一级的数据-->
|
<!-- hasChildren要在tableData中定义表示当前行有没有下一级 children要在tableData中定义表示下一级的数据-->
|
||||||
<el-table
|
<el-table
|
||||||
ref="multipleTableRef"
|
ref="multipleTableRef"
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
@selection-change="handleSelectionChange"
|
@selection-change="handleSelectionChange"
|
||||||
@current-change="handleCurrentChange"
|
|
||||||
@row-click="singleElection"
|
|
||||||
:row-key="getConfiger.rowKey"
|
:row-key="getConfiger.rowKey"
|
||||||
:border="getConfiger.border"
|
:border="getConfiger.border"
|
||||||
:default-expand-all="getConfiger.defaultExpandAll"
|
:default-expand-all="getConfiger.defaultExpandAll"
|
||||||
@ -21,23 +19,7 @@
|
|||||||
:highlight-current-row="getConfiger.showSelectType === 'radio'"
|
:highlight-current-row="getConfiger.showSelectType === 'radio'"
|
||||||
:row-style="{ height: getConfiger.rowHeight === 'auto' ? getConfiger.rowHeight : getConfiger.rowHeight + 'px'}"
|
:row-style="{ height: getConfiger.rowHeight === 'auto' ? getConfiger.rowHeight : getConfiger.rowHeight + 'px'}"
|
||||||
>
|
>
|
||||||
<el-table-column
|
<el-table-column type="selection" width="55" />
|
||||||
type="selection"
|
|
||||||
width="55"
|
|
||||||
v-if="getConfiger.showSelectType === 'checkBox'"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
width="55"
|
|
||||||
v-else-if="getConfiger.showSelectType === 'radio'"
|
|
||||||
#default="{ row }"
|
|
||||||
>
|
|
||||||
<el-radio
|
|
||||||
class="radio"
|
|
||||||
v-model="getConfiger.radioChoose"
|
|
||||||
:label="row[getConfiger.rowKey]"
|
|
||||||
> </el-radio
|
|
||||||
>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column
|
<el-table-column
|
||||||
type="index"
|
type="index"
|
||||||
label="序号"
|
label="序号"
|
||||||
@ -148,19 +130,16 @@ onMounted(() => {
|
|||||||
});
|
});
|
||||||
// 可选的时候选择的数据
|
// 可选的时候选择的数据
|
||||||
const handleSelectionChange = (val) => {
|
const handleSelectionChange = (val) => {
|
||||||
emit("chooseData", val);
|
if(getConfiger.showSelectType === 'radio' && val.length > 1){
|
||||||
};
|
let del_row = val.shift();
|
||||||
// 单选的时候选择的数据
|
multipleTableRef.value.toggleRowSelection(del_row, false);
|
||||||
const handleCurrentChange = (val) => {
|
currentRow.value = val;
|
||||||
currentRow.value = val;
|
emit("chooseData", val);
|
||||||
emit("chooseData", val);
|
}else{
|
||||||
};
|
|
||||||
const singleElection = (val) => {
|
|
||||||
if (getConfiger.showSelectType === "radio") {
|
|
||||||
getConfiger.radioChoose = val[getConfiger.rowKey];
|
|
||||||
emit("chooseData", val);
|
emit("chooseData", val);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 懒加载数据的方法
|
// 懒加载数据的方法
|
||||||
const load = (date, treeNode, resolve) => {
|
const load = (date, treeNode, resolve) => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
@ -184,25 +163,14 @@ const load = (date, treeNode, resolve) => {
|
|||||||
function setDefaultChoose() {
|
function setDefaultChoose() {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
// 多选的默认选中
|
// 多选的默认选中
|
||||||
if (
|
if ( props.tableConfiger.defaultSelectKeys?.length > 0 && props.tableConfiger.showSelectType === "checkBox" ) {
|
||||||
props.tableConfiger.defaultSelectKeys?.length > 0 &&
|
|
||||||
props.tableConfiger.showSelectType === "checkBox"
|
|
||||||
) {
|
|
||||||
props.tableData.forEach((item) => {
|
props.tableData.forEach((item) => {
|
||||||
if (
|
if ( props.tableConfiger.defaultSelectKeys.findIndex( (v) => v === item[props.tableConfiger.rowKey] ) > -1) {
|
||||||
props.tableConfiger.defaultSelectKeys.findIndex(
|
|
||||||
(v) => v === item[props.tableConfiger.rowKey]
|
|
||||||
) > -1
|
|
||||||
) {
|
|
||||||
multipleTableRef.value.toggleRowSelection(item, true);
|
multipleTableRef.value.toggleRowSelection(item, true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// 单选的默认选中
|
// 单选的默认选中
|
||||||
} else if (
|
} else if ( props.tableConfiger.defaultSelectKeys && props.tableConfiger.defaultSelectKeys?.length > 0 && props.tableConfiger.showSelectType === "radio" ) {
|
||||||
props.tableConfiger.defaultSelectKeys &&
|
|
||||||
props.tableConfiger.defaultSelectKeys?.length > 0 &&
|
|
||||||
props.tableConfiger.showSelectType === "radio"
|
|
||||||
) {
|
|
||||||
getConfiger.radioChoose = props.tableConfiger.defaultSelectKeys[0];
|
getConfiger.radioChoose = props.tableConfiger.defaultSelectKeys[0];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -212,3 +180,12 @@ function setDefaultChoose() {
|
|||||||
<style lang = "scss">
|
<style lang = "scss">
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
<style>
|
||||||
|
.tabBoxRadio .el-checkbox__inner {
|
||||||
|
border-radius: 50% !important;
|
||||||
|
}
|
||||||
|
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
114
src/components/ypModel/index.vue
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog v-model="modelValue" center width="1000px" :destroy-on-close="true" title="报告模板" @close="close" :close-on-click-modal="false">
|
||||||
|
<div class="cntBox">
|
||||||
|
<!-- 工具栏 -->
|
||||||
|
<Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig" :mode="mode" />
|
||||||
|
<!-- 编辑器 -->
|
||||||
|
<Editor :style="`height: ${props.heightNumber}px; overflow-y: hidden`" v-model="textContent" :defaultConfig="editorConfig" :mode="mode" @onCreated="handleCreated" @onChange="handChange" />
|
||||||
|
</div>
|
||||||
|
<template #footer>
|
||||||
|
<el-button type="primary">暂存</el-button>
|
||||||
|
<el-button type="primary">下载</el-button>
|
||||||
|
<el-button type="primary" @click="close">取消</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { compressImage } from "@/utils/tools.js";
|
||||||
|
import "@wangeditor/editor/dist/css/style.css";
|
||||||
|
import { qcckPost } from "@/api/qcckApi.js";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
|
||||||
|
import { ref, shallowRef, onBeforeUnmount, defineEmits, defineProps, watch } from "vue";
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue:{
|
||||||
|
type:Boolean,
|
||||||
|
default:false
|
||||||
|
},
|
||||||
|
// 编辑器内容
|
||||||
|
textContent: {
|
||||||
|
type: String,
|
||||||
|
default: ""
|
||||||
|
},
|
||||||
|
placeholder: {
|
||||||
|
type: String,
|
||||||
|
default: "请输入内容。。。。"
|
||||||
|
},
|
||||||
|
heightNumber: {
|
||||||
|
type: Number,
|
||||||
|
default: 448
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const editorRef = shallowRef();
|
||||||
|
const mode = "default";
|
||||||
|
//工具配置
|
||||||
|
const toolbarConfig = {
|
||||||
|
excludeKeys: ["blockquote", "codeBlock"] //清除不必要的工具,引用和代码块
|
||||||
|
};
|
||||||
|
const emits = defineEmits(["update:textContent", "changeFn"]);
|
||||||
|
//编辑器配置
|
||||||
|
const editorConfig = {
|
||||||
|
withCredentials: true, //允许跨域
|
||||||
|
placeholder: props.placeholder, //提示语
|
||||||
|
MENU_CONF: {
|
||||||
|
uploadImage: {
|
||||||
|
// 自定义上传图片
|
||||||
|
async customUpload(file, insertFn) {
|
||||||
|
let fileBlob = await compressImage(file);
|
||||||
|
let fileData = new File([fileBlob], fileBlob.name, { type: fileBlob.type });
|
||||||
|
if (fileData.size > 2 * 1024 * 1024) {
|
||||||
|
ElMessage({ message: "图片超过2MB", type: "success" });
|
||||||
|
} else {
|
||||||
|
await uploadFn(fileData, insertFn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
uploadVideo: {
|
||||||
|
// 自定义上传视频
|
||||||
|
async customUpload(file, insertFn) {
|
||||||
|
await uploadFn(file, insertFn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const uploadFn = (file, insertFn) => {
|
||||||
|
let param = new FormData();
|
||||||
|
param.append("file", file);
|
||||||
|
qcckPost(param, "/mosty-base/minio/image/upload").then((res) => {
|
||||||
|
insertFn(res);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//编辑器创建成功
|
||||||
|
const handleCreated = (editor) => {
|
||||||
|
editorRef.value = editor;
|
||||||
|
};
|
||||||
|
//内容发生变化
|
||||||
|
const handChange = (editor) => {
|
||||||
|
console.log(editor.getHtml(),'====editor.getHtml()');
|
||||||
|
// 判断是否是一个空段落,是空就传空文本
|
||||||
|
if (editor.isEmpty()) {
|
||||||
|
emits("changeFn", editor.getText());
|
||||||
|
} else {
|
||||||
|
emits("changeFn", editor.getHtml());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
onBeforeUnmount(() => {
|
||||||
|
const editor = editorRef.value;
|
||||||
|
if (editor) editor.destroy();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.cntBox{
|
||||||
|
height: 60vh;
|
||||||
|
padding: 8px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
overflow: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
|
border: 1px dashed #e9e9e9;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
@ -56,7 +56,9 @@ onMounted(() => {
|
|||||||
active.value = "LZ";
|
active.value = "LZ";
|
||||||
});
|
});
|
||||||
const logout = () => {
|
const logout = () => {
|
||||||
store.dispatch("user/logout");
|
window.opener = null;
|
||||||
|
window.open('', '_self');
|
||||||
|
window.close();
|
||||||
store.commit("app/clearTag", null, { immediate: true });
|
store.commit("app/clearTag", null, { immediate: true });
|
||||||
store.commit("permission/deleteRouter", { immediate: true });
|
store.commit("permission/deleteRouter", { immediate: true });
|
||||||
store.commit("user/deleteKeepLiiveRoute", "home");
|
store.commit("user/deleteKeepLiiveRoute", "home");
|
||||||
|
@ -28,13 +28,12 @@ const updatePwd = () => {
|
|||||||
const store = useStore();
|
const store = useStore();
|
||||||
|
|
||||||
const logout = () => {
|
const logout = () => {
|
||||||
store.dispatch("user/logout");
|
window.opener = null;
|
||||||
store.commit("app/clearTag", null, {
|
window.open('', '_self');
|
||||||
immediate: true
|
window.close();
|
||||||
});
|
store.commit("app/clearTag", null, { immediate: true });
|
||||||
store.commit("permission/deleteRouter", {
|
store.commit("permission/deleteRouter", { immediate: true });
|
||||||
immediate: true
|
store.commit("user/deleteKeepLiiveRoute", "home");
|
||||||
});
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -340,7 +340,7 @@ export const publicRoutes = [
|
|||||||
"@/views/backOfficeSystem/HumanIntelligence/CollectCrculate/index"
|
"@/views/backOfficeSystem/HumanIntelligence/CollectCrculate/index"
|
||||||
),
|
),
|
||||||
meta: {
|
meta: {
|
||||||
title: "人力情报数据采集管理",
|
title: "人力情报管理",
|
||||||
icon: "article"
|
icon: "article"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -390,6 +390,15 @@ export const publicRoutes = [
|
|||||||
icon: "article"
|
icon: "article"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
// {
|
||||||
|
// path: "/MakeAcomment",
|
||||||
|
// name: "MakeAcomment",
|
||||||
|
// component: () => import("@/views/backOfficeSystem/MakeAcomment/index"),
|
||||||
|
// meta: {
|
||||||
|
// title: "情报评一评",
|
||||||
|
// icon: "article"
|
||||||
|
// }
|
||||||
|
// }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -485,7 +494,7 @@ export const publicRoutes = [
|
|||||||
{
|
{
|
||||||
path: "/mpvPeo",
|
path: "/mpvPeo",
|
||||||
name: "mpvPeo",
|
name: "mpvPeo",
|
||||||
component: () =>import("@/views/backOfficeSystem/DeploymentDisposal/mpvPeo/index"),
|
component: () => import("@/views/backOfficeSystem/DeploymentDisposal/mpvPeo/index"),
|
||||||
meta: {
|
meta: {
|
||||||
title: "重点人管理",
|
title: "重点人管理",
|
||||||
icon: "article"
|
icon: "article"
|
||||||
@ -494,7 +503,7 @@ export const publicRoutes = [
|
|||||||
{
|
{
|
||||||
path: "/mpvPeoSh",
|
path: "/mpvPeoSh",
|
||||||
name: "mpvPeoSh",
|
name: "mpvPeoSh",
|
||||||
component: () =>import("@/views/backOfficeSystem/DeploymentDisposal/mpvPeoSh/index"),
|
component: () => import("@/views/backOfficeSystem/DeploymentDisposal/mpvPeoSh/index"),
|
||||||
meta: {
|
meta: {
|
||||||
title: "重点人审批",
|
title: "重点人审批",
|
||||||
icon: "article"
|
icon: "article"
|
||||||
@ -503,7 +512,7 @@ export const publicRoutes = [
|
|||||||
{
|
{
|
||||||
path: "/mpvGroup",
|
path: "/mpvGroup",
|
||||||
name: "mpvGroup",
|
name: "mpvGroup",
|
||||||
component: () =>import("@/views/backOfficeSystem/DeploymentDisposal/mpvGroup/index"),
|
component: () => import("@/views/backOfficeSystem/DeploymentDisposal/mpvGroup/index"),
|
||||||
meta: {
|
meta: {
|
||||||
title: "重点群体管理",
|
title: "重点群体管理",
|
||||||
icon: "article"
|
icon: "article"
|
||||||
@ -512,7 +521,7 @@ export const publicRoutes = [
|
|||||||
{
|
{
|
||||||
path: "/mpvGroupSh",
|
path: "/mpvGroupSh",
|
||||||
name: "mpvGroupSh",
|
name: "mpvGroupSh",
|
||||||
component: () =>import("@/views/backOfficeSystem/DeploymentDisposal/mpvGroupSh/index"),
|
component: () => import("@/views/backOfficeSystem/DeploymentDisposal/mpvGroupSh/index"),
|
||||||
meta: {
|
meta: {
|
||||||
title: "重点群体审核",
|
title: "重点群体审核",
|
||||||
icon: "article"
|
icon: "article"
|
||||||
@ -521,7 +530,7 @@ export const publicRoutes = [
|
|||||||
{
|
{
|
||||||
path: "/mpvCar",
|
path: "/mpvCar",
|
||||||
name: "mpvCar",
|
name: "mpvCar",
|
||||||
component: () =>import("@/views/backOfficeSystem/DeploymentDisposal/mpvCar/index"),
|
component: () => import("@/views/backOfficeSystem/DeploymentDisposal/mpvCar/index"),
|
||||||
meta: {
|
meta: {
|
||||||
title: "重点车辆管理",
|
title: "重点车辆管理",
|
||||||
icon: "article"
|
icon: "article"
|
||||||
@ -537,15 +546,27 @@ export const publicRoutes = [
|
|||||||
icon: "article"
|
icon: "article"
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
|
// {
|
||||||
|
// path: "/surveillanceControl",
|
||||||
|
// name: "surveillanceControl",
|
||||||
|
// component: () =>
|
||||||
|
// import(
|
||||||
|
// "@/views/backOfficeSystem/BasicManagement/surveillanceControl/index"
|
||||||
|
// ),
|
||||||
|
// meta: {
|
||||||
|
// title: "布控监视",
|
||||||
|
// icon: "article"
|
||||||
|
// }
|
||||||
|
// },
|
||||||
{
|
{
|
||||||
path: "/surveillanceControl",
|
path: "/experienceShare",
|
||||||
name: "surveillanceControl",
|
name: "experienceShare",
|
||||||
component: () =>
|
component: () =>
|
||||||
import(
|
import(
|
||||||
"@/views/backOfficeSystem/BasicManagement/surveillanceControl/index"
|
"@/views/backOfficeSystem/BasicManagement/experienceShare/index"
|
||||||
),
|
),
|
||||||
meta: {
|
meta: {
|
||||||
title: "布控监视",
|
title: "经验分享",
|
||||||
icon: "article"
|
icon: "article"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -221,7 +221,7 @@ export default {
|
|||||||
removeAllItem();
|
removeAllItem();
|
||||||
// 待补充 清理权限相关的配置
|
// 待补充 清理权限相关的配置
|
||||||
if (isOatuh) {
|
if (isOatuh) {
|
||||||
window.location.href = `http://80.149.27.78:8001/login`;
|
window.location.href = `http://155.240.22.102:40992`;
|
||||||
} else {
|
} else {
|
||||||
router.push("/login");
|
router.push("/login");
|
||||||
}
|
}
|
||||||
|
@ -73,17 +73,24 @@ service.interceptors.response.use(
|
|||||||
|
|
||||||
// 通用下载方法
|
// 通用下载方法
|
||||||
export function download(url, params, filename, config) {
|
export function download(url, params, filename, config) {
|
||||||
let token = localStorage.getItem('token')
|
return service.post(url, params, {
|
||||||
return axios.post(url, params, {"Content-type": "multipart/form-data",headers:{"Authorization": `${token}`}}).then( async (data) => {
|
transformRequest: [(params) => { return tansParams(params) }],
|
||||||
const isBlob = blobValidate(data.data);
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||||||
console.log(isBlob,'====data');
|
responseType: 'blob',
|
||||||
|
...config
|
||||||
|
}).then(async (data) => {
|
||||||
|
const isBlob = blobValidate(data);
|
||||||
if (isBlob) {
|
if (isBlob) {
|
||||||
const blob = new Blob([data.data])
|
const blob = new Blob([data])
|
||||||
saveAs(blob, filename)
|
saveAs(blob, filename)
|
||||||
} else {
|
} else {
|
||||||
ElMessage.error('网络异常');
|
const resText = await data.text();
|
||||||
|
const rspObj = JSON.parse(resText);
|
||||||
|
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
|
||||||
|
ElMessage.error(errMsg);
|
||||||
}
|
}
|
||||||
// downloadLoadingInstance.close();
|
}).catch((r) => {
|
||||||
|
ElMessage.error('下载文件出现错误,请联系管理员!')
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
import ImageCompressor from "image-compressor.js";
|
||||||
// 随机颜色 - 把16进制的颜色换成rgba格式
|
// 随机颜色 - 把16进制的颜色换成rgba格式
|
||||||
export function choseRbgb(color,opcity) {
|
export function choseRbgb(color,opcity) {
|
||||||
if(color){
|
if(color){
|
||||||
@ -13,6 +13,36 @@ export function choseRbgb(color,opcity) {
|
|||||||
return `rgba(${r},${g},${b},${a})`
|
return `rgba(${r},${g},${b},${a})`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 随机十六进制颜色
|
||||||
|
export function randomHexColor() { // 随机生成十六进制颜色
|
||||||
|
var hex = Math.floor(Math.random() * 16777216).toString(16);
|
||||||
|
while (hex.length < 6) {
|
||||||
|
hex = '0' + hex;
|
||||||
|
}
|
||||||
|
return '#' + hex;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 压缩图片
|
||||||
|
* @param {*} file
|
||||||
|
* @param {*} quality 压缩比
|
||||||
|
*/
|
||||||
|
export function compressImage(file, quality = 0.6) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
new ImageCompressor(file, {
|
||||||
|
quality, //压缩质量
|
||||||
|
success(res) {
|
||||||
|
let fileData = new File([res], res.name, { type: res.type });
|
||||||
|
resolve(fileData);
|
||||||
|
},
|
||||||
|
error(e) {
|
||||||
|
reject("图片压缩失败,请稍后再试");
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
// 今天周几
|
// 今天周几
|
||||||
export function weekValidate() {
|
export function weekValidate() {
|
||||||
let week = new Date().getDay()
|
let week = new Date().getDay()
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="foot">
|
<div class="foot">
|
||||||
<div class="footBtn"><span>发布指令</span></div>
|
<div class="footBtn" @click="gozl"><span>发布指令</span></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -29,6 +29,11 @@ import Head from "@/views/home/layout/head.vue";
|
|||||||
import ImportantPerson from "./model/importantPerson.vue";
|
import ImportantPerson from "./model/importantPerson.vue";
|
||||||
import Zdrqhd from "./model/zdrqhd.vue";
|
import Zdrqhd from "./model/zdrqhd.vue";
|
||||||
import Yjclqktj from "./model/yjclqktj.vue";
|
import Yjclqktj from "./model/yjclqktj.vue";
|
||||||
|
import { useRoute, useRouter } from 'vue-router';
|
||||||
|
const router = useRouter()
|
||||||
|
const gozl = () =>{
|
||||||
|
router.push('/InstructionInformation')
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import "@/assets/css/homeScreen.scss";
|
@import "@/assets/css/homeScreen.scss";
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
<div class="personBox" id="zdrxxtj">
|
<div class="personBox" id="zdrxxtj">
|
||||||
<div class="asideTitle mt60">
|
<div class="asideTitle mt60">
|
||||||
<div>
|
<div>
|
||||||
<span class="title">重点人信息统计</span>
|
<span class="title">重点人信息统计</span>
|
||||||
<span :class="active == it ? 'active'+`${idx}`:''" @click="changeDate(it)" class="tabsBtn pointer" v-for="(it,idx) in btns" :key="it">{{ it }}</span>
|
<span :class="active == it ? 'active'+`${idx}`:''" @click="changeDate(it)" class="tabsBtn pointer" v-for="(it,idx) in btns" :key="it">{{ it }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="asideCnt">
|
<div class="asideCnt">
|
||||||
@ -15,6 +15,16 @@
|
|||||||
<template #qtFxdj="{row}">
|
<template #qtFxdj="{row}">
|
||||||
<DictTag :tag="false" :value="row.qtFxdj" :options="D_GS_ZDQT_FXDJ"/>
|
<DictTag :tag="false" :value="row.qtFxdj" :options="D_GS_ZDQT_FXDJ"/>
|
||||||
</template>
|
</template>
|
||||||
|
<template #bqList="{row}">
|
||||||
|
<span v-if="row.bqList">
|
||||||
|
<span v-for="(it, idx) in row.bqList" :key="idx">{{it.bqMc }}、</span>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
<template #qbcjList="{row}">
|
||||||
|
<span v-if="row.qbcjList">
|
||||||
|
<span v-for="(it, idx) in row.qbcjList" :key="idx">{{it.xsMc }}、</span>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
<template #qtZt="{row}">
|
<template #qtZt="{row}">
|
||||||
<DictTag :tag="false" :value="row.qtZt" :options="D_GS_ZDQT_ZT"/>
|
<DictTag :tag="false" :value="row.qtZt" :options="D_GS_ZDQT_ZT"/>
|
||||||
</template>
|
</template>
|
||||||
@ -34,10 +44,7 @@ const keywords = ref(''); // 搜索关键字
|
|||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_GS_ZDQT_ZT,D_BZ_RYBQ,D_GS_ZDQT_FXDJ } = proxy.$dict('D_GS_ZDQT_ZT','D_BZ_RYBQ','D_GS_ZDQT_FXDJ') //获取字典数据
|
const { D_GS_ZDQT_ZT,D_BZ_RYBQ,D_GS_ZDQT_FXDJ } = proxy.$dict('D_GS_ZDQT_ZT','D_BZ_RYBQ','D_GS_ZDQT_FXDJ') //获取字典数据
|
||||||
const pageData = reactive({
|
const pageData = reactive({
|
||||||
tableData: [
|
tableData: [],
|
||||||
{ ryXm: "王五", rySfzh: "330102199505057890", bq: "吸毒人员" },
|
|
||||||
{ ryXm: "王五", rySfzh: "330102199505057890", bq: "吸毒人员" },
|
|
||||||
],
|
|
||||||
keyCount: 0,
|
keyCount: 0,
|
||||||
tableConfiger: {
|
tableConfiger: {
|
||||||
loading: false,
|
loading: false,
|
||||||
@ -54,8 +61,8 @@ const pageData = reactive({
|
|||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "姓名", prop: "ryXm", showOverflowTooltip: true },
|
{ label: "姓名", prop: "ryXm", showOverflowTooltip: true },
|
||||||
{ label: "身份证号码", prop: "rySfzh",showOverflowTooltip: true },
|
{ label: "身份证号码", prop: "rySfzh",showOverflowTooltip: true },
|
||||||
{ label: "标签", prop: "bq",showOverflowTooltip: true },
|
{ label: "标签", prop: "bqList",showOverflowTooltip: true,showSolt:true },
|
||||||
{ label: "所属线索", prop: "xsmc",showOverflowTooltip: true },
|
{ label: "所属线索", prop: "qbcjList",showOverflowTooltip: true,showSolt:true },
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -0,0 +1,109 @@
|
|||||||
|
<template>
|
||||||
|
<div class="dialog" v-if="dialogForm">
|
||||||
|
<div class="head_box">
|
||||||
|
<span class="title">经验分享{{ title }} </span>
|
||||||
|
<div>
|
||||||
|
<el-button type="primary" size="small" :loading="loading" @click="submit">保存</el-button>
|
||||||
|
<el-button size="small" @click="close">关闭</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form_cnt">
|
||||||
|
<FormMessage :formList="formData" v-model="listQuery" ref="elform" :rules="rules">
|
||||||
|
</FormMessage>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||||
|
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||||
|
import Xslist from '@/components/ChooseList/ChooseXs/index.vue'
|
||||||
|
import { ref, defineExpose, reactive, defineEmits, getCurrentInstance } from "vue";
|
||||||
|
const emit = defineEmits(["updateDate"]);
|
||||||
|
const props = defineProps({
|
||||||
|
dic: Object
|
||||||
|
});
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
|
||||||
|
const dialogForm = ref(false); //弹窗
|
||||||
|
|
||||||
|
const rules = reactive({
|
||||||
|
jymc: [
|
||||||
|
{ required: true, message: "请输入经验名称", trigger: "blur" }
|
||||||
|
],
|
||||||
|
fbnr: [
|
||||||
|
{ required: true, message: "请输入经验内容", trigger: "blur" }
|
||||||
|
]
|
||||||
|
});
|
||||||
|
const formData = ref([
|
||||||
|
|
||||||
|
]);
|
||||||
|
const listQuery = ref({}); //表单
|
||||||
|
const loading = ref(false);
|
||||||
|
const elform = ref();
|
||||||
|
const title = ref("");
|
||||||
|
|
||||||
|
// 初始化数据
|
||||||
|
const init = (type, row) => {
|
||||||
|
dialogForm.value = true;
|
||||||
|
title.value = type == "add" ? "新增" : "编辑";
|
||||||
|
// 根据id查询详情
|
||||||
|
if (row) {
|
||||||
|
console.log(row,"xxxxx");
|
||||||
|
formData.value = [
|
||||||
|
{ label: "经验名称", prop: "jymc", type: "input", width: "100%" },
|
||||||
|
{ label: "发布时间", prop: "fbsj", type: "input", width: "50%",disabled:true },
|
||||||
|
{ label: "发布人", prop: "fbr", type: "input", width: "50%",disabled:true },
|
||||||
|
{ label: "经验内容", prop: "fbnr", type: "textarea", width: "100%" },
|
||||||
|
]
|
||||||
|
listQuery.value = row;
|
||||||
|
} else {
|
||||||
|
formData.value = [
|
||||||
|
{ label: "经验名称", prop: "jymc", type: "input", width: "100%" },
|
||||||
|
{ label: "任务内容", prop: "fbnr", type: "textarea", width: "100%" },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 提交
|
||||||
|
const submit = () => {
|
||||||
|
elform.value.submit((data) => {
|
||||||
|
let url = title.value == "新增" ? "/mosty-gsxt/gsxt/jyfx/add" : "/mosty-gsxt/gsxt/jyfx/edit";
|
||||||
|
let params = { ...data };
|
||||||
|
qcckPost(params, url).then(() => {
|
||||||
|
loading.value = false;
|
||||||
|
proxy.$message({ type: "success", message: title.value + "成功" });
|
||||||
|
emit("updateDate");
|
||||||
|
close();
|
||||||
|
}).catch(()=>{
|
||||||
|
loading.value = false;
|
||||||
|
})
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 关闭
|
||||||
|
const close = () => {
|
||||||
|
listQuery.value = {};
|
||||||
|
loading.value = false;
|
||||||
|
dialogForm.value = false;
|
||||||
|
listQuery.value={}
|
||||||
|
};
|
||||||
|
|
||||||
|
defineExpose({ init });
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "~@/assets/css/layout.scss";
|
||||||
|
@import "~@/assets/css/element-plus.scss";
|
||||||
|
|
||||||
|
.boxlist {
|
||||||
|
width: 99%;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
::v-deep .el-textarea__inner {
|
||||||
|
min-height: 550px !important;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,195 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div class="titleBox">
|
||||||
|
<PageTitle title="经验分享">
|
||||||
|
<el-button type="primary" @click="addEdit('add', '')">
|
||||||
|
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
|
||||||
|
<span style="vertical-align: middle">新增</span>
|
||||||
|
</el-button>
|
||||||
|
</PageTitle>
|
||||||
|
</div>
|
||||||
|
<!-- 搜索 -->
|
||||||
|
<div ref="searchBox">
|
||||||
|
<Search
|
||||||
|
:searchArr="searchConfiger"
|
||||||
|
@submit="onSearch"
|
||||||
|
:key="pageData.keyCount"
|
||||||
|
></Search>
|
||||||
|
</div>
|
||||||
|
<!-- 表格 -->
|
||||||
|
<div class="tabBox">
|
||||||
|
<MyTable
|
||||||
|
:tableData="pageData.tableData"
|
||||||
|
:tableColumn="pageData.tableColumn"
|
||||||
|
:tableHeight="pageData.tableHeight"
|
||||||
|
:key="pageData.keyCount"
|
||||||
|
:tableConfiger="pageData.tableConfiger"
|
||||||
|
:controlsWidth="pageData.controlsWidth"
|
||||||
|
>
|
||||||
|
<!-- 操作 -->
|
||||||
|
<template #controls="{ row }">
|
||||||
|
<el-link type="primary" @click="addEdit('edit', row)">编辑</el-link>
|
||||||
|
<el-link type="danger" @click="delDictItem(row.id)">删除</el-link>
|
||||||
|
</template>
|
||||||
|
</MyTable>
|
||||||
|
<Pages
|
||||||
|
@changeNo="changeNo"
|
||||||
|
@changeSize="changeSize"
|
||||||
|
:tableHeight="pageData.tableHeight"
|
||||||
|
:pageConfiger="{
|
||||||
|
...pageData.pageConfiger,
|
||||||
|
total: pageData.total
|
||||||
|
}"
|
||||||
|
></Pages>
|
||||||
|
</div>
|
||||||
|
<!-- 编辑详情 -->
|
||||||
|
<EditAddForm
|
||||||
|
v-if="show"
|
||||||
|
ref="detailDiloag"
|
||||||
|
:dic="{ D_GS_BQ_LX, D_GS_BQ_DJ, D_GS_SSYJ, D_GS_BQ_LB }"
|
||||||
|
@updateDate="getList"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||||
|
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||||
|
import Pages from "@/components/aboutTable/Pages.vue";
|
||||||
|
import Search from "@/components/aboutTable/Search.vue";
|
||||||
|
import EditAddForm from "./components/editAddForm.vue";
|
||||||
|
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||||
|
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
|
||||||
|
const detailDiloag = ref();
|
||||||
|
const show = ref(false);
|
||||||
|
const searchBox = ref(); //搜索框
|
||||||
|
const searchConfiger = ref([
|
||||||
|
{
|
||||||
|
label: "发布人",
|
||||||
|
prop: "fbr",
|
||||||
|
placeholder: "请输入发布人",
|
||||||
|
showType: "input"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "经验标题",
|
||||||
|
prop: "jymc",
|
||||||
|
placeholder: "请输入经验标题",
|
||||||
|
showType: "input"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "发布时间",
|
||||||
|
prop: "startTime",
|
||||||
|
placeholder: "请选择发布时间",
|
||||||
|
showType: "daterange"
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
const queryFrom = ref({});
|
||||||
|
const pageData = reactive({
|
||||||
|
tableData: [], //表格数据
|
||||||
|
keyCount: 0,
|
||||||
|
tableConfiger: {
|
||||||
|
rowHieght: 61,
|
||||||
|
showSelectType: "null",
|
||||||
|
loading: false
|
||||||
|
},
|
||||||
|
total: 0,
|
||||||
|
pageConfiger: {
|
||||||
|
pageSize: 20,
|
||||||
|
pageCurrent: 1
|
||||||
|
}, //分页
|
||||||
|
controlsWidth: 160, //操作栏宽度
|
||||||
|
tableColumn: [
|
||||||
|
{
|
||||||
|
label: "发布人",
|
||||||
|
prop: "fbr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "经验名称",
|
||||||
|
prop: "jymc"
|
||||||
|
},{
|
||||||
|
label: "发布时间",
|
||||||
|
prop: "fbsj"
|
||||||
|
},{
|
||||||
|
label: "发布内容",
|
||||||
|
prop: "fbnr",
|
||||||
|
showOverflowTooltip:true
|
||||||
|
},
|
||||||
|
|
||||||
|
]
|
||||||
|
});
|
||||||
|
onMounted(() => {
|
||||||
|
tabHeightFn();
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
|
||||||
|
// 搜索
|
||||||
|
const onSearch = (val) => {
|
||||||
|
queryFrom.value = {
|
||||||
|
...val,
|
||||||
|
startTime: val.startTime&&val.startTime.length > 0 ? val.startTime[0] : '',
|
||||||
|
endTime: val.startTime&& val.startTime.length > 0 ? val.startTime[1] : ''
|
||||||
|
};
|
||||||
|
pageData.pageConfiger.pageCurrent = 1;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
const changeNo = (val) => {
|
||||||
|
pageData.pageConfiger.pageCurrent = val;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
const changeSize = (val) => {
|
||||||
|
pageData.pageConfiger.pageSize = val;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
const getList = () => {
|
||||||
|
pageData.tableConfiger.loading = true;
|
||||||
|
qcckPost(queryFrom.value, "/mosty-gsxt/gsxt/jyfx/selectPage")
|
||||||
|
.then((res) => {
|
||||||
|
pageData.tableData = res.records;
|
||||||
|
pageData.total = res.total;
|
||||||
|
pageData.tableConfiger.loading = false;
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
pageData.tableConfiger.loading = false;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 删除
|
||||||
|
const delDictItem = (id) => {
|
||||||
|
proxy
|
||||||
|
.$confirm("确定要删除", "警告", { type: "warning" })
|
||||||
|
.then(() => {
|
||||||
|
qcckDelete({}, "/mosty-gsxt/tbGsxtBqzh/" + id).then(() => {
|
||||||
|
proxy.$message({ type: "success", message: "删除成功" });
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 新增
|
||||||
|
const addEdit = (type, row) => {
|
||||||
|
show.value = true;
|
||||||
|
nextTick(() => {
|
||||||
|
detailDiloag.value.init(type, row);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 表格高度计算
|
||||||
|
const tabHeightFn = () => {
|
||||||
|
pageData.tableHeight =
|
||||||
|
window.innerHeight - searchBox.value.offsetHeight - 250;
|
||||||
|
window.onresize = function () {
|
||||||
|
tabHeightFn();
|
||||||
|
};
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.el-loading-mask {
|
||||||
|
background: rgba(0, 0, 0, 0.5) !important;
|
||||||
|
}
|
||||||
|
</style>
|
@ -1,182 +0,0 @@
|
|||||||
<template>
|
|
||||||
<!-- 弹框 -->
|
|
||||||
<el-dialog v-model="dialogVisible" title="智能解析数据" width="80vw">
|
|
||||||
<div class="infoCnt">
|
|
||||||
<div class="baseInfo">
|
|
||||||
<div v-for="(item, index) in tableData" :key="index" >
|
|
||||||
发掘文本{{ index + 1 }}:<span class="text-danger">{{ item.fjWb }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<MyTable
|
|
||||||
:tableData="pageData.dtoList"
|
|
||||||
:tableColumn="pageData.tableColumn"
|
|
||||||
:tableHeight="pageData.tableHeight"
|
|
||||||
:key="pageData.keyCount"
|
|
||||||
:tableConfiger="pageData.tableConfiger"
|
|
||||||
:controlsWidth="pageData.controlsWidth"
|
|
||||||
:row-class-name="({ row }) => (row.status ? '' : 'row-deleted')"
|
|
||||||
>
|
|
||||||
<!-- 管辖单位 -->
|
|
||||||
<template #gxDwDm="{ row }">
|
|
||||||
<el-select
|
|
||||||
v-model="row.gxDwDm"
|
|
||||||
placeholder="请选择管辖单位"
|
|
||||||
style="width: 130px"
|
|
||||||
@change="handleDeptChange('gxDwMc', $event, row)"
|
|
||||||
:disabled="!row.status"
|
|
||||||
>
|
|
||||||
<el-option v-for="item in deptList" :key="item.value" :label="item.label" :value="item.value.toString()"/>
|
|
||||||
</el-select>
|
|
||||||
</template>
|
|
||||||
<!-- 是否关注 -->
|
|
||||||
<template #sfGz="{ row }">
|
|
||||||
<el-radio-group v-model="row.sfGz">
|
|
||||||
<el-radio v-for="(item, index) in D_BZ_SF" size="large" :key="index" :label="item.zdmc || item.label" :value="item.dm || item.value"></el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</template>
|
|
||||||
<!-- 管辖单位 -->
|
|
||||||
<template #ryFjZp="{ row }"> 照片上传 </template>
|
|
||||||
<template :key="idx" v-for="(item,idx) in pageData.tableColumn.filter((col) => !['gxDwDm', 'sfGz', 'ryFjZp'].includes(col.prop) )" #[item.prop]="{ row }">
|
|
||||||
<el-input style="width: 100px" v-model="row[item.prop]" :placeholder="'请输入' + item.label" :disabled="!row.status" />
|
|
||||||
</template>
|
|
||||||
<!-- 操作列 -->
|
|
||||||
<template #controls="{ row, $index }">
|
|
||||||
<el-link v-if="row.status" type="danger" @click="delDictItem($index)">删除</el-link>
|
|
||||||
<el-link v-else type="primary" @click="recover($index)"> 恢复 </el-link>
|
|
||||||
</template>
|
|
||||||
</MyTable>
|
|
||||||
<div class="stats">
|
|
||||||
共 {{ pageData.dtoList.length }} 条数据, 其中
|
|
||||||
{{ pageData.dtoList.filter((x) => !x.status).length }} 条已标记删除
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<template #footer>
|
|
||||||
<div class="dialog-footer">
|
|
||||||
<el-button @click="dialogVisible = false">取消</el-button>
|
|
||||||
<el-button type="primary" @click="submitData"> 确定 </el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup>
|
|
||||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
|
||||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
|
||||||
import { reactive, ref, defineEmits,onMounted, getCurrentInstance, defineExpose } from "vue";
|
|
||||||
import { selectUserDeptPage } from "@/api/user-manage";
|
|
||||||
import { ElMessage } from "element-plus";
|
|
||||||
const { proxy } = getCurrentInstance();
|
|
||||||
const { D_BZ_SF } = proxy.$dict("D_BZ_SF"); //获取字典数据
|
|
||||||
const props = defineProps({
|
|
||||||
tableData: {
|
|
||||||
type: Array,
|
|
||||||
default: () => []
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const emit = defineEmits(['upadate'])
|
|
||||||
const dialogVisible = ref(false);
|
|
||||||
const pageData = reactive({
|
|
||||||
dtoList: [],
|
|
||||||
keyCount: 0,
|
|
||||||
tableConfiger: {
|
|
||||||
rowHieght: 61,
|
|
||||||
showSelectType: "checkBox",
|
|
||||||
loading: false
|
|
||||||
},
|
|
||||||
tableHeight: 330,
|
|
||||||
total: 0,
|
|
||||||
pageConfiger: {
|
|
||||||
pageSize: 20,
|
|
||||||
pageCurrent: 1
|
|
||||||
},
|
|
||||||
controlsWidth: 80,
|
|
||||||
tableColumn: [
|
|
||||||
{ label: "管辖单位", prop: "gxDwDm", showSolt: true, width: 200 },
|
|
||||||
{ label: "姓名", prop: "ryXm", showSolt: true, width: 130 },
|
|
||||||
{ label: "手机号码", prop: "rySjhm", showSolt: true, width: 130 },
|
|
||||||
{ label: "身份证号码", prop: "rySfzh", showSolt: true, width: 130 },
|
|
||||||
{ label: "户籍地址", prop: "ryHjdz", showSolt: true, width: 130 },
|
|
||||||
{ label: "护照号码", prop: "ryHzhm", showSolt: true, width: 130 },
|
|
||||||
{ label: "现住地址", prop: "ryXzdz", showSolt: true, width: 130 },
|
|
||||||
{ label: "银行卡号", prop: "ryYhkh", showSolt: true, width: 130 },
|
|
||||||
{ label: "是否关注", prop: "sfGz", showSolt: true, width: 130 },
|
|
||||||
{ label: "附件照片", prop: "ryFjZp", showSolt: true, width: 130 }
|
|
||||||
]
|
|
||||||
});
|
|
||||||
const deptList = ref([]); //部门列表
|
|
||||||
onMounted(() => {
|
|
||||||
getdepartmentList();
|
|
||||||
});
|
|
||||||
// 获取部门列表
|
|
||||||
const getdepartmentList = () => {
|
|
||||||
selectUserDeptPage().then((res) => {
|
|
||||||
deptList.value = res?.records.map((item) => ({
|
|
||||||
label: item.deptName,
|
|
||||||
value: item.deptId
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
};
|
|
||||||
const handleDeptChange = (nameField, selectedValue, row) => {
|
|
||||||
// 找到选中的部门
|
|
||||||
const selectedDept = deptList.value.find((item) => item.value.toString() === selectedValue);
|
|
||||||
// 更新名称
|
|
||||||
row[nameField] = selectedDept ? selectedDept.label : "";
|
|
||||||
};
|
|
||||||
const init = () => {
|
|
||||||
dialogVisible.value = true;
|
|
||||||
qcckGet({}, "/mosty-gsxt/tbGsxtRqfjRy/createCbfj").then((res) => {
|
|
||||||
pageData.dtoList = res.map((item) => ({ ...item, status: true }));
|
|
||||||
}).catch(() => {
|
|
||||||
pageData.tableConfiger.loading = false;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
// 删除方法
|
|
||||||
const delDictItem = (index) => {
|
|
||||||
pageData.dtoList[index].status = false;
|
|
||||||
ElMessage.success("已标记为删除");
|
|
||||||
};
|
|
||||||
// 恢复方法
|
|
||||||
const recover = (index) => {
|
|
||||||
pageData.dtoList[index].status = true;
|
|
||||||
ElMessage.success("已恢复");
|
|
||||||
};
|
|
||||||
// 提交
|
|
||||||
const submitData = () => {
|
|
||||||
const validData = pageData.dtoList.filter((item) => item.status);
|
|
||||||
qcckPost(validData, "/mosty-gsxt/tbGsxtRqfjRy/saveList").then((res) => {
|
|
||||||
ElMessage.success("新增成功");
|
|
||||||
dialogVisible.value = false;
|
|
||||||
emit("upadate");
|
|
||||||
close();
|
|
||||||
})
|
|
||||||
};
|
|
||||||
|
|
||||||
defineExpose({ init });
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
/* 为已删除的行添加特殊样式 */
|
|
||||||
.el-table .row-deleted {
|
|
||||||
background-color: #fef0f0;
|
|
||||||
color: #f56c6c;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.infoCnt{
|
|
||||||
height: 63vh;
|
|
||||||
}
|
|
||||||
.baseInfo{
|
|
||||||
font-size: 16px;
|
|
||||||
max-height: 230px;
|
|
||||||
overflow: hidden;
|
|
||||||
overflow-y: auto;
|
|
||||||
line-height: 24px;
|
|
||||||
color: #000;
|
|
||||||
font-weight: 600;
|
|
||||||
letter-spacing: 1px;
|
|
||||||
.text-danger {
|
|
||||||
color: #333;
|
|
||||||
font-weight: normal;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -3,119 +3,50 @@
|
|||||||
<div class="head_box" >
|
<div class="head_box" >
|
||||||
<span class="title">{{ title }}重点人管理</span>
|
<span class="title">{{ title }}重点人管理</span>
|
||||||
<div>
|
<div>
|
||||||
<el-button
|
<el-button type="primary" size="small" :loading="loading" @click="submit" v-if="!disabled">保存</el-button >
|
||||||
type="primary"
|
|
||||||
size="small"
|
|
||||||
:loading="loading"
|
|
||||||
@click="submit"
|
|
||||||
v-if="title.value !== '详情'"
|
|
||||||
>保存</el-button
|
|
||||||
>
|
|
||||||
<el-button size="small" @click="close">关闭</el-button>
|
<el-button size="small" @click="close">关闭</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form_cnt">
|
<div class="form_cnt">
|
||||||
<FormMessage
|
<FormMessage :disabled="disabled" v-model="listQuery" :formList="formData" ref="elform" :rules="rules"></FormMessage>
|
||||||
v-model="listQuery"
|
|
||||||
:formList="formData"
|
|
||||||
ref="elform"
|
|
||||||
:rules="rules"
|
|
||||||
>
|
|
||||||
</FormMessage>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
|
||||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||||
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
import { ref, defineExpose,defineProps, defineEmits } from "vue";
|
||||||
import * as rule from "@/utils/rules.js";
|
|
||||||
import {
|
|
||||||
ref,
|
|
||||||
defineExpose,
|
|
||||||
reactive,
|
|
||||||
onMounted,
|
|
||||||
defineEmits,
|
|
||||||
getCurrentInstance,
|
|
||||||
nextTick
|
|
||||||
} from "vue";
|
|
||||||
import { selectUserDeptPage } from "@/api/user-manage";
|
|
||||||
const emit = defineEmits(["updateDate"]);
|
const emit = defineEmits(["updateDate"]);
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
dic: Object
|
dic: Object
|
||||||
});
|
});
|
||||||
const { proxy } = getCurrentInstance();
|
|
||||||
|
|
||||||
const { D_GS_RQFJ_LX } = proxy.$dict("D_GS_RQFJ_LX"); //获取字典数据
|
|
||||||
const tagDialog = ref();
|
|
||||||
const dialogForm = ref(false); //弹窗
|
const dialogForm = ref(false); //弹窗
|
||||||
const formData = ref([
|
const formData = ref([
|
||||||
{ label: "发掘类型", prop: "fjLx", type: "select", options: D_GS_RQFJ_LX },
|
{ label: "数据来源", prop: "sjly", type: "select", options:props.dic.D_GS_RQFJ_LX,disabled:true },
|
||||||
{ label: "发掘文本", prop: "fjWb", type: "textarea", width: "100%" }
|
{ label: "是否发掘", prop: "sffj", type: "select", options: props.dic.D_BZ_SF,disabled:true },
|
||||||
|
{ label: "数据时间", prop: "sj", type: "datetime"},
|
||||||
|
{ label: "指向地点", prop: "dd", type: "textarea", width: "100%" },
|
||||||
|
{ label: "数据内容", prop: "nr", type: "textarea", width: "100%" },
|
||||||
]);
|
]);
|
||||||
const listQuery = ref({}); //表单
|
const listQuery = ref({}); //表单
|
||||||
const loading = ref(false);
|
const loading = ref(false);
|
||||||
const elform = ref();
|
const elform = ref();
|
||||||
const title = ref("");
|
const title = ref("编辑");
|
||||||
const editpeo = ref();
|
const disabled = ref(false)
|
||||||
|
|
||||||
// 初始化数据
|
// 初始化数据
|
||||||
const init = (type, row) => {
|
const init = (row) => {
|
||||||
dialogForm.value = true;
|
dialogForm.value = true;
|
||||||
title.value = type == "add" ? "新增" : type == "info" ? "详情" : "编辑";
|
listQuery.value = JSON.parse(JSON.stringify(row))
|
||||||
// 初始化表单数据,并根据详情页设置禁用状态
|
|
||||||
formData.value = [
|
|
||||||
{
|
|
||||||
label: "发掘类型",
|
|
||||||
prop: "fjLx",
|
|
||||||
type: "select",
|
|
||||||
options: D_GS_RQFJ_LX,
|
|
||||||
disabled: title.value === "详情"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "发掘文本",
|
|
||||||
prop: "fjWb",
|
|
||||||
type: "textarea",
|
|
||||||
width: "100%",
|
|
||||||
disabled: title.value === "详情"
|
|
||||||
}
|
|
||||||
];
|
|
||||||
if (row) getDataById(row.id);
|
|
||||||
};
|
|
||||||
// 根据id查询详情
|
|
||||||
const getDataById = (id) => {
|
|
||||||
qcckGet({}, "/mosty-gsxt/tbGsxtRqfjNr/" + id).then((res) => {
|
|
||||||
listQuery.value = res;
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// 提交
|
// 提交
|
||||||
const submit = () => {
|
const submit = () => {
|
||||||
elform.value.submit((data) => {
|
elform.value.submit((data) => {
|
||||||
let url =
|
emit('updateDate',data)
|
||||||
title.value == "新增"
|
close();
|
||||||
? "/mosty-gsxt/tbGsxtRqfjNr/save"
|
|
||||||
: "/mosty-gsxt/tbGsxtRqfjNr/update";
|
|
||||||
let params = { ...data };
|
|
||||||
|
|
||||||
qcckPost(params, url)
|
|
||||||
.then((res) => {
|
|
||||||
proxy.$message({ type: "success", message: title.value + "成功" });
|
|
||||||
emit("onSearch");
|
|
||||||
close();
|
|
||||||
})
|
|
||||||
.catch(() => {});
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// 接收父组件传入的数据并回显
|
|
||||||
const setFormData = (data) => {
|
|
||||||
listQuery.value = {
|
|
||||||
...data // 假设 data 包含所有需要的字段
|
|
||||||
};
|
|
||||||
};
|
|
||||||
// 关闭
|
// 关闭
|
||||||
const close = () => {
|
const close = () => {
|
||||||
listQuery.value = {};
|
listQuery.value = {};
|
||||||
@ -123,14 +54,7 @@ const close = () => {
|
|||||||
loading.value = false;
|
loading.value = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 2. 暴露获取数据的方法
|
defineExpose({ init });
|
||||||
const getFormData = () => {
|
|
||||||
// 可以在这里添加验证逻辑
|
|
||||||
return {
|
|
||||||
formData: listQuery.value
|
|
||||||
};
|
|
||||||
};
|
|
||||||
defineExpose({ init, setFormData });
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
@ -0,0 +1,152 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-dialog v-model="props.modelValue" @closed="closeDialog" center :title="title" width="1280px">
|
||||||
|
<div ref="searchRef">
|
||||||
|
<Search :searchArr="searchConfiger" @submit="onSearch" ></Search>
|
||||||
|
</div>
|
||||||
|
<MyTable
|
||||||
|
:tableData="pageData.tableData"
|
||||||
|
:tableColumn="pageData.tableColumn"
|
||||||
|
:tableHeight="pageData.tableHeight"
|
||||||
|
:key="pageData.keyCount"
|
||||||
|
:tableConfiger="pageData.tableConfiger"
|
||||||
|
@chooseData="chooseData">
|
||||||
|
<template #sjly="{row}">
|
||||||
|
<DictTag :tag="false" :value="row.sjly" :options="props.dic.D_GS_RQFJ_LX" />
|
||||||
|
</template>
|
||||||
|
<template #sffj="{row}">
|
||||||
|
<DictTag :tag="false" :value="row.sffj" :options="props.dic.D_BZ_SF" />
|
||||||
|
</template>
|
||||||
|
</MyTable>
|
||||||
|
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{...pageData.pageConfiger}"></Pages>
|
||||||
|
<template #footer>
|
||||||
|
<el-button @click="cancelDailg">取消</el-button>
|
||||||
|
<el-button type="primary" @click="handleSubmit">确定</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { qcckGet, qcckDelete } from "@/api/qcckApi.js";
|
||||||
|
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||||
|
import Pages from "@/components/aboutTable/Pages.vue";
|
||||||
|
import Search from "@/components/aboutTable/Search.vue";
|
||||||
|
import { ref,reactive, onMounted, nextTick,getCurrentInstance } from 'vue';
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue:{
|
||||||
|
type:Boolean,
|
||||||
|
default:false
|
||||||
|
},
|
||||||
|
dic:{
|
||||||
|
type:Object,
|
||||||
|
default:{}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const chooseList = ref([])
|
||||||
|
const title =ref('')
|
||||||
|
const searchRef = ref()
|
||||||
|
const emits = defineEmits(['update:modelValue','cancel','submit'])
|
||||||
|
const searchConfiger = ref([
|
||||||
|
{ label: "指向地点", prop: "dd", placeholder: "请输入指向地点", showType: "input" },
|
||||||
|
{ label: "数据内容", prop: "nr", placeholder: "请输入数据内容", showType: "input" },
|
||||||
|
{ label: "是否发掘", prop: "sffj", placeholder: "请输入数据内容", showType: "select" },
|
||||||
|
{ label: "数据时间", prop: "times", showType: "datetimerange" },
|
||||||
|
]);
|
||||||
|
const pageData = reactive({
|
||||||
|
tableData: [],
|
||||||
|
keyCount: 0,
|
||||||
|
tableConfiger: {
|
||||||
|
rowHieght: 61,
|
||||||
|
showSelectType: "radio",
|
||||||
|
rowKey:'id',
|
||||||
|
haveControls: false,
|
||||||
|
loading: false,
|
||||||
|
},
|
||||||
|
pageConfiger: {
|
||||||
|
total: 0,
|
||||||
|
pageSize: 20,
|
||||||
|
pageCurrent: 1
|
||||||
|
},
|
||||||
|
tableColumn: [
|
||||||
|
{ label: "数据来源", prop: "sjly",showSolt:true},
|
||||||
|
{ label: "是否发掘", prop: "sffj",showSolt:true},
|
||||||
|
{ label: "数据时间", prop: "sj", showOverflowTooltip: true,},
|
||||||
|
{ label: "指向地点", prop: "dd", showOverflowTooltip: true,},
|
||||||
|
{ label: "数据内容", prop: "nr", showOverflowTooltip: true},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
const dm = ref('');
|
||||||
|
const init = (val) =>{
|
||||||
|
tabHeightFn();
|
||||||
|
dm.value = val;
|
||||||
|
let zdlist = props.dic.D_GS_RQFJ_LX || []
|
||||||
|
let obj = zdlist.find(v=>v.dm == val);
|
||||||
|
title.value = obj ? obj.zdmc+'选择' :'选择数据';
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
const getList = () =>{
|
||||||
|
let params = {
|
||||||
|
fjlx:dm.value,
|
||||||
|
pageCurrent:pageData.pageConfiger.pageCurrent,
|
||||||
|
pageSize:pageData.pageConfiger.pageSize,
|
||||||
|
}
|
||||||
|
pageData.tableConfiger.loading = true;
|
||||||
|
qcckGet(params,'/mosty-gsxt/qbcj/getZdryCbfjtc').then(res=>{
|
||||||
|
let arr = res.records || [];
|
||||||
|
pageData.tableData = arr.map((item)=>{
|
||||||
|
item.sjly = dm.value ;
|
||||||
|
return item;
|
||||||
|
});
|
||||||
|
pageData.pageConfiger.total = res.total;
|
||||||
|
pageData.tableConfiger.loading = false;
|
||||||
|
}).catch(()=>{
|
||||||
|
pageData.tableConfiger.loading = false;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const changeNo = (val) => {
|
||||||
|
pageData.pageConfiger.pageCurrent = val;
|
||||||
|
getList()
|
||||||
|
};
|
||||||
|
const changeSize = (val) => {
|
||||||
|
pageData.pageConfiger.pageSize = val;
|
||||||
|
getList()
|
||||||
|
};
|
||||||
|
|
||||||
|
const chooseData = (val) =>{
|
||||||
|
if(Array.isArray(val)) chooseList.value = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleSubmit = () =>{
|
||||||
|
if(chooseList.value.length == 0) return proxy.$message({ type: "warning", message: "请选择数据" });;
|
||||||
|
emits('submit',chooseList.value);
|
||||||
|
cancelDailg()
|
||||||
|
}
|
||||||
|
|
||||||
|
const cancelDailg = () =>{
|
||||||
|
emits('update:modelValue',false);
|
||||||
|
emits('cancel');
|
||||||
|
chooseList.value = []
|
||||||
|
}
|
||||||
|
|
||||||
|
const tabHeightFn = () => {
|
||||||
|
pageData.tableHeight = window.innerHeight - searchRef.value.offsetHeight - 320;
|
||||||
|
window.onresize = function () {
|
||||||
|
tabHeightFn();
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
defineExpose({init})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
::v-deep .el-dialog{
|
||||||
|
margin-top: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
@ -2,58 +2,50 @@
|
|||||||
<div class="statistical-analysis">
|
<div class="statistical-analysis">
|
||||||
<!-- 左侧树形菜单 -->
|
<!-- 左侧树形菜单 -->
|
||||||
<div class="left-menu">
|
<div class="left-menu">
|
||||||
<CheckBox :data="checkData" customClass="all" @changeData="changeData"></CheckBox>
|
<el-radio-group :disabled="isEdit" v-model="active" @change="changeRadio">
|
||||||
|
<el-radio :label="it.dm" v-for="it in D_GS_RQFJ_LX" :key="it.dm">{{ it.zdmc }}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
<div class="cancelBtn" @click="active = ''">取消</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- 右侧内容区 -->
|
<!-- 右侧内容区 -->
|
||||||
<div class="right-content">
|
<div class="right-content">
|
||||||
<Search :searchArr="searchConfiger" @submit="onSearch"> </Search>
|
<Search :searchArr="searchConfiger" @submit="onSearch"> </Search>
|
||||||
<div class="tableCnt1 mb10 pl10 pr10">
|
<div class="tableCnt1 mb10 pl10 pr10">
|
||||||
<PageTitle title="发掘内容" style="color: #333">
|
<PageTitle title="发掘内容" style="color: #333"></PageTitle>
|
||||||
<el-button type="primary" size="small" @click="handleData('add', '')">
|
<MyTable
|
||||||
<el-icon style="vertical-align: middle">
|
:tableData="pageData.tableData"
|
||||||
<CirclePlus />
|
:tableColumn="pageData.tableColumn"
|
||||||
</el-icon>
|
:tableHeight="pageData.tableHeight"
|
||||||
<span style="vertical-align: middle" @click="handleData('add', '')">新增</span>
|
:key="pageData.keyCount"
|
||||||
</el-button>
|
:tableConfiger="pageData.tableConfigerTop"
|
||||||
<el-button type="primary" size="small" @click="isImport = true">
|
:controlsWidth="pageData.controlsWidth">
|
||||||
<span style="vertical-align: middle">导入内容</span>
|
<template #sjly="{ row }">
|
||||||
</el-button>
|
<DictTag :tag="false" :value="row.sjly" :options="D_GS_RQFJ_LX" />
|
||||||
<el-button type="danger" size="small" @click="deleteRow(idsTop)">
|
|
||||||
<el-icon style="vertical-align: middle">
|
|
||||||
<Delete />
|
|
||||||
</el-icon>
|
|
||||||
<span style="vertical-align: middle">批量删除</span>
|
|
||||||
</el-button>
|
|
||||||
</PageTitle>
|
|
||||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
|
||||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger0" :controlsWidth="pageData.controlsWidth"
|
|
||||||
@chooseData="chooseDataTop">
|
|
||||||
<template #fjLx="{ row }">
|
|
||||||
<DictTag :tag="false" :value="row.fjLx" :options="D_GS_RQFJ_LX" />
|
|
||||||
</template>
|
</template>
|
||||||
<!-- 操作 -->
|
<!-- 操作 -->
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row}">
|
||||||
<el-link size="small" type="success" @click="handleData('edit', row)">编辑</el-link>
|
<el-link size="small" type="success" @click="handleData(row)">编辑</el-link>
|
||||||
<el-link size="small" type="primary" @click="handleData('info', row)">查看</el-link>
|
<el-link size="small" type="danger" @click="deleteRow(row.id)">删除</el-link>
|
||||||
<el-link size="small" type="danger" @click="deleteRow([row.id])">删除</el-link>
|
|
||||||
</template>
|
</template>
|
||||||
</MyTable>
|
</MyTable>
|
||||||
<div class="ww100 flex just-center mt8">
|
<div class="ww100 flex just-center mt8">
|
||||||
<el-button type="primary" @click="intelligent">智能解析</el-button>
|
<el-button type="primary" v-loading="btnLoading" @click="intelligent">智能解析 </el-button><span v-if="btnLoading" class="f12 ml5 mt15" style="color: #333;">解析中。。。</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="tableCnt mb10 pl10 pr10">
|
<div class="tableCnt mb10 pl10 pr10">
|
||||||
<PageTitle title="模型智能识别/LP解析结果" style="color: #333"></PageTitle>
|
<PageTitle title="解析结果" style="color: #333"></PageTitle>
|
||||||
<div ref="searchBox" class="mb8">
|
<div ref="searchBox" class="mb8">
|
||||||
<el-button :type="it == '批量删除' ? 'danger' : 'primary'" size="small" v-for="it in btnsList" :key="it"
|
<el-button :type="it == '批量删除' ? 'danger' : 'primary'" size="small" v-for="it in btnsList" :key="it" @click="chooseType(it)">{{ it }}</el-button>
|
||||||
@click="chooseType(it)">
|
|
||||||
{{ it }}
|
|
||||||
</el-button>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<MyTable :tableData="pageData.tableData2" :tableColumn="pageData.tableColumn2"
|
<MyTable
|
||||||
:tableHeight="pageData.tableHeight2" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger"
|
:tableData="pageData.tableData2"
|
||||||
:controlsWidth="pageData.controlsWidth" @chooseData="chooseDataBottom">
|
:tableColumn="pageData.tableColumn2"
|
||||||
|
:tableHeight="pageData.tableHeight2"
|
||||||
|
:key="pageData.keyCount"
|
||||||
|
:tableConfiger="pageData.tableConfiger"
|
||||||
|
:controlsWidth="pageData.controlsWidth"
|
||||||
|
@chooseData="chooseDataBottom">
|
||||||
<template #bqList="{ row }">
|
<template #bqList="{ row }">
|
||||||
<div v-if="row.bqList">
|
<div v-if="row.bqList">
|
||||||
<el-tag v-for="(it, idx) in row.bqList" :key="idx">{{ it.bqMc }}、</el-tag>
|
<el-tag v-for="(it, idx) in row.bqList" :key="idx">{{ it.bqMc }}、</el-tag>
|
||||||
@ -80,45 +72,40 @@
|
|||||||
<el-link size="small" type="primary" @click="viewDetails(row)">查看</el-link>
|
<el-link size="small" type="primary" @click="viewDetails(row)">查看</el-link>
|
||||||
</template>
|
</template>
|
||||||
</MyTable>
|
</MyTable>
|
||||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight2" :pageConfiger="{
|
<Pages
|
||||||
|
@changeNo="changeNo"
|
||||||
|
@changeSize="changeSize"
|
||||||
|
:tableHeight="pageData.tableHeight"
|
||||||
|
:pageConfiger="{
|
||||||
...pageData.pageConfiger,
|
...pageData.pageConfiger,
|
||||||
total: pageData.total
|
total: pageData.total
|
||||||
}"></Pages>
|
}"></Pages>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- 弹窗智能分析 -->
|
<!-- 新增 -->
|
||||||
<IntelligentParsing :tableData="pageData.tableData" ref="IntelligentParsingRef" @upadate="getModelList" />
|
<addForm ref="addFormDiloag" v-if="showEdit" @updateDate="updateDate" :dic="{D_GS_RQFJ_LX,D_BZ_SF}" />
|
||||||
<addForm ref="addFormDiloag" @onSearch="onSearch" />
|
<!-- 弹窗 -->
|
||||||
<Model v-model="isShow" :type="chooselx" :ids="ids" @change="getModelList" :dic="{ D_GS_RQFJ_FXDJ }"></Model>
|
<ListDialog ref="modelList" v-model="showDialog" v-if="showDialog" @submit="handelSub" @cancel="active = ''" :dic="{D_GS_RQFJ_LX,D_BZ_SF}"></ListDialog>
|
||||||
<Export :show="isImport" lx="fjnr" @closeImport="isImport = false" @handleImport="getList" />
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { download } from "@/utils/request";
|
import { getItem } from "@/utils/storage";
|
||||||
import Export from "@/components/export/index.vue";
|
import ListDialog from './components/listDialog.vue'
|
||||||
import CheckBox from "@/components/checkBox/index.vue";
|
|
||||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
import PageTitle from "@/components/aboutTable/PageTitle.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 Search from "@/components/aboutTable/Search.vue";
|
import Search from "@/components/aboutTable/Search.vue";
|
||||||
import addForm from "./components/addForm.vue";
|
import addForm from "./components/addForm.vue";
|
||||||
import Model from "./components/model.vue";
|
|
||||||
import IntelligentParsing from "./components/IntelligentParsing.vue";
|
|
||||||
import { ElMessage } from "element-plus";
|
import { ElMessage } from "element-plus";
|
||||||
import { qcckGet, qcckDelete } from "@/api/qcckApi.js";
|
import { qcckGet, qcckDelete,ParsingText } from "@/api/qcckApi.js";
|
||||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_GS_RQFJ_LX, D_GS_RQFJ_FXDJ, D_BZ_SF, D_GS_RQFJ_FXLB } = proxy.$dict(
|
const { D_GS_RQFJ_LX, D_GS_RQFJ_FXDJ, D_BZ_SF, D_GS_RQFJ_FXLB } = proxy.$dict( "D_GS_RQFJ_FXDJ", "D_GS_RQFJ_LX", "D_GS_RQFJ_FXDJ", "D_BZ_SF", "D_GS_RQFJ_FXLB"); //获取字典数据
|
||||||
"D_GS_RQFJ_FXDJ",
|
const showDialog = ref(false)
|
||||||
"D_GS_RQFJ_LX",
|
const btnLoading = ref(false)
|
||||||
"D_GS_RQFJ_FXDJ",
|
const modelList = ref()
|
||||||
"D_BZ_SF",
|
|
||||||
"D_GS_RQFJ_FXLB"
|
|
||||||
); //获取字典数据
|
|
||||||
|
|
||||||
const searchConfiger = ref([
|
const searchConfiger = ref([
|
||||||
{
|
{
|
||||||
label: "管辖部门",
|
label: "管辖部门",
|
||||||
@ -134,34 +121,19 @@ const searchConfiger = ref([
|
|||||||
options: D_BZ_SF
|
options: D_BZ_SF
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
const isImport = ref(false);
|
const active = ref('');
|
||||||
const checkData = reactive({
|
const btnsList = reactive(["级别变更","警种变更","指定分配","添加标签","导出","批量删除"]);
|
||||||
hasChoose: ["警情"],
|
|
||||||
list: ["警情", "人力情报", "线索", "民警处置文本", "交通事故"]
|
|
||||||
});
|
|
||||||
const btnsList = reactive([
|
|
||||||
"级别变更",
|
|
||||||
"警种变更",
|
|
||||||
"指定分配",
|
|
||||||
"添加标签",
|
|
||||||
"导出",
|
|
||||||
"批量删除"
|
|
||||||
]);
|
|
||||||
|
|
||||||
const chooselx = ref("");
|
const chooselx = ref("");
|
||||||
const isShow = ref(false);
|
|
||||||
const idsTop = ref([]);
|
|
||||||
const ids = ref([]);
|
const ids = ref([]);
|
||||||
|
|
||||||
const addFormDiloag = ref();
|
const addFormDiloag = ref();
|
||||||
const IntelligentParsingRef = ref();
|
const showEdit = ref(false);
|
||||||
const searchBox = ref();
|
const searchBox = ref();
|
||||||
const queryFrom = ref({});
|
const queryFrom = ref({});
|
||||||
const pageData = reactive({
|
const pageData = reactive({
|
||||||
tableData: [],
|
tableData: [],
|
||||||
tableData2: [],
|
tableData2: [],
|
||||||
keyCount: 0,
|
keyCount: 0,
|
||||||
tableConfiger0: {
|
tableConfigerTop: {
|
||||||
rowHieght: 61,
|
rowHieght: 61,
|
||||||
showSelectType: "checkBox",
|
showSelectType: "checkBox",
|
||||||
loading: false
|
loading: false
|
||||||
@ -179,8 +151,10 @@ const pageData = reactive({
|
|||||||
},
|
},
|
||||||
controlsWidth: 160,
|
controlsWidth: 160,
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "发掘类型", prop: "fjLx", showSolt: true },
|
{ label: "数据来源", prop: "sjly",showSolt:true},
|
||||||
{ label: "发掘文本 ", prop: "fjWb", showOverflowTooltip: true }
|
{ label: "数据时间", prop: "sj", showOverflowTooltip: true,},
|
||||||
|
{ label: "指向地点", prop: "dd", showOverflowTooltip: true,},
|
||||||
|
{ label: "数据内容", prop: "nr", showOverflowTooltip: true},
|
||||||
],
|
],
|
||||||
tableColumn2: [
|
tableColumn2: [
|
||||||
{ label: "姓名", prop: "ryXm", showOverflowTooltip: true },
|
{ label: "姓名", prop: "ryXm", showOverflowTooltip: true },
|
||||||
@ -193,42 +167,12 @@ const pageData = reactive({
|
|||||||
{ label: "管辖单位", prop: "gxDwDm", showOverflowTooltip: true },
|
{ label: "管辖单位", prop: "gxDwDm", showOverflowTooltip: true },
|
||||||
{ label: "管控民警", prop: "gxMj", showOverflowTooltip: true },
|
{ label: "管控民警", prop: "gxMj", showOverflowTooltip: true },
|
||||||
{ label: "责任部门", prop: "ssbm", showOverflowTooltip: true },
|
{ label: "责任部门", prop: "ssbm", showOverflowTooltip: true },
|
||||||
{
|
{ label: "标签", prop: "bqList", showSolt: true, showOverflowTooltip: true},
|
||||||
label: "标签",
|
{ label: "风险等级", prop: "fxDj", showOverflowTooltip: true, showSolt: true},
|
||||||
prop: "bqList",
|
{ label: "风险类别", prop: "fxLb", showOverflowTooltip: true, showSolt: true},
|
||||||
showOverflowTooltip: true,
|
{ label: "是否关注", prop: "sfGz", showOverflowTooltip: true, showSolt: true},
|
||||||
showSolt: true
|
{ label: "是否转布控人员", prop: "sfZbkry", showOverflowTooltip: true, showSolt: true},
|
||||||
},
|
{ label: "是否转重点人员", prop: "sfZzdry", showOverflowTooltip: true, showSolt: true}
|
||||||
{
|
|
||||||
label: "风险等级",
|
|
||||||
prop: "fxDj",
|
|
||||||
showOverflowTooltip: true,
|
|
||||||
showSolt: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "风险类别",
|
|
||||||
prop: "fxLb",
|
|
||||||
showOverflowTooltip: true,
|
|
||||||
showSolt: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "是否关注",
|
|
||||||
prop: "sfGz",
|
|
||||||
showOverflowTooltip: true,
|
|
||||||
showSolt: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "是否转布控人员",
|
|
||||||
prop: "sfZbkry",
|
|
||||||
showOverflowTooltip: true,
|
|
||||||
showSolt: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "是否转重点人员",
|
|
||||||
prop: "sfZzdry",
|
|
||||||
showOverflowTooltip: true,
|
|
||||||
showSolt: true
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -236,7 +180,6 @@ const pageData = reactive({
|
|||||||
const onSearch = (val) => {
|
const onSearch = (val) => {
|
||||||
queryFrom.value = { ...val };
|
queryFrom.value = { ...val };
|
||||||
pageData.pageConfiger.pageCurrent = 1;
|
pageData.pageConfiger.pageCurrent = 1;
|
||||||
getList();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const changeNo = (val) => {
|
const changeNo = (val) => {
|
||||||
@ -248,61 +191,29 @@ const changeSize = (val) => {
|
|||||||
getModelList();
|
getModelList();
|
||||||
};
|
};
|
||||||
|
|
||||||
// 获取内容列表
|
|
||||||
const getList = () => {
|
|
||||||
pageData.tableConfiger.loading = true;
|
|
||||||
let data = { ...queryFrom.value };
|
|
||||||
let url = "/mosty-gsxt/tbGsxtRqfjNr/selectPage";
|
|
||||||
qcckGet(data, url)
|
|
||||||
.then((res) => {
|
|
||||||
pageData.tableData = res.records || [];
|
|
||||||
pageData.tableConfiger.loading = false;
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
pageData.tableConfiger.loading = false;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
//获取模型识别列表
|
//获取模型识别列表
|
||||||
const getModelList = () => {
|
const getModelList = () => {
|
||||||
let data = { ...pageData.pageConfiger };
|
let data = { ...pageData.pageConfiger };
|
||||||
pageData.tableConfiger0.loading = true;
|
pageData.tableConfiger.loading = true;
|
||||||
qcckGet(data, "/mosty-gsxt/tbGsxtRqfjRy/selectPage")
|
qcckGet(data, "/mosty-gsxt/tbGsxtRqfjRy/selectPage").then((res) => {
|
||||||
.then((res) => {
|
pageData.tableConfiger.loading = false;
|
||||||
pageData.tableConfiger0.loading = false;
|
pageData.tableData2 = res.records || [];
|
||||||
pageData.tableData2 = res.records || [];
|
pageData.total = res.total;
|
||||||
pageData.total = res.total;
|
ids.value = [];
|
||||||
ids.value = [];
|
}).catch(() => {
|
||||||
})
|
pageData.tableConfiger.loading = false;
|
||||||
.catch(() => {
|
});
|
||||||
pageData.tableConfiger0.loading = false;
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
//新增- 编辑
|
//新增- 编辑
|
||||||
const handleData = (type, row) => {
|
const handleData = (type, row) => {
|
||||||
addFormDiloag.value.init(type, row);
|
showEdit.value = true;
|
||||||
};
|
nextTick(()=>{
|
||||||
// 智能解析
|
addFormDiloag.value.init(type, row);
|
||||||
const intelligent = () => {
|
})
|
||||||
IntelligentParsingRef.value.init();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// 选择数据
|
|
||||||
const chooseDataTop = (val) => {
|
|
||||||
if (Array.isArray(val)) idsTop.value = val.map((item) => item.id);
|
|
||||||
};
|
|
||||||
|
|
||||||
//删除操作
|
|
||||||
const deleteRow = (ids) => {
|
|
||||||
proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
|
|
||||||
ids.forEach((id) => {
|
|
||||||
qcckGet({}, "/mosty-gsxt/tbGsxtRqfjNr/closeById/" + id).then((res) => {
|
|
||||||
ElMessage.success("删除成功");
|
|
||||||
getList();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
const deleteRowBottom = (id) => {
|
const deleteRowBottom = (id) => {
|
||||||
proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
|
proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
|
||||||
qcckDelete({}, "/mosty-gsxt/tbGsxtRqfjRy/" + id).then((res) => {
|
qcckDelete({}, "/mosty-gsxt/tbGsxtRqfjRy/" + id).then((res) => {
|
||||||
@ -328,28 +239,85 @@ const chooseType = (val) => {
|
|||||||
isShow.value = true;
|
isShow.value = true;
|
||||||
break;
|
break;
|
||||||
case "导出":
|
case "导出":
|
||||||
// download("/mosty-api/mosty-gsxt/tbGsxtRqfjRy/exportRyfjFxjg", {"bkBt":"1"},`模型智能识别/LP解析结果_${new Date().getTime()}.xlsx`);
|
let fjrSfzh = getItem("idEntityCard");
|
||||||
|
window.open('/mosty-api/mosty-gsxt/tbGsxtRqfjRy/exportRyfjFxjg?fjrSfzh='+fjrSfzh,'_self')
|
||||||
break;
|
break;
|
||||||
case "批量删除":
|
case "批量删除":
|
||||||
if (ids.value.length == 0)
|
if (ids.value.length == 0) return ElMessage.warning("请选择对应删除的数据");
|
||||||
return ElMessage.warning("请选择对应删除的数据");
|
ids.value.forEach((id) => { deleteRowBottom(id); });
|
||||||
ids.value.forEach((id) => {
|
|
||||||
deleteRowBottom(id);
|
|
||||||
});
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const changeRadio = () =>{
|
||||||
|
showDialog.value = true;
|
||||||
|
nextTick(()=>{
|
||||||
|
modelList.value.init(active.value)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//删除操作
|
||||||
|
const deleteRow = (id) => {
|
||||||
|
pageData.tableData = pageData.tableData.filter(v=>v.id != id);
|
||||||
|
};
|
||||||
|
|
||||||
|
const updateDate = (val) =>{
|
||||||
|
let index = pageData.tableData.findIndex(v=>v.id == val.id);
|
||||||
|
if(index != -1) pageData.tableData[index] = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
const handelSub = (val) =>{
|
||||||
|
pageData.tableData = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 智能解析
|
||||||
|
const intelligent = () => {
|
||||||
|
if(pageData.tableData.length == 0) return proxy.$message({ type: "warning", message: "请先选择数据" });
|
||||||
|
let content = pageData.tableData[0].nr;
|
||||||
|
let obj = {
|
||||||
|
"model": "deepseek-reasoner",
|
||||||
|
"messages": [
|
||||||
|
{
|
||||||
|
"role": "system",
|
||||||
|
"content": "# 角色定位\n你是一名资深警务人员,尤其擅长对警情、案件、线索等非结构化文本数据进行阅读理解,并从中提取各种对象特征信息进行结构化,并总结各种对象之间的关联关系。\n## - person:人物 - id:唯一值 - ryXm:姓名 - rySjhm:手机号 - rySfzh:身份证号 - ryHjdz:户籍地 - ryHzhm:护照号码 - ryXzdz:现居住地址 "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": "# 任务\n根据警情信息识别对象信息,以及对象之间的关联关系。最后以json形式输出,不要做任何解释。直接给出完整的json\n## 注意\n- 各种不同类型的对象分别用对象数组存储;\n- 对象之间的关系存储在relation数组中;\n\n# 警情信息\n - "
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"max_tokens": 4096,
|
||||||
|
"stream": false
|
||||||
|
}
|
||||||
|
obj.messages[0].content += content + "## 注意点\n- 地址信息能够根据上下文信息按照省、市、县、街道/乡镇、路名分段补全并标准化。例如:四川省 成都市 高新区 桂溪街道 交子大道11号\n- 对象之间的关联关系由对象类型、对象id、关系类型、目标对象类型、目标对象id 5个属性组成。\n"
|
||||||
|
btnLoading.value = true;
|
||||||
|
ParsingText( obj,(res)=>{
|
||||||
|
console.log(res,'===========系欸小蜀');
|
||||||
|
|
||||||
|
btnLoading.value = false;
|
||||||
|
let content = res.data.choices[0].message.content;
|
||||||
|
let message = null;
|
||||||
|
try{
|
||||||
|
message = content ? JSON.parse(content):''
|
||||||
|
}catch(err){
|
||||||
|
proxy.$message({ type: "danger", message: "解析异常,请重新上传解析" });
|
||||||
|
}
|
||||||
|
if(!message) return proxy.$message({ type: "danger", message: "解析异常,请重新上传解析" });
|
||||||
|
console.log(message,'============params上手');
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
const tabHeightFn = () => {
|
const tabHeightFn = () => {
|
||||||
pageData.tableHeight2 =
|
pageData.tableHeight2 = window.innerHeight - searchBox.value.offsetHeight - 650;
|
||||||
window.innerHeight - searchBox.value.offsetHeight - 650;
|
|
||||||
window.onresize = function () {
|
window.onresize = function () {
|
||||||
tabHeightFn();
|
tabHeightFn();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getList();
|
|
||||||
tabHeightFn();
|
tabHeightFn();
|
||||||
getModelList();
|
getModelList();
|
||||||
});
|
});
|
||||||
@ -371,32 +339,26 @@ onMounted(() => {
|
|||||||
border-right: 1px solid #e8e8e8;
|
border-right: 1px solid #e8e8e8;
|
||||||
color: #333;
|
color: #333;
|
||||||
line-height: 32px;
|
line-height: 32px;
|
||||||
|
::v-deep .el-radio-group{
|
||||||
::v-deep .checkBox {
|
|
||||||
flex-direction: column;
|
|
||||||
|
|
||||||
.checkall {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
::v-deep .el-checkbox-group {
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
padding-left: 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
::v-deep .el-radio{
|
||||||
::v-deep .is-checked {
|
width: 100%;
|
||||||
background: rgb(242, 249, 255);
|
margin-right: 0;
|
||||||
margin-bottom: 4px;
|
color: #333;
|
||||||
}
|
}
|
||||||
|
.cancelBtn{
|
||||||
::v-deep .el-checkbox {
|
text-align: center;
|
||||||
padding-left: 8px;
|
height: 40px;
|
||||||
margin-right: 4px;
|
line-height: 40px;
|
||||||
}
|
background: #6da4e8;
|
||||||
|
color: #fff;
|
||||||
.all {
|
border-radius: 4px;
|
||||||
width: calc(100% - 4px);
|
margin: 10px;
|
||||||
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,9 +2,13 @@
|
|||||||
<div>
|
<div>
|
||||||
<div class="titleBox">
|
<div class="titleBox">
|
||||||
<PageTitle title="人力情报数据采集管理">
|
<PageTitle title="人力情报数据采集管理">
|
||||||
<el-button type="primary">
|
<!-- <el-button type="primary">
|
||||||
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
|
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
|
||||||
<span style="vertical-align: middle">导出</span>
|
<span style="vertical-align: middle">导出</span>
|
||||||
|
</el-button> -->
|
||||||
|
<el-button type="primary" @click="dologShowFn()">
|
||||||
|
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
|
||||||
|
<span style="vertical-align: middle">全域搜索</span>
|
||||||
</el-button>
|
</el-button>
|
||||||
</PageTitle>
|
</PageTitle>
|
||||||
</div>
|
</div>
|
||||||
@ -81,11 +85,19 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 新增 -->
|
<!-- 新增 -->
|
||||||
<AddForm ref="detailDiloag" @change="change" v-if="isShow" :dic="{D_BZ_SF,D_BZ_XB,D_GS_XS_LY,D_BZ_SSZT,D_GS_XS_LX ,D_GS_XS_QTLX}" />
|
<AddForm ref="detailDiloag" @change="change" v-if="isShow" :dic="{D_BZ_SF,D_BZ_XB,D_GS_XS_LY,D_BZ_SSZT,D_GS_XS_LX ,D_GS_XS_QTLX}" />
|
||||||
</div>
|
|
||||||
|
<DialogDragger title="全域搜索" top="30px" v-model="dologShow" coumClass="zdy-model-dialogs" @close="close" width="80%">
|
||||||
|
<iframe style="width: 100%; height: 1000px" src="https://www.baidu.com" frameborder="0">
|
||||||
|
xxxxx
|
||||||
|
</iframe>
|
||||||
|
</DialogDragger>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import { download } from "@/utils/request";
|
||||||
import * as MOSTY from "@/components/MyComponents/index";
|
import * as MOSTY from "@/components/MyComponents/index";
|
||||||
|
import DialogDragger from "@/views/home/layout/dialogDragger.vue";
|
||||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
import PageTitle from "@/components/aboutTable/PageTitle.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";
|
||||||
@ -93,7 +105,6 @@ import Search from "@/components/aboutTable/Search.vue";
|
|||||||
import AddForm from "./components/addForm.vue";
|
import AddForm from "./components/addForm.vue";
|
||||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||||
import { fa } from "element-plus/es/locale.mjs";
|
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const {D_GS_XS_CZZT,D_GS_XS_LY, D_BZ_SSZT,D_BZ_SF,D_GS_XS_LX ,D_GS_XS_QTLX,D_BZ_XB,D_BZ_XSSHZT} = proxy.$dict("D_GS_XS_CZZT","D_GS_XS_LY","D_BZ_SSZT","D_BZ_SF","D_GS_XS_LX","D_GS_XS_QTLX","D_BZ_XB","D_BZ_XSSHZT"); //获取字典数据
|
const {D_GS_XS_CZZT,D_GS_XS_LY, D_BZ_SSZT,D_BZ_SF,D_GS_XS_LX ,D_GS_XS_QTLX,D_BZ_XB,D_BZ_XSSHZT} = proxy.$dict("D_GS_XS_CZZT","D_GS_XS_LY","D_BZ_SSZT","D_BZ_SF","D_GS_XS_LX","D_GS_XS_QTLX","D_BZ_XB","D_BZ_XSSHZT"); //获取字典数据
|
||||||
const detailDiloag = ref();
|
const detailDiloag = ref();
|
||||||
@ -211,6 +222,11 @@ const delDictItem = (id) =>{
|
|||||||
}).catch(() => {});
|
}).catch(() => {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 导出
|
||||||
|
const exportFile = () =>{
|
||||||
|
window.open('/mosty-api/mosty-gsxt/qbcj/exportQbsjcjDc?cjLx=1','_self')
|
||||||
|
}
|
||||||
|
|
||||||
// 详情
|
// 详情
|
||||||
const addEdit = (type, row) => {
|
const addEdit = (type, row) => {
|
||||||
isShow.value = true;
|
isShow.value = true;
|
||||||
@ -226,6 +242,10 @@ const tabHeightFn = () => {
|
|||||||
tabHeightFn();
|
tabHeightFn();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
const dologShow = ref(false)
|
||||||
|
const dologShowFn = (val) =>{
|
||||||
|
dologShow.value = true;
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@ -239,11 +259,26 @@ const tabHeightFn = () => {
|
|||||||
color: red;
|
color: red;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.el-loading-mask {
|
.el-loading-mask {
|
||||||
background: rgba(0, 0, 0, 0.5) !important;
|
background: rgba(0, 0, 0, 0.5) !important;
|
||||||
}
|
}
|
||||||
|
:v-deep .el-dialog{
|
||||||
|
width: 90% !important;
|
||||||
|
}
|
||||||
|
.zdy-model-dialogs {
|
||||||
|
/* background-color: rgb(50, 148, 214); */
|
||||||
|
background: url("~@/assets/images/bg46.png") no-repeat center center;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
padding: 8px 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
pointer-events: auto !important;
|
||||||
|
height:calc(100% - 50px);
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<!-- 左侧树形菜单 -->
|
<!-- 左侧树形菜单 -->
|
||||||
<div class="left-menu">
|
<div class="left-menu">
|
||||||
<!-- 这个部分用的是组件-后期替换 -->
|
<!-- 这个部分用的是组件-后期替换 -->
|
||||||
<MOSTY.DepartmentTree width="310px" @change="init" placeholder="管理部门" clearable filterable :isBmId="true" v-model="listQuery.ssbmdm" />
|
<MOSTY.DepartmentTree width="310px" @change="init" placeholder="管理部门" clearable filterable v-model="listQuery.ssbmdm" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 右侧内容区 -->
|
<!-- 右侧内容区 -->
|
||||||
@ -32,7 +32,7 @@
|
|||||||
<div class="chart-item">
|
<div class="chart-item">
|
||||||
<div class="chart-title">
|
<div class="chart-title">
|
||||||
<span>线索类型</span>
|
<span>线索类型</span>
|
||||||
<el-button type="primary">导出统计表</el-button>
|
<el-button type="primary" @click="handleExport('线索类型')">导出统计表</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="chart">
|
<div class="chart">
|
||||||
<PieEcharts echartsId="bsqkEpieChart" :key="ketcount" color="#333" :data="obj.xslxList"></PieEcharts>
|
<PieEcharts echartsId="bsqkEpieChart" :key="ketcount" color="#333" :data="obj.xslxList"></PieEcharts>
|
||||||
@ -41,7 +41,7 @@
|
|||||||
<div class="chart-item">
|
<div class="chart-item">
|
||||||
<div class="chart-title">
|
<div class="chart-title">
|
||||||
<span>采纳情况</span>
|
<span>采纳情况</span>
|
||||||
<el-button type="primary">导出统计表</el-button>
|
<el-button type="primary" @click="handleExport('采纳情况')">导出统计表</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="chart">
|
<div class="chart">
|
||||||
<DbarEcharts echartsId="bar3DChart" :key="ketcount" :data="obj.cnList"></DbarEcharts>
|
<DbarEcharts echartsId="bar3DChart" :key="ketcount" :data="obj.cnList"></DbarEcharts>
|
||||||
@ -50,7 +50,7 @@
|
|||||||
<div class="chart-item">
|
<div class="chart-item">
|
||||||
<div class="chart-title">
|
<div class="chart-title">
|
||||||
<span>处置状态</span>
|
<span>处置状态</span>
|
||||||
<el-button type="primary">导出统计表</el-button>
|
<el-button type="primary" @click="handleExport('处置状态')">导出统计表</el-button>
|
||||||
</div>
|
</div>
|
||||||
<ul class="chart mt8">
|
<ul class="chart mt8">
|
||||||
<li v-for="(it, idx) in obj.czztList" :key="idx" class="mb6">
|
<li v-for="(it, idx) in obj.czztList" :key="idx" class="mb6">
|
||||||
@ -64,7 +64,7 @@
|
|||||||
<div class="chart-item">
|
<div class="chart-item">
|
||||||
<div class="chart-title">
|
<div class="chart-title">
|
||||||
<span>奖惩情况</span>
|
<span>奖惩情况</span>
|
||||||
<el-button type="primary">导出统计表</el-button>
|
<el-button type="primary" @click="handleExport('奖惩情况')">导出统计表</el-button>
|
||||||
</div>
|
</div>
|
||||||
<lineEcharts color="#333" :key="ketcount" echartsId="areaChart" :data="obj.jcqkList"></lineEcharts>
|
<lineEcharts color="#333" :key="ketcount" echartsId="areaChart" :data="obj.jcqkList"></lineEcharts>
|
||||||
</div>
|
</div>
|
||||||
@ -74,6 +74,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import { download } from "@/utils/request";
|
||||||
import { timeValidate, timeSlotChange } from "@/utils/tools.js";
|
import { timeValidate, timeSlotChange } from "@/utils/tools.js";
|
||||||
import * as MOSTY from "@/components/MyComponents/index";
|
import * as MOSTY from "@/components/MyComponents/index";
|
||||||
import lineEcharts from "@/views/home/echarts/lineEcharts.vue";
|
import lineEcharts from "@/views/home/echarts/lineEcharts.vue";
|
||||||
@ -171,6 +172,25 @@ const handleDateChange = (val) => {
|
|||||||
if(val[0] == timeSlotChange('本年')[0] && val[1] == timeSlotChange('本年')[1]) radio.value = 3;
|
if(val[0] == timeSlotChange('本年')[0] && val[1] == timeSlotChange('本年')[1]) radio.value = 3;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 导出
|
||||||
|
const handleExport = (type) =>{
|
||||||
|
switch(type){
|
||||||
|
case '线索类型':
|
||||||
|
window.open('/mosty-api/mosty-gsxt/qbcj/getXscjTjByXslxDc','_self')
|
||||||
|
break;
|
||||||
|
case '采纳情况':
|
||||||
|
window.open('/mosty-api/mosty-gsxt/qbcj/getXscjTjByXslxDc','_self')
|
||||||
|
break;
|
||||||
|
case '处置状态':
|
||||||
|
window.open('/mosty-api/mosty-gsxt/qbcj/getXscjTjByCzztDc','_self')
|
||||||
|
break;
|
||||||
|
case '奖惩情况':
|
||||||
|
window.open('/mosty-api/mosty-gsxt/tbJlqk/getShygkhtjDc','_self')
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// 重置
|
// 重置
|
||||||
const handleRest = () => {
|
const handleRest = () => {
|
||||||
radio.value = 0;
|
radio.value = 0;
|
||||||
|
@ -8,157 +8,173 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form_cnt">
|
<div class="form_cnt">
|
||||||
<el-form :model="listQuery" :rules="rules" :disabled="disabled" ref="elform" inline :label-width="100" label-position="left">
|
<el-form :model="listQuery" :rules="rules" :disabled="disabled" ref="elform" inline :label-width="100"
|
||||||
<div class="smallTitle">布控信息</div>
|
label-position="left">
|
||||||
<el-form-item prop="bkBt" label="布控标题">
|
<div class="smallTitle">布控信息</div>
|
||||||
<MOSTY.Other v-model="listQuery.bkBt" placeholder="请输入布控标题" clearable />
|
<el-form-item prop="bkBt" label="布控标题">
|
||||||
</el-form-item>
|
<MOSTY.Other v-model="listQuery.bkBt" placeholder="请输入布控标题" clearable />
|
||||||
<el-form-item prop="bkDx" label="布控对象">
|
</el-form-item>
|
||||||
<MOSTY.Select v-model="listQuery.bkDx" @change="shangeDx" :dictEnum="props.dic.D_GS_BK_DX" placeholder="请选择布控对象" clearable />
|
<el-form-item prop="bkDx" label="布控对象">
|
||||||
</el-form-item>
|
<MOSTY.Select v-model="listQuery.bkDx" @change="shangeDx" :dictEnum="props.dic.D_GS_BK_DX"
|
||||||
<div class="ww100 mt10 mb10">
|
placeholder="请选择布控对象" clearable />
|
||||||
<el-button type="primary" @click="handleAddPeo" v-if="!disabled">
|
</el-form-item>
|
||||||
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
|
<div class="ww100 mt10 mb10">
|
||||||
<span style="vertical-align: middle">新增</span>
|
<el-button type="primary" @click="handleAddPeo" v-if="!disabled">
|
||||||
</el-button>
|
<el-icon style="vertical-align: middle">
|
||||||
</div>
|
<CirclePlus />
|
||||||
<div class="relative ww100">
|
</el-icon>
|
||||||
<MyTable
|
<span style="vertical-align: middle">新增</span>
|
||||||
:tableData="listQuery.bkdxList"
|
</el-button>
|
||||||
:tableColumn="tableDate.tableColumn"
|
</div>
|
||||||
:tableHeight="tableDate.tableHeight"
|
<div class="relative ww100">
|
||||||
:key="tableDate.keyCount"
|
<MyTable :tableData="listQuery.bkdxList" :tableColumn="tableDate.tableColumn"
|
||||||
:tableConfiger="tableDate.tableConfiger"
|
:tableHeight="tableDate.tableHeight" :key="tableDate.keyCount" :tableConfiger="tableDate.tableConfiger"
|
||||||
:controlsWidth="tableDate.controlsWidth"
|
:controlsWidth="tableDate.controlsWidth">
|
||||||
>
|
<template #fjZp="{ row }">
|
||||||
<template #fjZp="{row}">
|
<el-image :src="row.fjZp"></el-image>
|
||||||
<el-image :src="row.fjZp"></el-image>
|
</template>
|
||||||
</template>
|
<template #ryXb="{ row }">
|
||||||
<template #ryXb="{ row }">
|
<DictTag :tag="false" :value="row.ryXb" :options="props.dic.D_BZ_XB" />
|
||||||
<DictTag :tag="false" :value="row.ryXb" :options="props.dic.D_BZ_XB" />
|
</template>
|
||||||
</template>
|
<template #bqList="{ row }">
|
||||||
<template #bqList="{ row }">
|
<span v-if="row.bqList">
|
||||||
<span v-if="row.bqList">
|
<span v-for="(it, idx) in row.bqList" :key="idx"> {{ it.bqMc }}、</span>
|
||||||
<span v-for="(it,idx) in row.bqList" :key="idx"> {{ it.bqMc }}、</span>
|
</span>
|
||||||
</span>
|
</template>
|
||||||
</template>
|
<!-- 操作 -->
|
||||||
<!-- 操作 -->
|
<template #controls="{ row }">
|
||||||
<template #controls="{ row }">
|
<el-link type="primary">查看档案</el-link>
|
||||||
<el-link type="primary" >查看档案</el-link>
|
<el-link type="danger" @click="deleteRow(row)">删除</el-link>
|
||||||
<el-link type="danger" @click="deleteRow(row)">删除</el-link>
|
</template>
|
||||||
</template>
|
</MyTable>
|
||||||
</MyTable>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="smallTitle">布控范围</div>
|
<div class="smallTitle">布控范围</div>
|
||||||
<div class="ww100 relative mb10" style="height: 250px;border: 1px solid #dcdfe6;border-radius: 4px;overflow: hidden;">
|
<div class="ww100 relative mb10"
|
||||||
<div class="absolute mapSearch flex">
|
style="height: 250px;border: 1px solid #dcdfe6;border-radius: 4px;overflow: hidden;">
|
||||||
<MOSTY.Select v-model="listQuery.bkqyList" filterable multiple :dictEnum="bkqyArr" style="width:350px" placeholder="请选择布控范围" clearable />
|
<div class="absolute mapSearch flex">
|
||||||
</div>
|
<MOSTY.Select v-model="listQuery.bkqyList" filterable multiple :dictEnum="bkqyArr" style="width:350px"
|
||||||
<GdMap></GdMap>
|
placeholder="请选择布控范围" clearable />
|
||||||
</div>
|
</div>
|
||||||
<el-form-item prop="bkBt" label="布控要素" style="width: 100%;">
|
<GdMap></GdMap>
|
||||||
<div class="flex align-center">
|
</div>
|
||||||
<el-button @click="listQuery.bkYz = it.dm" :type="listQuery.bkYz == it.dm ? 'primary':''" v-for="it in props.dic.D_GS_BK_BKYS" :key="it">{{ it.zdmc }}</el-button>
|
<el-form-item prop="bkBt" label="布控要素" style="width: 100%;">
|
||||||
</div>
|
<div class="flex align-center">
|
||||||
</el-form-item>
|
<el-button @click="listQuery.bkYz = it.dm" :type="listQuery.bkYz == it.dm ? 'primary' : ''"
|
||||||
<div style="width: 100%;" class="mt25">
|
v-for="it in props.dic.D_GS_BK_BKYS" :key="it">{{ it.zdmc }}</el-button>
|
||||||
<el-form-item prop="bkSjKs" label="布控开始时间" label-width="120px">
|
</div>
|
||||||
<MOSTY.Date v-model="listQuery.bkSjKs" type="datetime" format="YYYY-MM-DD HH:mm:ss" placeholder="请选择布控开始时间" clearable />
|
</el-form-item>
|
||||||
</el-form-item>
|
<div style="width: 100%;" class="mt25">
|
||||||
<el-form-item prop="bkSjJs" label="布控结束时间" label-width="120px" >
|
<el-form-item prop="bkSjKs" label="布控开始时间" label-width="120px">
|
||||||
<MOSTY.Date v-model="listQuery.bkSjJs" type="datetime" format="YYYY-MM-DD HH:mm:ss" placeholder="请选择布控结束时间" clearable />
|
<MOSTY.Date v-model="listQuery.bkSjKs" type="datetime" format="YYYY-MM-DD HH:mm:ss" placeholder="请选择布控开始时间"
|
||||||
</el-form-item>
|
clearable />
|
||||||
</div>
|
</el-form-item>
|
||||||
<div style="width: 100%;" class="mt25">
|
<el-form-item prop="bkSjJs" label="布控结束时间" label-width="120px">
|
||||||
<el-form-item prop="czYq" label="处置要求" >
|
<MOSTY.Date v-model="listQuery.bkSjJs" type="datetime" format="YYYY-MM-DD HH:mm:ss" placeholder="请选择布控结束时间"
|
||||||
<MOSTY.Select v-model="listQuery.czYq" :dictEnum="props.dic.D_GS_BK_CZYQ" placeholder="请选择处置要求" clearable />
|
clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item prop="bkDj" label="布控级别" >
|
</div>
|
||||||
<MOSTY.Select v-model="listQuery.bkDj" :dictEnum="props.dic.D_GS_BK_DJ" placeholder="请选择布控级别" clearable />
|
<div style="width: 100%;" class="mt25">
|
||||||
</el-form-item>
|
<el-form-item prop="czYq" label="处置要求">
|
||||||
</div>
|
<MOSTY.Select v-model="listQuery.czYq" :dictEnum="props.dic.D_GS_BK_CZYQ" placeholder="请选择处置要求" clearable />
|
||||||
<div style="width: 100%;" class="mt10">
|
</el-form-item>
|
||||||
<el-form-item prop="bkSy" label="布控事由" style="width: 100%;">
|
<el-form-item prop="bkDj" label="布控级别">
|
||||||
<MOSTY.Other v-model="listQuery.bkSy" placeholder="请输入布控事由" type="textarea" style="width: 100%;" clearable />
|
<MOSTY.Select v-model="listQuery.bkDj" :dictEnum="props.dic.D_GS_BK_DJ" placeholder="请选择布控级别" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
<div style="width: 100%;" class="mt10">
|
<div style="width: 100%;" class="mt10">
|
||||||
<el-form-item prop="bkfj" label="上传附件" style="width: 100%;">
|
<el-form-item prop="bkSy" label="布控事由" style="width: 100%;">
|
||||||
<div>
|
<MOSTY.Other v-model="listQuery.bkSy" placeholder="请输入布控事由" type="textarea" style="width: 100%;"
|
||||||
<MOSTY.Upload :showBtn="true" :limit="10" :isImg="false" :isAll="true" v-model="listQuery.bkfj" />
|
clearable />
|
||||||
<div>支持png、jpg、pdf文件上传</div>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
<div style="width: 100%;" class="mt10">
|
||||||
|
<el-form-item prop="bkfj" label="上传附件" style="width: 100%;">
|
||||||
|
<div>
|
||||||
|
<MOSTY.Upload :showBtn="true" :limit="10" :isImg="false" :isAll="true" v-model="listQuery.bkfj" />
|
||||||
|
<div>支持png、jpg、pdf文件上传</div>
|
||||||
</div>
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="smallTitle">审批信息</div>
|
<div class="smallTitle">审批信息</div>
|
||||||
<el-form-item prop="czJsdwdm" label="处置接收单位" label-width="120px" style="width: 100%;">
|
<el-form-item prop="czJsdwdm" label="处置接收单位" label-width="120px" style="width: 100%;">
|
||||||
<div class="flex align-center ww100">
|
<div class="flex align-center ww100">
|
||||||
<MOSTY.Department v-model="listQuery.czJsdwdm" style="width:260px;margin-right: 10px;" placeholder="请选择处置要求" clearable />
|
<MOSTY.Department v-model="listQuery.czJsdwdm" style="width:260px;margin-right: 10px;" placeholder="请选择处置要求"
|
||||||
<el-radio-group v-model="listQuery.czJsdwlx" class="flex align-center">
|
clearable />
|
||||||
<el-radio :label="it.dm" v-for="(it,idx) in props.dic.D_GS_BK_CZJSDWLX" :key="idx">{{ it.zdmc }}</el-radio>
|
<el-radio-group v-model="listQuery.czJsdwlx" class="flex align-center">
|
||||||
</el-radio-group>
|
<el-radio :label="it.dm" v-for="(it, idx) in props.dic.D_GS_BK_CZJSDWLX" :key="idx">{{ it.zdmc
|
||||||
|
}}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
<div class="ww100 mt10 mb20">
|
||||||
|
<el-form-item prop="bkTjfs" label="提醒方式">
|
||||||
|
<el-radio-group v-model="listQuery.bkTjfs" class="flex align-center">
|
||||||
|
<el-radio :label="it.dm" v-for="(it, idx) in props.dic.D_GS_BK_TJFS" :key="idx">{{ it.zdmc }}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item prop="bkSjQs" label="签收时间">
|
||||||
|
<MOSTY.Date v-model="listQuery.bkSjQs" type="datetime" format="YYYY-MM-DD HH:mm:ss" placeholder="请选择签收时间"
|
||||||
|
clearable />
|
||||||
|
</el-form-item>
|
||||||
|
</div>
|
||||||
|
<div class="ww100">
|
||||||
|
<el-steps direction="vertical" :active="listQuery.wccz" space="500" finish-status="success">
|
||||||
|
<el-step title="发起申请">
|
||||||
|
<template #description>
|
||||||
|
<div class="flex align-center ww100 mt10 mb20">
|
||||||
|
<el-input v-model="listQuery.bkfqrXm" readonly class="ww20"></el-input>
|
||||||
|
<el-input v-model="listQuery.bkfqrSsbmmc" readonly class="ww20 ml10 mr10"></el-input>
|
||||||
|
<span class="f12" style="color: #333333;"> 备注发起人和部门根据登陆人自动填写</span>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</template>
|
||||||
<div class="ww100 mt10 mb20">
|
</el-step>
|
||||||
<el-form-item prop="bkTjfs" label="提醒方式">
|
<el-step title="审核确认">
|
||||||
<el-radio-group v-model="listQuery.bkTjfs" class="flex align-center">
|
<template #description>
|
||||||
<el-radio :label="it.dm" v-for="(it,idx) in props.dic.D_GS_BK_TJFS" :key="idx">{{ it.zdmc }}</el-radio>
|
<div class="ww100 mt10 mb20 depBox">
|
||||||
</el-radio-group>
|
<el-form-item prop="bkshrSsbmdm" label="审核部门:" label-width="100" style="width: 100%;">
|
||||||
</el-form-item>
|
<MOSTY.Department :isAll="true" v-model="listQuery.bkshrSsbmdm" clearable
|
||||||
<el-form-item prop="bkSjQs" label="签收时间">
|
:placeholder="listQuery.bkshrSsbmmc ? listQuery.bkshrSsbmmc : ''" />
|
||||||
<MOSTY.Date v-model="listQuery.bkSjQs" type="datetime" format="YYYY-MM-DD HH:mm:ss" placeholder="请选择签收时间" clearable />
|
</el-form-item>
|
||||||
</el-form-item>
|
</div>
|
||||||
</div>
|
</template>
|
||||||
<div class="ww100">
|
</el-step>
|
||||||
<el-steps direction="vertical" :active="listQuery.wccz" space="500" finish-status="success">
|
<el-step title="审批确认">
|
||||||
<el-step title="发起申请" >
|
<template #description>
|
||||||
<template #description>
|
<div class="ww100 mt10 mb20 depBox">
|
||||||
<div class="flex align-center ww100 mt10 mb20">
|
<el-form-item prop="bkshrSsbmdm" label="审批部门:" label-width="100" style="width: 100%;">
|
||||||
<el-input v-model="listQuery.bkfqrXm" readonly class="ww20"></el-input>
|
<MOSTY.Department :isAll="true" v-model="listQuery.bksprSsbmdm" clearable
|
||||||
<el-input v-model="listQuery.bkfqrSsbmmc" readonly class="ww20 ml10 mr10"></el-input>
|
:placeholder="listQuery.bksprSsbmmc ? listQuery.bksprSsbmmc : ''" />
|
||||||
<span class="f12" style="color: #333333;"> 备注发起人和部门根据登陆人自动填写</span>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-step>
|
</el-step>
|
||||||
<el-step title="审核确认" >
|
</el-steps>
|
||||||
<template #description>
|
</div>
|
||||||
<div class="ww100 mt10 mb20 depBox">
|
</el-form>
|
||||||
<el-form-item prop="bkshrSsbmdm" label="审核部门:" label-width="100" style="width: 100%;">
|
|
||||||
<MOSTY.Department :isAll="true" v-model="listQuery.bkshrSsbmdm" clearable :placeholder="listQuery.bkshrSsbmmc ? listQuery.bkshrSsbmmc : '' " />
|
|
||||||
</el-form-item>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-step>
|
|
||||||
<el-step title="审批确认" >
|
|
||||||
<template #description>
|
|
||||||
<div class="ww100 mt10 mb20 depBox">
|
|
||||||
<el-form-item prop="bkshrSsbmdm" label="审批部门:" label-width="100" style="width: 100%;">
|
|
||||||
<MOSTY.Department :isAll="true" v-model="listQuery.bksprSsbmdm" clearable :placeholder="listQuery.bksprSsbmmc ? listQuery.bksprSsbmmc : '' " />
|
|
||||||
</el-form-item>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-step>
|
|
||||||
</el-steps>
|
|
||||||
</div>
|
|
||||||
</el-form>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- 选择布控人员 -->
|
<!-- 选择布控人员 -->
|
||||||
<BkryDialod v-model="chooseVisible_RY" @choosed="choosed" @choosedAdd="choosedAdd" :roleIds="roleIds" />
|
<BkryDialod :modelValue="chooseVisible_RY" @update:modelValue="chooseVisible_RY = $event" @choosed="choosed"
|
||||||
|
@choosedAdd="choosedAdd" :roleIds="roleIds" />
|
||||||
|
<!-- 选择车辆布控 -->
|
||||||
|
<BkclDialod :modelValue="chooseVisible_CL" @update:modelValue="chooseVisible_CL = $event" @choosed="choosed"
|
||||||
|
@choosedAdd="choosedAdd" :roleIds="roleIds" />
|
||||||
<!-- 选择布控群体 -->
|
<!-- 选择布控群体 -->
|
||||||
<BkqtDialod v-model="chooseVisible_QT" @choosed="choosed" :roleIds="roleIds" />
|
<BkqtDialod :modelValue="chooseVisible_QT" @update:modelValue="chooseVisible_QT = $event" @choosed="choosed"
|
||||||
|
:roleIds="roleIds" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { getItem } from "@/utils/storage";
|
import { getItem } from "@/utils/storage";
|
||||||
import BkryDialod from '@/components/ChooseList/ChooseZdr/index.vue';
|
import BkryDialod from '@/components/ChooseList/ChooseZdr/index.vue';
|
||||||
import BkqtDialod from '@/components/ChooseList/ChooseQt/index.vue';
|
import BkqtDialod from '@/components/ChooseList/ChooseQt/index.vue';
|
||||||
|
import BkclDialod from '@/components/ChooseList/ChooseCl/index.vue';
|
||||||
import GdMap from "@/components/GdMap/index.vue";
|
import GdMap from "@/components/GdMap/index.vue";
|
||||||
import * as MOSTY from "@/components/MyComponents/index";
|
import * as MOSTY from "@/components/MyComponents/index";
|
||||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||||
import { qcckGet,qcckPost } from "@/api/qcckApi.js";
|
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||||
import { ref, defineExpose, reactive, defineEmits, getCurrentInstance, nextTick } from "vue";
|
import { ref, defineExpose, reactive, defineEmits, getCurrentInstance, nextTick } from "vue";
|
||||||
const emit = defineEmits(["change"]);
|
const emit = defineEmits(["change"]);
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@ -168,25 +184,26 @@ const elform = ref()
|
|||||||
const roleIds = ref([]); //角色ID
|
const roleIds = ref([]); //角色ID
|
||||||
const chooseVisible_RY = ref(false); //选择布控人员弹窗
|
const chooseVisible_RY = ref(false); //选择布控人员弹窗
|
||||||
const chooseVisible_QT = ref(false); //选择布控群体弹窗
|
const chooseVisible_QT = ref(false); //选择布控群体弹窗
|
||||||
|
const chooseVisible_CL = ref(false)
|
||||||
const bkqyArr = ref([]); //布控区域
|
const bkqyArr = ref([]); //布控区域
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const dialogForm = ref(false); //弹窗
|
const dialogForm = ref(false); //弹窗
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
const addPerson = ref([]) //单独新增的数据
|
const addPerson = ref([]) //单独新增的数据
|
||||||
const listQuery = ref({
|
const listQuery = ref({
|
||||||
bkYz:'01',
|
bkYz: '01',
|
||||||
bkdxList: [],
|
bkdxList: [],
|
||||||
}); //表单数据
|
}); //表单数据
|
||||||
const rules = reactive({
|
const rules = reactive({
|
||||||
bkBt: [{ required: true, message: "请输入布控标题", trigger: "blur" }],
|
bkBt: [{ required: true, message: "请输入布控标题", trigger: "blur" }],
|
||||||
bkDx: [{ required: true, message: "请选择布控对象", trigger: "change" }],
|
bkDx: [{ required: true, message: "请选择布控对象", trigger: "change" }],
|
||||||
bkSjKs: [{ required: true, message: "请选择布控开始时间", trigger: "change" }],
|
bkSjKs: [{ required: true, message: "请选择布控开始时间", trigger: "change" }],
|
||||||
bkSjJs: [{ required: true, message: "请选择布控结束时间", trigger: "change" }],
|
bkSjJs: [{ required: true, message: "请选择布控结束时间", trigger: "change" }],
|
||||||
czJsdwdm: [{ required: true, message: "请选择处置接收单位", trigger: "change" }],
|
czJsdwdm: [{ required: true, message: "请选择处置接收单位", trigger: "change" }],
|
||||||
bkshrSsbmdm: [{ required: true, message: "请选择审核部门", trigger: "change" }],
|
bkshrSsbmdm: [{ required: true, message: "请选择审核部门", trigger: "change" }],
|
||||||
bksprSsbmdm: [{ required: true, message: "请选择审批部门", trigger: "change" }],
|
bksprSsbmdm: [{ required: true, message: "请选择审批部门", trigger: "change" }],
|
||||||
})
|
})
|
||||||
const tableDate = reactive({
|
let tableDate = reactive({
|
||||||
keyCount: 0,
|
keyCount: 0,
|
||||||
tableConfiger: {
|
tableConfiger: {
|
||||||
rowHieght: 61,
|
rowHieght: 61,
|
||||||
@ -200,9 +217,9 @@ const tableDate = reactive({
|
|||||||
}, //分页
|
}, //分页
|
||||||
controlsWidth: 200, //操作栏宽度
|
controlsWidth: 200, //操作栏宽度
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "照片", prop: "fjZp",showSolt:true},
|
{ label: "照片", prop: "fjZp", showSolt: true },
|
||||||
{ label: "姓名", prop: "ryXm" },
|
{ label: "姓名", prop: "ryXm" },
|
||||||
{ label: "性别", prop: "ryXb",showSolt:true },
|
{ label: "性别", prop: "ryXb", showSolt: true },
|
||||||
{ label: "身份证号", prop: "rySfzh" },
|
{ label: "身份证号", prop: "rySfzh" },
|
||||||
{ label: "户籍地", prop: "ryHjd" },
|
{ label: "户籍地", prop: "ryHjd" },
|
||||||
{ label: "现居住地址", prop: "ryXjd" },
|
{ label: "现居住地址", prop: "ryXjd" },
|
||||||
@ -211,124 +228,216 @@ const tableDate = reactive({
|
|||||||
{ label: "车牌号", prop: "clCph" },
|
{ label: "车牌号", prop: "clCph" },
|
||||||
{ label: "车架号", prop: "clCjh" },
|
{ label: "车架号", prop: "clCjh" },
|
||||||
{ label: "特征描述", prop: "qtTzms" },
|
{ label: "特征描述", prop: "qtTzms" },
|
||||||
{ label: "人员标签", prop: "bqList" ,showSolt:true,showOverflowTooltip:true }
|
{ label: "人员标签", prop: "bqList", showSolt: true, showOverflowTooltip: true }
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
const tableColumnList = {
|
||||||
|
'01': [
|
||||||
|
{ label: "照片", prop: "fjZp", showSolt: true },
|
||||||
|
{ label: "姓名", prop: "ryXm" },
|
||||||
|
{ label: "性别", prop: "ryXb", showSolt: true },
|
||||||
|
{ label: "身份证号", prop: "rySfzh" },
|
||||||
|
{ label: "户籍地", prop: "ryHjd" },
|
||||||
|
{ label: "现居住地址", prop: "ryXjd" },
|
||||||
|
{ label: "手机号", prop: "rySjhm" },
|
||||||
|
{ label: "虚拟身份", prop: "qtXnsf" },
|
||||||
|
{ label: "车牌号", prop: "clCph" },
|
||||||
|
{ label: "车架号", prop: "clCjh" },
|
||||||
|
{ label: "特征描述", prop: "qtTzms" },
|
||||||
|
{ label: "人员标签", prop: "bqList", showSolt: true, showOverflowTooltip: true }
|
||||||
|
],
|
||||||
|
'02': [
|
||||||
|
{ label: "照片", prop: "fjZp", showSolt: true },
|
||||||
|
{ label: "姓名", prop: "ryXm" },
|
||||||
|
{ label: "性别", prop: "ryXb", showSolt: true },
|
||||||
|
{ label: "身份证号", prop: "rySfzh" },
|
||||||
|
{ label: "户籍地", prop: "ryHjd" },
|
||||||
|
{ label: "现居住地址", prop: "ryXjd" },
|
||||||
|
{ label: "手机号", prop: "rySjhm" },
|
||||||
|
{ label: "虚拟身份", prop: "qtXnsf" },
|
||||||
|
{ label: "车牌号", prop: "clCph" },
|
||||||
|
{ label: "车架号", prop: "clCjh" },
|
||||||
|
{ label: "特征描述", prop: "qtTzms" },
|
||||||
|
{ label: "人员标签", prop: "bqList", showSolt: true, showOverflowTooltip: true }
|
||||||
|
],
|
||||||
|
'03': [
|
||||||
|
{ label: "车牌号", prop: "clCph" },
|
||||||
|
{ label: "车架号", prop: "clCjh" },
|
||||||
|
{ label: "车辆颜色", prop: "clYs" },
|
||||||
|
// { label: "车辆所有人", prop: "clSyr" },
|
||||||
|
// { label: "管辖单位", prop: "gxSsbmmc" },
|
||||||
|
// { label: "管控民警", prop: "gkMjXm" },
|
||||||
|
]
|
||||||
|
}
|
||||||
const title = ref('')
|
const title = ref('')
|
||||||
const disabled = ref(false)
|
const disabled = ref(false)
|
||||||
// 初始化数据
|
// 初始化数据
|
||||||
const init = (type,row) => {
|
const init = (type, row) => {
|
||||||
listQuery.value.bkfj = [];
|
listQuery.value.bkfj = [];
|
||||||
if(type == 'add'){
|
if (type == 'add') {
|
||||||
tableDate.tableConfiger.haveControls = true;
|
tableDate.tableConfiger.haveControls = true;
|
||||||
disabled.value = false;
|
disabled.value = false;
|
||||||
listQuery.value.bkfqrXm = getItem("USERNAME");
|
listQuery.value.bkfqrXm = getItem("USERNAME");
|
||||||
listQuery.value.bkfqrSfzh = getItem("idEntityCard");
|
listQuery.value.bkfqrSfzh = getItem("idEntityCard");
|
||||||
listQuery.value.bkfqrSsbmmc = getItem("deptId")[0].deptName;;
|
listQuery.value.bkfqrSsbmmc = getItem("deptId")[0].deptName;;
|
||||||
listQuery.value.bkfqrSsbmdm = getItem("deptId")[0].deptCode;;
|
listQuery.value.bkfqrSsbmdm = getItem("deptId")[0].deptCode;;
|
||||||
}
|
}
|
||||||
title.value = type == 'add' ? '新增' : type == 'detail' ?'详情':'编辑';
|
title.value = type == 'add' ? '新增' : type == 'detail' ? '详情' : '编辑';
|
||||||
disabled.value = type == 'detail' ? true :false ;
|
disabled.value = type == 'detail' ? true : false;
|
||||||
dialogForm.value = true;
|
dialogForm.value = true;
|
||||||
if(row) tableDate.tableConfiger.haveControls = false;
|
if (row) tableDate.tableConfiger.haveControls = false;
|
||||||
get_bkqy_list(row)
|
get_bkqy_list(row)
|
||||||
};
|
};
|
||||||
|
|
||||||
// 获取布控区域
|
// 获取布控区域
|
||||||
const get_bkqy_list = (row) =>{
|
const get_bkqy_list = (row) => {
|
||||||
qcckGet({},'/mosty-gsxt/tbGsxtBkQy/selectList').then(res=>{
|
qcckGet({}, '/mosty-gsxt/tbGsxtBkQy/selectList').then(res => {
|
||||||
let arr = res || [];
|
let arr = res || [];
|
||||||
bkqyArr.value = arr.map(item=>{
|
bkqyArr.value = arr.map(item => {
|
||||||
return {...item,label:item.qymc,value:item.id}
|
return { ...item, label: item.qymc, value: item.id }
|
||||||
})
|
|
||||||
if(row) getDataById(row.id);
|
|
||||||
})
|
})
|
||||||
|
if (row) getDataById(row.id);
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 根据id获取详情
|
// 根据id获取详情
|
||||||
const getDataById = (id) =>{
|
const getDataById = (id) => {
|
||||||
qcckGet({},'/mosty-gsxt/tbGsxtBk/selectVoById/'+id).then(res=>{
|
qcckGet({}, '/mosty-gsxt/tbGsxtBk/selectVoById/' + id).then(res => {
|
||||||
res.bkfj = res.ossList || [];
|
res.bkfj = res.ossList || [];
|
||||||
res.bkqyList = res.qyList ? res.qyList.map(v=>v.id) : [];
|
res.bkqyList = res.qyList ? res.qyList.map(v => v.id) : [];
|
||||||
listQuery.value = res || {}
|
listQuery.value = res || {}
|
||||||
})
|
|
||||||
|
tableDate.tableColumn =tableColumnList[res.bkDx?res.bkDx:'01']
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const shangeDx = () =>{
|
const shangeDx = () => {
|
||||||
listQuery.value.bkDxxx = '';
|
tableDate.tableColumn =tableColumnList[listQuery.value.bkDx]
|
||||||
listQuery.value.bkdxList = [];
|
listQuery.value.bkDxxx = '';
|
||||||
roleIds.value = [];
|
listQuery.value.bkdxList = [];
|
||||||
addPerson.value = []
|
roleIds.value = [];
|
||||||
|
addPerson.value = []
|
||||||
}
|
}
|
||||||
// 删除数据
|
// 删除数据
|
||||||
const deleteRow = (row) => {
|
const deleteRow = (row) => {
|
||||||
roleIds.value = roleIds.value.filter(id => id != row.id);
|
roleIds.value = roleIds.value.filter(id => id != row.id);
|
||||||
addPerson.value = addPerson.value.filter(it => it.id != row.id);
|
addPerson.value = addPerson.value.filter(it => it.id != row.id);
|
||||||
listQuery.value.bkdxList = listQuery.value.bkdxList.filter(it => it.id != row.id);
|
listQuery.value.bkdxList = listQuery.value.bkdxList.filter(it => it.id != row.id);
|
||||||
}
|
}
|
||||||
// 单独新增的数据
|
// 单独新增的数据
|
||||||
const choosedAdd = (item) =>{
|
const choosedAdd = (item) => {
|
||||||
let obj = { id:item.id, fjZp:item.fjZp, ryXm:item.ryXm, ryXb:item.ryXb, rySfzh:item.rySfzh, ryHjd:item.hjdXz, ryXjd:item.xzdXz, rySjhm:item.ryLxdh, qtXnsf:item.qtXnsf,clCjh:item.clCjh, clCph:item.clCph, qtTzms:item.qtTzms, bqList:item.bqList }
|
console.log(item);
|
||||||
addPerson.value.push(obj) ;//缓存的数据
|
|
||||||
if(!listQuery.value.bkdxList) listQuery.value.bkdxList = [];
|
let obj = {}
|
||||||
listQuery.value.bkdxList.unshift(obj);
|
if (listQuery.value.bkDx!=='03') {
|
||||||
|
obj={ id: item.id, fjZp: item.fjZp, ryXm: item.ryXm, ryXb: item.ryXb, rySfzh: item.rySfzh, ryHjd: item.hjdXz, ryXjd: item.xzdXz, rySjhm: item.ryLxdh, qtXnsf: item.qtXnsf, clCjh: item.clCjh, clCph: item.clCph, qtTzms: item.qtTzms, bqList: item.bqList }
|
||||||
|
|
||||||
|
} else {
|
||||||
|
obj={
|
||||||
|
clCph: item.hphm, clCjh: item.clCjh, clSyr: item.clSyr, clSyrsfzh: item.clSyrsfzh,
|
||||||
|
clYs: item.clYs, gxSsbmmc: item.gxSsbmmc
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
addPerson.value.push(obj);//缓存的数据
|
||||||
|
if (!listQuery.value.bkdxList) listQuery.value.bkdxList = [];
|
||||||
|
listQuery.value.bkdxList.unshift(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 选择重点人
|
// 选择重点人
|
||||||
const choosed = (val) => {
|
const choosed = (val) => {
|
||||||
if(listQuery.value.bkDx == '01'){// 人员
|
console.log(val);
|
||||||
roleIds.value = val.map(it=>it.id);
|
|
||||||
let arr = val.map(item=>{
|
|
||||||
let bqArr = item.bqList || [];
|
|
||||||
let bqs = bqArr.map(v=>{
|
|
||||||
return { bqZl:v.bqZl , bqId:v.bqId, bqLx:v.bqLx, bqLb:v.bqLb, bqMc:v.bqMc, bqDm:v.bqDm }
|
|
||||||
})
|
|
||||||
return { id:item.id, fjZp:item.fjZp, ryXm:item.ryXm, ryXb:item.ryXb, rySfzh:item.rySfzh, ryHjd:item.hjdXz, ryXjd:item.xzdXz, rySjhm:item.ryLxdh, qtXnsf:item.qtXnsf,clCjh:item.clCjh, clCph:item.clCph, qtTzms:item.qtTzms, bqList:bqs }
|
|
||||||
})
|
|
||||||
listQuery.value.bkdxList = [...addPerson.value,...arr];
|
|
||||||
}else{// 群体
|
|
||||||
listQuery.value.bkDxxx = (val.map(it=>it.id)).join(',');
|
|
||||||
let peolist = []
|
|
||||||
val.forEach(item=>{
|
|
||||||
if(item.zdryList) peolist = peolist.concat(item.zdryList)
|
|
||||||
})
|
|
||||||
let brrPeo = peolist.map(item=>{
|
|
||||||
let bqArr = item.bqList || [];
|
|
||||||
let bqs = bqArr.map(v=>{
|
|
||||||
return { bqZl:v.bqZl , bqId:v.bqId, bqLx:v.bqLx, bqLb:v.bqLb, bqMc:v.bqMc, bqDm:v.bqDm }
|
|
||||||
})
|
|
||||||
return { id:item.id, fjZp:item.fjZp, ryXm:item.ryXm, ryXb:item.ryXb, rySfzh:item.rySfzh, ryHjd:item.hjdXz, ryXjd:item.xzdXz, rySjhm:item.ryLxdh, qtXnsf:item.qtXnsf,clCjh:item.clCjh, clCph:item.clCph, qtTzms:item.qtTzms, bqList:bqs }
|
|
||||||
})
|
|
||||||
|
|
||||||
listQuery.value.bkdxList = brrPeo;
|
tableDate.tableColumn =tableColumnList[listQuery.value.bkDx]
|
||||||
}
|
console.log(tableDate.tableColumn);
|
||||||
|
|
||||||
|
if (listQuery.value.bkDx == '01') {// 人员
|
||||||
|
roleIds.value = val.map(it => it.id);
|
||||||
|
let arr = val.map(item => {
|
||||||
|
let bqArr = item.bqList || [];
|
||||||
|
let bqs = bqArr.map(v => {
|
||||||
|
return { bqZl: v.bqZl, bqId: v.bqId, bqLx: v.bqLx, bqLb: v.bqLb, bqMc: v.bqMc, bqDm: v.bqDm }
|
||||||
|
})
|
||||||
|
return { id: item.id, fjZp: item.fjZp, ryXm: item.ryXm, ryXb: item.ryXb, rySfzh: item.rySfzh, ryHjd: item.hjdXz, ryXjd: item.xzdXz, rySjhm: item.ryLxdh, qtXnsf: item.qtXnsf, clCjh: item.clCjh, clCph: item.clCph, qtTzms: item.qtTzms, bqList: bqs }
|
||||||
|
})
|
||||||
|
listQuery.value.bkdxList = [...addPerson.value, ...arr];
|
||||||
|
} else if (listQuery.value.bkDx == '03') {
|
||||||
|
|
||||||
|
roleIds.value = val.map(it => it.id);
|
||||||
|
let arr = val.map(item => {
|
||||||
|
let bqArr = item.bqList || [];
|
||||||
|
let bqs = bqArr.map(v => {
|
||||||
|
return {
|
||||||
|
clCph: v.hphm, clCjh: v.clCjh, clSyr: v.clSyr, clSyrsfzh: v.clSyrsfzh,
|
||||||
|
clYs: v.clYs, gxSsbmmc: v.gxSsbmmc
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return {
|
||||||
|
clCph: item.hphm, clCjh: item.clCjh, clSyr: item.clSyr, clSyrsfzh: item.clSyrsfzh,
|
||||||
|
clYs: item.clYs, gxSsbmmc: item.gxSsbmmc, bqList: bqs
|
||||||
|
}
|
||||||
|
})
|
||||||
|
listQuery.value.bkdxList = [...addPerson.value, ...arr];
|
||||||
|
|
||||||
|
}
|
||||||
|
else {// 群体
|
||||||
|
listQuery.value.bkDxxx = (val.map(it => it.id)).join(',');
|
||||||
|
let peolist = []
|
||||||
|
val.forEach(item => {
|
||||||
|
if (item.zdryList) peolist = peolist.concat(item.zdryList)
|
||||||
|
})
|
||||||
|
let brrPeo = peolist.map(item => {
|
||||||
|
let bqArr = item.bqList || [];
|
||||||
|
let bqs = bqArr.map(v => {
|
||||||
|
return { bqZl: v.bqZl, bqId: v.bqId, bqLx: v.bqLx, bqLb: v.bqLb, bqMc: v.bqMc, bqDm: v.bqDm }
|
||||||
|
})
|
||||||
|
return {
|
||||||
|
id: item.id, fjZp: item.fjZp, ryXm: item.ryXm, ryXb: item.ryXb,
|
||||||
|
rySfzh: item.rySfzh, ryHjd: item.hjdXz, ryXjd: item.xzdXz,
|
||||||
|
rySjhm: item.ryLxdh, qtXnsf: item.qtXnsf, clCjh: item.clCjh,
|
||||||
|
clCph: item.clCph, qtTzms: item.qtTzms, bqList: bqs
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
listQuery.value.bkdxList = brrPeo;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 选择人员
|
// 选择人员
|
||||||
const handleAddPeo = () =>{
|
const handleAddPeo = () => {
|
||||||
if(!listQuery.value.bkDx) return proxy.$message({ type: "warning", message: '请选择布控对象' });
|
if (!listQuery.value.bkDx) return proxy.$message({ type: "warning", message: '请选择布控对象' });
|
||||||
listQuery.value.bkDx == '01' ? chooseVisible_RY.value = true : chooseVisible_QT.value = true;
|
switch (listQuery.value.bkDx) {
|
||||||
|
case '01':
|
||||||
|
chooseVisible_RY.value = true
|
||||||
|
break;
|
||||||
|
case '02':
|
||||||
|
chooseVisible_QT.value = true
|
||||||
|
break;
|
||||||
|
case '03':
|
||||||
|
chooseVisible_CL.value = true
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 提交
|
// 提交
|
||||||
const submit = () => {
|
const submit = () => {
|
||||||
elform.value.validate((validate) => {
|
elform.value.validate((validate) => {
|
||||||
if(!validate) return;
|
if (!validate) return;
|
||||||
let params = { ...listQuery.value };
|
let params = { ...listQuery.value };
|
||||||
params.bkfj = params.bkfj ? params.bkfj.join(','):'';
|
params.bkfj = params.bkfj ? params.bkfj.join(',') : '';
|
||||||
params.bkdxList = params.bkdxList ? params.bkdxList : [];
|
params.bkdxList = params.bkdxList ? params.bkdxList : [];
|
||||||
params.bkdxList.forEach(item=>{ item.fjZp = item.fjZp ? item.fjZp.join(',') : '' })
|
params.bkdxList.forEach(item => { item.fjZp = item.fjZp ? item.fjZp.join(',') : '' })
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
let url = title.value == '新增' ? "/mosty-gsxt/tbGsxtBk/save" : "/mosty-gsxt/tbGsxtBk/update";
|
let url = title.value == '新增' ? "/mosty-gsxt/tbGsxtBk/save" : "/mosty-gsxt/tbGsxtBk/update";
|
||||||
qcckPost(params, url).then((res) => {
|
qcckPost(params, url).then((res) => {
|
||||||
proxy.$message({ type: "success", message: "布控成功" });
|
proxy.$message({ type: "success", message: "布控成功" });
|
||||||
emit("change");
|
emit("change");
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
close();
|
close();
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -347,50 +456,57 @@ defineExpose({ init });
|
|||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import "~@/assets/css/layout.scss";
|
@import "~@/assets/css/layout.scss";
|
||||||
@import "~@/assets/css/element-plus.scss";
|
@import "~@/assets/css/element-plus.scss";
|
||||||
.smallTitle{
|
|
||||||
width: 100%;
|
.smallTitle {
|
||||||
font-size: 15px;
|
width: 100%;
|
||||||
line-height: 50px;
|
font-size: 15px;
|
||||||
font-weight: 550;
|
line-height: 50px;
|
||||||
color: #606266;
|
font-weight: 550;
|
||||||
|
color: #606266;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mapSearch{
|
.mapSearch {
|
||||||
left: 10px;
|
left: 10px;
|
||||||
top: 10px;
|
top: 10px;
|
||||||
z-index: 100;
|
z-index: 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialog{
|
.dialog {
|
||||||
::v-deep .el-form-item--default{
|
::v-deep .el-form-item--default {
|
||||||
margin: 0 1% 0 0 !important;
|
margin: 0 1% 0 0 !important;
|
||||||
padding-bottom: 0 !important;
|
padding-bottom: 0 !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .avatar-uploader{
|
::v-deep .avatar-uploader {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
::v-deep .el-upload--picture-card i{
|
|
||||||
width: 156px;
|
::v-deep .el-upload--picture-card i {
|
||||||
|
width: 156px;
|
||||||
}
|
}
|
||||||
.depBox{
|
|
||||||
border: 1px solid #e9e9e9;
|
.depBox {
|
||||||
width: 305px;
|
border: 1px solid #e9e9e9;
|
||||||
padding: 0 0 0 4px;
|
width: 305px;
|
||||||
border-radius: 4px;
|
padding: 0 0 0 4px;
|
||||||
::v-deep .el-input__inner{
|
border-radius: 4px;
|
||||||
border: none;
|
|
||||||
}
|
::v-deep .el-input__inner {
|
||||||
::v-deep .el-cascader .el-input.is-focus .el-input__inner{
|
border: none;
|
||||||
border-color: transparent !important;
|
}
|
||||||
}
|
|
||||||
::v-deep .el-input__inner:focus {
|
::v-deep .el-cascader .el-input.is-focus .el-input__inner {
|
||||||
box-shadow: none;
|
border-color: transparent !important;
|
||||||
}
|
}
|
||||||
::v-deep .el-input.is-disabled .el-input__inner{
|
|
||||||
border-color: transparent !important;
|
::v-deep .el-input__inner:focus {
|
||||||
}
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-input.is-disabled .el-input__inner {
|
||||||
|
border-color: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -46,8 +46,8 @@
|
|||||||
</template>
|
</template>
|
||||||
<!-- 操作 -->
|
<!-- 操作 -->
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<el-link type="primary" v-if="row.bkZt == '01'" size="small" @click="handleSend(row.id)">送审</el-link>
|
<el-link type="primary" v-if="['01','03','06'].includes(row.bkZt)" size="small" @click="handleSend(row.id)">送审</el-link>
|
||||||
<el-link type="primary" v-if="row.bkZt == '01'" size="small" @click="handleAdd('edit',row)">编辑</el-link>
|
<el-link type="primary" v-if="['01','03','06'].includes(row.bkZt)" size="small" @click="handleAdd('edit',row)">编辑</el-link>
|
||||||
<el-link type="primary" size="small" @click="handleAdd('detail',row)">详情</el-link>
|
<el-link type="primary" size="small" @click="handleAdd('detail',row)">详情</el-link>
|
||||||
<el-link type="danger" size="small" @click="handleRow(row.id)">删除</el-link>
|
<el-link type="danger" size="small" @click="handleRow(row.id)">删除</el-link>
|
||||||
</template>
|
</template>
|
||||||
|
@ -75,8 +75,10 @@ import * as MOSTY from "@/components/MyComponents/index";
|
|||||||
import Pages from "@/components/aboutTable/Pages.vue";
|
import Pages from "@/components/aboutTable/Pages.vue";
|
||||||
import Search from "@/components/aboutTable/Search.vue";
|
import Search from "@/components/aboutTable/Search.vue";
|
||||||
import DetailForm from "./components/detailForm.vue";
|
import DetailForm from "./components/detailForm.vue";
|
||||||
|
import { useRoute, useRouter } from 'vue-router';
|
||||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||||
|
const route = useRoute();
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const detailDiloag = ref();
|
const detailDiloag = ref();
|
||||||
const searchBox = ref(); //搜索框
|
const searchBox = ref(); //搜索框
|
||||||
@ -139,6 +141,7 @@ import * as MOSTY from "@/components/MyComponents/index";
|
|||||||
pageData.loading = true;
|
pageData.loading = true;
|
||||||
let data = { ...pageData.pageConfiger, ...queryFrom.value };
|
let data = { ...pageData.pageConfiger, ...queryFrom.value };
|
||||||
delete data.daterange; // 删除daterange字段
|
delete data.daterange; // 删除daterange字段
|
||||||
|
if(route.query.tsypid) data.tsypid = route.query.tsypid;
|
||||||
qcckGet(data,'/mosty-gsxt/wshs/selectPage').then(res=>{
|
qcckGet(data,'/mosty-gsxt/wshs/selectPage').then(res=>{
|
||||||
let arr = res.records || [];
|
let arr = res.records || [];
|
||||||
arr.forEach(item => {
|
arr.forEach(item => {
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
<span v-for="idx in 3" :key="idx" :class="'sircleL'+idx" class="sircle mr5"></span>
|
<span v-for="idx in 3" :key="idx" :class="'sircleL'+idx" class="sircle mr5"></span>
|
||||||
<span class="ml10 mr10">专题研判</span>
|
<span class="ml10 mr10">专题研判</span>
|
||||||
<span v-for="idx in 3" :key="idx" :class="'sircleR'+idx" class="sircle ml5"></span>
|
<span v-for="idx in 3" :key="idx" :class="'sircleR'+idx" class="sircle ml5"></span>
|
||||||
<el-button class="btn" type="primary">研判报告</el-button>
|
<el-button class="btn" type="primary" @click="handleYP">研判报告</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="commCnt">
|
<div class="commCnt">
|
||||||
<div ref="searchBox">
|
<div ref="searchBox">
|
||||||
@ -52,8 +52,8 @@
|
|||||||
>
|
>
|
||||||
<!-- 操作 -->
|
<!-- 操作 -->
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<el-link type="primary" size="small">网上会商</el-link>
|
<el-link type="primary" size="small" @click="handleHs(row)">网上会商</el-link>
|
||||||
<el-link type="primary" size="small">处置</el-link>
|
<el-link type="primary" size="small" @click="gozl(row)">处置</el-link>
|
||||||
</template>
|
</template>
|
||||||
</MyTable>
|
</MyTable>
|
||||||
</div>
|
</div>
|
||||||
@ -62,20 +62,26 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<YpModel v-model="showModel" :textContent="textContent" ></YpModel>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import YpModel from '@/components/ypModel/index.vue'
|
||||||
import { qcckPost, qcckGet } from "@/api/qcckApi.js";
|
import { qcckPost, qcckGet } from "@/api/qcckApi.js";
|
||||||
import MoreBarEcharts from "@/views/home/echarts/moreBarEcharts.vue";
|
import MoreBarEcharts from "@/views/home/echarts/moreBarEcharts.vue";
|
||||||
import LineEcharts from "@/views/home/echarts/moreLineEcharts.vue";
|
import LineEcharts from "@/views/home/echarts/moreLineEcharts.vue";
|
||||||
import Search from "@/components/aboutTable/Search.vue";
|
import Search from "@/components/aboutTable/Search.vue";
|
||||||
import MyTable from "@/components/aboutTable/DarkTable.vue";
|
import MyTable from "@/components/aboutTable/DarkTable.vue";
|
||||||
|
import { useRoute, useRouter } from 'vue-router';
|
||||||
|
const router = useRouter();
|
||||||
import { nextTick, onMounted, reactive,getCurrentInstance ,ref, watch } from 'vue';
|
import { nextTick, onMounted, reactive,getCurrentInstance ,ref, watch } from 'vue';
|
||||||
import { set } from "lodash";
|
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const {D_BZ_SSZT,D_GS_XS_LY} = proxy.$dict("D_BZ_SSZT","D_GS_XS_LY"); //获取字典数据
|
const {D_BZ_SSZT,D_GS_XS_LY} = proxy.$dict("D_BZ_SSZT","D_GS_XS_LY"); //获取字典数据
|
||||||
const searchBox = ref();
|
const searchBox = ref();
|
||||||
const listBoxRef = ref();
|
const listBoxRef = ref();
|
||||||
|
const showModel = ref(false);
|
||||||
|
const textContent = ref('');
|
||||||
// 图数据
|
// 图数据
|
||||||
const obj = reactive({
|
const obj = reactive({
|
||||||
data_lxtj:{
|
data_lxtj:{
|
||||||
@ -103,9 +109,9 @@ const searchConfiger = ref([
|
|||||||
{ label: "结束时间", prop: 'jssj', placeholder: "请选择结束时间", showType: "datetime" },
|
{ label: "结束时间", prop: 'jssj', placeholder: "请选择结束时间", showType: "datetime" },
|
||||||
])
|
])
|
||||||
// 每个列表对应的值
|
// 每个列表对应的值
|
||||||
const list = ref([
|
const list = ref([])
|
||||||
// { title:'诈骗', tableList:[]},
|
const searchForm = ref({}) //赛选
|
||||||
])
|
|
||||||
// 列表公用
|
// 列表公用
|
||||||
const pageData = reactive({
|
const pageData = reactive({
|
||||||
tableColumn:[
|
tableColumn:[
|
||||||
@ -175,7 +181,7 @@ const tabHeightFn = () => {
|
|||||||
|
|
||||||
const handleGetList = () => {
|
const handleGetList = () => {
|
||||||
list.value.forEach((item, index) => {
|
list.value.forEach((item, index) => {
|
||||||
let params = { sszt: item.dm, pageNum: 1, pageSize: 20 };
|
let params = { sszt: item.dm, pageNum: 1, pageSize: 20,...searchForm.value };
|
||||||
qcckGet(params, '/mosty-gsxt/qbcj/selectPage').then(res => {
|
qcckGet(params, '/mosty-gsxt/qbcj/selectPage').then(res => {
|
||||||
list.value[index].tableList = res.records || [];
|
list.value[index].tableList = res.records || [];
|
||||||
list.value[index].total = res.total;
|
list.value[index].total = res.total;
|
||||||
@ -184,6 +190,38 @@ const handleGetList = () => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleHs = (val) =>{
|
||||||
|
router.push({path:'/MeetingRoom',query:{tsypid:val.id}})
|
||||||
|
}
|
||||||
|
|
||||||
|
const gozl = () =>{
|
||||||
|
router.push('/InstructionInformation')
|
||||||
|
}
|
||||||
|
|
||||||
|
// 搜索
|
||||||
|
const onSearch = (val) =>{
|
||||||
|
searchForm.value = val;
|
||||||
|
handleGetList()
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleYP = () =>{
|
||||||
|
let params = {
|
||||||
|
hskssj:searchForm.value.kssj,
|
||||||
|
hsjssj:searchForm.value.jssj,
|
||||||
|
}
|
||||||
|
qcckPost(params,'/mosty-gsxt/wshs/getDcypbg').then(res=>{
|
||||||
|
let data = res || {};
|
||||||
|
let html = `<p class="html_bt">${data.bt}</p>`
|
||||||
|
html+=`<p>${data.head}</p>`
|
||||||
|
html+=`<p>${data.nr}</p>`
|
||||||
|
html+=`<p>${data.bc}</p>`
|
||||||
|
html+=`<p>${data.end}</p>`
|
||||||
|
textContent.value = html;
|
||||||
|
showModel.value = true;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
watch(()=>D_BZ_SSZT.value, (val) => {
|
watch(()=>D_BZ_SSZT.value, (val) => {
|
||||||
let zdlist = val || [];
|
let zdlist = val || [];
|
||||||
list.value = zdlist.map(v => ({ title: v.zdmc,dm:v.dm,keyCount:0, tableList: [],page:1,total:0 }));
|
list.value = zdlist.map(v => ({ title: v.zdmc,dm:v.dm,keyCount:0, tableList: [],page:1,total:0 }));
|
||||||
@ -348,5 +386,8 @@ watch(()=>D_BZ_SSZT.value, (val) => {
|
|||||||
::v-deep .el-link {
|
::v-deep .el-link {
|
||||||
margin: 3px;
|
margin: 3px;
|
||||||
}
|
}
|
||||||
|
.html_bt >>>p{
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
@ -0,0 +1,156 @@
|
|||||||
|
<template>
|
||||||
|
<div class="dialog" v-if="showDialog">
|
||||||
|
<div class="head_box">
|
||||||
|
<span class="title">查看详情 </span>
|
||||||
|
<div>
|
||||||
|
<el-button size="small" @click="close">关闭</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="listBox">
|
||||||
|
<div ref="searchBox">
|
||||||
|
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Search>
|
||||||
|
</div>
|
||||||
|
<!-- 表格 -->
|
||||||
|
<div class="tabBox">
|
||||||
|
<MyTable
|
||||||
|
:tableData="pageData.tableData"
|
||||||
|
:tableColumn="pageData.tableColumn"
|
||||||
|
:tableHeight="pageData.tableHeight"
|
||||||
|
:key="pageData.keyCount"
|
||||||
|
:tableConfiger="pageData.tableConfiger"
|
||||||
|
:controlsWidth="pageData.controlsWidth"
|
||||||
|
>
|
||||||
|
<template #zdrRyjb="{ row }">
|
||||||
|
<DictTag :value="row.zdrRyjb" :tag="false" :options="D_GS_ZDR_RYJB" />
|
||||||
|
</template>
|
||||||
|
<template #zdrYjdj="{ row }">
|
||||||
|
<DictTag :value="row.zdrYjdj" :tag="false" :options="D_GS_ZDR_YJDJ" />
|
||||||
|
</template>
|
||||||
|
</MyTable>
|
||||||
|
<Pages
|
||||||
|
@changeNo="changeNo"
|
||||||
|
@changeSize="changeSize"
|
||||||
|
:tableHeight="pageData.tableHeight"
|
||||||
|
:pageConfiger="{
|
||||||
|
...pageData.pageConfiger,
|
||||||
|
total: pageData.total
|
||||||
|
}"
|
||||||
|
></Pages>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||||
|
import Pages from "@/components/aboutTable/Pages.vue";
|
||||||
|
import Search from "@/components/aboutTable/Search.vue";
|
||||||
|
import { qcckPost } from "@/api/qcckApi.js";
|
||||||
|
import { ref, reactive, nextTick, getCurrentInstance } from 'vue';
|
||||||
|
import { useRouter,useRoute } from 'vue-router'
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const { D_GS_ZDR_RYJB,D_GS_ZDR_YJDJ} = proxy.$dict("D_GS_ZDR_RYJB","D_GS_ZDR_YJDJ"); //获取字典数据
|
||||||
|
const showDialog = ref(false)
|
||||||
|
const searchBox = ref(); //搜索框
|
||||||
|
const searchConfiger = ref(
|
||||||
|
[
|
||||||
|
{ label: "姓名", prop: 'ryXm', placeholder: "请输入姓名", showType: "input"},
|
||||||
|
{ label: "身份证号", prop: 'rySfzh', placeholder: "请输入身份证号", showType: "input"},
|
||||||
|
]);
|
||||||
|
const emit=defineEmits(['getData'])
|
||||||
|
const router = useRouter()
|
||||||
|
const route=useRoute()
|
||||||
|
const pageData = reactive({
|
||||||
|
tableData: [], //表格数据
|
||||||
|
keyCount: 0,
|
||||||
|
tableConfiger: {
|
||||||
|
rowHieght: 61,
|
||||||
|
showSelectType: "null",
|
||||||
|
loading: false,
|
||||||
|
haveControls: false
|
||||||
|
},
|
||||||
|
total: 0,
|
||||||
|
pageConfiger: {
|
||||||
|
pageSize: 20,
|
||||||
|
pageCurrent: 1
|
||||||
|
}, //分页
|
||||||
|
controlsWidth: 160, //操作栏宽度
|
||||||
|
tableColumn: [
|
||||||
|
{ label: "姓名", prop: "ryXm" },
|
||||||
|
{ label: "身份证号", prop: "rySfzh" },
|
||||||
|
{ label: "联系电话", prop: "ryLxdh" },
|
||||||
|
{ label: "重点人员级别", prop: "zdrRyjb",showSolt:true },
|
||||||
|
{ label: "预警等级", prop: "zdrYjdj",showSolt:true },
|
||||||
|
{ label: "关联民警", prop: "gkMjXm" },
|
||||||
|
{ label: "民警警号", prop: "gkMjJh" },
|
||||||
|
]
|
||||||
|
});
|
||||||
|
const item = ref({})
|
||||||
|
const sjlx = ref([])
|
||||||
|
|
||||||
|
// 表格高度计算
|
||||||
|
const tabHeightFn = () => {
|
||||||
|
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 280;
|
||||||
|
window.onresize = function () {
|
||||||
|
tabHeightFn();
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const changeNo = (val) => {
|
||||||
|
pageData.pageConfiger.pageCurrent = val;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
const changeSize = (val) => {
|
||||||
|
pageData.pageConfiger.pageSize = val;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
const getList = () =>{
|
||||||
|
let params = {
|
||||||
|
id:item.value.id,
|
||||||
|
sjLx:sjlx.value,
|
||||||
|
pageCurrent:pageData.pageConfiger.pageCurrent,
|
||||||
|
pageSize:pageData.pageConfiger.pageSize,
|
||||||
|
}
|
||||||
|
pageData.tableConfiger.loading = true;
|
||||||
|
qcckPost(params,'/mosty-gsxt/tsyp/getRyPage').then(res=>{
|
||||||
|
pageData.tableConfiger.loading = false;
|
||||||
|
console.log(res,'===');
|
||||||
|
pageData.tableData = res.records || []
|
||||||
|
pageData.total = res.total;
|
||||||
|
}).catch(()=>{
|
||||||
|
pageData.tableConfiger.loading = false;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const close = () =>{
|
||||||
|
pageData.tableData = [];
|
||||||
|
showDialog.value = false;
|
||||||
|
router.replace(route.query)
|
||||||
|
emit("getData")
|
||||||
|
}
|
||||||
|
|
||||||
|
const init = (val,lxs) =>{
|
||||||
|
showDialog.value = true;
|
||||||
|
item.value = val;
|
||||||
|
sjlx.value = lxs;
|
||||||
|
getList()
|
||||||
|
nextTick(()=>{
|
||||||
|
tabHeightFn()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
defineExpose({init})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.listBox{
|
||||||
|
height: calc(100% - 50px);
|
||||||
|
::v-deep .searchBox{
|
||||||
|
margin-bottom: 0 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
@ -11,86 +11,67 @@
|
|||||||
<!-- 研判类型 -->
|
<!-- 研判类型 -->
|
||||||
<CheckBox :data="checkData.yplxBtn" @changeData="changeData_yplx"></CheckBox>
|
<CheckBox :data="checkData.yplxBtn" @changeData="changeData_yplx"></CheckBox>
|
||||||
</div>
|
</div>
|
||||||
<div ref="searchBox" >
|
<div ref="searchBox">
|
||||||
<Search :searchArr="searchConfiger" @submit="onSearch"> </Search>
|
<Search :searchArr="searchConfiger" @submit="onSearch"> </Search>
|
||||||
</div>
|
</div>
|
||||||
<ul class="cntlsit mb10" v-if="show" v-infinite-scroll="load" :style="{height:listHeight+'px'}" v-loading="loading">
|
<ul class="cntlsit mb10" v-if="show" v-infinite-scroll="load" :style="{ height: listHeight + 'px' }"
|
||||||
<li class="cntItem" v-for="(it,idx) in list" :key="idx">
|
v-loading="loading">
|
||||||
|
<li class="cntItem" @click.stop="lookDeatl(it)" v-for="(it, idx) in list" :key="idx">
|
||||||
<div class="ww100"><img class="ww100" style="height: 168px;" src="@/assets/images/mxbg.jpg" alt=""></div>
|
<div class="ww100"><img class="ww100" style="height: 168px;" src="@/assets/images/mxbg.jpg" alt=""></div>
|
||||||
<div class="f14 lh24 pl4 pr4 one_text_detail">名称:{{ it.ypMc }}</div>
|
<div class="f14 lh24 pl4 pr4 one_text_detail">名称:{{ it.ypMc }}</div>
|
||||||
<div class="f14 lh24 pl4 pr4 one_text_detail">类型:<DictTag :value="it.ypLx" :tag="false" :options="D_SG_TSYPGZ" /></div>
|
<div class="flex ww100 f14 lh24 pl4 pr4 one_text_detail">类型:
|
||||||
|
<DictTag :value="it.ypLx" :tag="false" :options="D_SG_TSYPGZ" />
|
||||||
|
</div>
|
||||||
<div class="f14 lh24 pl4 pr4 one_text_detail">数量:{{ it.num }}</div>
|
<div class="f14 lh24 pl4 pr4 one_text_detail">数量:{{ it.num }}</div>
|
||||||
<div class="foot">
|
<div class="foot">
|
||||||
<span class="ml10 pointer" style="color:#027ff0 ;"><el-icon style="top: 2px;"><Document /></el-icon>报告</span>
|
<span class="ml10 pointer" @click.stop="handleYp(it)" style="color:#027ff0 ;"><el-icon style="top: 2px;">
|
||||||
<span class="ml10 pointer" style="color:#f4ac47 ;"><el-icon style="top: 2px;"><Files /></el-icon>会商</span>
|
<Document />
|
||||||
|
</el-icon>报告</span>
|
||||||
|
<span class="ml10 pointer" @click="handleHs(it)" style="color:#f4ac47 ;"><el-icon style="top: 2px;">
|
||||||
|
<Files />
|
||||||
|
</el-icon>会商</span>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li class="cntItem" v-for="(it,idx) in list" :key="idx">
|
<div class="ww100 flex just-center">
|
||||||
<div class="ww100"><img class="ww100" style="height: 168px;" src="@/assets/images/mxbg.jpg" alt=""></div>
|
<MOSTY.Empty :show="!loading && list.length <= 0"></MOSTY.Empty>
|
||||||
<div class="f14 lh24 pl4 pr4 one_text_detail">名称:{{ it.ypMc }}</div>
|
</div>
|
||||||
<div class="f14 lh24 pl4 pr4 one_text_detail">类型:<DictTag :value="it.ypLx" :tag="false" :options="D_SG_TSYPGZ" /></div>
|
<div class="tc ww100 mb4" style="color: #a29f9f;" v-if="total == list.length && total > 0">暂时没有数据了!</div>
|
||||||
<div class="f14 lh24 pl4 pr4 one_text_detail">数量:{{ it.num }}</div>
|
|
||||||
<div class="foot">
|
|
||||||
<span class="ml10 pointer" style="color:#027ff0 ;"><el-icon style="top: 2px;"><Document /></el-icon>报告</span>
|
|
||||||
<span class="ml10 pointer" style="color:#f4ac47 ;"><el-icon style="top: 2px;"><Files /></el-icon>会商</span>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li class="cntItem" v-for="(it,idx) in list" :key="idx">
|
|
||||||
<div class="ww100"><img class="ww100" style="height: 168px;" src="@/assets/images/mxbg.jpg" alt=""></div>
|
|
||||||
<div class="f14 lh24 pl4 pr4 one_text_detail">名称:{{ it.ypMc }}</div>
|
|
||||||
<div class="f14 lh24 pl4 pr4 one_text_detail">类型:<DictTag :value="it.ypLx" :tag="false" :options="D_SG_TSYPGZ" /></div>
|
|
||||||
<div class="f14 lh24 pl4 pr4 one_text_detail">数量:{{ it.num }}</div>
|
|
||||||
<div class="foot">
|
|
||||||
<span class="ml10 pointer" style="color:#027ff0 ;"><el-icon style="top: 2px;"><Document /></el-icon>报告</span>
|
|
||||||
<span class="ml10 pointer" style="color:#f4ac47 ;"><el-icon style="top: 2px;"><Files /></el-icon>会商</span>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li class="cntItem" v-for="(it,idx) in list" :key="idx">
|
|
||||||
<div class="ww100"><img class="ww100" style="height: 168px;" src="@/assets/images/mxbg.jpg" alt=""></div>
|
|
||||||
<div class="f14 lh24 pl4 pr4 one_text_detail">名称:{{ it.ypMc }}</div>
|
|
||||||
<div class="f14 lh24 pl4 pr4 one_text_detail">类型:<DictTag :value="it.ypLx" :tag="false" :options="D_SG_TSYPGZ" /></div>
|
|
||||||
<div class="f14 lh24 pl4 pr4 one_text_detail">数量:{{ it.num }}</div>
|
|
||||||
<div class="foot">
|
|
||||||
<span class="ml10 pointer" style="color:#027ff0 ;"><el-icon style="top: 2px;"><Document /></el-icon>报告</span>
|
|
||||||
<span class="ml10 pointer" style="color:#f4ac47 ;"><el-icon style="top: 2px;"><Files /></el-icon>会商</span>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li class="cntItem" v-for="(it,idx) in list" :key="idx">
|
|
||||||
<div class="ww100"><img class="ww100" style="height: 168px;" src="@/assets/images/mxbg.jpg" alt=""></div>
|
|
||||||
<div class="f14 lh24 pl4 pr4 one_text_detail">名称:{{ it.ypMc }}</div>
|
|
||||||
<div class="f14 lh24 pl4 pr4 one_text_detail">类型:<DictTag :value="it.ypLx" :tag="false" :options="D_SG_TSYPGZ" /></div>
|
|
||||||
<div class="f14 lh24 pl4 pr4 one_text_detail">数量:{{ it.num }}</div>
|
|
||||||
<div class="foot">
|
|
||||||
<span class="ml10 pointer" style="color:#027ff0 ;"><el-icon style="top: 2px;"><Document /></el-icon>报告</span>
|
|
||||||
<span class="ml10 pointer" style="color:#f4ac47 ;"><el-icon style="top: 2px;"><Files /></el-icon>会商</span>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<MOSTY.Empty :show="!loading && list.length <= 0"></MOSTY.Empty>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- 详情 -->
|
||||||
|
<Detail ref="detailForm" @getData="getLits"></Detail>
|
||||||
|
<YpModel v-model="showModel" :textContent="textContent"></YpModel>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import YpModel from '@/components/ypModel/index.vue'
|
||||||
|
import Detail from './components/detail.vue'
|
||||||
|
import * as MOSTY from "@/components/MyComponents/index";
|
||||||
import CheckBox from "@/components/checkBox/index.vue";
|
import CheckBox from "@/components/checkBox/index.vue";
|
||||||
import Search from "@/components/aboutTable/Search.vue";
|
import Search from "@/components/aboutTable/Search.vue";
|
||||||
import { qcckGet, qcckDelete } from "@/api/qcckApi.js";
|
import { qcckPost } from "@/api/qcckApi.js";
|
||||||
import { reactive, ref, onMounted, getCurrentInstance,watch } from "vue";
|
import { useRoute, useRouter } from 'vue-router';
|
||||||
|
import { reactive, ref, onMounted, getCurrentInstance, watch, nextTick } from "vue";
|
||||||
|
const router = useRouter();
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_SG_SJLY,D_SG_TSYPGZ} = proxy.$dict("D_SG_SJLY","D_SG_TSYPGZ"); //获取字典数据
|
const { D_SG_SJLY, D_SG_TSYPGZ } = proxy.$dict("D_SG_SJLY", "D_SG_TSYPGZ"); //获取字典数据
|
||||||
const searchBox = ref(); //搜索框
|
const searchBox = ref(); //搜索框
|
||||||
const refBtn = ref();
|
const showModel = ref(false);
|
||||||
|
const textContent = ref('');
|
||||||
|
const refBtn = ref();
|
||||||
const show = ref(false)
|
const show = ref(false)
|
||||||
|
const detailForm = ref()
|
||||||
const listHeight = ref()
|
const listHeight = ref()
|
||||||
const searchConfiger = ref([
|
const searchConfiger = ref([
|
||||||
{ label: "研判名称", prop: "ypMc", placeholder: "请输入研判名称", showType: "input" },
|
{ label: "研判名称", prop: "ypMc", placeholder: "请输入研判名称", showType: "input" },
|
||||||
]);
|
]);
|
||||||
const checkData = reactive({
|
const checkData = reactive({
|
||||||
sjlxBtn:{
|
sjlxBtn: {
|
||||||
hasChoose: [],
|
hasChoose: [],
|
||||||
list: []
|
list: []
|
||||||
},
|
},
|
||||||
yplxBtn:{
|
yplxBtn: {
|
||||||
hasChoose: [],
|
hasChoose: [],
|
||||||
list: []
|
list: []
|
||||||
},
|
},
|
||||||
@ -100,47 +81,103 @@ const total = ref(0)
|
|||||||
const list = ref([])
|
const list = ref([])
|
||||||
const loading = ref(false);
|
const loading = ref(false);
|
||||||
const formData = ref({})
|
const formData = ref({})
|
||||||
watch(()=>[D_SG_SJLY.value,D_SG_TSYPGZ.value],val=>{
|
watch(() => [D_SG_SJLY.value, D_SG_TSYPGZ.value], val => {
|
||||||
checkData.sjlxBtn.list = val[0].map(v=>v.zdmc);
|
checkData.sjlxBtn.list = val[0].map(v => v.zdmc);
|
||||||
checkData.yplxBtn.list = val[1].map(v=>v.zdmc);
|
checkData.yplxBtn.list = val[1].map(v => v.zdmc);
|
||||||
checkData.yplxBtn.hasChoose = val[1].map(v=>v.zdmc);
|
checkData.yplxBtn.hasChoose = val[1].map(v => v.zdmc);
|
||||||
},{immediate:true,deep:true});
|
}, { immediate: true, deep: true });
|
||||||
|
const route = useRoute();
|
||||||
onMounted(()=>{
|
onMounted(() => {
|
||||||
show.value = true;
|
show.value = true;
|
||||||
getLits()
|
|
||||||
tabHeightFn();
|
tabHeightFn();
|
||||||
|
if (route.query.id) {
|
||||||
|
lookDeatl(route.query)
|
||||||
|
} else {
|
||||||
|
getLits()
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
const load = () =>{
|
// 数据类型
|
||||||
console.log('加载');
|
const changeData_sjly = (val) => {
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const changeData_sjly = (val) =>{
|
|
||||||
checkData.sjlxBtn.hasChoose = val;
|
checkData.sjlxBtn.hasChoose = val;
|
||||||
}
|
let dms = [];
|
||||||
const changeData_yplx = (val) =>{
|
D_SG_SJLY.value.forEach(item => {
|
||||||
checkData.yplxBtn.hasChoose = val;
|
if (val.includes(item.zdmc)) dms.push(item.dm);
|
||||||
|
});
|
||||||
|
formData.value.sjLx = dms;
|
||||||
|
page.value = 1;
|
||||||
|
getLits();
|
||||||
}
|
}
|
||||||
|
|
||||||
const getLits = () =>{
|
// 研判类型
|
||||||
|
const changeData_yplx = (val) => {
|
||||||
|
checkData.yplxBtn.hasChoose = val;
|
||||||
|
let dms = [];
|
||||||
|
D_SG_TSYPGZ.value.forEach(item => {
|
||||||
|
if (val.includes(item.zdmc)) dms.push(item.dm);
|
||||||
|
});
|
||||||
|
formData.value.ypLx = dms;
|
||||||
|
page.value = 1;
|
||||||
|
getLits();
|
||||||
|
}
|
||||||
|
|
||||||
|
const onSearch = (val) => {
|
||||||
|
formData.value = { ...formData.value, ...val, };
|
||||||
|
page.value = 1;
|
||||||
|
getLits();
|
||||||
|
}
|
||||||
|
|
||||||
|
const load = () => {
|
||||||
|
if (total.value == list.value.length) return;
|
||||||
|
page.value++;
|
||||||
|
getLits();
|
||||||
|
}
|
||||||
|
|
||||||
|
const getLits = () => {
|
||||||
let params = {
|
let params = {
|
||||||
pageCurrent:page.value,
|
pageCurrent: page.value,
|
||||||
pageSize:8
|
pageSize: 8,
|
||||||
|
...formData.value
|
||||||
}
|
}
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
qcckGet(params,'/mosty-gsxt/tsyp/selectPage').then(res=>{
|
console.log(params);
|
||||||
|
|
||||||
|
qcckPost(params, '/mosty-gsxt/tsyp/selectPage').then(res => {
|
||||||
let arr = res.records || [];
|
let arr = res.records || [];
|
||||||
list.value = page.value == 1 ? arr : list.value.concat(arr);
|
list.value = page.value == 1 ? arr : list.value.concat(arr);
|
||||||
total.value = res.total;
|
total.value = res.total;
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
}).catch(()=>{
|
}).catch(() => {
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleYp = (val) => {
|
||||||
|
let params = { tsypid: val.id, }
|
||||||
|
qcckPost(params, '/mosty-gsxt/wshs/getDcypbg').then(res => {
|
||||||
|
let data = res || {};
|
||||||
|
let html = `<p class="html_bt">${data.bt}</p>`
|
||||||
|
html += `<p>${data.head}</p>`
|
||||||
|
html += `<p>${data.nr}</p>`
|
||||||
|
html += `<p>${data.bc}</p>`
|
||||||
|
html += `<p>${data.end}</p>`
|
||||||
|
textContent.value = html;
|
||||||
|
showModel.value = true;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleHs = (val) => {
|
||||||
|
router.push({ path: '/MeetingRoom', query: { tsypid: val.id } })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查看详情
|
||||||
|
const lookDeatl = (val) => {
|
||||||
|
nextTick(() => {
|
||||||
|
detailForm.value.init(val, formData.value.sjLx)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 表格高度计算
|
// 表格高度计算
|
||||||
const tabHeightFn = () => {
|
const tabHeightFn = () => {
|
||||||
listHeight.value = window.innerHeight - searchBox.value.offsetHeight - refBtn.value.offsetHeight - 182;
|
listHeight.value = window.innerHeight - searchBox.value.offsetHeight - refBtn.value.offsetHeight - 182;
|
||||||
@ -205,13 +242,15 @@ const tabHeightFn = () => {
|
|||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
.btnsBox{
|
|
||||||
|
.btnsBox {
|
||||||
background: #fff;
|
background: #fff;
|
||||||
padding: 10px 5px;
|
padding: 10px 5px;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
.cntlsit{
|
|
||||||
|
.cntlsit {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
align-content: start;
|
align-content: start;
|
||||||
@ -221,21 +260,23 @@ const tabHeightFn = () => {
|
|||||||
background: #fff;
|
background: #fff;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
.cntItem{
|
|
||||||
|
.cntItem {
|
||||||
width: 300px;
|
width: 300px;
|
||||||
border: 1px solid #ccc;
|
border: 1px solid #ccc;
|
||||||
color: #787878;
|
color: #787878;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
.foot{
|
|
||||||
|
.foot {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
margin-top: 4px;
|
margin-top: 4px;
|
||||||
border-top:1px solid #ccc;
|
border-top: 1px solid #ccc;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,68 @@
|
|||||||
|
<template>
|
||||||
|
<div class="itemXs_Box">
|
||||||
|
<div class="itemXs_Mc">
|
||||||
|
情报描述情报描述情报描述情报措述情描述情报描述情报描述情报描,情报描述情报描述情报描述情报措述情描述情报描述情报描述情报描,
|
||||||
|
</div>
|
||||||
|
<div class="itemXs_Ms">
|
||||||
|
情报描述情报描述情报描述情报措述情描述情报描述情报描述情报描,情报描述情报描述情报描述情报措述情描述情报描述情报描述情报描,
|
||||||
|
</div>
|
||||||
|
<div class="itemXs_Xs flex just-between align-center">
|
||||||
|
<div class=" flex just-between align-center"><el-icon class="icon"><Histogram /></el-icon>1000</div>
|
||||||
|
<div class=" flex just-between align-center"><el-icon class="icon"><ChatDotSquare /></el-icon>15522</div>
|
||||||
|
<div class=" flex just-between align-center"><el-icon class="icon"><Clock /></el-icon>2025-10-10 10:10:10</div>
|
||||||
|
<div class=" flex just-between align-center"><el-icon class="icon"><Avatar /></el-icon>张三</div>
|
||||||
|
<div>情报类型:测试数据</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||||
|
import Search from "@/components/aboutTable/Search.vue";
|
||||||
|
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||||
|
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||||
|
const props = defineProps({
|
||||||
|
item: {
|
||||||
|
type: Object,
|
||||||
|
default: () => { },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.itemXs_Box {
|
||||||
|
box-sizing: border-box;
|
||||||
|
border: 1px solid red;
|
||||||
|
// height: 100px;
|
||||||
|
width: 40%;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 10px 15px;
|
||||||
|
|
||||||
|
.itemXs_Mc {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: #de0909;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemXs_Ms {
|
||||||
|
color: #ccc;
|
||||||
|
font-size: 14px;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
margin: 10px 0;
|
||||||
|
}
|
||||||
|
.itemXs_Xs{
|
||||||
|
font-size: 16px;
|
||||||
|
color: #ccc;
|
||||||
|
line-height: 20px;
|
||||||
|
.icon{
|
||||||
|
font-size: 22px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
88
src/views/backOfficeSystem/MakeAcomment/index.vue
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div class="titleBox">
|
||||||
|
<PageTitle title="情报评一评" />
|
||||||
|
</div>
|
||||||
|
<!-- 搜索 -->
|
||||||
|
<div ref="searchBox">
|
||||||
|
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||||
|
</div>
|
||||||
|
<!-- 表格 -->
|
||||||
|
<div class="tabBox " style="height: calc(100vh - 200px); display: flex;flex-wrap: wrap;">
|
||||||
|
<div v-for="(item, index) in 1000" :key="index" class="tabBox_item flex ">
|
||||||
|
<ItemXs :item="item" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||||
|
import Search from "@/components/aboutTable/Search.vue";
|
||||||
|
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||||
|
import ItemXs from './components/itemXs/itemXs.vue'
|
||||||
|
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const { D_GS_XS_LX } = proxy.$dict("D_GS_XS_LX"); //获取字典数据
|
||||||
|
const searchConfiger = reactive([
|
||||||
|
|
||||||
|
{
|
||||||
|
label: "情报名称",
|
||||||
|
showType: "input",
|
||||||
|
prop: "xsMc",
|
||||||
|
placeholder: "请输入情报名称",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
showType: "select",
|
||||||
|
prop: "xlLx",
|
||||||
|
options: D_GS_XS_LX,
|
||||||
|
placeholder: "请选择情报类型",
|
||||||
|
label: "情报类型"
|
||||||
|
},
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
tabHeightFn()
|
||||||
|
selectPagePbql()
|
||||||
|
})
|
||||||
|
// const tabHeight = ref(0)
|
||||||
|
// 表格高度计算
|
||||||
|
const tabHeightFn = () => {
|
||||||
|
// pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
||||||
|
window.onresize = function () {
|
||||||
|
tabHeightFn();
|
||||||
|
};
|
||||||
|
};
|
||||||
|
const pageData = reactive({
|
||||||
|
parameter: {
|
||||||
|
pageCurrent: 1,
|
||||||
|
pageSize: 10
|
||||||
|
},
|
||||||
|
total: 0,
|
||||||
|
loading: false,
|
||||||
|
tableData: []
|
||||||
|
})
|
||||||
|
const onSearch = (val) => {
|
||||||
|
pageData.parameter={...val, ...pageData.parameter}
|
||||||
|
pageData.pageCurrent = 1;
|
||||||
|
selectPagePbql()
|
||||||
|
}
|
||||||
|
const selectPagePbql = () => {
|
||||||
|
qcckGet(pageData.parameter, "/mosty-gsxt/qbcj/selectPagePbql").then((res) => {
|
||||||
|
pageData.tableData =pageData.pageCurrent==1? res.records:pageData.tableData.concat(res.records || []);
|
||||||
|
pageData.total = res.total;
|
||||||
|
pageData.loading = false;
|
||||||
|
}).catch((err) => {
|
||||||
|
console.log(err);
|
||||||
|
}).finally(()=>{
|
||||||
|
pageData.loading = false;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
@ -72,8 +72,8 @@ import Search from "@/components/aboutTable/Search.vue";
|
|||||||
import AddForm from "./components/addForm.vue";
|
import AddForm from "./components/addForm.vue";
|
||||||
import ZlForm from "./components/zlForm.vue";
|
import ZlForm from "./components/zlForm.vue";
|
||||||
import HbForm from "./components/hbForm.vue";
|
import HbForm from "./components/hbForm.vue";
|
||||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
import { qcckGet } from "@/api/qcckApi.js";
|
||||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const {D_GS_ZDQT_FXDJ,D_GS_XS_ZLLX,D_GS_XS_CZZT,D_GS_XS_LY, D_BZ_SSZT,D_BZ_SF,D_GS_XS_LX ,D_GS_XS_QTLX,D_BZ_XB,D_BZ_XSSHZT} = proxy.$dict("D_GS_ZDQT_FXDJ","D_GS_XS_ZLLX","D_GS_XS_CZZT","D_GS_XS_LY","D_BZ_SSZT","D_BZ_SF","D_GS_XS_LX","D_GS_XS_QTLX","D_BZ_XB","D_BZ_XSSHZT"); //获取字典数据
|
const {D_GS_ZDQT_FXDJ,D_GS_XS_ZLLX,D_GS_XS_CZZT,D_GS_XS_LY, D_BZ_SSZT,D_BZ_SF,D_GS_XS_LX ,D_GS_XS_QTLX,D_BZ_XB,D_BZ_XSSHZT} = proxy.$dict("D_GS_ZDQT_FXDJ","D_GS_XS_ZLLX","D_GS_XS_CZZT","D_GS_XS_LY","D_BZ_SSZT","D_BZ_SF","D_GS_XS_LX","D_GS_XS_QTLX","D_BZ_XB","D_BZ_XSSHZT"); //获取字典数据
|
||||||
const detailDiloag = ref();
|
const detailDiloag = ref();
|
||||||
|
@ -16,8 +16,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import { qcckGet } from "@/api/qcckApi.js";
|
||||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||||
import { reactive } from "vue";
|
import { onMounted, reactive , ref} from "vue";
|
||||||
const pageData = reactive({
|
const pageData = reactive({
|
||||||
tableData: [],
|
tableData: [],
|
||||||
keyCount: 0,
|
keyCount: 0,
|
||||||
@ -34,23 +35,44 @@ const pageData = reactive({
|
|||||||
tableHeight:143,
|
tableHeight:143,
|
||||||
controlsWidth: 52,
|
controlsWidth: 52,
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "号码类型", prop: "zzMc",width:'70px' },
|
{ label: "号码类型", prop: "hmlx",width:'70px',showOverflowTooltip:true },
|
||||||
{ label: "号码", prop: "sjrs",width:'70px'},
|
{ label: "号码", prop: "hm",width:'120px',showOverflowTooltip:true},
|
||||||
{ label: "所属人员", prop: "bq",width:'50px'},
|
{ label: "线索数", prop: "glxss",width:'70px',showOverflowTooltip:true},
|
||||||
{ label: "线索数", prop: "xss",width:'70px'},
|
{ label: "指令数", prop: "glzls" ,width:'70px',showOverflowTooltip:true},
|
||||||
{ label: "指令数", prop: "zls" ,width:'70px'},
|
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const searchData = ref({})
|
||||||
|
onMounted(()=>{
|
||||||
|
getDate()
|
||||||
|
})
|
||||||
|
|
||||||
|
const init = (val) =>{
|
||||||
|
searchData.value = val;
|
||||||
|
getDate()
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDate (){
|
||||||
|
let params = { ...searchData.value }
|
||||||
|
delete params.dateRange;
|
||||||
|
pageData.pageConfiger.loading = true;
|
||||||
|
qcckGet(params,'/mosty-gsxt/tbGsxtZdqt/getRdhm').then(res=>{
|
||||||
|
pageData.tableData = res || [];
|
||||||
|
pageData.pageConfiger.loading = false;
|
||||||
|
}).catch(()=>{
|
||||||
|
pageData.pageConfiger.loading = false;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({init})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
::v-deep .el-table .cell{
|
::v-deep .el-table .cell{
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
::v-deep .el-table tr{
|
|
||||||
background: rgba(239, 245, 247,1) !important;
|
|
||||||
}
|
|
||||||
::v-deep .el-table th.el-table__cell{
|
::v-deep .el-table th.el-table__cell{
|
||||||
background: rgba(239, 245, 247,1) !important;
|
background: rgba(239, 245, 247,1) !important;
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,11 @@
|
|||||||
:fixed ="false"
|
:fixed ="false"
|
||||||
:tableConfiger="pageData.tableConfiger"
|
:tableConfiger="pageData.tableConfiger"
|
||||||
:controlsWidth="pageData.controlsWidth">
|
:controlsWidth="pageData.controlsWidth">
|
||||||
|
<template #bqList="{row}">
|
||||||
|
<span v-if="row.bqList">
|
||||||
|
<span v-for=" it in row.bqList" :key="it">{{ it.bqMc }}</span>;
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<el-link size="small" type="primary" @click="addEdit('detail', row)">详情</el-link>
|
<el-link size="small" type="primary" @click="addEdit('detail', row)">详情</el-link>
|
||||||
</template>
|
</template>
|
||||||
@ -18,7 +23,8 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { qcckGet } from "@/api/qcckApi.js";
|
import { qcckGet } from "@/api/qcckApi.js";
|
||||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||||
import { onMounted, reactive } from "vue";
|
import { onMounted, reactive , ref} from "vue";
|
||||||
|
|
||||||
const pageData = reactive({
|
const pageData = reactive({
|
||||||
tableData: [],
|
tableData: [],
|
||||||
keyCount: 0,
|
keyCount: 0,
|
||||||
@ -35,33 +41,45 @@ const pageData = reactive({
|
|||||||
tableHeight:143,
|
tableHeight:143,
|
||||||
controlsWidth: 52,
|
controlsWidth: 52,
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "姓名", prop: "zzMc",width:'70px' },
|
{ label: "姓名", prop: "ryXm",width:'70px',showOverflowTooltip:true },
|
||||||
{ label: "身份证", prop: "sjrs",width:'70px'},
|
{ label: "身份证", prop: "rySfzh",width:'70px',showOverflowTooltip:true},
|
||||||
{ label: "标签", prop: "bq",width:'50px'},
|
{ label: "标签", prop: "bqList",width:'50px',showSolt:true,showOverflowTooltip:true},
|
||||||
{ label: "线索数", prop: "xss",width:'70px'},
|
{ label: "线索数", prop: "xssl",width:'70px',showOverflowTooltip:true},
|
||||||
{ label: "指令数", prop: "zls" ,width:'70px'},
|
{ label: "指令数", prop: "zlsl" ,width:'70px',showOverflowTooltip:true},
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const searchData = ref({})
|
||||||
onMounted(()=>{
|
onMounted(()=>{
|
||||||
getDate()
|
getDate()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const init = (val) =>{
|
||||||
|
searchData.value = val;
|
||||||
|
getDate()
|
||||||
|
}
|
||||||
|
|
||||||
function getDate (){
|
function getDate (){
|
||||||
qcckGet({},' /mosty-gsxt/tbGsxtZdry/getRdRy').then(res=>{
|
let params = { ...searchData.value }
|
||||||
console.log(res,'--------99');
|
delete params.dateRange;
|
||||||
|
pageData.pageConfiger.loading = true;
|
||||||
|
qcckGet(params,'/mosty-gsxt/tbGsxtZdry/getRdRy').then(res=>{
|
||||||
|
pageData.tableData = res || [];
|
||||||
|
pageData.pageConfiger.loading = false;
|
||||||
|
}).catch(()=>{
|
||||||
|
pageData.pageConfiger.loading = false;
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
defineExpose({init})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
::v-deep .el-table .cell{
|
::v-deep .el-table .cell{
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
::v-deep .el-table tr{
|
|
||||||
background: rgba(239, 245, 247,1) !important;
|
|
||||||
}
|
|
||||||
::v-deep .el-table th.el-table__cell{
|
::v-deep .el-table th.el-table__cell{
|
||||||
background: rgba(239, 245, 247,1) !important;
|
background: rgba(239, 245, 247,1) !important;
|
||||||
}
|
}
|
||||||
|
@ -16,8 +16,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import { qcckGet } from "@/api/qcckApi.js";
|
||||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||||
import { reactive } from "vue";
|
import { onMounted, reactive , ref} from "vue";
|
||||||
const pageData = reactive({
|
const pageData = reactive({
|
||||||
tableData: [],
|
tableData: [],
|
||||||
keyCount: 0,
|
keyCount: 0,
|
||||||
@ -34,23 +35,44 @@ const pageData = reactive({
|
|||||||
tableHeight:143,
|
tableHeight:143,
|
||||||
controlsWidth: 52,
|
controlsWidth: 52,
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "线索名称", prop: "xsMc",width:'70px' },
|
{ label: "线索名称", prop: "xsMc",width:'70px',showOverflowTooltip:true },
|
||||||
{ label: "涉及人数", prop: "sjrs",width:'70px'},
|
{ label: "涉及人数", prop: "sjrs",width:'70px',showOverflowTooltip:true},
|
||||||
{ label: "标签", prop: "bq",width:'50px'},
|
{ label: "线索内容", prop: "xsNr",width:'120px',showOverflowTooltip:true},
|
||||||
{ label: "风险等级", prop: "fxdj",width:'70px'},
|
{ label: "指向地点", prop: "zxdz" ,width:'70px',showOverflowTooltip:true},
|
||||||
{ label: "指向地点", prop: "zxdz" ,width:'70px'},
|
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const searchData = ref({})
|
||||||
|
onMounted(()=>{
|
||||||
|
getDate()
|
||||||
|
})
|
||||||
|
|
||||||
|
const init = (val) =>{
|
||||||
|
searchData.value = val;
|
||||||
|
getDate()
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDate (){
|
||||||
|
let params = { ...searchData.value }
|
||||||
|
delete params.dateRange;
|
||||||
|
pageData.pageConfiger.loading = true;
|
||||||
|
qcckGet(params,'/mosty-gsxt/qbcj/getRdXs').then(res=>{
|
||||||
|
pageData.tableData = res || [];
|
||||||
|
pageData.pageConfiger.loading = false;
|
||||||
|
}).catch(()=>{
|
||||||
|
pageData.pageConfiger.loading = false;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({init})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
::v-deep .el-table .cell{
|
::v-deep .el-table .cell{
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
::v-deep .el-table tr{
|
|
||||||
background: rgba(239, 245, 247,1) !important;
|
|
||||||
}
|
|
||||||
::v-deep .el-table th.el-table__cell{
|
::v-deep .el-table th.el-table__cell{
|
||||||
background: rgba(239, 245, 247,1) !important;
|
background: rgba(239, 245, 247,1) !important;
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,14 @@
|
|||||||
:fixed ="false"
|
:fixed ="false"
|
||||||
:tableConfiger="pageData.tableConfiger"
|
:tableConfiger="pageData.tableConfiger"
|
||||||
:controlsWidth="pageData.controlsWidth">
|
:controlsWidth="pageData.controlsWidth">
|
||||||
|
<template #sjrs="{ row }">
|
||||||
|
<span> {{ row.zdryList? row.zdryList.length : 0 }} </span>
|
||||||
|
</template>
|
||||||
|
<template #bqList="{ row }">
|
||||||
|
<span v-if="row.bqList">
|
||||||
|
<span v-for="(it,idx) in row.bqList" :key="idx"> {{ it.bqMc }}、</span>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<el-link size="small" type="primary" @click="addEdit('detail', row)">详情</el-link>
|
<el-link size="small" type="primary" @click="addEdit('detail', row)">详情</el-link>
|
||||||
</template>
|
</template>
|
||||||
@ -16,8 +24,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import { qcckGet } from "@/api/qcckApi.js";
|
||||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||||
import { reactive } from "vue";
|
import { onMounted, reactive , ref} from "vue";
|
||||||
const pageData = reactive({
|
const pageData = reactive({
|
||||||
tableData: [],
|
tableData: [],
|
||||||
keyCount: 0,
|
keyCount: 0,
|
||||||
@ -34,23 +43,46 @@ const pageData = reactive({
|
|||||||
tableHeight:143,
|
tableHeight:143,
|
||||||
controlsWidth: 52,
|
controlsWidth: 52,
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "组织名称", prop: "zzMc",width:'70px' },
|
{ label: "组织名称", prop: "qtMc",width:'70px',showOverflowTooltip:true },
|
||||||
{ label: "涉及人数", prop: "sjrs",width:'70px'},
|
{ label: "涉及人数", prop: "sjrs",width:'70px',showSolt:true,showOverflowTooltip:true},
|
||||||
{ label: "标签", prop: "bq",width:'50px'},
|
{ label: "标签", prop: "bqList",width:'50px',showSolt:true,showOverflowTooltip:true},
|
||||||
{ label: "线索数", prop: "xss",width:'70px'},
|
{ label: "线索数", prop: "xssl",width:'70px',showOverflowTooltip:true},
|
||||||
{ label: "指令数", prop: "zls" ,width:'70px'},
|
{ label: "指令数", prop: "zlsl" ,width:'70px',showOverflowTooltip:true},
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
const searchData = ref({})
|
||||||
|
onMounted(()=>{
|
||||||
|
getDate()
|
||||||
|
})
|
||||||
|
|
||||||
|
const init = (val) =>{
|
||||||
|
searchData.value = val;
|
||||||
|
getDate()
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDate (){
|
||||||
|
let params = { ...searchData.value }
|
||||||
|
delete params.dateRange;
|
||||||
|
pageData.pageConfiger.loading = true;
|
||||||
|
qcckGet(params,'/mosty-gsxt/tbGsxtZdqt/getRdzz').then(res=>{
|
||||||
|
pageData.tableData = res || [];
|
||||||
|
pageData.pageConfiger.loading = false;
|
||||||
|
}).catch(()=>{
|
||||||
|
pageData.pageConfiger.loading = false;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({init})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
::v-deep .el-table .cell{
|
::v-deep .el-table .cell{
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
::v-deep .el-table tr{
|
|
||||||
background: rgba(239, 245, 247,1) !important;
|
|
||||||
}
|
|
||||||
::v-deep .el-table th.el-table__cell{
|
::v-deep .el-table th.el-table__cell{
|
||||||
background: rgba(239, 245, 247,1) !important;
|
background: rgba(239, 245, 247,1) !important;
|
||||||
}
|
}
|
||||||
|
@ -5,11 +5,11 @@
|
|||||||
<span class="pointer" @click="close"><el-icon><Close /></el-icon></span>
|
<span class="pointer" @click="close"><el-icon><Close /></el-icon></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="seachsBox">
|
<div class="seachsBox">
|
||||||
<Search :searchArr="searchConfiger" @submit="onSearch">
|
<Search :searchArr="searchConfiger" @submit="onSearch" @reset="reset">
|
||||||
<template #defaultSlot>
|
<template #defaultSlot>
|
||||||
<div class="flex align-center">
|
<div class="flex align-center">
|
||||||
<span class="marks" @click="active = idex" :class="active == idex ? 'activeBtn' : ''" v-for="(it, idex) in time" :key="idex">{{ it.label }}</span>
|
<span class="marks" @click="changeTime(idex)" :class="active == idex ? 'activeBtn' : ''" v-for="(it, idex) in time" :key="idex">{{ it.label }}</span>
|
||||||
<el-date-picker v-model="listQuery.dateRange" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
|
<el-date-picker @change="handleDateChange" v-model="listQuery.dateRange" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</Search>
|
</Search>
|
||||||
@ -19,25 +19,25 @@
|
|||||||
<div class="model">
|
<div class="model">
|
||||||
<div class="modelTitle">热点线索</div>
|
<div class="modelTitle">热点线索</div>
|
||||||
<div class="cnt">
|
<div class="cnt">
|
||||||
<Hot_xs></Hot_xs>
|
<Hot_xs ref="RedRdxs"></Hot_xs>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="model">
|
<div class="model">
|
||||||
<div class="modelTitle">热点组织</div>
|
<div class="modelTitle">热点组织</div>
|
||||||
<div class="cnt">
|
<div class="cnt">
|
||||||
<Hot_zz></Hot_zz>
|
<Hot_zz ref="RedRdzz"></Hot_zz>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="model">
|
<div class="model">
|
||||||
<div class="modelTitle">热点人员</div>
|
<div class="modelTitle">热点人员</div>
|
||||||
<div class="cnt">
|
<div class="cnt">
|
||||||
<Hot_ry></Hot_ry>
|
<Hot_ry ref="RedRdry"></Hot_ry>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="model">
|
<div class="model">
|
||||||
<div class="modelTitle">热点号码</div>
|
<div class="modelTitle">热点号码</div>
|
||||||
<div class="cnt">
|
<div class="cnt">
|
||||||
<Hot_hm></Hot_hm>
|
<Hot_hm ref="RedRdhm"></Hot_hm>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -53,19 +53,19 @@
|
|||||||
<div class="model">
|
<div class="model">
|
||||||
<div class="modelTitle">诉求分类</div>
|
<div class="modelTitle">诉求分类</div>
|
||||||
<div class="cnt">
|
<div class="cnt">
|
||||||
<Zqfl></Zqfl>
|
<Zqfl ref="RedSqfl"></Zqfl>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="model">
|
<div class="model">
|
||||||
<div class="modelTitle">重点线索分类</div>
|
<div class="modelTitle">重点线索分类</div>
|
||||||
<div class="cnt">
|
<div class="cnt">
|
||||||
<Zdxsfl></Zdxsfl>
|
<Zdxsfl ref="RedZdxsfl"></Zdxsfl>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="model">
|
<div class="model">
|
||||||
<div class="modelTitle">指令次数</div>
|
<div class="modelTitle">指令次数</div>
|
||||||
<div class="cnt">
|
<div class="cnt">
|
||||||
<Zlcs></Zlcs>
|
<Zlcs ref="RedZlcs"></Zlcs>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -74,6 +74,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import { timeSlotChange } from "@/utils/tools.js";
|
||||||
import GdMap from "@/components/GdMap/index.vue";
|
import GdMap from "@/components/GdMap/index.vue";
|
||||||
import Hot_xs from './hot_xs/index.vue'
|
import Hot_xs from './hot_xs/index.vue'
|
||||||
import Hot_zz from './hot_zz/index.vue'
|
import Hot_zz from './hot_zz/index.vue'
|
||||||
@ -83,51 +84,90 @@ import Zqfl from './zqfl/index.vue'
|
|||||||
import Zlcs from './zlcs/index.vue'
|
import Zlcs from './zlcs/index.vue'
|
||||||
import Zdxsfl from './zdxsfl/index.vue'
|
import Zdxsfl from './zdxsfl/index.vue'
|
||||||
import Search from "@/components/aboutTable/Search.vue";
|
import Search from "@/components/aboutTable/Search.vue";
|
||||||
import { reactive, ref } from "vue";
|
import { reactive, ref, getCurrentInstance } from "vue";
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const { SGXTQTSQLX } = proxy.$dict("SGXTQTSQLX"); //获取字典数据
|
||||||
const emits = defineEmits(['close'])
|
const emits = defineEmits(['close'])
|
||||||
const listQuery = ref({});
|
const listQuery = ref({});
|
||||||
const active = ref(0);
|
const active = ref(-1);
|
||||||
const time = reactive([
|
const time = reactive([
|
||||||
{ label: "今天", value: "10" },
|
{ label: "今天", value: "10" },
|
||||||
{ label: "近一周", value: "20" },
|
{ label: "本周", value: "20" },
|
||||||
{ label: "近一月", value: "30" },
|
{ label: "本月", value: "30" },
|
||||||
{ label: "近一季度", value: "40" },
|
{ label: "本季度", value: "40" },
|
||||||
{ label: "近一年", value: "50" }
|
{ label: "本年", value: "50" }
|
||||||
]);
|
]);
|
||||||
const searchConfiger = reactive([
|
const searchConfiger = reactive([
|
||||||
{
|
{ label: "所属部门", prop: "ssbmdm", placeholder: "请选择", showType: "department" },
|
||||||
label: "所属部门",
|
{ label: "数据周期", prop: "sjzq", placeholder: "请选择", showType: "defaultSlot"},
|
||||||
prop: "ssbmdm",
|
|
||||||
placeholder: "请选择",
|
|
||||||
showType: "department"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "数据周期",
|
|
||||||
prop: "sjzq",
|
|
||||||
placeholder: "请选择",
|
|
||||||
showType: "defaultSlot"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "热点集访单位",
|
|
||||||
prop: "jfdw",
|
|
||||||
placeholder: "请选择",
|
|
||||||
showType: "select"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "行为特征",
|
|
||||||
prop: "xwtz",
|
|
||||||
placeholder: "请选择",
|
|
||||||
showType: "select"
|
|
||||||
},
|
|
||||||
{ label: "指向地点", prop: "zxdz", placeholder: "请输入", showType: "input" },
|
{ label: "指向地点", prop: "zxdz", placeholder: "请输入", showType: "input" },
|
||||||
{
|
{ label: "诉求类型", prop: "qtsq", placeholder: "请选择", showType: "select",options:SGXTQTSQLX }
|
||||||
label: "事件诱因类型",
|
|
||||||
prop: "yxlx",
|
|
||||||
placeholder: "请选择",
|
|
||||||
showType: "select"
|
|
||||||
},
|
|
||||||
{ label: "诉求类型", prop: "sqlx", placeholder: "请选择", showType: "select" }
|
|
||||||
]);
|
]);
|
||||||
|
const RedRdxs = ref()
|
||||||
|
const RedRdzz = ref()
|
||||||
|
const RedRdry = ref()
|
||||||
|
const RedRdhm = ref()
|
||||||
|
const RedSqfl = ref()
|
||||||
|
const RedZlcs = ref()
|
||||||
|
const RedZdxsfl = ref()
|
||||||
|
const changeTime = (idex) =>{
|
||||||
|
active.value = idex;
|
||||||
|
switch(idex){
|
||||||
|
case 0: //日
|
||||||
|
listQuery.value.dateRange = timeSlotChange('天')
|
||||||
|
break;
|
||||||
|
case 1: //周
|
||||||
|
listQuery.value.dateRange = timeSlotChange('本周')
|
||||||
|
break;
|
||||||
|
case 2: //月
|
||||||
|
listQuery.value.dateRange = timeSlotChange('本月')
|
||||||
|
break;
|
||||||
|
case 3: //季度
|
||||||
|
listQuery.value.dateRange = timeSlotChange('本季度')
|
||||||
|
break;
|
||||||
|
case 4: //年
|
||||||
|
listQuery.value.dateRange = timeSlotChange('本年')
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
listQuery.value.hskssj = listQuery.value.dateRange[0] +' 00:00:00';
|
||||||
|
listQuery.value.hsjssj = listQuery.value.dateRange[1] +' 23:59:59';;
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleDateChange = (val) => {
|
||||||
|
active.value = -1;
|
||||||
|
if(!val) return;
|
||||||
|
listQuery.value.hskssj = val[0] +' 00:00:00';
|
||||||
|
listQuery.value.hsjssj = val[1]+' 23:59:59';
|
||||||
|
if(val[0] == timeSlotChange('天')[0] && val[1] == timeSlotChange('天')[1]) active.value = 0;
|
||||||
|
if(val[0] == timeSlotChange('本周')[0] && val[1] == timeSlotChange('本月')[1]) active.value = 1;
|
||||||
|
if(val[0] == timeSlotChange('本月')[0] && val[1] == timeSlotChange('本月')[1]) active.value = 2;
|
||||||
|
if(val[0] == timeSlotChange('本季度')[0] && val[1] == timeSlotChange('本季度')[1]) active.value = 3;
|
||||||
|
if(val[0] == timeSlotChange('本年')[0] && val[1] == timeSlotChange('本年')[1]) active.value = 4;
|
||||||
|
};
|
||||||
|
|
||||||
|
const onSearch = (val) =>{
|
||||||
|
listQuery.value = {...listQuery.value,...val}
|
||||||
|
loadDate()
|
||||||
|
}
|
||||||
|
const reset = (val) =>{
|
||||||
|
listQuery.value = {};
|
||||||
|
active.value = -1;
|
||||||
|
listQuery.value.dateRange = '';
|
||||||
|
listQuery.value.hskssj = '';
|
||||||
|
listQuery.value.hsjssj = '';
|
||||||
|
loadDate()
|
||||||
|
}
|
||||||
|
|
||||||
|
const loadDate = () =>{
|
||||||
|
RedRdxs.value.init(listQuery.value)
|
||||||
|
RedRdzz.value.init(listQuery.value)
|
||||||
|
RedRdry.value.init(listQuery.value)
|
||||||
|
RedRdhm.value.init(listQuery.value)
|
||||||
|
RedSqfl.value.init(listQuery.value)
|
||||||
|
RedZlcs.value.init(listQuery.value)
|
||||||
|
RedZdxsfl.value.init(listQuery.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 关闭
|
// 关闭
|
||||||
function close(){
|
function close(){
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="comom-cnt">
|
<div class="comom-cnt" v-loading="loading">
|
||||||
<LineEcharts echartsId="qbsbEcharts111" :data="dataList"></LineEcharts>
|
<LineEcharts echartsId="qbsbEcharts111" :data="dataList"></LineEcharts>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -7,19 +7,42 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { qcckPost } from "@/api/qcckApi.js";
|
import { qcckPost } from "@/api/qcckApi.js";
|
||||||
import LineEcharts from "@/views/home/echarts/moreLineEcharts.vue";
|
import LineEcharts from "@/views/home/echarts/moreLineEcharts.vue";
|
||||||
import { reactive, onMounted } from 'vue';
|
import { reactive, onMounted,ref } from 'vue';
|
||||||
|
|
||||||
const dataList = reactive({
|
const dataList = reactive({
|
||||||
xData:['巴宜区','工布江达县','米林县','墨脱县','波密县','察隅县','朗县'],
|
xData:[],
|
||||||
color:['#0386FB','#00FFFF'],
|
color:['#0386FB','#00FFFF'],
|
||||||
labelColor:'#333',
|
labelColor:'#333',
|
||||||
list:[
|
list:[
|
||||||
{label:'总数',val:[10,0,10,0,10,0,0]},
|
{label:'',val:[0,0,10,0,0,0,0]},
|
||||||
{label:'已处置',val:[0,10,10,10,0,10,0]},
|
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
onMounted(() => {
|
|
||||||
});
|
const loading=ref(false)
|
||||||
|
const searchData = ref({})
|
||||||
|
onMounted(()=>{
|
||||||
|
getDate()
|
||||||
|
})
|
||||||
|
|
||||||
|
const init = (val) =>{
|
||||||
|
searchData.value = val;
|
||||||
|
getDate()
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDate (){
|
||||||
|
let params = { ...searchData.value }
|
||||||
|
delete params.dateRange;
|
||||||
|
loading.value = true;
|
||||||
|
qcckPost(params,'/mosty-gsxt/qbcj/getXscjTjByXslx').then(res=>{
|
||||||
|
loading.value = false;
|
||||||
|
let arr = res || [];
|
||||||
|
dataList.xData = arr.map(v=>{return v.zdmc});
|
||||||
|
dataList.list[0].val = arr.map(v=>{return v.count});
|
||||||
|
}).catch(()=>{
|
||||||
|
loading.value = false;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
defineExpose({init})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<ul class="box-zl">
|
<ul class="box-zl" v-loading="loading">
|
||||||
<li class="items" v-for="(it,idx) in list" :key="idx">
|
<li class="items" v-for="(it,idx) in list" :key="idx">
|
||||||
<div>{{ it.num }}</div>
|
<div>{{ it.num }}</div>
|
||||||
<div>{{ it.label }}</div>
|
<div>{{ it.label }}</div>
|
||||||
@ -9,13 +9,43 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { reactive } from 'vue';
|
import { qcckPost } from "@/api/qcckApi.js";
|
||||||
const list = reactive([
|
import { onMounted , ref} from "vue";
|
||||||
{ label:'线索数量', num :0 },
|
const list = ref([
|
||||||
{ label:'线索转指令数量', num :0 },
|
{ label:'线索数量', num :0 ,type:'xs'},
|
||||||
{ label:'关联群体数量', num :0 },
|
{ label:'线索转指令数量', num :0,type:'zlxx' },
|
||||||
{ label:'关联人员数量', num :0 },
|
{ label:'关联群体数量', num :0 ,type:'zdqt'},
|
||||||
|
{ label:'关联人员数量', num :0,type:'zdry' },
|
||||||
])
|
])
|
||||||
|
|
||||||
|
const loading = ref(false)
|
||||||
|
const searchData = ref({})
|
||||||
|
onMounted(()=>{
|
||||||
|
getDate()
|
||||||
|
})
|
||||||
|
|
||||||
|
const init = (val) =>{
|
||||||
|
searchData.value = val;
|
||||||
|
getDate()
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDate (){
|
||||||
|
let params = { ...searchData.value }
|
||||||
|
delete params.dateRange;
|
||||||
|
loading.value = true;
|
||||||
|
qcckPost(params,'/mosty-gsxt/qbcj/getXscjTjForZs').then(res=>{
|
||||||
|
for(let key in res){
|
||||||
|
let index = list.value.findIndex(v=>v.type == key);
|
||||||
|
if(index!= -1) list.value[index].num = res[key];
|
||||||
|
}
|
||||||
|
loading.value = false;
|
||||||
|
}).catch(()=>{
|
||||||
|
loading.value = false;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({init})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
@ -1,31 +1,43 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="comom-cnt">
|
<div class="comom-cnt" v-loading="loading">
|
||||||
<PieEcharts echartsId="zqflEcharts" color="#333" :data="dataList"></PieEcharts>
|
<PieEcharts echartsId="zqflEcharts" color="#333" :data="dataList"></PieEcharts>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { qcckPost } from "@/api/qcckApi.js";
|
import { randomHexColor ,choseRbgb} from '@/utils/tools.js'
|
||||||
import PieEcharts from "@/views/home/echarts/pieEcharts.vue";
|
import PieEcharts from "@/views/home/echarts/pieEcharts.vue";
|
||||||
import { reactive, onMounted } from 'vue';
|
import { qcckGet } from "@/api/qcckApi.js";
|
||||||
|
import { onMounted , ref} from "vue";
|
||||||
const dataList = reactive([
|
const loading=ref(false)
|
||||||
{
|
const dataList = ref([]);
|
||||||
label: "待办",
|
const searchData = ref({})
|
||||||
value: 2056,
|
onMounted(()=>{
|
||||||
color:['#FF6B9A','#FF4B7A']
|
getDate()
|
||||||
},
|
})
|
||||||
{
|
|
||||||
label: "已办",
|
|
||||||
value: 4356,
|
|
||||||
color:['#FFAA33','#FF8A00'],
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
onMounted(() => {
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
const init = (val) =>{
|
||||||
|
searchData.value = val;
|
||||||
|
getDate()
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDate (){
|
||||||
|
let params = { ...searchData.value }
|
||||||
|
delete params.dateRange;
|
||||||
|
loading.value = true;
|
||||||
|
qcckGet(params,'/mosty-gsxt/tbGsxtZdqt/getSqflTj').then(res=>{
|
||||||
|
loading.value = false;
|
||||||
|
let arr = res || [];
|
||||||
|
dataList.value = arr.map(item=>{
|
||||||
|
let color = randomHexColor()
|
||||||
|
let color1 = choseRbgb(color,0.5)
|
||||||
|
return{ label: item.zdmc, value: item.dm, color:[color,color1] }
|
||||||
|
})
|
||||||
|
}).catch(()=>{
|
||||||
|
loading.value = false;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
defineExpose({init})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
@ -271,7 +271,7 @@ const getText = (val) =>{
|
|||||||
"messages": [
|
"messages": [
|
||||||
{
|
{
|
||||||
"role": "system",
|
"role": "system",
|
||||||
"content": "# 角色定位\n你是一名资深警务人员,尤其擅长对警情、案件、线索等非结构化文本数据进行阅读理解,并从中提取各种对象特征信息进行结构化,并总结各种对象之间的关联关系。\n## - person:人物 - id:唯一值 - name:姓名 - enName:英文姓名 - nickName:绰号 - aliasName:别名 - screenName:网名 - idcard:身份证号码 - phoneNo:手机号码 - bankCard:银行卡号 - passporNumber:护照号码 - permanentResidenceAddress:户籍地址 - residenceAddress:现住地址- jbxx:基本信息- id:唯一值 - xsmc:线索名称 - xslx:线索类型 - qbly:情报来源 - kssj:开始时间 - jssj:结束时间 - qtlx:群体类型 - qtmc:群体名称 - sjrs:设计人数 - sbdw:送报单- yjtq:语义提取 "
|
"content": "# 角色定位\n你是一名资深警务人员,尤其擅长对警情、案件、线索等非结构化文本数据进行阅读理解,并从中提取各种对象特征信息进行结构化,并总结各种对象之间的关联关系。\n## - person:人物 - id:唯一值 - name:姓名 - enName:英文姓名 - nickName:绰号 - aliasName:别名 - screenName:网名 - idcard:身份证号码 - phoneNo:手机号码 - bankCard:银行卡号 - passporNumber:护照号码 - permanentResidenceAddress:户籍地址 - residenceAddress:现住地址- jbxx:基本信息- id:唯一值 - xsmc:线索名称 - xslx:线索类型 - qbly:情报来源 - kssj:开始时间 - jssj:结束时间 - qtlx:群体类型 - qtmc:群体名称 - sjrs:设计人数 - sbdw:送报单- yjtq:语义提取 "
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"role": "user",
|
"role": "user",
|
||||||
@ -281,7 +281,7 @@ const getText = (val) =>{
|
|||||||
"max_tokens": 4096,
|
"max_tokens": 4096,
|
||||||
"stream": false
|
"stream": false
|
||||||
}
|
}
|
||||||
let marks = (pageData.tableData.map(v=> '- '+v.yymc)).join(' ');
|
let marks = (pageData.tableData.splice(0,10).map(v=> '- '+v.yymc)).join(' ');
|
||||||
obj.messages[0].content = obj.messages[0].content + marks + "## 注意点\n- 地址信息能够根据上下文信息按照省、市、县、街道/乡镇、路名分段补全并标准化。例如:四川省 成都市 高新区 桂溪街道 交子大道11号\n- 对象之间的关联关系由对象类型、对象id、关系类型、目标对象类型、目标对象id 5个属性组成。\n"
|
obj.messages[0].content = obj.messages[0].content + marks + "## 注意点\n- 地址信息能够根据上下文信息按照省、市、县、街道/乡镇、路名分段补全并标准化。例如:四川省 成都市 高新区 桂溪街道 交子大道11号\n- 对象之间的关联关系由对象类型、对象id、关系类型、目标对象类型、目标对象id 5个属性组成。\n"
|
||||||
// 拼接字典 线索类型:
|
// 拼接字典 线索类型:
|
||||||
let xslx = '线索类型是一个字典,字典内容包括:' + (D_GS_XS_LX.value.map(item=>item.dm+':'+item.zdmc).join(','))+'\n'
|
let xslx = '线索类型是一个字典,字典内容包括:' + (D_GS_XS_LX.value.map(item=>item.dm+':'+item.zdmc).join(','))+'\n'
|
||||||
|
131
src/views/home/components/assessmentItem.vue
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
<template>
|
||||||
|
<div class="warning-card ">
|
||||||
|
<div class="warning-info warning-boder pb5">
|
||||||
|
<div class="mt4 two_text_detail">{{ item[nameData.title] }}</div>
|
||||||
|
</div>
|
||||||
|
<!-- 态势研判预警 -->
|
||||||
|
<div class="warning-info pt5 pb5 flex align-center just-between" v-if="lx == 1">
|
||||||
|
<div class="mt4 two_text_detail flex align-center">预警类别:
|
||||||
|
<DictTag :tag="false" :value="item.ypLx" color="#fff" :options="dict.D_SG_TSYPGZ" />
|
||||||
|
</div>
|
||||||
|
<div class="mt4 two_text_detail">预警次数:{{ item.num }}</div>
|
||||||
|
</div>
|
||||||
|
<!-- 群体预警 -->
|
||||||
|
<div class="warning-info pt5 pb5 flex align-center just-between" v-if="lx == 2">
|
||||||
|
<div class="mt4 two_text_detail flex align-center">群体类别:
|
||||||
|
<DictTag :tag="false" :value="item.qtlb" color="#fff" :options="dict.D_GS_ZDQT_LB" />
|
||||||
|
</div>
|
||||||
|
<div class="mt4 two_text_detail flex align-center">风险等级:
|
||||||
|
<DictTag :tag="false" :value="item.yjJb" color="#fff" :options="dict.D_BZ_TYJB" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 经验分享 -->
|
||||||
|
<div class="warning-info pt5 pb5 flex align-center just-between" v-if="lx == 3">
|
||||||
|
<div class="mt4 two_text_detail">经验发布人:{{ item.fbr }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="warning-info pt5 pb5 warning-boder" v-if="lx == 1 || lx == 2">
|
||||||
|
<div class="mt4 two_text_detail">预警时间:{{ item.yjsj }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="warning-info pt5 pb5 warning-boder" v-if="lx == 3">
|
||||||
|
<div class="mt4 two_text_detail">经验内容:{{ item.fbnr }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { IdCard } from '@/utils/validate.js'
|
||||||
|
import { reactive, ref, watch } from "vue";
|
||||||
|
const props = defineProps({
|
||||||
|
item: {
|
||||||
|
type: Object,
|
||||||
|
default: {}
|
||||||
|
}, dict: {
|
||||||
|
tupe: Object,
|
||||||
|
default: {}
|
||||||
|
},
|
||||||
|
lx: {
|
||||||
|
type: Number,
|
||||||
|
default: 1
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let nameData = ref({
|
||||||
|
title: "ypMc",
|
||||||
|
lbNoe: "预警类别:",
|
||||||
|
})
|
||||||
|
watch(() => props.lx, (val) => {
|
||||||
|
switch (val) {
|
||||||
|
case 1:
|
||||||
|
nameData.value = { title: 'ypMc' }
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
nameData.value = { title: 'qtMc' }
|
||||||
|
case 3:
|
||||||
|
nameData.value = { title: 'jymc' }
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}, { immediate: true })
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.warning-card {
|
||||||
|
background: url("~@/assets/images/xxxxxx.png") no-repeat center center;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
gap: 12px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
padding: 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.warning-image {
|
||||||
|
//
|
||||||
|
// width: 80px;
|
||||||
|
// height: 100px;
|
||||||
|
|
||||||
|
// img {
|
||||||
|
// width: 100%;
|
||||||
|
// height: 100%;
|
||||||
|
// object-fit: cover;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
.warning-info {
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
.tag {
|
||||||
|
padding: 1px 6px;
|
||||||
|
background: #0072FF;
|
||||||
|
border-radius: 2px 2px 2px 2px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gapline {
|
||||||
|
width: 2px;
|
||||||
|
height: 14px;
|
||||||
|
background: #e9e9e9;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.warning-boder {
|
||||||
|
border-bottom: 2px dashed #0958b2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.red {
|
||||||
|
background: url("~@/assets/images/GroupRed.png") no-repeat center center;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.orange {
|
||||||
|
background: url("~@/assets/images/GroupOrange.png") no-repeat center center;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yellow {
|
||||||
|
background: url("~@/assets/images/GroupYellow.png") no-repeat center center;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blue {
|
||||||
|
background: url("~@/assets/images/GroupBlue.png") no-repeat center center;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
}
|
||||||
|
</style>
|