lcw
This commit is contained in:
222
package-lock.json
generated
222
package-lock.json
generated
@ -292,6 +292,11 @@
|
|||||||
"@babel/types": "^7.18.6"
|
"@babel/types": "^7.18.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@babel/helper-string-parser": {
|
||||||
|
"version": "7.27.1",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
|
||||||
|
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="
|
||||||
|
},
|
||||||
"@babel/helper-validator-identifier": {
|
"@babel/helper-validator-identifier": {
|
||||||
"version": "7.18.6",
|
"version": "7.18.6",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
|
||||||
@ -2182,6 +2187,45 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@vue/compat": {
|
||||||
|
"version": "3.5.18",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@vue/compat/-/compat-3.5.18.tgz",
|
||||||
|
"integrity": "sha512-9nJUhd2+1JBW2YRxPkF0JZ+UieK2U7FEVla+7V4d9IlzD9HztQFSFj9VVR3sy/aTIUTyEhysKvsv7geD1jEiKg==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/parser": "^7.28.0",
|
||||||
|
"estree-walker": "^2.0.2",
|
||||||
|
"source-map-js": "^1.2.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/helper-validator-identifier": {
|
||||||
|
"version": "7.27.1",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
|
||||||
|
"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="
|
||||||
|
},
|
||||||
|
"@babel/parser": {
|
||||||
|
"version": "7.28.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.0.tgz",
|
||||||
|
"integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/types": "^7.28.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@babel/types": {
|
||||||
|
"version": "7.28.2",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.2.tgz",
|
||||||
|
"integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/helper-string-parser": "^7.27.1",
|
||||||
|
"@babel/helper-validator-identifier": "^7.27.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source-map-js": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
|
||||||
|
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"@vue/compiler-core": {
|
"@vue/compiler-core": {
|
||||||
"version": "3.2.37",
|
"version": "3.2.37",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz",
|
||||||
@ -7174,6 +7218,183 @@
|
|||||||
"integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==",
|
"integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"fzui-fengqun-api": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/fzui-fengqun-api/-/fzui-fengqun-api-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-YjcHnNJgBsuSJwmHFetovRT20Gw/6DRrvzMFsAgQe81zX1El5ckGE6vA4zTld8LUDiSHWdrc618hNlcjC3A7qA==",
|
||||||
|
"requires": {
|
||||||
|
"core-js": "^3.6.5",
|
||||||
|
"vue": "^2.6.11"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/helper-validator-identifier": {
|
||||||
|
"version": "7.27.1",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
|
||||||
|
"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="
|
||||||
|
},
|
||||||
|
"@babel/parser": {
|
||||||
|
"version": "7.28.0",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/@babel/parser/-/parser-7.28.0.tgz",
|
||||||
|
"integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/types": "^7.28.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@babel/types": {
|
||||||
|
"version": "7.28.2",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/@babel/types/-/types-7.28.2.tgz",
|
||||||
|
"integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/helper-string-parser": "^7.27.1",
|
||||||
|
"@babel/helper-validator-identifier": "^7.27.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@vue/compiler-sfc": {
|
||||||
|
"version": "2.7.16",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz",
|
||||||
|
"integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/parser": "^7.23.5",
|
||||||
|
"postcss": "^8.4.14",
|
||||||
|
"prettier": "^1.18.2 || ^2.0.0",
|
||||||
|
"source-map": "^0.6.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"csstype": {
|
||||||
|
"version": "3.1.3",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/csstype/-/csstype-3.1.3.tgz",
|
||||||
|
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
|
||||||
|
},
|
||||||
|
"vue": {
|
||||||
|
"version": "2.7.16",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/vue/-/vue-2.7.16.tgz",
|
||||||
|
"integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==",
|
||||||
|
"requires": {
|
||||||
|
"@vue/compiler-sfc": "2.7.16",
|
||||||
|
"csstype": "^3.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fzui-fengqun-bpm": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/fzui-fengqun-bpm/-/fzui-fengqun-bpm-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-Ym3vvUf39oNAQew+5ZFFWWCQnM68jue8NvzNtxxFHElHzdiym4fY3Ged1VYpYyaeGeNMbADKKlxNKLy/6Yj1ig==",
|
||||||
|
"requires": {
|
||||||
|
"core-js": "^3.6.5",
|
||||||
|
"fzui-fengqun-api": "^1.0.1",
|
||||||
|
"vue": "^2.6.11"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/helper-validator-identifier": {
|
||||||
|
"version": "7.27.1",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
|
||||||
|
"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="
|
||||||
|
},
|
||||||
|
"@babel/parser": {
|
||||||
|
"version": "7.28.0",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/@babel/parser/-/parser-7.28.0.tgz",
|
||||||
|
"integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/types": "^7.28.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@babel/types": {
|
||||||
|
"version": "7.28.2",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/@babel/types/-/types-7.28.2.tgz",
|
||||||
|
"integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/helper-string-parser": "^7.27.1",
|
||||||
|
"@babel/helper-validator-identifier": "^7.27.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@vue/compiler-sfc": {
|
||||||
|
"version": "2.7.16",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz",
|
||||||
|
"integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/parser": "^7.23.5",
|
||||||
|
"postcss": "^8.4.14",
|
||||||
|
"prettier": "^1.18.2 || ^2.0.0",
|
||||||
|
"source-map": "^0.6.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"csstype": {
|
||||||
|
"version": "3.1.3",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/csstype/-/csstype-3.1.3.tgz",
|
||||||
|
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
|
||||||
|
},
|
||||||
|
"vue": {
|
||||||
|
"version": "2.7.16",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/vue/-/vue-2.7.16.tgz",
|
||||||
|
"integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==",
|
||||||
|
"requires": {
|
||||||
|
"@vue/compiler-sfc": "2.7.16",
|
||||||
|
"csstype": "^3.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fzui-fengqun-vue": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/fzui-fengqun-vue/-/fzui-fengqun-vue-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-UFrs02ShB9+fmEa9kuX7QLg837N1GOPURX9gRKukIM9V1dsilea1+pU/iPu8irGgE5arkOEnsm8LilxfnMILAA==",
|
||||||
|
"requires": {
|
||||||
|
"core-js": "^3.6.5",
|
||||||
|
"fzui-fengqun-api": "^1.0.1",
|
||||||
|
"fzui-fengqun-bpm": "^1.0.1",
|
||||||
|
"vue": "^2.6.11"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/helper-validator-identifier": {
|
||||||
|
"version": "7.27.1",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
|
||||||
|
"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="
|
||||||
|
},
|
||||||
|
"@babel/parser": {
|
||||||
|
"version": "7.28.0",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/@babel/parser/-/parser-7.28.0.tgz",
|
||||||
|
"integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/types": "^7.28.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@babel/types": {
|
||||||
|
"version": "7.28.2",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/@babel/types/-/types-7.28.2.tgz",
|
||||||
|
"integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/helper-string-parser": "^7.27.1",
|
||||||
|
"@babel/helper-validator-identifier": "^7.27.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@vue/compiler-sfc": {
|
||||||
|
"version": "2.7.16",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz",
|
||||||
|
"integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/parser": "^7.23.5",
|
||||||
|
"postcss": "^8.4.14",
|
||||||
|
"prettier": "^1.18.2 || ^2.0.0",
|
||||||
|
"source-map": "^0.6.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"csstype": {
|
||||||
|
"version": "3.1.3",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/csstype/-/csstype-3.1.3.tgz",
|
||||||
|
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
|
||||||
|
},
|
||||||
|
"vue": {
|
||||||
|
"version": "2.7.16",
|
||||||
|
"resolved": "http://nexus.jwzh.online:9095/repository/npm-all/vue/-/vue-2.7.16.tgz",
|
||||||
|
"integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==",
|
||||||
|
"requires": {
|
||||||
|
"@vue/compiler-sfc": "2.7.16",
|
||||||
|
"csstype": "^3.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"gensync": {
|
"gensync": {
|
||||||
"version": "1.0.0-beta.2",
|
"version": "1.0.0-beta.2",
|
||||||
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
|
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
|
||||||
@ -11930,7 +12151,6 @@
|
|||||||
"version": "2.7.1",
|
"version": "2.7.1",
|
||||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
|
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
|
||||||
"integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
|
"integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"pretty-error": {
|
"pretty-error": {
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
"@paddlejs-models/ocr": "^1.1.2",
|
"@paddlejs-models/ocr": "^1.1.2",
|
||||||
"@paddlejs-models/ocrdet": "^0.0.3",
|
"@paddlejs-models/ocrdet": "^0.0.3",
|
||||||
"@types/video.js": "^7.3.42",
|
"@types/video.js": "^7.3.42",
|
||||||
|
"@vue/compat": "^3.5.18",
|
||||||
"@wangeditor/editor": "^5.1.23",
|
"@wangeditor/editor": "^5.1.23",
|
||||||
"@wangeditor/editor-for-vue": "^5.1.12",
|
"@wangeditor/editor-for-vue": "^5.1.12",
|
||||||
"axios": "^0.26.0",
|
"axios": "^0.26.0",
|
||||||
@ -27,6 +28,7 @@
|
|||||||
"el-table-infinite-scroll": "^3.0.6",
|
"el-table-infinite-scroll": "^3.0.6",
|
||||||
"element-plus": "2.0.2",
|
"element-plus": "2.0.2",
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
|
"fzui-fengqun-vue": "^1.0.1",
|
||||||
"gifler": "^0.1.0",
|
"gifler": "^0.1.0",
|
||||||
"image-compressor.js": "^1.1.4",
|
"image-compressor.js": "^1.1.4",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
|
@ -32,7 +32,7 @@ addresschange();
|
|||||||
function addresschange() {
|
function addresschange() {
|
||||||
var Uri = 'ws://192.168.0.232:10095';
|
var Uri = 'ws://192.168.0.232:10095';
|
||||||
Uri = Uri.replace(/wss/g, "https");
|
Uri = Uri.replace(/wss/g, "https");
|
||||||
window.open(Uri, '_blank');
|
// window.open(Uri, '_blank');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ import { useStore } from "vuex";
|
|||||||
import { getItem, setItem} 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();
|
||||||
generateNewStyle(store.getters.mainColor).then((newStyle) => {
|
generateNewStyle(store.getters.mainColor).then((newStyle) => {
|
||||||
writeNewStyle(newStyle);
|
writeNewStyle(newStyle);
|
||||||
|
86
src/api/commit.js
Normal file
86
src/api/commit.js
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
import request from "@/utils/request";
|
||||||
|
const api = "/mosty-api/mosty-base";
|
||||||
|
const gsxtApi = "/mosty-api/mosty-gsxt";
|
||||||
|
// 查询未读消息
|
||||||
|
export const queryYdxxPageList = (data) => {
|
||||||
|
return request({
|
||||||
|
url: api + "/fzmsg/queryYdxxPageList",
|
||||||
|
method: "POST",
|
||||||
|
data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//查看未读详情
|
||||||
|
export const queryWdxxDetail = (data) => {
|
||||||
|
return request({
|
||||||
|
url: api + "/fzmsg/queryWdxxDetail",
|
||||||
|
method: "POST",
|
||||||
|
data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 查询一睹消息
|
||||||
|
export const queryWdxxPageList = (data) => {
|
||||||
|
return request({
|
||||||
|
url: api + "/fzmsg/queryWdxxPageList ",
|
||||||
|
method: "POST",
|
||||||
|
data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const queryYdxxDetail = (data) => {
|
||||||
|
return request({
|
||||||
|
url: api + "/fzmsg/queryYdxxDetail",
|
||||||
|
method: "POST",
|
||||||
|
data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const queryXxTj = (data) => {
|
||||||
|
return request({
|
||||||
|
url: api + "/fzmsg/queryXxTj",
|
||||||
|
method: "POST",
|
||||||
|
data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
// 下发指令
|
||||||
|
export const updateBkgzl = (params) => {
|
||||||
|
return request({
|
||||||
|
url: gsxtApi + "/tbGsxtBk/updateBkgzl",
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
});
|
||||||
|
};
|
||||||
|
// 签收
|
||||||
|
export const qsXx = (data) => {
|
||||||
|
return request({
|
||||||
|
url: api + "/fzmsg/qsXx",
|
||||||
|
method: "post",
|
||||||
|
data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 预警发送指令
|
||||||
|
export const sendFqzl = (data) => {
|
||||||
|
return request({
|
||||||
|
url: gsxtApi + "/tbYjxx/sendFqzl",
|
||||||
|
method: "post",
|
||||||
|
data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 重点人发掘发送指令
|
||||||
|
|
||||||
|
export const ZdrfjSendFqzl = (data) => {
|
||||||
|
return request({
|
||||||
|
url: gsxtApi + "/tbGsxtRqfjRy/sendFqzl",
|
||||||
|
method: "post",
|
||||||
|
data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//线索流转
|
||||||
|
|
||||||
|
export const qbcjSendFqzl = (data) => {
|
||||||
|
return request({
|
||||||
|
url: gsxtApi + "/qbcj/sendFqzl",
|
||||||
|
method: "post",
|
||||||
|
data
|
||||||
|
});
|
||||||
|
};
|
100
src/api/spl.js
Normal file
100
src/api/spl.js
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
import request from "@/utils/request";
|
||||||
|
import axios from "axios";
|
||||||
|
import qs from 'qs'; // 或者使用 URLSearchParams
|
||||||
|
const api = "/bpm";
|
||||||
|
// 解析数据
|
||||||
|
export function ParsingText(data, fun) {
|
||||||
|
axios({
|
||||||
|
method: 'post',
|
||||||
|
url: '/chat/completions',
|
||||||
|
data: data,
|
||||||
|
headers: { 'Authorization': 'Bearer sk-064b5c53131c4046883b718f2b31c050' }
|
||||||
|
}).then((res) => {
|
||||||
|
fun(res)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//get 请求
|
||||||
|
export const splFlvGet = (params = {}, url) => {
|
||||||
|
return request({
|
||||||
|
url: url,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//get 请求
|
||||||
|
export const splGet = (params = {}, url) => {
|
||||||
|
return request({
|
||||||
|
url: api + url,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//post 请求
|
||||||
|
export const splPost = (data = {}, url) => {
|
||||||
|
return request({
|
||||||
|
url: api + url,
|
||||||
|
method: "post",
|
||||||
|
data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//put 请求
|
||||||
|
export const splPut = (data = {}, url) => {
|
||||||
|
return request({
|
||||||
|
url: api + url,
|
||||||
|
method: "put",
|
||||||
|
data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//put 请求
|
||||||
|
export const splDelete = (data = {}, url) => {
|
||||||
|
return request({
|
||||||
|
url: api + url,
|
||||||
|
method: "delete",
|
||||||
|
data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export const submitProcess = (data) => {
|
||||||
|
return request({
|
||||||
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||||||
|
url: api + '/process/createProcess',
|
||||||
|
method: 'post',
|
||||||
|
data: qs.stringify(data)
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const queryProcessNode = (data) => {
|
||||||
|
return request({
|
||||||
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||||||
|
url: api + '/process/queryProcessNode',
|
||||||
|
method: 'post',
|
||||||
|
data: qs.stringify(data)
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const queryProcessNodeLog = (data) => {
|
||||||
|
return request({
|
||||||
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||||||
|
url: api + '/process/queryProcessNodeLog',
|
||||||
|
method: 'post',
|
||||||
|
data: qs.stringify(data)
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const queryProcess = (data) => {
|
||||||
|
return request({
|
||||||
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||||||
|
url: api + '/process/queryProcess',
|
||||||
|
method: 'post',
|
||||||
|
data: qs.stringify(data)
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,19 +1,23 @@
|
|||||||
.h-100 {
|
.h-100 {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.w-100 {
|
.w-100 {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.flexcc {
|
.flexcc {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.flexcb {
|
.flexcb {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.font10 {
|
.font10 {
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
}
|
}
|
||||||
@ -64,12 +68,10 @@ align-items: center;
|
|||||||
|
|
||||||
// 分割线
|
// 分割线
|
||||||
.divider {
|
.divider {
|
||||||
background: linear-gradient(
|
background: linear-gradient(90.143958942072deg,
|
||||||
90.143958942072deg,
|
|
||||||
rgba(14, 48, 115, 1) 0%,
|
rgba(14, 48, 115, 1) 0%,
|
||||||
rgba(70, 159, 251, 1) 50%,
|
rgba(70, 159, 251, 1) 50%,
|
||||||
rgba(14, 48, 115, 1) 100%
|
rgba(14, 48, 115, 1) 100%);
|
||||||
);
|
|
||||||
height: 1px;
|
height: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,6 +139,7 @@ align-items: center;
|
|||||||
.relative {
|
.relative {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.absolute {
|
.absolute {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
}
|
}
|
||||||
@ -180,9 +183,11 @@ align-items: center;
|
|||||||
.flex {
|
.flex {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
.flex-grow1 {
|
.flex-grow1 {
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.shrink0 {
|
.shrink0 {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
@ -190,6 +195,7 @@ align-items: center;
|
|||||||
.flex-warp {
|
.flex-warp {
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.flex-nowrap {
|
.flex-nowrap {
|
||||||
flex-wrap: nowrap;
|
flex-wrap: nowrap;
|
||||||
}
|
}
|
||||||
@ -200,7 +206,9 @@ align-items: center;
|
|||||||
|
|
||||||
.just-between {
|
.just-between {
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.just-around {
|
.just-around {
|
||||||
justify-content: space-around;
|
justify-content: space-around;
|
||||||
}
|
}
|
||||||
@ -221,14 +229,18 @@ align-items: center;
|
|||||||
align-items: start;
|
align-items: start;
|
||||||
}
|
}
|
||||||
|
|
||||||
.align-center {
|
.align-space-around {
|
||||||
align-items: center;
|
align-content: space-around;
|
||||||
}
|
}
|
||||||
|
|
||||||
.align-bottom {
|
.align-bottom {
|
||||||
align-items: flex-end;
|
align-items: flex-end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.align-center {
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
/**********文本省略***********/
|
/**********文本省略***********/
|
||||||
.nowrap {
|
.nowrap {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
@ -345,22 +357,27 @@ align-items: center;
|
|||||||
.lh#{$i} {
|
.lh#{$i} {
|
||||||
line-height: #{$i}px;
|
line-height: #{$i}px;
|
||||||
}
|
}
|
||||||
|
|
||||||
//自适应大号字体(通常为统计数字 18-30)
|
//自适应大号字体(通常为统计数字 18-30)
|
||||||
.font_size_big {
|
.font_size_big {
|
||||||
font-size: clamp(1.125rem, -0.894rem + 2.31vw, 1.875rem);
|
font-size: clamp(1.125rem, -0.894rem + 2.31vw, 1.875rem);
|
||||||
}
|
}
|
||||||
|
|
||||||
//自适应一号字体(通常为一级标题 14-18)
|
//自适应一号字体(通常为一级标题 14-18)
|
||||||
.font_size_title {
|
.font_size_title {
|
||||||
font-size: clamp(0.875rem, 0.37rem + 0.58vw, 1.063rem);
|
font-size: clamp(0.875rem, 0.37rem + 0.58vw, 1.063rem);
|
||||||
}
|
}
|
||||||
|
|
||||||
//自适应统计字体(通常为统计数字 14-22)
|
//自适应统计字体(通常为统计数字 14-22)
|
||||||
.font_size1 {
|
.font_size1 {
|
||||||
font-size: clamp(0.875rem, -0.471rem + 1.54vw, 1.375rem);
|
font-size: clamp(0.875rem, -0.471rem + 1.54vw, 1.375rem);
|
||||||
}
|
}
|
||||||
|
|
||||||
//自适应二号字体(通常为二级标题 14-16)
|
//自适应二号字体(通常为二级标题 14-16)
|
||||||
.font_size2 {
|
.font_size2 {
|
||||||
font-size: clamp(0.75rem, 0.077rem + 0.77vw, 1rem);
|
font-size: clamp(0.75rem, 0.077rem + 0.77vw, 1rem);
|
||||||
}
|
}
|
||||||
|
|
||||||
//自适应普通字体(通常为默认大小 10-14)
|
//自适应普通字体(通常为默认大小 10-14)
|
||||||
.font_size_default {
|
.font_size_default {
|
||||||
font-size: clamp(0.625rem, -0.048rem + 0.77vw, 0.875rem);
|
font-size: clamp(0.625rem, -0.048rem + 0.77vw, 0.875rem);
|
||||||
@ -373,6 +390,7 @@ align-items: center;
|
|||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: "HANYILINGXINTIJIAN";
|
font-family: "HANYILINGXINTIJIAN";
|
||||||
src: url("~@/assets/font/HANYILINGXINTIJIAN-1.TTF");
|
src: url("~@/assets/font/HANYILINGXINTIJIAN-1.TTF");
|
||||||
|
BIN
src/assets/images/tztg.png
Normal file
BIN
src/assets/images/tztg.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 555 B |
BIN
src/assets/images/xtxx.png
Normal file
BIN
src/assets/images/xtxx.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 652 B |
BIN
src/assets/images/xxxt.png
Normal file
BIN
src/assets/images/xxxt.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 790 B |
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="showDialog" :destroy-on-close="true" title="新增车辆" @close="close" :close-on-click-modal="false">
|
<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">
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform" :rules="rules">
|
||||||
<template #bqList>
|
<!-- <template #bqList>
|
||||||
<div class="marks pointer" @click="chooseMarksVisible = true">
|
<div class="marks pointer" @click="chooseMarksVisible = true">
|
||||||
<span style="color: rgb(175 178 184);padding-left: 10px;"
|
<span style="color: rgb(175 178 184);padding-left: 10px;"
|
||||||
v-if="!listQuery.bqList || listQuery.bqList.length == 0">请选择标签</span>
|
v-if="!listQuery.bqList || listQuery.bqList.length == 0">请选择标签</span>
|
||||||
@ -10,7 +10,7 @@
|
|||||||
:key="idx">{{ it.bqMc }}</el-tag>
|
:key="idx">{{ it.bqMc }}</el-tag>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template> -->
|
||||||
</FormMessage>
|
</FormMessage>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="flex just-center">
|
<div class="flex just-center">
|
||||||
@ -27,7 +27,7 @@ import ChooseMarks from "@/components/ChooseList/ChooseMarks/index.vue";
|
|||||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||||
import { reactive, ref, getCurrentInstance } from 'vue';
|
import { reactive, ref, getCurrentInstance } from 'vue';
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_BZ_XB } = proxy.$dict("D_BZ_XB"); // 获取字典数据
|
const { D_GS_ZDR_YJDJ ,BD_BK_CLYJBQ} = proxy.$dict("D_GS_ZDR_YJDJ",'BD_BK_CLYJBQ'); // 获取字典数据
|
||||||
const elform = ref()
|
const elform = ref()
|
||||||
const roleIds = ref([])
|
const roleIds = ref([])
|
||||||
const showDialog = ref(false)
|
const showDialog = ref(false)
|
||||||
@ -35,46 +35,42 @@ const chooseMarksVisible = ref(false)
|
|||||||
const emit = defineEmits(['change'])
|
const emit = defineEmits(['change'])
|
||||||
const listQuery = ref({})
|
const listQuery = ref({})
|
||||||
const formData = ref([
|
const formData = ref([
|
||||||
{ label: "车牌号", prop: "hphm", type: "input" },
|
{ label: "车牌号", prop: "clCph", type: "input" },
|
||||||
{ label: "车架号", prop: "clCjh", type: "input" },
|
|
||||||
{
|
{
|
||||||
label: "车辆颜色",
|
label: "车辆颜色",
|
||||||
prop: "clYs",
|
prop: "clYs",
|
||||||
type: "input",
|
type: "input",
|
||||||
},
|
},
|
||||||
{ label: "车辆所有人", prop: "clSyr", type: "input" },
|
{ label: "车辆所有人", prop: "clSyr", type: "input" },
|
||||||
{ label: "人员身份证", prop: "clSyrsfzh", type: "input" },
|
{ label: "所有人身份证号", prop: "clSyrsfzh", type: "input" },
|
||||||
{ label: "责任单位", prop: "zrSsbmdm", depMc: 'zrSsbmmc', type: "department" },
|
{ label: "所属部门", prop: "ssbmdm", type: "department" },
|
||||||
{ label: "管辖单位", prop: "gxSsbmdm", depMc: 'gxSsbmmc', type: "department" },
|
{ label: "预警等级", prop: "yjdj", type: "select", options: D_GS_ZDR_YJDJ },
|
||||||
{ label: "管控民警姓名", prop: "gkMjXm", type: "input" },
|
{ label: "预警标签", prop: "yjbq", type: "select", options: BD_BK_CLYJBQ },
|
||||||
{ label: "管控民警警号", prop: "gkMjJh", type: "input" },
|
|
||||||
{ label: "管控原因", prop: "clLkyy", type: "textarea", width: "100%" },
|
|
||||||
{ label: "车辆照片", prop: "fjdz", type: "upload", width: "100%" },
|
{ label: "车辆照片", prop: "fjdz", type: "upload", width: "100%" },
|
||||||
])
|
])
|
||||||
const rules = reactive({
|
const rules = reactive({
|
||||||
hphm: [{ required: true, message: "请输入车牌号", trigger: "blur" }],
|
clCph: [{ required: true, message: "请输入车牌号", trigger: "blur" }],
|
||||||
clCjh: [{ required: true, message: "请输入车架号", trigger: "blur" }],
|
yjdj: [{ required: true, message: "请选择预警等级", trigger: "change" }],
|
||||||
clYs: [{ required: true, message: "请输入车辆颜色", trigger: "blur" }],
|
yjbq: [{ required: true, message: "请选择预警标签", trigger: "change" }],
|
||||||
clSyr: [{ required: true, message: "请输入车辆所有人", trigger: "blur" }],
|
ssbmdm:[{ required: true, message: "请选择所属部门", trigger: "change" }]
|
||||||
clSyrsfzh: [{ required: true, message: "请输入人员身份证", trigger: "blur" }],
|
|
||||||
})
|
})
|
||||||
const init = () => {
|
const init = () => {
|
||||||
showDialog.value = true;
|
showDialog.value = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 选择标签
|
// 选择标签
|
||||||
const choosed = (val) => {
|
// const choosed = (val) => {
|
||||||
listQuery.value.bqList = val.map(v => {
|
// 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 }
|
// 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)
|
// roleIds.value = val.map(v => v.id)
|
||||||
}
|
// }
|
||||||
|
|
||||||
// 删除数据
|
// 删除数据
|
||||||
const closeTag = (idx) => {
|
// const closeTag = (idx) => {
|
||||||
listQuery.value.bqList.splice(idx, 1)
|
// listQuery.value.bqList.splice(idx, 1)
|
||||||
roleIds.value.splice(idx, 1)
|
// roleIds.value.splice(idx, 1)
|
||||||
}
|
// }
|
||||||
|
|
||||||
const submitForm = () => {
|
const submitForm = () => {
|
||||||
elform.value.submit((val) => {
|
elform.value.submit((val) => {
|
||||||
@ -86,6 +82,7 @@ const submitForm = () => {
|
|||||||
|
|
||||||
const close = () => {
|
const close = () => {
|
||||||
elform.value.reset();
|
elform.value.reset();
|
||||||
|
listQuery.value = {}
|
||||||
listQuery.value.bqList = []
|
listQuery.value.bqList = []
|
||||||
roleIds.value = []
|
roleIds.value = []
|
||||||
showDialog.value = false;
|
showDialog.value = false;
|
||||||
|
@ -20,7 +20,8 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<div class="tabBox" :class="props.Single ? 'tabBoxRadio' : ''" style="margin-top: 0px">
|
<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 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 type="selection" width="55" :reserve-selection="true" />
|
||||||
<el-table-column prop="hphm" align="center" label="车牌号" />
|
<el-table-column prop="hphm" align="center" label="车牌号" />
|
||||||
<el-table-column prop="clCjh" align="center" label="车架号" />
|
<el-table-column prop="clCjh" align="center" label="车架号" />
|
||||||
@ -28,19 +29,22 @@
|
|||||||
<el-table-column prop="clSyr" align="center" label="车辆所有人" />
|
<el-table-column prop="clSyr" align="center" label="车辆所有人" />
|
||||||
<el-table-column prop="gxSsbmmc" align="center" label="管辖单位" />
|
<el-table-column prop="gxSsbmmc" align="center" label="管辖单位" />
|
||||||
<el-table-column prop="gkMjXm" align="center" label="管控民警" />
|
<el-table-column prop="gkMjXm" align="center" label="管控民警" />
|
||||||
|
<el-table-column prop="gxSsbmmc" align="center" label="预警等级">
|
||||||
|
<template #default="scope">
|
||||||
|
<DictTag :tag="false" :value="scope.row.yjdj" :options="D_GS_ZDR_YJDJ" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="yjbq" align="center" label="预警标签">
|
||||||
|
<template #default="scope">
|
||||||
|
<DictTag :tag="false" :value="scope.row.yjbq" :options="BD_BK_CLYJBQ" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
<div class="fenye flex just-end " :style="{ top: tableHeight + 'px' }">
|
<div class="fenye flex just-end " :style="{ top: tableHeight + 'px' }">
|
||||||
<el-pagination
|
<el-pagination class="pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange"
|
||||||
class="pagination"
|
:current-page="listQuery.pageCurrent" :page-sizes="[10, 20, 50, 100]" :page-size="listQuery.pageSize"
|
||||||
@size-change="handleSizeChange"
|
layout="total, sizes, prev, pager, next, jumper" :total="total"></el-pagination>
|
||||||
@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>
|
</div>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="flex just-center">
|
<div class="flex just-center">
|
||||||
@ -57,9 +61,10 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import AddPeo from './addPeo.vue'
|
import AddPeo from './addPeo.vue'
|
||||||
import { qcckGet } from "@/api/qcckApi.js";
|
import { qcckGet } from "@/api/qcckApi.js";
|
||||||
|
import { Dict } from 'core-js';
|
||||||
import { defineProps, ref, getCurrentInstance, watch } from "vue";
|
import { defineProps, ref, getCurrentInstance, watch } from "vue";
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_BZ_XB,D_BZ_MZ } = proxy.$dict("D_BZ_XB","D_BZ_MZ"); //获取字典数据
|
const { BD_BK_CLYJBQ, D_GS_ZDR_YJDJ } = proxy.$dict("BD_BK_CLYJBQ", "D_GS_ZDR_YJDJ"); //获取字典数据
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
modelValue: {
|
modelValue: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
@ -197,8 +202,8 @@ watch(()=>props.modelValue,val=>{
|
|||||||
.tabBoxRadio .el-checkbox__inner {
|
.tabBoxRadio .el-checkbox__inner {
|
||||||
border-radius: 50% !important;
|
border-radius: 50% !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
|
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
@ -25,7 +25,7 @@ import ChooseMarks from "@/components/ChooseList/ChooseMarks/index.vue";
|
|||||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||||
import { reactive, ref,getCurrentInstance } from 'vue';
|
import { reactive, ref,getCurrentInstance } from 'vue';
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_BZ_XB } = proxy.$dict("D_BZ_XB"); // 获取字典数据
|
const { D_BZ_XB,D_GS_ZDR_YJDJ } = proxy.$dict("D_BZ_XB","D_GS_ZDR_YJDJ"); // 获取字典数据
|
||||||
const elform = ref()
|
const elform = ref()
|
||||||
const roleIds = ref([])
|
const roleIds = ref([])
|
||||||
const showDialog = ref(false)
|
const showDialog = ref(false)
|
||||||
@ -39,19 +39,24 @@ const formData = ref([
|
|||||||
{ label: "手机号码", prop: "ryLxdh", type: "input",width:'45%' },
|
{ label: "手机号码", prop: "ryLxdh", type: "input",width:'45%' },
|
||||||
{ label: "户籍地址", prop: "hjdXz", type: "input", width: '100%' },
|
{ label: "户籍地址", prop: "hjdXz", type: "input", width: '100%' },
|
||||||
{ label: "户籍地派出所", prop: "hjdpcsdm", depMc: 'hjdpcs', type: "department", width: '48%' },
|
{ label: "户籍地派出所", prop: "hjdpcsdm", depMc: 'hjdpcs', type: "department", width: '48%' },
|
||||||
|
{ label: "所属部门", prop: "ssbmdm", type: "department" },
|
||||||
{ label: "特征描述", prop: "qtTzms", type: "input" ,width:'100%'},
|
{ label: "特征描述", prop: "qtTzms", type: "input" ,width:'100%'},
|
||||||
{ label: "人员标签", prop: "bqList", type: "slot" ,width:'100%'},
|
{ label: "人员标签", prop: "bqList", type: "slot" ,width:'100%'},
|
||||||
{ label: "车牌号", prop: "clCph", type: "input", width: '45%' },
|
{ label: "车牌号", prop: "clCph", type: "input", width: '45%' },
|
||||||
{ label: "车架号", prop: "clCjh", type: "input" ,width:'45%'},
|
{ label: "预警等级", prop: "yjdj", type: "select", options: D_GS_ZDR_YJDJ },
|
||||||
|
{ label: "车辆识别代码", prop: "clCjh", type: "input" ,width:'45%'},
|
||||||
{ label: "人员照片", prop: "fjZp", type: "upload" ,width:'100%'},
|
{ label: "人员照片", prop: "fjZp", type: "upload" ,width:'100%'},
|
||||||
])
|
])
|
||||||
const rules = reactive({
|
const rules = reactive({
|
||||||
|
// fjZp: [{ required: true, message: "请上传人员照片", trigger: "blur" }],
|
||||||
ryXm: [{ required: true, message: "请输入姓名", trigger: "blur" }],
|
ryXm: [{ required: true, message: "请输入姓名", trigger: "blur" }],
|
||||||
rySfzh: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
rySfzh: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||||
ryXb: [{ required: true, message: "请选择性别", trigger: "change" }],
|
ryXb: [{ required: true, message: "请选择性别", trigger: "change" }],
|
||||||
ryLxdh: [{ required: true, message: "请输入手机号码", trigger: "blur" }],
|
yjdj: [{ required: true, message: "请选择预警等级", trigger: "change" }],
|
||||||
hjdXz: [{ required: true, message: "请输入户籍地", trigger: "blur" }],
|
ssbmdm:[{ required: true, message: "请选择所属部门", trigger: "change" }]
|
||||||
xzdXz: [{ required: true, message: "请输入现居住地址", trigger: "blur" }],
|
// ryLxdh: [{ required: true, message: "请输入手机号码", trigger: "blur" }],
|
||||||
|
// hjdXz: [{ required: true, message: "请输入户籍地", trigger: "blur" }],
|
||||||
|
// xzdXz: [{ required: true, message: "请输入现居住地址", trigger: "blur" }],
|
||||||
})
|
})
|
||||||
const init = () =>{
|
const init = () =>{
|
||||||
showDialog.value = true;
|
showDialog.value = true;
|
||||||
@ -81,6 +86,8 @@ const submitForm = () =>{
|
|||||||
|
|
||||||
const close = () =>{
|
const close = () =>{
|
||||||
elform.value.reset();
|
elform.value.reset();
|
||||||
|
listQuery.value = {}
|
||||||
|
|
||||||
listQuery.value.bqList = []
|
listQuery.value.bqList = []
|
||||||
roleIds.value = []
|
roleIds.value = []
|
||||||
showDialog.value = false;
|
showDialog.value = false;
|
||||||
|
@ -39,8 +39,13 @@
|
|||||||
<el-table-column prop="ryLxdh" align="center" label="手机号"/>
|
<el-table-column prop="ryLxdh" align="center" label="手机号"/>
|
||||||
<el-table-column prop="qtXnsf" align="center" label="虚拟身份"/>
|
<el-table-column prop="qtXnsf" align="center" label="虚拟身份"/>
|
||||||
<el-table-column prop="clCph" align="center" label="车牌号"/>
|
<el-table-column prop="clCph" align="center" label="车牌号"/>
|
||||||
<el-table-column prop="clCjh" align="center" label="车架号"/>
|
<el-table-column prop="clCjh" align="center" label="车辆识别代码"/>
|
||||||
<el-table-column prop="qtTzms" align="center" label="特征描述"/>
|
<el-table-column prop="qtTzms" align="center" label="特征描述"/>
|
||||||
|
<el-table-column prop="zdrYjdj" align="center" label="预警等级">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<DictTag :tag="false" :value="row.zdrYjdj" :options="D_GS_ZDR_YJDJ" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column prop="bqList" align="center" label="人员标签">
|
<el-table-column prop="bqList" align="center" label="人员标签">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<span v-if="row.bqList">
|
<span v-if="row.bqList">
|
||||||
@ -79,7 +84,7 @@ import AddPeo from './addPeo.vue'
|
|||||||
import { qcckGet} from "@/api/qcckApi.js";
|
import { qcckGet} from "@/api/qcckApi.js";
|
||||||
import { defineProps, ref ,getCurrentInstance, watch} from "vue";
|
import { defineProps, ref ,getCurrentInstance, watch} from "vue";
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_BZ_XB,D_BZ_MZ } = proxy.$dict("D_BZ_XB","D_BZ_MZ"); //获取字典数据
|
const { D_BZ_XB,D_BZ_MZ,D_GS_ZDR_YJDJ } = proxy.$dict("D_BZ_XB","D_BZ_MZ",'D_GS_ZDR_YJDJ'); //获取字典数据
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
modelValue: {
|
modelValue: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
|
@ -106,6 +106,15 @@ const handleChange = (e) => {
|
|||||||
if (props.multiple === true) {
|
if (props.multiple === true) {
|
||||||
const data = e.map((item) => {return item[item.length - 1];});
|
const data = e.map((item) => {return item[item.length - 1];});
|
||||||
emits("update:modelValue", data);
|
emits("update:modelValue", data);
|
||||||
|
const obj= data.map(items=>{
|
||||||
|
return {
|
||||||
|
... depList.value.find(item=>{ return item.orgCode == items})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
console.log(obj);
|
||||||
|
|
||||||
|
emits("getDepValue", obj);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
const data = e ? e[e.length - 1] : "";
|
const data = e ? e[e.length - 1] : "";
|
||||||
emits("update:modelValue", data);
|
emits("update:modelValue", data);
|
||||||
|
@ -5,7 +5,9 @@
|
|||||||
:on-exceed="handleExceed" :on-success="handlerSuccess" :before-upload="beforeImgUpload">
|
:on-exceed="handleExceed" :on-success="handlerSuccess" :before-upload="beforeImgUpload">
|
||||||
<template #default>
|
<template #default>
|
||||||
<el-button v-if="props.showBtn" size="small" type="primary">上传文件</el-button>
|
<el-button v-if="props.showBtn" size="small" type="primary">上传文件</el-button>
|
||||||
<el-icon v-else><Plus /></el-icon>
|
<el-icon v-else>
|
||||||
|
<Plus />
|
||||||
|
</el-icon>
|
||||||
</template>
|
</template>
|
||||||
<template #file="{ file }" v-if="!props.showBtn">
|
<template #file="{ file }" v-if="!props.showBtn">
|
||||||
<div v-if="props.isImg">
|
<div v-if="props.isImg">
|
||||||
@ -15,7 +17,9 @@
|
|||||||
<el-icon> <zoom-in /></el-icon>
|
<el-icon> <zoom-in /></el-icon>
|
||||||
</span>
|
</span>
|
||||||
<span v-if="!disabled" class="el-upload-list__item-delete" @click="handleRemove(file, fileList)">
|
<span v-if="!disabled" class="el-upload-list__item-delete" @click="handleRemove(file, fileList)">
|
||||||
<el-icon><Delete /></el-icon>
|
<el-icon>
|
||||||
|
<Delete />
|
||||||
|
</el-icon>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
@ -26,10 +30,14 @@
|
|||||||
</div>
|
</div>
|
||||||
<span class="el-upload-list__item-actions">
|
<span class="el-upload-list__item-actions">
|
||||||
<span v-if="!disabled" class="el-upload-list__item-delete" @click="handleDownload(file)">
|
<span v-if="!disabled" class="el-upload-list__item-delete" @click="handleDownload(file)">
|
||||||
<el-icon><Download /></el-icon>
|
<el-icon>
|
||||||
|
<Download />
|
||||||
|
</el-icon>
|
||||||
</span>
|
</span>
|
||||||
<span v-if="!disabled" class="el-upload-list__item-delete" @click="handleRemove(file, fileList)">
|
<span v-if="!disabled" class="el-upload-list__item-delete" @click="handleRemove(file, fileList)">
|
||||||
<el-icon><Delete /></el-icon>
|
<el-icon>
|
||||||
|
<Delete />
|
||||||
|
</el-icon>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
@ -158,6 +166,8 @@ watch(
|
|||||||
let arr = val ? val : [];
|
let arr = val ? val : [];
|
||||||
if (arr && arr.length > 0) {
|
if (arr && arr.length > 0) {
|
||||||
if (!props.sfUrl) {
|
if (!props.sfUrl) {
|
||||||
|
console.log(arr, "图片");
|
||||||
|
if (Array.isArray(arr)) {
|
||||||
fileList.value = arr.map((el) => {
|
fileList.value = arr.map((el) => {
|
||||||
if (Object.prototype.toString.call(el) === "[object Object]") {
|
if (Object.prototype.toString.call(el) === "[object Object]") {
|
||||||
return {
|
return {
|
||||||
@ -168,6 +178,20 @@ watch(
|
|||||||
return { url: `/mosty-api/mosty-base/minio/image/download/` + el };
|
return { url: `/mosty-api/mosty-base/minio/image/download/` + el };
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
const fjListData=arr.split(',')
|
||||||
|
fileList.value = fjListData.map((el) => {
|
||||||
|
if (Object.prototype.toString.call(el) === "[object Object]") {
|
||||||
|
return {
|
||||||
|
url: `/mosty-api/mosty-base/minio/image/download/` + el,
|
||||||
|
name: el.name
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return { url: `/mosty-api/mosty-base/minio/image/download/` + el };
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
fileList.value = arr.map((el) => {
|
fileList.value = arr.map((el) => {
|
||||||
if (Object.prototype.toString.call(el) === "[object Object]") {
|
if (Object.prototype.toString.call(el) === "[object Object]") {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-form ref="elform" :model="listQuery" :label-width="props.labelWidth" :rules="props.rules" :inline="props.inline"
|
<el-form ref="elform" :model="listQuery" :label-width="props.labelWidth" :rules="props.rules" :inline="props.inline"
|
||||||
label-position="right" :disabled="props.disabled">
|
label-position="right" :disabled="props.disabled">
|
||||||
|
|
||||||
<el-form-item v-for="(item, idx) in props.formList" :style="item.width && { width: item.width }" :prop="item.prop"
|
<el-form-item v-for="(item, idx) in props.formList" :style="item.width && { width: item.width }" :prop="item.prop"
|
||||||
:label="item.label" :label-width="item.labelWidth" :key="idx">
|
:label="item.label" :label-width="item.labelWidth" :key="idx">
|
||||||
<!-- input表单 input-->
|
<!-- input表单 input-->
|
||||||
@ -21,7 +22,7 @@
|
|||||||
<!-- 部门department -->
|
<!-- 部门department -->
|
||||||
<template v-else-if="item.type === 'department'">
|
<template v-else-if="item.type === 'department'">
|
||||||
<MOSTY.Department style="width: 100%;" clearable :isAll="item.isAll" @getDepValue="getdep($event, item.depMc)"
|
<MOSTY.Department style="width: 100%;" clearable :isAll="item.isAll" @getDepValue="getdep($event, item.depMc)"
|
||||||
v-model="listQuery[item.prop]" :placeholder="listQuery[item.depMc] ? listQuery[item.depMc] : '请选择'" />
|
:multiple="item.multiple" v-model="listQuery[item.prop]" :placeholder="listQuery[item.depMc] ? listQuery[item.depMc] : '请选择'" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<!-- 上传 upload -->
|
<!-- 上传 upload -->
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<ChooseMarks v-model="chooseMarksVisible" @choosed="choosed" :roleIds="roleIds" />
|
<ChooseMarks v-model="chooseMarksVisible" @choosed="choosed" :roleIds="roleIds" />
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
303
src/components/flowPath/ApprovalEcho.vue
Normal file
303
src/components/flowPath/ApprovalEcho.vue
Normal file
@ -0,0 +1,303 @@
|
|||||||
|
<template>
|
||||||
|
<div class="smallTitle">审批信息</div>
|
||||||
|
<div class="ww100">
|
||||||
|
<el-steps :active="0" space="500" finish-status="success" direction="vertical" status=''>
|
||||||
|
<el-step :title="item.eventType == '0' ? '发起申请' : item.eventType == '1' ? '审批结束' : item.nodeName"
|
||||||
|
v-for="(item, index) in workflow" :key="index">
|
||||||
|
<template #description>
|
||||||
|
<div class="ww100 mt10 mb20 nodeBox" v-if="item.eventType == '0'||item.eventType == '1'">
|
||||||
|
<div class="nodeorgNameTg">{{ item.xtLrrbm }}</div>
|
||||||
|
<div class="flex just-between nameTag">
|
||||||
|
<div>{{ item.log.userName }}</div>
|
||||||
|
<div class="fontColor">{{ item.eventType == '0' ? '发起' : '结束' }}</div>
|
||||||
|
</div>
|
||||||
|
<div>{{ item.log.xtLrsj }}</div>
|
||||||
|
</div>
|
||||||
|
<div v-else class="ww100 mt10 mb20 nodeBox">
|
||||||
|
<div :class="item.taskStatus=='2'?'nodeorgNameTg':'nodeorgNameDd'">{{ item.orgNameData.orgname }}</div>
|
||||||
|
<div v-for="(items, indexs) in item.log" :key="indexs">
|
||||||
|
<div class="flex just-between nameTag" >
|
||||||
|
<div>{{ items.userName }}</div>
|
||||||
|
<div :class="item.taskStatus=='2'?'fontColor':'fontColorDd'">审批中</div>
|
||||||
|
</div>
|
||||||
|
<div>{{ items.xtLrsj }}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-step>
|
||||||
|
|
||||||
|
</el-steps>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import { queryProcessNode, queryProcessNodeLog, queryProcess } from '@/api/spl'
|
||||||
|
const workflow = ref()
|
||||||
|
const getWorkflow = async (id) => {
|
||||||
|
const promes = {
|
||||||
|
processId: id
|
||||||
|
}
|
||||||
|
const process = await queryProcess(promes)
|
||||||
|
const proNode = await queryProcessNode(promes)
|
||||||
|
const proNodeLog = await queryProcessNodeLog(promes)
|
||||||
|
const sortedNodes = sortNodesWithNoPreviousFirst(proNode.rows)
|
||||||
|
|
||||||
|
|
||||||
|
workflow.value = sortedNodes.map(item => {
|
||||||
|
const log = proNodeLog.rows.filter(items => item.nodeId == items.nodeId)
|
||||||
|
if (item.eventType == '0') {
|
||||||
|
console.log(item);
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
log: {
|
||||||
|
// userData: JSON.parse(item.userData),
|
||||||
|
// xtLrrbm:process.rows[0].xtLrrbm,
|
||||||
|
userName: process.rows[0].userName,
|
||||||
|
xtLrsj: process.rows[0].xtLrsj,
|
||||||
|
processStatus: process.rows[0].processStatus,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
orgNameData: JSON.parse(log[0].userData),
|
||||||
|
log: log
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
function sortProcessNodes(nodes) {
|
||||||
|
// 1. 创建节点映射表和子节点关系图
|
||||||
|
const nodeMap = {};
|
||||||
|
const childrenMap = {}; // 存储每个节点的子节点
|
||||||
|
|
||||||
|
// 初始化
|
||||||
|
nodes.forEach(node => {
|
||||||
|
nodeMap[node.nodeId] = node;
|
||||||
|
childrenMap[node.nodeId] = [];
|
||||||
|
});
|
||||||
|
|
||||||
|
// 2. 构建子节点关系
|
||||||
|
nodes.forEach(node => {
|
||||||
|
if (node.prevPNodeId && nodeMap[node.prevPNodeId]) {
|
||||||
|
childrenMap[node.prevPNodeId].push(node.nodeId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 3. 找到所有开始节点(没有prevPNodeId或prevPNodeId不在节点列表中的节点)
|
||||||
|
const startNodes = nodes.filter(node =>
|
||||||
|
!node.prevPNodeId || !nodeMap[node.prevPNodeId]
|
||||||
|
);
|
||||||
|
|
||||||
|
// 4. 深度优先遍历生成排序列表
|
||||||
|
const sortedNodes = [];
|
||||||
|
const visited = new Set();
|
||||||
|
|
||||||
|
function traverse(nodeId) {
|
||||||
|
if (visited.has(nodeId)) return;
|
||||||
|
visited.add(nodeId);
|
||||||
|
|
||||||
|
// 添加当前节点
|
||||||
|
sortedNodes.push(nodeMap[nodeId]);
|
||||||
|
|
||||||
|
// 获取所有子节点(相同prevPNodeId的节点)
|
||||||
|
const children = childrenMap[nodeId];
|
||||||
|
|
||||||
|
// 对子节点按某种规则排序(如按创建时间)
|
||||||
|
const sortedChildren = [...children].sort((a, b) => {
|
||||||
|
return new Date(nodeMap[a].xtLrsj) - new Date(nodeMap[b].xtLrsj);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 递归处理每个子节点
|
||||||
|
sortedChildren.forEach(childId => {
|
||||||
|
traverse(childId);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 从每个开始节点开始遍历
|
||||||
|
startNodes.forEach(node => {
|
||||||
|
traverse(node.nodeId);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 5. 处理可能的孤立节点(不应该存在,但作为保护)
|
||||||
|
nodes.forEach(node => {
|
||||||
|
if (!visited.has(node.nodeId)) {
|
||||||
|
sortedNodes.push(node);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return sortedNodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
function sortNodesWithNoPreviousFirst(nodes) {
|
||||||
|
if (!Array.isArray(nodes)) {
|
||||||
|
console.error('参数必须是一个数组');
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
if (nodes.length === 0) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1. 创建节点ID到节点的映射表,用于快速查找
|
||||||
|
const nodeMap = nodes.reduce((map, node) => {
|
||||||
|
if (node && node.nodeId) {
|
||||||
|
map[node.nodeId] = node;
|
||||||
|
}
|
||||||
|
console.log(node,"xxxxxx");
|
||||||
|
|
||||||
|
return map;
|
||||||
|
}, {});
|
||||||
|
console.log(nodeMap);
|
||||||
|
// 2. 分离节点:没有前驱的节点和有前驱的节点
|
||||||
|
const result = nodes.reduce((acc, node) => {
|
||||||
|
// 检查是否为有效节点
|
||||||
|
if (!node || !node.nodeId) {
|
||||||
|
console.warn('发现无效节点,将被忽略:', node);
|
||||||
|
return acc;
|
||||||
|
}
|
||||||
|
// 判断是否没有前驱节点
|
||||||
|
const hasNoPrevious = !node.prevPNodeId && !nodeMap[node.prevPNodeId];
|
||||||
|
|
||||||
|
if (hasNoPrevious) {
|
||||||
|
acc.noPrevious.push(node);
|
||||||
|
} else {
|
||||||
|
acc.hasPrevious.push(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
return acc;
|
||||||
|
}, { noPrevious: [], hasPrevious: [] });
|
||||||
|
|
||||||
|
// 3. 合并结果:没有前驱的节点在前,有前驱的节点在后
|
||||||
|
console.log(result.noPrevious);
|
||||||
|
console.log(result.hasPrevious);
|
||||||
|
return [...result.noPrevious, ...result.hasPrevious];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
getWorkflow
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "~@/assets/css/layout.scss";
|
||||||
|
@import "~@/assets/css/element-plus.scss";
|
||||||
|
|
||||||
|
.smallTitle {
|
||||||
|
width: 100%;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 50px;
|
||||||
|
font-weight: 550;
|
||||||
|
color: #606266;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapSearch {
|
||||||
|
left: 10px;
|
||||||
|
top: 10px;
|
||||||
|
z-index: 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialog {
|
||||||
|
::v-deep .el-form-item--default {
|
||||||
|
margin: 0 1% 0 0 !important;
|
||||||
|
padding-bottom: 0 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .avatar-uploader {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-upload--picture-card i {
|
||||||
|
width: 156px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.depBox {
|
||||||
|
border: 1px solid #e9e9e9;
|
||||||
|
width: 305px;
|
||||||
|
padding: 0 0 0 4px;
|
||||||
|
border-radius: 4px;
|
||||||
|
|
||||||
|
::v-deep .el-input__inner {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-cascader .el-input.is-focus .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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 使用深度选择器覆盖子组件样式 */
|
||||||
|
::v-deep .el-step.is-vertical .el-step__title {
|
||||||
|
color: #000000 !important;
|
||||||
|
border-color: #000000 !important;
|
||||||
|
}
|
||||||
|
::v-deep .el-step__description{
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
::v-deep .el-step__description.is-wait {
|
||||||
|
|
||||||
|
color: #000000 !important;
|
||||||
|
border-color: #000000 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-step__title.is-wait {
|
||||||
|
color: #000000 !important;
|
||||||
|
border-color: #000000 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-step__head.is-wait {
|
||||||
|
color: #000000 !important;
|
||||||
|
border-color: #000000 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-step__line {
|
||||||
|
background-color: #000000 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nodeBox {
|
||||||
|
width: 80%;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 30px;
|
||||||
|
border-radius: 10px;
|
||||||
|
overflow: hidden;
|
||||||
|
background-color: aliceblue;
|
||||||
|
|
||||||
|
.nodeorgNameTg {
|
||||||
|
background-color: #1abe20;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nameTag {
|
||||||
|
line-height: 30px;
|
||||||
|
padding: 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nodeorgNameDd {
|
||||||
|
background-color: #18a2dd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fontColor {
|
||||||
|
color: #1abe20;
|
||||||
|
} .fontColorDd {
|
||||||
|
color: #18a2dd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
316
src/components/flowPath/SelectingPeople.vue
Normal file
316
src/components/flowPath/SelectingPeople.vue
Normal file
@ -0,0 +1,316 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog class="dialog-container" :model-value="modelValue" :title="titles" :before-close="handleClose">
|
||||||
|
<div class="dialog-header">
|
||||||
|
<div class="flex align-center">下一节点:
|
||||||
|
<el-checkbox v-model="showNode" :label="modelData.nodeName" size="large" />
|
||||||
|
</div>
|
||||||
|
<div> <el-button type="success" :icon="Plus" @click="newAdditions" /></div>
|
||||||
|
</div>
|
||||||
|
<div class="container-box">
|
||||||
|
<div v-if="showNode">
|
||||||
|
<el-divider content-position="left">节点</el-divider>
|
||||||
|
<div>
|
||||||
|
<div class="row" v-for="(item, index) in nodeData" :key="index">
|
||||||
|
<MOSTY.Department filterable v-model="item.deptId" width="100%"
|
||||||
|
@getDepValue="(obj) => changePostList(index, obj)" clearable placeholder="请选择所属部门" />
|
||||||
|
<el-select class="select-user" v-model="item.userId" filterable placeholder="选择审批人"
|
||||||
|
@change="changeUser(index)">
|
||||||
|
<el-option v-for="item in item.listData" :key="item.id" :label="item.userName" :value="item.id" />
|
||||||
|
</el-select>
|
||||||
|
<div>
|
||||||
|
<el-button type="danger" @click="newDelitions(index)">删除</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button @click="close">取消</el-button>
|
||||||
|
<el-button type="primary" @click="qcckPostList">
|
||||||
|
确认
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
</script>
|
||||||
|
<script setup>
|
||||||
|
import { ref, getCurrentInstance, reactive, watch } from 'vue'
|
||||||
|
import { qcckGet, qcckPost } from '@/api/qcckApi'
|
||||||
|
import { splGet, splPost, submitProcess } from '@/api/spl'
|
||||||
|
import { getItem } from '@/utils/storage'
|
||||||
|
import { Plus } from '@element-plus/icons-vue'
|
||||||
|
import * as MOSTY from "@/components/MyComponents/index";
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue: {
|
||||||
|
type: Boolean,
|
||||||
|
required: true
|
||||||
|
}, title: {
|
||||||
|
type: String,
|
||||||
|
default: '发起流程'
|
||||||
|
},
|
||||||
|
createProcess: {
|
||||||
|
type: Object,
|
||||||
|
default: () => { }
|
||||||
|
}, radioData: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
}, path: {
|
||||||
|
type: Object,
|
||||||
|
default: {
|
||||||
|
byMeansOf: '',
|
||||||
|
nobyMeansOf: '',
|
||||||
|
clueVerification: "",
|
||||||
|
recycle: ""
|
||||||
|
}
|
||||||
|
}, userData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {
|
||||||
|
ajmc: "",
|
||||||
|
flowType: ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const emit = defineEmits(['update:modelValue', 'close', 'getList'])
|
||||||
|
const titles = ref(props.title)
|
||||||
|
const showNode = ref(true)
|
||||||
|
const InterfaceAddress = 'http://155.2422.30:2109/mosty-api/mosty-gsxt/'
|
||||||
|
|
||||||
|
// 新增
|
||||||
|
const nodeData = ref([
|
||||||
|
{
|
||||||
|
deptId: '',
|
||||||
|
userId: '',
|
||||||
|
userData: {},
|
||||||
|
orgData: {},
|
||||||
|
}
|
||||||
|
])
|
||||||
|
//新增表单
|
||||||
|
const newAdditions = () => {
|
||||||
|
nodeData.value.push({
|
||||||
|
deptId: '',
|
||||||
|
userId: '',
|
||||||
|
userData: {},
|
||||||
|
orgData: {},
|
||||||
|
listData: []
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 删除表单
|
||||||
|
const newDelitions = (item) => {
|
||||||
|
nodeData.value.splice(item, 1)
|
||||||
|
}
|
||||||
|
const chageIndex = ref(0)
|
||||||
|
// 选取角色
|
||||||
|
const changeUser = (index) => {
|
||||||
|
chageIndex.value = index
|
||||||
|
let obj = nodeData.value[index].listData.find(item => { return item.id == nodeData.value[index].userId })
|
||||||
|
nodeData.value[index].userData = {
|
||||||
|
userId: obj.userId,
|
||||||
|
userName: obj.userName,
|
||||||
|
sfzh: obj.idEntityCard,
|
||||||
|
userData: {
|
||||||
|
// id: '41fbffaf92a34b31bde6302004277486',
|
||||||
|
// orgid: '41fbffaf92a34b31bde6302004277486',
|
||||||
|
id: orgId.value,
|
||||||
|
orgid: orgId.value,
|
||||||
|
orgcode: obj.deptCode,
|
||||||
|
orgname: obj.deptName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//选取部门
|
||||||
|
const orgId=ref()
|
||||||
|
const changePostList = (index, e) => {
|
||||||
|
orgId.value=e.fzOrgId
|
||||||
|
chageIndex.value = index
|
||||||
|
nodeData.value[chageIndex.value].id = orgId.value
|
||||||
|
nodeData.value[chageIndex.value].orgData = {
|
||||||
|
id:orgId.value,
|
||||||
|
orgid:orgId.value,
|
||||||
|
// id: '41fbffaf92a34b31bde6302004277486',
|
||||||
|
// orgid: '41fbffaf92a34b31bde6302004277486',
|
||||||
|
orgcode: e.orgCode,
|
||||||
|
orgname: e.orgName
|
||||||
|
}
|
||||||
|
getUser()
|
||||||
|
}
|
||||||
|
// 提交
|
||||||
|
const qcckPostList = async () => {
|
||||||
|
const deptId = getItem('deptId')
|
||||||
|
let users = nodeData.value.map(item => {
|
||||||
|
return {
|
||||||
|
userId: item.userData.userId,
|
||||||
|
// userId: '540422200010197495',
|
||||||
|
userName: item.userData.userName,
|
||||||
|
userData: JSON.stringify(item.userData.userData)
|
||||||
|
// ...item.userData
|
||||||
|
}
|
||||||
|
})
|
||||||
|
let userData = {
|
||||||
|
id:deptId[0].fzOrgId,
|
||||||
|
orgid:deptId[0].fzOrgId,
|
||||||
|
// id: '41fbffaf92a34b31bde6302004277486',
|
||||||
|
// orgid: '41fbffaf92a34b31bde6302004277486',
|
||||||
|
orgcode: deptId[0].deptCode,
|
||||||
|
orgname: deptId[0].deptName,
|
||||||
|
}
|
||||||
|
const promes = {
|
||||||
|
...props.createProcess,
|
||||||
|
// processData: { ...props.createProcess.processData.sqrw, orgNameData: userData },
|
||||||
|
flowType: "ZyCompany",
|
||||||
|
iframe: `${props.path.clueVerification}?id=${props.createProcess.processData.rwbh}`,
|
||||||
|
callback: {
|
||||||
|
"START": "",//流程开始
|
||||||
|
"APPROVE": "",//节点审批通过
|
||||||
|
"BACK": "",//退回上一节点
|
||||||
|
"REVOKE": "",//撤回审批
|
||||||
|
"DONE": `${InterfaceAddress}${props.path.byMeansOf}?id=${props.createProcess.rwbh}&bkZt=05`,//流程审批通过
|
||||||
|
"ABORT": `${InterfaceAddress}${props.path.nobyMeansOf}?id=${props.createProcess.rwbh}&bkZt=06`,//审批不通过
|
||||||
|
"RECOVER": "",//流程回收
|
||||||
|
"AGAIN": `${InterfaceAddress}${props.path.recycle}?id=${props.createProcess.rwbh}&bkZt=07`//流程退回初始
|
||||||
|
|
||||||
|
},
|
||||||
|
decision: JSON.stringify({
|
||||||
|
[modelData.value.nodeId]: {
|
||||||
|
users: users,
|
||||||
|
services: [],
|
||||||
|
events: [],
|
||||||
|
userData: JSON.stringify(userData)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
promes.processData = JSON.stringify(promes.processData)
|
||||||
|
promes.callback = JSON.stringify(promes.callback)
|
||||||
|
console.log(promes);
|
||||||
|
|
||||||
|
await submitProcess({ ...promes }).then(res => {
|
||||||
|
proxy.$message({ type: "success", message: "提交审批成功" });
|
||||||
|
sendMessage(res.rows[0])
|
||||||
|
})
|
||||||
|
await emit('getList')
|
||||||
|
emit('close')
|
||||||
|
close()
|
||||||
|
}
|
||||||
|
//获取角色
|
||||||
|
const getUser = () => {
|
||||||
|
const promes = {
|
||||||
|
size: 200, current: 1,
|
||||||
|
deptId: nodeData.value[chageIndex.value].id
|
||||||
|
}
|
||||||
|
qcckGet(promes, '/mosty-base/sysUser/selectPage').then(res => {
|
||||||
|
nodeData.value[chageIndex.value].listData = res.records
|
||||||
|
})
|
||||||
|
}
|
||||||
|
//查询模板
|
||||||
|
const modelData = ref({})
|
||||||
|
const modelMsg = ref()
|
||||||
|
const queryModel = async () => {
|
||||||
|
const prrmes = {
|
||||||
|
modelId: props.radioData,
|
||||||
|
modelStatus: 1
|
||||||
|
}
|
||||||
|
const res = await splPost(prrmes, '/model/queryModel')
|
||||||
|
const versionRes = await splPost({ modelVersionId: res.rows[0].currentVersionId }, '/modelVersion/queryModelVersion')
|
||||||
|
modelMsg.value = versionRes.rows[0]
|
||||||
|
const nodeRes = await splPost({ modelVersionId: res.rows[0].currentVersionId }, '/modelVersion/queryModelNode')
|
||||||
|
if (versionRes.rows.length > 0) {
|
||||||
|
modelData.value = nodeRes.rows.filter(item => item.nodeType == '1')[0]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//发消息
|
||||||
|
const sendMessage = (gzlid) => {
|
||||||
|
const bkshrSfzh = nodeData.value.map(item => {
|
||||||
|
return {
|
||||||
|
bkshrXm: item.userData.userName,
|
||||||
|
bkshrSfzh: item.userData.sfzh,
|
||||||
|
bkshrSsbmmc: item.userData.userData.orgname,
|
||||||
|
bkshrSsbmdm: item.userData.userData.orgcode,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const promes = {
|
||||||
|
xxly: '005',
|
||||||
|
gzlid: gzlid,
|
||||||
|
list: bkshrSfzh,
|
||||||
|
versionId: modelMsg.value.modelVersionId,
|
||||||
|
id: props.createProcess.processData.rwbh
|
||||||
|
}
|
||||||
|
switch (props.userData.flowType) {
|
||||||
|
case 'BKSP':
|
||||||
|
qcckPost(promes, '/mosty-gsxt/tbGsxtBk/updateBkgzl').then(res => {
|
||||||
|
console.log(res);
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
case 'ZDRYSDFJDP':
|
||||||
|
|
||||||
|
qcckPost(promes, '/mosty-gsxt/tbGsxtRqfjRy/updateBkgzl').then(res => {
|
||||||
|
console.log(res);
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
case 'XSSJCJSP':
|
||||||
|
qcckPost(promes, '/mosty-gsxt/qbcj/updateBkgzl').then(res => {
|
||||||
|
console.log(res);
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
watch(() => props.modelValue, (val) => {
|
||||||
|
if (val) {
|
||||||
|
queryModel()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const close = () => {
|
||||||
|
nodeData.value = [
|
||||||
|
{
|
||||||
|
deptId: '',
|
||||||
|
userId: '',
|
||||||
|
userData: {},
|
||||||
|
orgData: {},
|
||||||
|
}
|
||||||
|
]
|
||||||
|
emit('update:modelValue', false)
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "@/assets/css/homeScreen.scss";
|
||||||
|
|
||||||
|
::v-deep .el-dialog__body {
|
||||||
|
padding-top: 0 !important;
|
||||||
|
padding-bottom: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.dialog-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container-box {
|
||||||
|
height: 300px;
|
||||||
|
overflow: auto;
|
||||||
|
|
||||||
|
.row {
|
||||||
|
margin-top: 10px;
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
margin-right: 10px;
|
||||||
|
|
||||||
|
.select-user {
|
||||||
|
margin: 0 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
143
src/components/flowPath/submissionProcess.vue
Normal file
143
src/components/flowPath/submissionProcess.vue
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog class="dialog-container" :model-value="modelValue" :title="title" :before-close="close">
|
||||||
|
<div style="height: 300px;overflow: auto" v-infinite-scroll="load">
|
||||||
|
<el-radio-group v-model="radio" @change="changeRadio" v-if="lyquery.rows.length > 0">
|
||||||
|
<el-radio :label="item.modelId" v-for="(item) in lyquery.rows" :key="item.id">
|
||||||
|
{{ item.modelName }}
|
||||||
|
</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
<div class="ww100 flex just-center">
|
||||||
|
<MOSTY.Empty :show="lyquery.rows.length == 0"></MOSTY.Empty>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button @click="close">取消</el-button>
|
||||||
|
<el-button type="primary" @click="onComfirm">
|
||||||
|
确认
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
<SelectingPeople v-model="showDialog"
|
||||||
|
:createProcess="createProcess" @close="close" :radioData="radioData" :path="path" @getList="emit('getList')" :userData="userData"/>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, getCurrentInstance, reactive, watch } from 'vue'
|
||||||
|
import SelectingPeople from './SelectingPeople.vue';
|
||||||
|
import * as MOSTY from "@/components/MyComponents/index";
|
||||||
|
import { splGet, splPost } from '@/api/spl'
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue: {
|
||||||
|
type: Boolean,
|
||||||
|
required: true
|
||||||
|
}, title: {
|
||||||
|
type: String,
|
||||||
|
default: '发起流程'
|
||||||
|
}, data: {
|
||||||
|
type: Object,
|
||||||
|
default: () => { }
|
||||||
|
}, userData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {
|
||||||
|
ajmc: "",
|
||||||
|
flowType: ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, path: {
|
||||||
|
type: Object,
|
||||||
|
default: {}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const showDialog = ref(false)
|
||||||
|
const emit = defineEmits(['update:modelValue','getList'])
|
||||||
|
const titles = ref(props.title)
|
||||||
|
const lyquery = reactive({
|
||||||
|
rows: [],
|
||||||
|
total: 0,
|
||||||
|
promes: {
|
||||||
|
page: 1,
|
||||||
|
rows: 100,
|
||||||
|
modelName:props.userData.modelName
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
const radio = ref(3)
|
||||||
|
|
||||||
|
const qcckGetList = () => {
|
||||||
|
const prrmes = {
|
||||||
|
...lyquery.promes
|
||||||
|
}
|
||||||
|
splGet(prrmes, '/model/queryModel').then(res => {
|
||||||
|
lyquery.rows = lyquery.promes.page == 1 ? res.rows : lyquery.rows.concat(res.rows)
|
||||||
|
lyquery.total = res.total
|
||||||
|
})
|
||||||
|
}
|
||||||
|
watch(() => props.modelValue, (newVal) => {
|
||||||
|
if (newVal) {
|
||||||
|
qcckGetList()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const createProcess = ref({})
|
||||||
|
const radioData = ref('')
|
||||||
|
const changeRadio = (e) => {
|
||||||
|
radioData.value = e
|
||||||
|
const item = lyquery.rows.find(item => item.modelId == e)
|
||||||
|
if (item) {
|
||||||
|
createProcess.value = {
|
||||||
|
modelId: e,
|
||||||
|
processName: item.modelName ? item.modelName : '',
|
||||||
|
processType:1,
|
||||||
|
processData:
|
||||||
|
{
|
||||||
|
iframe: `${props.path.clueVerification}?id=${props.data.id}`,
|
||||||
|
hostPrefix: "sgxtPath",
|
||||||
|
rwbh: props.data.id,
|
||||||
|
flowType: 'SGSP',
|
||||||
|
sqrw: props.data,
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const onComfirm = () => {
|
||||||
|
showDialog.value = true
|
||||||
|
}
|
||||||
|
const load = () => {
|
||||||
|
if (lyquery.total == lyquery.rows.length) {
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
lyquery.promes.page++
|
||||||
|
qcckGetList()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const close = () => {
|
||||||
|
radio.value=''
|
||||||
|
emit('update:modelValue', false)
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "@/assets/css/homeScreen.scss";
|
||||||
|
|
||||||
|
::v-deep .el-dialog__body {
|
||||||
|
padding-top: 0 !important;
|
||||||
|
padding-bottom: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialog-container {
|
||||||
|
height: 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-radio__label {
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
</style>
|
153
src/components/instructionHasBeen/sendFqzl.vue
Normal file
153
src/components/instructionHasBeen/sendFqzl.vue
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
<template>
|
||||||
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="100px" ref="elform" :rules="rules">
|
||||||
|
<template #zrSsbmdm>
|
||||||
|
<MOSTY.Department filterable v-model="listQuery.zrSsbmdm" width="100%" @getDepValue="getDepValue" clearable
|
||||||
|
placeholder="请选择所属部门" :multiple="true" />
|
||||||
|
</template>
|
||||||
|
<template #ry>
|
||||||
|
<el-input readonly v-model="listQuery.ry" @click="chooseUserVisible = true" placeholder="请选择民警"></el-input>
|
||||||
|
</template>
|
||||||
|
</FormMessage>
|
||||||
|
<ChooseUser v-model="chooseUserVisible" @choosedUsers="handleUserSelected" :roleIds="roleIds" :Single="false" />
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { reactive, ref, onMounted, watch } from "vue";
|
||||||
|
import { sendFqzl, ZdrfjSendFqzl ,qbcjSendFqzl} from '@/api/commit'
|
||||||
|
import { getItem } from '@/utils/storage'
|
||||||
|
import * as MOSTY from "@/components/MyComponents/index";
|
||||||
|
import ChooseUser from "@/components/ChooseList/ChooseUser/index.vue"
|
||||||
|
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
const props = defineProps({
|
||||||
|
itemData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => { }
|
||||||
|
}, identification: {
|
||||||
|
type: String,
|
||||||
|
default: ""
|
||||||
|
}, tacitly: {
|
||||||
|
type: Object,
|
||||||
|
default: () => { }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
})
|
||||||
|
const emit = defineEmits(['handleClose'])
|
||||||
|
|
||||||
|
// 表单数据
|
||||||
|
const listQuery = ref({}); //表单
|
||||||
|
// 选择人员
|
||||||
|
const ryStr = ref('')
|
||||||
|
const elform = ref()
|
||||||
|
const personnelEntity = ref()
|
||||||
|
const formData = ref([
|
||||||
|
{ label: "标题", prop: "title", type: "input", width: "40%" },
|
||||||
|
{ label: "接收单位", prop: "zrSsbmdm", type: "slot", width: "40%" },
|
||||||
|
{ label: "指令状态", prop: "status", type: "input", width: "40%" },
|
||||||
|
{ label: "人员选择", prop: "ry", type: "slot", width: "40%" },
|
||||||
|
{ label: "附件", prop: "attachmentPath", type: "upload" },
|
||||||
|
{ label: "指令内容", prop: "instructionContent", type: "textarea", width: "100%" },
|
||||||
|
|
||||||
|
])
|
||||||
|
const rules = reactive({
|
||||||
|
title: [{ required: true, message: "请输入指令标题", trigger: "blur" }],
|
||||||
|
zrSsbmdm: [{ required: true, message: "请选择接收单位", trigger: "blur" }],
|
||||||
|
instructionContent: [{ required: true, message: "请输入指令内容", trigger: "blur" }],
|
||||||
|
ry: [{ required: true, message: "请选择人员", trigger: "blur" }]
|
||||||
|
});
|
||||||
|
const deptId = getItem('deptId')
|
||||||
|
const getsendFqzl = () => {
|
||||||
|
elform.value.submit(async (val) => {
|
||||||
|
if (val) {
|
||||||
|
const data = { ...listQuery.value }
|
||||||
|
delete data.ry
|
||||||
|
const promes = {
|
||||||
|
instructionsEntity: {
|
||||||
|
unitCode: deptId[0].deptCode,
|
||||||
|
unitName: deptId[0].deptName,
|
||||||
|
...data,
|
||||||
|
receivingUnitCode: listQuery.value.zrSsbmdm.toString(),
|
||||||
|
receivingUnit: listQuery.value.receivingUnit.toString(),
|
||||||
|
attachmentPath: JSON.stringify(listQuery.value.attachmentPath)
|
||||||
|
}, id: props.itemData.id,
|
||||||
|
personnelEntity: personnelEntity.value
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
let res
|
||||||
|
switch (props.identification) {
|
||||||
|
case 'yj':
|
||||||
|
res = await sendFqzl(promes)
|
||||||
|
break;
|
||||||
|
case 'zdrfj':
|
||||||
|
res = await ZdrfjSendFqzl(promes)
|
||||||
|
break;
|
||||||
|
case 'qbcj':
|
||||||
|
res = await qbcjSendFqzl(promes)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
const str = JSON.parse(res)
|
||||||
|
if (str.code == 200) {
|
||||||
|
ElMessage.success('发送成功')
|
||||||
|
listQuery.value = {}
|
||||||
|
listQuery.value.attachmentPath = ''
|
||||||
|
emit('handleClose')
|
||||||
|
} else {
|
||||||
|
ElMessage.error(str.msg)
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
console.log(props.itemData);
|
||||||
|
|
||||||
|
watch(() => props.itemData, (val) => {
|
||||||
|
listQuery.value.title = val[props.tacitly['title']]
|
||||||
|
if (props.tacitly['instructionContent']) {
|
||||||
|
listQuery.value.instructionContent = val[props.tacitly['instructionContent']]
|
||||||
|
}
|
||||||
|
}, { deep: true, immediate: true })
|
||||||
|
const chooseUserVisible = ref(false)
|
||||||
|
const roleIds = ref([])
|
||||||
|
// 选取角色
|
||||||
|
const handleUserSelected = (val) => {
|
||||||
|
personnelEntity.value = val.map((item, index) => {
|
||||||
|
return {
|
||||||
|
name: item.userName,
|
||||||
|
idNumber: item.idEntityCard,
|
||||||
|
phoneNumber: item.mobile,
|
||||||
|
personTypeId: "",
|
||||||
|
personTypeName: "",
|
||||||
|
domicilePlace: "",
|
||||||
|
orderId: index + 1
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// ryStr.value
|
||||||
|
listQuery.value.ry = personnelEntity.value.map(item => item.name)
|
||||||
|
}
|
||||||
|
// 选取部门
|
||||||
|
const getDepValue = (e) => {
|
||||||
|
listQuery.value.receivingUnit = e.map(item => item.orgName)
|
||||||
|
}
|
||||||
|
const close = () => {
|
||||||
|
listQuery.value = {}
|
||||||
|
listQuery.value.attachmentPath = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
getsendFqzl,
|
||||||
|
close
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
@ -52,6 +52,7 @@ import mitt from "mitt";
|
|||||||
import { resetForm } from "@/utils/validate";
|
import { resetForm } from "@/utils/validate";
|
||||||
import { getDict, setCascader } from '@/utils/dict';
|
import { getDict, setCascader } from '@/utils/dict';
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
|
import fzui from 'fzui-fengqun-vue'
|
||||||
|
|
||||||
//挂载全局方法
|
//挂载全局方法
|
||||||
app.config.globalProperties.resetForm = resetForm;
|
app.config.globalProperties.resetForm = resetForm;
|
||||||
@ -65,4 +66,12 @@ installElementPlus(app);
|
|||||||
installIcons(app);
|
installIcons(app);
|
||||||
installFilter(app);
|
installFilter(app);
|
||||||
installDirective(app);
|
installDirective(app);
|
||||||
|
app.use(fzui, {
|
||||||
|
getOwnHostLabel: () => {
|
||||||
|
return '/fd_api';
|
||||||
|
},
|
||||||
|
translateHostLabel: () => {
|
||||||
|
return '/fd_api';
|
||||||
|
}
|
||||||
|
})
|
||||||
app.use(store).use(ELMessage).use(router).use(plugins).mount("#app");
|
app.use(store).use(ELMessage).use(router).use(plugins).mount("#app");
|
||||||
|
@ -16,6 +16,13 @@ import store from "@/store";
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
export const privateRoutes = [
|
export const privateRoutes = [
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 公开路由表
|
||||||
|
*/
|
||||||
|
export const publicRoutes = [
|
||||||
{
|
{
|
||||||
path: "/systemConfig",
|
path: "/systemConfig",
|
||||||
component: layout,
|
component: layout,
|
||||||
@ -124,13 +131,7 @@ export const privateRoutes = [
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 公开路由表
|
|
||||||
*/
|
|
||||||
export const publicRoutes = [
|
|
||||||
{
|
{
|
||||||
path: "/login",
|
path: "/login",
|
||||||
name: "login",
|
name: "login",
|
||||||
@ -146,6 +147,24 @@ export const publicRoutes = [
|
|||||||
name: "KeyPopulations",
|
name: "KeyPopulations",
|
||||||
component: () => import("@/views/KeyPopulations/index") //系统登录
|
component: () => import("@/views/KeyPopulations/index") //系统登录
|
||||||
},
|
},
|
||||||
|
// 布控审核信息
|
||||||
|
{
|
||||||
|
path: "/deploymentApproval",
|
||||||
|
name: "deploymentApproval",
|
||||||
|
component: () => import("@/views/backOfficeSystem/ApprovalInformation/deploycontrol/deploymentApproval.vue"),
|
||||||
|
},
|
||||||
|
// 线索
|
||||||
|
{
|
||||||
|
path: "/clueVerification",
|
||||||
|
name: "clueVerification",
|
||||||
|
component: () => import("@/views/backOfficeSystem/ApprovalInformation/Clue/index.vue"),
|
||||||
|
},
|
||||||
|
// 重点人发掘
|
||||||
|
{
|
||||||
|
path: "/focusExploration",
|
||||||
|
name: "focusExploration",
|
||||||
|
component: () => import("@/views/backOfficeSystem/ApprovalInformation/FocusExploration/index.vue"),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: "/editPassword", // 注意:带有路径“/”的记录中的组件“默认”是一个不返回 Promise 的函数
|
path: "/editPassword", // 注意:带有路径“/”的记录中的组件“默认”是一个不返回 Promise 的函数
|
||||||
component: layout,
|
component: layout,
|
||||||
@ -365,7 +384,7 @@ export const publicRoutes = [
|
|||||||
"@/views/backOfficeSystem/HumanIntelligence/TaskScheduling/index"
|
"@/views/backOfficeSystem/HumanIntelligence/TaskScheduling/index"
|
||||||
),
|
),
|
||||||
meta: {
|
meta: {
|
||||||
title: "人力情报信息搜索任务调度",
|
title: "人力情报信息收集任务调度",
|
||||||
icon: "article"
|
icon: "article"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -390,15 +409,15 @@ export const publicRoutes = [
|
|||||||
icon: "article"
|
icon: "article"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// {
|
{
|
||||||
// path: "/MakeAcomment",
|
path: "/MakeAcomment",
|
||||||
// name: "MakeAcomment",
|
name: "MakeAcomment",
|
||||||
// component: () => import("@/views/backOfficeSystem/MakeAcomment/index"),
|
component: () => import("@/views/backOfficeSystem/MakeAcomment/index"),
|
||||||
// meta: {
|
meta: {
|
||||||
// title: "情报评一评",
|
title: "情报评一评",
|
||||||
// icon: "article"
|
icon: "article"
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -47,7 +47,7 @@ export default {
|
|||||||
* js 指定删除数组(树结构数据)
|
* js 指定删除数组(树结构数据)
|
||||||
*/
|
*/
|
||||||
//测试比对
|
//测试比对
|
||||||
routes = filter(privateRoutes, menus)
|
// routes = filter(privateRoutes, menus)
|
||||||
// 最后添加 不匹配路由进入 404
|
// 最后添加 不匹配路由进入 404
|
||||||
routes.push({
|
routes.push({
|
||||||
path: '/:catchAll(.*)',
|
path: '/:catchAll(.*)',
|
||||||
|
@ -87,10 +87,12 @@ export default {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
login({ userName, password: Base64.encode(password), kaptcha }).then((data) => {
|
login({ userName, password: Base64.encode(password), kaptcha }).then((data) => {
|
||||||
if (data.deptList.length === 1) {
|
if (data.deptList.length === 1) {
|
||||||
|
|
||||||
this.commit("user/setToken", data.jwtToken);
|
this.commit("user/setToken", data.jwtToken);
|
||||||
this.commit("user/setDeptId", data.deptList);
|
this.commit("user/setDeptId", data.deptList);
|
||||||
this.commit("user/setUserName", data.userName);
|
this.commit("user/setUserName", data.userName);
|
||||||
setItem('isOatuh', 0)
|
setItem('isOatuh', 0)
|
||||||
|
setItem('fzUserId', data.fzUserId)
|
||||||
setItem("USERNAME", data.userName);
|
setItem("USERNAME", data.userName);
|
||||||
setItem("roleList", data.sysRole ? data.sysRole : []);
|
setItem("roleList", data.sysRole ? data.sysRole : []);
|
||||||
setItem("SFRH", data.sfrh);
|
setItem("SFRH", data.sfrh);
|
||||||
@ -127,9 +129,11 @@ export default {
|
|||||||
unifiedLogin({ token, systemId, }).then((data) => {
|
unifiedLogin({ token, systemId, }).then((data) => {
|
||||||
if (data.deptList.length === 1) {
|
if (data.deptList.length === 1) {
|
||||||
this.commit("user/setToken", data.jwtToken);
|
this.commit("user/setToken", data.jwtToken);
|
||||||
|
|
||||||
this.commit("user/setDeptId", data.deptList);
|
this.commit("user/setDeptId", data.deptList);
|
||||||
this.commit("user/setUserName", data.userName);
|
this.commit("user/setUserName", data.userName);
|
||||||
setItem("USERNAME", data.userName);
|
setItem("USERNAME", data.userName);
|
||||||
|
setItem('fzUserId', data.fzUserId)
|
||||||
setItem("SFRH", data.sfrh);
|
setItem("SFRH", data.sfrh);
|
||||||
setItem("USERID", data.userId);
|
setItem("USERID", data.userId);
|
||||||
setItem("PermissionsInfo", data.permissionsInfo);
|
setItem("PermissionsInfo", data.permissionsInfo);
|
||||||
|
@ -41,11 +41,13 @@ service.interceptors.response.use(
|
|||||||
// 请求成功的处理
|
// 请求成功的处理
|
||||||
(response) => {
|
(response) => {
|
||||||
const { success, code, msg, message, data } = response.data;
|
const { success, code, msg, message, data } = response.data;
|
||||||
|
|
||||||
// 需要判断当前请求是否成功
|
// 需要判断当前请求是否成功
|
||||||
if (success && code === 10000) {
|
if (success && code === 10000) {
|
||||||
return data; // 成功后返回解析后的数据
|
|
||||||
|
return data ? data : response.data; // 成功后返回解析后的数据
|
||||||
} else if (code === 200 || code == "00000" || code == "10000" || msg == 'success') {
|
} else if (code === 200 || code == "00000" || code == "10000" || msg == 'success') {
|
||||||
return data; // 成功后返回解析后的数据
|
return data ? data : response.data; // // 成功后返回解析后的数据
|
||||||
} else if (code === 401) {
|
} else if (code === 401) {
|
||||||
store.dispatch('user/logout');
|
store.dispatch('user/logout');
|
||||||
ElMessage.error(message); // 提示错误信息
|
ElMessage.error(message); // 提示错误信息
|
||||||
|
@ -318,3 +318,8 @@ function _setTime(date) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//拼接地址
|
||||||
|
export function setAddress(val) {
|
||||||
|
const url = '/mosty-api/mosty-base/minio/image/download/'
|
||||||
|
return url + val
|
||||||
|
}
|
||||||
|
@ -5,8 +5,7 @@
|
|||||||
<span style="color:#00B7FF;" class="f12 pointer">查看更多 》</span>
|
<span style="color:#00B7FF;" class="f12 pointer">查看更多 》</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="asideCnt">
|
<div class="asideCnt">
|
||||||
<MyTable @changePage="changePage" customClass="zdy_peo_table" :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" >
|
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger"/>
|
||||||
</MyTable>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -18,14 +17,7 @@ const pageData = reactive({
|
|||||||
tableData: [
|
tableData: [
|
||||||
{ mc: "聚集事件", rs: "30", sj: "2024-10-10" },
|
{ mc: "聚集事件", rs: "30", sj: "2024-10-10" },
|
||||||
{ mc: "聚集事件", rs: "30", sj: "2024-10-10" },
|
{ mc: "聚集事件", rs: "30", sj: "2024-10-10" },
|
||||||
{ mc: "聚集事件", rs: "30", sj: "2024-10-10" },
|
|
||||||
{ mc: "聚集事件", rs: "30", sj: "2024-10-10" },
|
|
||||||
{ mc: "聚集事件", rs: "30", sj: "2024-10-10" },
|
|
||||||
{ mc: "聚集事件", rs: "30", sj: "2024-10-10" },
|
|
||||||
{ mc: "聚集事件", rs: "30", sj: "2024-10-10" },
|
|
||||||
{ mc: "聚集事件", rs: "30", sj: "2024-10-10" },
|
|
||||||
{ mc: "聚集事件", rs: "30", sj: "2024-10-10" },
|
|
||||||
{ mc: "聚集事件", rs: "30", sj: "2024-10-10" },
|
|
||||||
|
|
||||||
],
|
],
|
||||||
keyCount: 0,
|
keyCount: 0,
|
||||||
|
228
src/views/backOfficeSystem/ApprovalInformation/Clue/index.vue
Normal file
228
src/views/backOfficeSystem/ApprovalInformation/Clue/index.vue
Normal file
@ -0,0 +1,228 @@
|
|||||||
|
<template>
|
||||||
|
<div class="" style="overflow: auto;height: 100%;">
|
||||||
|
<el-card shadow="never" style="border: none;">
|
||||||
|
<template #header>
|
||||||
|
<h3 class="card-header">
|
||||||
|
基础信息
|
||||||
|
</h3>
|
||||||
|
</template>
|
||||||
|
<div class="flex flex-warp just-between">
|
||||||
|
<div class="flex flex-1" v-for="(item, index) in basicInformation" :key="index">
|
||||||
|
<div class="lable">{{ item.label }}:</div>
|
||||||
|
<div v-if="item.showSolt">
|
||||||
|
<DictTag :tag="false" :value="listQuery[item.key]" color="#000" :options="item.options" />
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
{{ listQuery[item.key] }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
<el-card shadow="never" style="border: none;">
|
||||||
|
<template #header>
|
||||||
|
<h3 class="card-header">
|
||||||
|
相关人员
|
||||||
|
</h3>
|
||||||
|
</template>
|
||||||
|
<ObjectInformation :item='listQuery' :dict="{ D_BZ_XB }" />
|
||||||
|
</el-card>
|
||||||
|
<el-card shadow="never" style="border: none;">
|
||||||
|
<template #header>
|
||||||
|
<h3 class="card-header">
|
||||||
|
附件
|
||||||
|
</h3>
|
||||||
|
</template>
|
||||||
|
<div class="grid-container">
|
||||||
|
<div class="grid-item flex just-between" style="" v-for="(item, index) in srcList" :key="index">
|
||||||
|
<div class="names">{{ item.name }}</div>
|
||||||
|
<div class="icon"><a :href="setAddress(item.id)" download><el-icon><Download /></el-icon></a></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import ObjectInformation from './objectInformation.vue'
|
||||||
|
import { qcckGet } from '@/api/qcckApi'
|
||||||
|
import { onMounted, getCurrentInstance, ref, reactive } from 'vue'
|
||||||
|
import { useRoute } from 'vue-router'
|
||||||
|
import { setAddress } from '@/utils/tools'
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const { D_BZ_SF, D_BZ_XB, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } =
|
||||||
|
proxy.$dict("D_BZ_SF", "D_BZ_XB", "D_GS_XS_LY", "D_BZ_SSZT", "D_GS_XS_LX", "D_GS_XS_QTLX"); //获取字典数据
|
||||||
|
|
||||||
|
// 基础信息
|
||||||
|
const basicInformation = ref(
|
||||||
|
[
|
||||||
|
{
|
||||||
|
label: '线索名称',
|
||||||
|
key: 'xsMc',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '线索类型',
|
||||||
|
key: 'xlLx',
|
||||||
|
showSolt: true,
|
||||||
|
options: D_GS_XS_LX
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '情报来源',
|
||||||
|
key: 'qbLy',
|
||||||
|
showSolt: true,
|
||||||
|
options: D_GS_XS_LY
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '指向开始时间',
|
||||||
|
key: 'zxkssj'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '指向结束时间',
|
||||||
|
key: 'zxjssj',
|
||||||
|
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '指向地点',
|
||||||
|
key: 'zxdz',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '所属专题',
|
||||||
|
key: 'sszt',
|
||||||
|
showSolt: true,
|
||||||
|
options: D_BZ_SSZT
|
||||||
|
}, {
|
||||||
|
label: '线索内容',
|
||||||
|
key: 'xsNr',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
)
|
||||||
|
//根据id获取数据query的id获取数据
|
||||||
|
const listQuery = ref({})
|
||||||
|
// 图片信息
|
||||||
|
const srcList = ref({})
|
||||||
|
const getDataById = (id) => {
|
||||||
|
const params = { id }
|
||||||
|
qcckGet(params, '/mosty-gsxt/qbcj/selectByid').then(res => {
|
||||||
|
listQuery.value = res
|
||||||
|
srcList.value = res.ossList
|
||||||
|
|
||||||
|
// onSubmit(res.ossList)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const route = useRoute()
|
||||||
|
onMounted(() => {
|
||||||
|
const id = route.query.id
|
||||||
|
getDataById(id)
|
||||||
|
|
||||||
|
})
|
||||||
|
// const onSubmit = async (val) => {
|
||||||
|
// const data = []
|
||||||
|
// for (let i = 0; i < val.length; i++) {
|
||||||
|
// const res = await qcckGet({}, `/mosty-base/minio/file/download/${val[i].id}`)
|
||||||
|
// data.push(res)
|
||||||
|
// }
|
||||||
|
|
||||||
|
// srcList.value = data.reduce((acc, file) => {
|
||||||
|
// const { suffix, url } = file;
|
||||||
|
// const name= suffix.startsWith('.') ? suffix.substring(1) : suffix;
|
||||||
|
// // 如果该后缀的分组不存在,则初始化
|
||||||
|
// if (!acc[name]) {
|
||||||
|
// acc[name] = [];
|
||||||
|
// }
|
||||||
|
// // 将当前文件的 url 推入对应分组的数组
|
||||||
|
// acc[name].push(url);
|
||||||
|
// return acc;
|
||||||
|
// }, []);
|
||||||
|
// console.log(srcList.value);
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.card-header {
|
||||||
|
font-size: 18px;
|
||||||
|
color: #303133;
|
||||||
|
font-weight: 600;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-card {
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-1 {
|
||||||
|
width: 48%;
|
||||||
|
font-family: verdana;
|
||||||
|
font-size: 14px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
|
||||||
|
.lable {
|
||||||
|
font-size: 14px;
|
||||||
|
width: 13%;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-image {
|
||||||
|
padding: 0 5px;
|
||||||
|
max-width: 300px;
|
||||||
|
max-height: 200px;
|
||||||
|
width: 100%;
|
||||||
|
height: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-slot {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: var(--el-fill-color-light);
|
||||||
|
color: var(--el-text-color-secondary);
|
||||||
|
font-size: 30px;
|
||||||
|
border: 1px solid silver;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid-container {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(6, 1fr);
|
||||||
|
/* 5等分列 */
|
||||||
|
gap: 0px;
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid-item {
|
||||||
|
width: 290px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 5px 10px;
|
||||||
|
height: 50px;
|
||||||
|
border-radius: 5px;
|
||||||
|
background-color: aliceblue;
|
||||||
|
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.names{
|
||||||
|
width: 80%;
|
||||||
|
white-space: nowrap; /* 禁止换行 */
|
||||||
|
overflow: hidden; /* 隐藏溢出内容 */
|
||||||
|
text-overflow: ellipsis; /* 显示省略号 */
|
||||||
|
}
|
||||||
|
.icon{
|
||||||
|
text-align: right;
|
||||||
|
font-size: 16px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,59 @@
|
|||||||
|
<template>
|
||||||
|
<MyTable :tableData="tableDate.tableData" :tableColumn="tableDate.tableColumn"
|
||||||
|
:tableHeight="tableDate.tableHeight" :key="tableDate.keyCount" :tableConfiger="tableDate.tableConfiger"
|
||||||
|
:controlsWidth="tableDate.controlsWidth">
|
||||||
|
<template #xb="{ row }">
|
||||||
|
<DictTag :tag="false" :value="row.xb" :options="dict.D_BZ_XB" />
|
||||||
|
</template>
|
||||||
|
<template #bqList="{ row }">
|
||||||
|
<span v-if="row.bqList">
|
||||||
|
<span v-for="(it, idx) in row.bqList" :key="idx"> {{ it.bqMc }}、</span>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</MyTable>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import { ref,reactive, watch } from 'vue'
|
||||||
|
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||||
|
const props = defineProps({
|
||||||
|
item: {
|
||||||
|
type: Object,
|
||||||
|
default:()=>{}
|
||||||
|
}, dict: {
|
||||||
|
type: Object,
|
||||||
|
default:()=>{}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let tableDate = reactive({
|
||||||
|
tableData: [],
|
||||||
|
keyCount: 0,
|
||||||
|
tableConfiger: {
|
||||||
|
rowHieght: 61,
|
||||||
|
showSelectType: "null",
|
||||||
|
loading: false,
|
||||||
|
haveControls:false,
|
||||||
|
},
|
||||||
|
total: 0,
|
||||||
|
pageConfiger: {
|
||||||
|
pageSize: 20,
|
||||||
|
pageCurrent: 1
|
||||||
|
}, //分页
|
||||||
|
controlsWidth: 200, //操作栏宽度
|
||||||
|
tableColumn: [
|
||||||
|
{ label: "姓名", prop: "xm" },
|
||||||
|
{ label: "性别", prop: "xb",showSolt:true },
|
||||||
|
{ label: "身份证号", prop: "sfzh" },
|
||||||
|
{ label: "户籍地", prop: "hjdz" },
|
||||||
|
{ label: "户籍地派出所", prop: "hjdpcs" },
|
||||||
|
{ label: "标签", prop: "bqList",showSolt:true }
|
||||||
|
]
|
||||||
|
});
|
||||||
|
watch(() => props.item, (val) => {
|
||||||
|
tableDate.tableData=val.ryList
|
||||||
|
|
||||||
|
},{deep:true})
|
||||||
|
</script>
|
||||||
|
<style lang="css" scoped>
|
||||||
|
|
||||||
|
</style>
|
@ -0,0 +1,203 @@
|
|||||||
|
<template>
|
||||||
|
<div class="" style="overflow: auto;height: 100%;">
|
||||||
|
<el-card shadow="never" style="border: none;">
|
||||||
|
<template #header>
|
||||||
|
<h3 class="card-header">
|
||||||
|
基础信息
|
||||||
|
</h3>
|
||||||
|
</template>
|
||||||
|
<div class="flex flex-warp just-between">
|
||||||
|
<div class="flex flex-1" v-for="(item, index) in basicInformation" :key="index">
|
||||||
|
<div class="lable">{{ item.label }}:</div>
|
||||||
|
<div v-if="item.showSolt">
|
||||||
|
<DictTag :tag="false" :value="listQuery[item.key]" color="#000" :options="item.options" />
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
{{ listQuery[item.key] }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
<el-card shadow="never" style="border: none;">
|
||||||
|
<template #header>
|
||||||
|
<h3 class="card-header">
|
||||||
|
附件
|
||||||
|
</h3>
|
||||||
|
</template>
|
||||||
|
<div class="grid-container">
|
||||||
|
<div class="grid-item" :key="index">
|
||||||
|
<el-image :src="setAddress( listQuery.ryFjZp)" :zoom-rate="1.2" :max-scale="7" :min-scale="0.2"
|
||||||
|
:preview-src-list="[listQuery.ryFjZp]" show-progress :initial-index="4" fit="cover">
|
||||||
|
<template #error>
|
||||||
|
<div class="image-slot">
|
||||||
|
<el-icon><icon-picture /></el-icon>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-image>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { Picture as IconPicture } from '@element-plus/icons-vue'
|
||||||
|
// import ObjectInformation from './objectInformation.vue'
|
||||||
|
import { qcckGet } from '@/api/qcckApi'
|
||||||
|
import { onMounted, getCurrentInstance, ref, reactive } from 'vue'
|
||||||
|
import { useRoute } from 'vue-router'
|
||||||
|
import { setAddress } from '@/utils/tools'
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const { D_GS_RQFJ_FXDJ, D_GS_RQFJ_FXLB } =
|
||||||
|
proxy.$dict(
|
||||||
|
"D_BZ_RCSHZT",
|
||||||
|
"D_GS_RQFJ_LX",
|
||||||
|
"D_GS_RQFJ_FXDJ",
|
||||||
|
"D_BZ_SF",
|
||||||
|
"D_GS_RQFJ_FXLB"
|
||||||
|
);
|
||||||
|
// 基础信息
|
||||||
|
const basicInformation = ref(
|
||||||
|
[
|
||||||
|
{
|
||||||
|
label: '姓名',
|
||||||
|
key: 'ryXm',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '电话',
|
||||||
|
key: 'rySjhm'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '身份证号',
|
||||||
|
key: 'rySfzh'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '户籍地址',
|
||||||
|
key: 'ryHjdz',
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
label: '护照号码',
|
||||||
|
key: 'ryHzhm',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '现住地址',
|
||||||
|
key: 'ryXzdz',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '管辖单位',
|
||||||
|
key: 'gxDwMc',
|
||||||
|
|
||||||
|
}, {
|
||||||
|
label: '责任部门',
|
||||||
|
key: 'ssbm',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '标签',
|
||||||
|
key: 'bqList',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '风险积分',
|
||||||
|
key: 'fxjf',
|
||||||
|
}, {
|
||||||
|
label: '风险等级',
|
||||||
|
key: 'fxDj',
|
||||||
|
showSolt: true,
|
||||||
|
options: D_GS_RQFJ_FXDJ
|
||||||
|
}, {
|
||||||
|
label: '风险类别',
|
||||||
|
key: 'fxLb',
|
||||||
|
showSolt: true,
|
||||||
|
options: D_GS_RQFJ_FXLB
|
||||||
|
}
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
//根据id获取数据query的id获取数据
|
||||||
|
const listQuery = ref({})
|
||||||
|
// 图片信息
|
||||||
|
const srcList = ref([])
|
||||||
|
const getDataById = (id) => {
|
||||||
|
qcckGet({}, '/mosty-gsxt/tbGsxtRqfjRy/' + id).then(res => {
|
||||||
|
listQuery.value = res
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const route = useRoute()
|
||||||
|
onMounted(() => {
|
||||||
|
const id = route.query.id
|
||||||
|
getDataById(id)
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.card-header {
|
||||||
|
font-size: 18px;
|
||||||
|
color: #303133;
|
||||||
|
font-weight: 600;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-card {
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-1 {
|
||||||
|
width: 48%;
|
||||||
|
font-family: verdana;
|
||||||
|
font-size: 14px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
|
||||||
|
.lable {
|
||||||
|
font-size: 14px;
|
||||||
|
width: 13%;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-image {
|
||||||
|
padding: 0 5px;
|
||||||
|
max-width: 300px;
|
||||||
|
max-height: 200px;
|
||||||
|
width: 100%;
|
||||||
|
height: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-slot {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: var(--el-fill-color-light);
|
||||||
|
color: var(--el-text-color-secondary);
|
||||||
|
font-size: 30px;
|
||||||
|
border: 1px solid silver;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid-container {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(6, 1fr);
|
||||||
|
/* 5等分列 */
|
||||||
|
gap: 0px;
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid-item {
|
||||||
|
width: 290px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,184 @@
|
|||||||
|
<template>
|
||||||
|
<div class="" style="overflow: auto;height: 100%;">
|
||||||
|
<el-card shadow="never" style="border: none;">
|
||||||
|
<template #header>
|
||||||
|
<h3 class="card-header">
|
||||||
|
基础信息
|
||||||
|
</h3>
|
||||||
|
</template>
|
||||||
|
<div class="flex flex-warp just-between">
|
||||||
|
<div class="flex flex-1" v-for="(item,index) in basicInformation" :key="index">
|
||||||
|
<div class="lable">{{item.label}}:</div>
|
||||||
|
<div v-if="item.showSolt">
|
||||||
|
<DictTag :tag="false" :value="listQuery[item.key]" color="#000"
|
||||||
|
:options="item.options"/>
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
{{ listQuery[item.key] }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
<el-card shadow="never" style="border: none;">
|
||||||
|
<template #header>
|
||||||
|
<h3 class="card-header">
|
||||||
|
布控信息
|
||||||
|
</h3>
|
||||||
|
</template>
|
||||||
|
<ObjectInformation :item='listQuery' :dict="{D_BZ_XB}"/>
|
||||||
|
</el-card>
|
||||||
|
<el-card shadow="never" style="border: none;">
|
||||||
|
<template #header>
|
||||||
|
<h3 class="card-header">
|
||||||
|
布控附件
|
||||||
|
</h3>
|
||||||
|
</template>
|
||||||
|
<div class="grid-container">
|
||||||
|
<div v-for="(item,index) in listQuery.ossList" class="grid-item" :key="index">
|
||||||
|
<el-image :src="setAddress(item.id)" :zoom-rate="1.2" :max-scale="7" :min-scale="0.2" :preview-src-list="srcList"
|
||||||
|
show-progress :initial-index="4" fit="cover">
|
||||||
|
<template #error>
|
||||||
|
<div class="image-slot">
|
||||||
|
<el-icon><icon-picture /></el-icon>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-image>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { Picture as IconPicture } from '@element-plus/icons-vue'
|
||||||
|
import ObjectInformation from './objectInformation.vue'
|
||||||
|
import {qcckGet} from '@/api/qcckApi'
|
||||||
|
import { onMounted ,getCurrentInstance,ref, reactive} from 'vue'
|
||||||
|
import { useRoute } from 'vue-router'
|
||||||
|
import {setAddress} from '@/utils/tools'
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const { D_GS_BK_DJ, D_GS_BK_DX,D_GS_BK_CZYQ,D_BZ_XB } = proxy.$dict("D_GS_BK_BKYS","D_BZ_XB","D_GS_BK_SJLX","D_GS_BK_DJ","D_GS_BK_DX","D_GS_BK_ZT","D_GS_BK_CZYQ","D_GS_BK_CZJSDWLX","D_GS_BK_TJFS"); //获取字典数据
|
||||||
|
|
||||||
|
// 基础信息
|
||||||
|
const basicInformation = ref(
|
||||||
|
[
|
||||||
|
{
|
||||||
|
label: '布控对象',
|
||||||
|
key: 'bkDx',
|
||||||
|
showSolt: true,
|
||||||
|
options:D_GS_BK_DX
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '布控开始时间',
|
||||||
|
key:'bkSjKs'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '布控结束时间',
|
||||||
|
key:'bkSjJs'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '处置要求',
|
||||||
|
key: 'czYq',
|
||||||
|
showSolt: true,
|
||||||
|
options:D_GS_BK_CZYQ
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '布控等级',
|
||||||
|
key: 'bkDj',
|
||||||
|
showSolt: true,
|
||||||
|
options:D_GS_BK_DJ
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '布控事由',
|
||||||
|
key:'bkSy'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
)
|
||||||
|
//根据id获取数据query的id获取数据
|
||||||
|
const listQuery = ref({})
|
||||||
|
// 图片信息
|
||||||
|
const srcList = ref([])
|
||||||
|
const getDataById = (id) => {
|
||||||
|
qcckGet({}, '/mosty-gsxt/tbGsxtBk/selectVoById/' + id).then(res => {
|
||||||
|
listQuery.value=res
|
||||||
|
srcList.value=res.ossList.map(v=>setAddress(v.id))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const route=useRoute()
|
||||||
|
onMounted(() => {
|
||||||
|
const id = route.query.id
|
||||||
|
getDataById(id)
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.card-header {
|
||||||
|
font-size: 18px;
|
||||||
|
color: #303133;
|
||||||
|
font-weight: 600;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-card {
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-1 {
|
||||||
|
width: 48%;
|
||||||
|
font-family: verdana;
|
||||||
|
font-size: 14px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
|
||||||
|
.lable {
|
||||||
|
font-size: 14px;
|
||||||
|
width: 13%;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-image {
|
||||||
|
padding: 0 5px;
|
||||||
|
max-width: 300px;
|
||||||
|
max-height: 200px;
|
||||||
|
width: 100%;
|
||||||
|
height: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-slot {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: var(--el-fill-color-light);
|
||||||
|
color: var(--el-text-color-secondary);
|
||||||
|
font-size: 30px;
|
||||||
|
border: 1px solid silver ;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid-container {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(6, 1fr);
|
||||||
|
/* 5等分列 */
|
||||||
|
gap: 0px;
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid-item {
|
||||||
|
width: 290px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,56 @@
|
|||||||
|
<template>
|
||||||
|
<MyTable :tableData="tableDate.tableData" :tableColumn="tableDate.tableColumn"
|
||||||
|
:tableHeight="tableDate.tableHeight" :key="tableDate.keyCount" :tableConfiger="tableDate.tableConfiger"
|
||||||
|
:controlsWidth="tableDate.controlsWidth">
|
||||||
|
<template #fjZp="{ row }">
|
||||||
|
<el-image :src="row.fjZp"></el-image>
|
||||||
|
</template>
|
||||||
|
<template #ryXb="{ row }">
|
||||||
|
<DictTag :tag="false" :value="row.ryXb" :options="dict.D_BZ_XB" />
|
||||||
|
</template>
|
||||||
|
<template #bqList="{ row }">
|
||||||
|
<span v-if="row.bqList">
|
||||||
|
<span v-for="(it, idx) in row.bqList" :key="idx"> {{ it.bqMc }}、</span>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</MyTable>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import { ref,reactive, watch } from 'vue'
|
||||||
|
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||||
|
import { tableColumnList } from '../tableRow.js'
|
||||||
|
const props = defineProps({
|
||||||
|
item: {
|
||||||
|
type: Object,
|
||||||
|
default:()=>{}
|
||||||
|
}, dict: {
|
||||||
|
type: Object,
|
||||||
|
default:()=>{}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let tableDate = reactive({
|
||||||
|
tableData: [],
|
||||||
|
keyCount: 0,
|
||||||
|
tableConfiger: {
|
||||||
|
rowHieght: 61,
|
||||||
|
showSelectType: "null",
|
||||||
|
loading: false,
|
||||||
|
haveControls:false,
|
||||||
|
},
|
||||||
|
total: 0,
|
||||||
|
pageConfiger: {
|
||||||
|
pageSize: 20,
|
||||||
|
pageCurrent: 1
|
||||||
|
}, //分页
|
||||||
|
controlsWidth: 200, //操作栏宽度
|
||||||
|
tableColumn: []
|
||||||
|
});
|
||||||
|
watch(() => props.item, (val) => {
|
||||||
|
tableDate.tableColumn = tableColumnList[val.bkDx]
|
||||||
|
tableDate.tableData=val.bkdxList
|
||||||
|
},{deep:true})
|
||||||
|
</script>
|
||||||
|
<style lang="css" scoped>
|
||||||
|
|
||||||
|
</style>
|
86
src/views/backOfficeSystem/ApprovalInformation/tableRow.js
Normal file
86
src/views/backOfficeSystem/ApprovalInformation/tableRow.js
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
let zdList = {}
|
||||||
|
export const Zd = (val) => {
|
||||||
|
console.log(val);
|
||||||
|
zdList = val
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export 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: "qtXnsf" },
|
||||||
|
{ label: "车牌号", prop: "clCph" },
|
||||||
|
{ label: "车辆识别代码", prop: "clCjh" },
|
||||||
|
{ label: "特征描述", prop: "qtTzms" },
|
||||||
|
{ label: "预警等级", prop: "yjdj", showSolt: true, options: zdList.D_GS_ZDR_YJDJ },
|
||||||
|
{ 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: "qtXnsf" },
|
||||||
|
{ label: "车牌号", prop: "clCph" },
|
||||||
|
{ label: "车辆识别代码", prop: "clCjh" },
|
||||||
|
{ label: "特征描述", prop: "qtTzms" },
|
||||||
|
{ label: "预警等级", prop: "yjdj", showSolt: true, options: zdList.D_GS_ZDR_YJDJ },
|
||||||
|
{ label: "标签", prop: "bqList", showSolt: true, showOverflowTooltip: true }
|
||||||
|
], '03': [
|
||||||
|
{ label: "车牌号", prop: "clCph" },
|
||||||
|
{ label: "车辆颜色", prop: "clYs" },
|
||||||
|
{ label: "预警等级", prop: "yjdj", showSolt: true, options: zdList.D_GS_ZDR_YJDJ },
|
||||||
|
{ label: "预警标签", prop: "yjbq", showSolt: true, options: zdList.BD_BK_CLYJBQ },
|
||||||
|
],
|
||||||
|
'04': [
|
||||||
|
{ label: "身份证号", prop: "rySfzh" },
|
||||||
|
{ label: "姓名", prop: "ryXm" },
|
||||||
|
{ label: "性别", prop: "ryXb", showSolt: true },
|
||||||
|
{ label: "预警等级", prop: "yjdj", showSolt: true, options: zdList.D_GS_ZDR_YJDJ },
|
||||||
|
{ label: "标签", prop: "bqList", showSolt: true, showOverflowTooltip: true }
|
||||||
|
],
|
||||||
|
'05': [
|
||||||
|
{ label: "车辆识别代码", prop: "clCjh" },
|
||||||
|
{ label: "车牌号", prop: "clCph" },
|
||||||
|
{ label: "车主姓名", prop: "ryXm" },
|
||||||
|
{ label: "预警等级", prop: "yjdj", showSolt: true, options: zdList.D_GS_ZDR_YJDJ },
|
||||||
|
{ label: "标签", prop: "bqList", showSolt: true, showOverflowTooltip: true }
|
||||||
|
],
|
||||||
|
'06': [
|
||||||
|
{ label: "Mac地址", prop: "mac" },
|
||||||
|
{ label: "预警等级", prop: "yjdj", showSolt: true, options: zdList.D_GS_ZDR_YJDJ },
|
||||||
|
{ label: "标签", prop: "bqList", showSolt: true, showOverflowTooltip: true }
|
||||||
|
],
|
||||||
|
'07': [
|
||||||
|
{ label: "IMEI", prop: "imei" },
|
||||||
|
{ label: "预警等级", prop: "yjdj", showSolt: true, options: zdList.D_GS_ZDR_YJDJ },
|
||||||
|
{ label: "标签", prop: "bqList", showSolt: true, showOverflowTooltip: true }
|
||||||
|
],
|
||||||
|
'08': [
|
||||||
|
{ label: "IMSI", prop: "imsi" },
|
||||||
|
{ label: "预警等级", prop: "yjdj", showSolt: true, options: zdList.D_GS_ZDR_YJDJ },
|
||||||
|
{ label: "标签", prop: "bqList", showSolt: true, showOverflowTooltip: true }
|
||||||
|
],
|
||||||
|
'09': [
|
||||||
|
{ label: "电话", prop: "rySjhm", type: "input" },
|
||||||
|
{ label: "姓名", prop: "ryXm" },
|
||||||
|
{ label: "性别", prop: "ryXb", showSolt: true },
|
||||||
|
{ label: "预警等级", prop: "yjdj", showSolt: true, options: zdList.D_GS_ZDR_YJDJ },
|
||||||
|
{ label: "标签", prop: "bqList", showSolt: true, showOverflowTooltip: true }
|
||||||
|
], '10': [
|
||||||
|
{ label: "照片", prop: "fjZp", showSolt: true },
|
||||||
|
{ label: "姓名", prop: "ryXm" },
|
||||||
|
{ label: "性别", prop: "ryXb", showSolt: true },
|
||||||
|
{ label: "身份证号", prop: "rySfzh" },
|
||||||
|
{ label: "预警等级", prop: "yjdj", showSolt: true, options: zdList.D_GS_ZDR_YJDJ },
|
||||||
|
{ label: "标签", prop: "bqList", showSolt: true, showOverflowTooltip: true }
|
||||||
|
],
|
||||||
|
|
||||||
|
}
|
@ -9,40 +9,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="form_cnt">
|
<div class="form_cnt">
|
||||||
<FormMessage :disabled="disabled" v-model="listQuery" :formList="formData" labelWidth="100px" ref="elform"
|
<FormMessage :disabled="disabled" v-model="listQuery" :formList="formData" labelWidth="100px" ref="elform"
|
||||||
:rules="rules"></FormMessage>
|
:rules="rules">
|
||||||
<!-- 选择审核人 -->
|
|
||||||
<!-- <div class="ww100 mt20 ml50 mr50">
|
</FormMessage>
|
||||||
<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.sqrXm" readonly class="ww20"></el-input>
|
|
||||||
<el-input v-model="listQuery.sqrSsbmmc" readonly class="ww20 ml10 mr10"></el-input>
|
|
||||||
<span class="f12" style="color: #333333">
|
|
||||||
备注发起人和部门根据登陆人自动填写</span>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-step>
|
|
||||||
<el-step title="审核确认">
|
|
||||||
<template #description>
|
|
||||||
<div class="flex align-center ww100 mt10 mb20 depBox">
|
|
||||||
<span class="mr4">审核部门 : </span>
|
|
||||||
<MOSTY.Department :isAll="true" @getDepValue="getShdep" v-model="listQuery.shSsbmdm" clearable :placeholder="listQuery.shSsbmmc ? listQuery.shSsbmmc : ''" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-step>
|
|
||||||
<el-step title="审批确认">
|
|
||||||
<template #description>
|
|
||||||
<div class="flex align-center ww100 mt10 mb20 depBox">
|
|
||||||
<span lass="mr4">审批部门 : </span>
|
|
||||||
<MOSTY.Department :isAll="true" @getDepValue="getSPdep" v-model="listQuery.spSsbmdm" clearable :placeholder="listQuery.spSsbmmc ? listQuery.spSsbmmc : ''" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-step>
|
|
||||||
</el-steps>
|
|
||||||
</div> -->
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<ChooseMarks v-model="chooseMarksVisible" @choosed="choosed" :roleIds="roleIds" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@ -50,6 +22,7 @@ import * as rule from "@/utils/rules.js";
|
|||||||
import * as MOSTY from "@/components/MyComponents/index";
|
import * as MOSTY from "@/components/MyComponents/index";
|
||||||
import { getItem } from "@/utils/storage";
|
import { getItem } from "@/utils/storage";
|
||||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||||
|
import ChooseMarks from "@/components/ChooseList/ChooseMarks/index.vue";
|
||||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||||
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||||
import {
|
import {
|
||||||
@ -87,17 +60,15 @@ watch(() => props.dic,(val) => {
|
|||||||
formData.value = [
|
formData.value = [
|
||||||
{ label: "车牌号", prop: "hphm", type: "input" },
|
{ label: "车牌号", prop: "hphm", type: "input" },
|
||||||
{ label: "车架号", prop: "clCjh", type: "input" },
|
{ label: "车架号", prop: "clCjh", type: "input" },
|
||||||
{
|
{ label: "车辆颜色", prop: "clYs",type: "input", },
|
||||||
label: "车辆颜色",
|
|
||||||
prop: "clYs",
|
|
||||||
type: "input",
|
|
||||||
},
|
|
||||||
{ label: "车辆所有人", prop: "clSyr", type: "input" },
|
{ label: "车辆所有人", prop: "clSyr", type: "input" },
|
||||||
{ label: "人员身份证", prop: "clSyrsfzh", type: "input" },
|
{ label: "人员身份证", prop: "clSyrsfzh", type: "input" },
|
||||||
{ label: "责任单位", prop: "zrSsbmdm",depMc:'zrSsbmmc', type: "department" },
|
{ label: "责任单位", prop: "zrSsbmdm",depMc:'zrSsbmmc', type: "department" },
|
||||||
{ label: "管辖单位", prop: "gxSsbmdm",depMc:'gxSsbmmc', type: "department" },
|
{ label: "管辖单位", prop: "gxSsbmdm",depMc:'gxSsbmmc', type: "department" },
|
||||||
{ label: "管控民警姓名", prop: "gkMjXm", type: "input" },
|
{ label: "管控民警姓名", prop: "gkMjXm", type: "input" },
|
||||||
{ label: "管控民警警号", prop: "gkMjJh", type: "input" },
|
{ label: "管控民警警号", prop: "gkMjJh", type: "input" },
|
||||||
|
{ label: "预警等级", prop: "yjdj", type: "select",options:props.dic.D_GS_ZDR_YJDJ },
|
||||||
|
{ label: "预警标签", prop: "yjbq", type: "select",options:props.dic.BD_BK_CLYJBQ },
|
||||||
{ label: "管控原因", prop: "clLkyy", type: "textarea", width: "100%" },
|
{ label: "管控原因", prop: "clLkyy", type: "textarea", width: "100%" },
|
||||||
{ label: "车辆照片", prop: "fjdz", type: "upload", width: "100%" },
|
{ label: "车辆照片", prop: "fjdz", type: "upload", width: "100%" },
|
||||||
];
|
];
|
||||||
@ -216,4 +187,11 @@ defineExpose({ init });
|
|||||||
border-color: transparent !important;
|
border-color: transparent !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.marks{
|
||||||
|
width: 100%;
|
||||||
|
width: 100%;
|
||||||
|
min-height: 32px;
|
||||||
|
border: 1px solid #e9e9e9;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -103,7 +103,7 @@
|
|||||||
></Pages>
|
></Pages>
|
||||||
</div>
|
</div>
|
||||||
<!-- 详情 -->
|
<!-- 详情 -->
|
||||||
<AddForm ref="addFormDiloag" @updateDate="getList" :dic="{D_GS_ZDR_RYJB,D_BZ_XB,D_BZ_MZ,D_BZ_XZQHDM,D_GS_ZDR_BK_ZT,D_GS_ZDR_CZZT,D_GS_BQ_ZL,D_GS_BQ_LB,D_GS_BQ_LX,D_GS_ZDR_YJDJ,D_GS_BK_SSJZ}"/>
|
<AddForm ref="addFormDiloag" @updateDate="getList" :dic="{BD_BK_CLYJBQ,D_GS_ZDR_RYJB,D_BZ_XB,D_BZ_MZ,D_BZ_XZQHDM,D_GS_ZDR_BK_ZT,D_GS_ZDR_CZZT,D_GS_BQ_ZL,D_GS_BQ_LB,D_GS_BQ_LX,D_GS_ZDR_YJDJ,D_GS_BK_SSJZ}"/>
|
||||||
<!-- 选择用户 -->
|
<!-- 选择用户 -->
|
||||||
<ChooseUser v-model="chooseUserVisible" @choosedUsers="handleUserSelected" :roleIds="roleIds"/>
|
<ChooseUser v-model="chooseUserVisible" @choosedUsers="handleUserSelected" :roleIds="roleIds"/>
|
||||||
<!-- 转线索 -->
|
<!-- 转线索 -->
|
||||||
@ -123,7 +123,7 @@ import AddForm from "./components/addForm.vue";
|
|||||||
import { qcckGet, qcckPost,qcckDelete } from "@/api/qcckApi.js";
|
import { qcckGet, qcckPost,qcckDelete } from "@/api/qcckApi.js";
|
||||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_GS_ZDQT_ZT,D_GS_ZDR_RYJB, D_BZ_XB, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ, D_GS_BK_SQLX, D_BZ_SF, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } = proxy.$dict("D_GS_ZDQT_ZT","D_GS_ZDR_RYJB","D_BZ_XB","D_BZ_MZ","D_BZ_XZQHDM","D_GS_ZDR_BK_ZT","D_GS_ZDR_CZZT","D_GS_BQ_ZL","D_GS_BQ_LB","D_GS_BQ_LX","D_GS_ZDR_YJDJ","D_GS_BK_SSJZ","D_GS_BK_SQLX","D_BZ_SF","D_GS_XS_LY","D_BZ_SSZT","D_GS_XS_LX","D_GS_XS_QTLX");
|
const { D_GS_ZDQT_ZT,D_GS_ZDR_RYJB, D_BZ_XB,BD_BK_CLYJBQ, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ, D_GS_BK_SQLX, D_BZ_SF, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } = proxy.$dict("D_GS_ZDQT_ZT","D_GS_ZDR_RYJB","D_BZ_XB","D_BZ_MZ","D_BZ_XZQHDM","D_GS_ZDR_BK_ZT","D_GS_ZDR_CZZT","D_GS_BQ_ZL","D_GS_BQ_LB","D_GS_BQ_LX","D_GS_BK_SSJZ","D_GS_BK_SQLX","D_BZ_SF","D_GS_XS_LY","D_BZ_SSZT","D_GS_XS_LX","D_GS_XS_QTLX","BD_BK_CLYJBQ","D_GS_ZDR_YJDJ");
|
||||||
const obj = ref({});
|
const obj = ref({});
|
||||||
const showzxs = ref(false);
|
const showzxs = ref(false);
|
||||||
const zxsDilof = ref();
|
const zxsDilof = ref();
|
||||||
|
@ -0,0 +1,269 @@
|
|||||||
|
<template>
|
||||||
|
<div class="dialog" v-if="dialogForm">
|
||||||
|
<div class="head_box">
|
||||||
|
<span class="title">重点人员深度发掘详情</span>
|
||||||
|
<div>
|
||||||
|
<el-button size="small" @click="close">关闭</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex just-between">
|
||||||
|
|
||||||
|
<div :class="listQuery.gzlid ? 'ww79' : 'ww100'">
|
||||||
|
<div class="" style="overflow: auto;height: 100%;color: #000;">
|
||||||
|
<el-card shadow="never" style="border: none;">
|
||||||
|
<template #header>
|
||||||
|
<h3 class="card-header">
|
||||||
|
基础信息
|
||||||
|
</h3>
|
||||||
|
</template>
|
||||||
|
<div class="flex flex-warp just-between">
|
||||||
|
<div class="flex flex-1" v-for="(item, index) in basicInformation" :key="index">
|
||||||
|
<div class="lable">{{ item.label }}:</div>
|
||||||
|
<div v-if="item.showSolt">
|
||||||
|
<DictTag :tag="false" :value="listQuery[item.key]" color="#000" :options="item.options" />
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
{{ listQuery[item.key] }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
<el-card shadow="never" style="border: none;">
|
||||||
|
<template #header>
|
||||||
|
<h3 class="card-header">
|
||||||
|
附件
|
||||||
|
</h3>
|
||||||
|
</template>
|
||||||
|
<div class="grid-container">
|
||||||
|
<div class="grid-item" :key="index">
|
||||||
|
<el-image :src="setAddress(listQuery.ryFjZp)" :zoom-rate="1.2" :max-scale="7" :min-scale="0.2"
|
||||||
|
:preview-src-list="[listQuery.ryFjZp]" show-progress :initial-index="4" fit="cover">
|
||||||
|
<template #error>
|
||||||
|
<div class="image-slot">
|
||||||
|
<el-icon><icon-picture /></el-icon>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-image>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="ww20" v-if="listQuery.gzlid">
|
||||||
|
<ApprovalEcho ref="approvalEcho" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { qcckGet } from '@/api/qcckApi'
|
||||||
|
import { ref, defineExpose, watch,getCurrentInstance } from "vue";
|
||||||
|
import ApprovalEcho from "@/components/flowPath/ApprovalEcho.vue";
|
||||||
|
import { Picture as IconPicture } from '@element-plus/icons-vue'
|
||||||
|
import { setAddress } from '@/utils/tools'
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const { D_GS_RQFJ_FXDJ, D_GS_RQFJ_FXLB } =
|
||||||
|
proxy.$dict(
|
||||||
|
"D_BZ_RCSHZT",
|
||||||
|
"D_GS_RQFJ_LX",
|
||||||
|
"D_GS_RQFJ_FXDJ",
|
||||||
|
"D_BZ_SF",
|
||||||
|
"D_GS_RQFJ_FXLB"
|
||||||
|
);
|
||||||
|
const dialogForm = ref(false); //弹窗
|
||||||
|
const approvalEcho=ref()
|
||||||
|
const listQuery = ref({})
|
||||||
|
// 基础信息
|
||||||
|
const basicInformation = ref(
|
||||||
|
[
|
||||||
|
{
|
||||||
|
label: '姓名',
|
||||||
|
key: 'ryXm',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '电话',
|
||||||
|
key: 'rySjhm'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '身份证号',
|
||||||
|
key: 'rySfzh'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '户籍地址',
|
||||||
|
key: 'ryHjdz',
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
label: '护照号码',
|
||||||
|
key: 'ryHzhm',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '现住地址',
|
||||||
|
key: 'ryXzdz',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '管辖单位',
|
||||||
|
key: 'gxDwMc',
|
||||||
|
|
||||||
|
}, {
|
||||||
|
label: '责任部门',
|
||||||
|
key: 'ssbm',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '标签',
|
||||||
|
key: 'bqList',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '风险积分',
|
||||||
|
key: 'fxjf',
|
||||||
|
}, {
|
||||||
|
label: '风险等级',
|
||||||
|
key: 'fxDj',
|
||||||
|
showSolt: true,
|
||||||
|
options: D_GS_RQFJ_FXDJ
|
||||||
|
}, {
|
||||||
|
label: '风险类别',
|
||||||
|
key: 'fxLb',
|
||||||
|
showSolt: true,
|
||||||
|
options: D_GS_RQFJ_FXLB
|
||||||
|
}
|
||||||
|
]
|
||||||
|
)
|
||||||
|
// 初始化数据
|
||||||
|
const init = (row) => {
|
||||||
|
dialogForm.value = true
|
||||||
|
qcckGet({}, '/mosty-gsxt/tbGsxtRqfjRy/' + row.id).then(res => {
|
||||||
|
listQuery.value = res
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
watch(() => approvalEcho.value, (val) => {
|
||||||
|
if (val) {
|
||||||
|
approvalEcho.value.getWorkflow(listQuery.value.gzlid)
|
||||||
|
}
|
||||||
|
}, { deep: true })
|
||||||
|
|
||||||
|
// 关闭
|
||||||
|
const close = () => {
|
||||||
|
dialogForm.value = false;
|
||||||
|
};
|
||||||
|
defineExpose({ init });
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "~@/assets/css/layout.scss";
|
||||||
|
@import "~@/assets/css/element-plus.scss";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.dialog {
|
||||||
|
::v-deep .el-form-item--default {
|
||||||
|
margin: 0 1% 0 0 !important;
|
||||||
|
padding-bottom: 0 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-card {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.nodeBox {
|
||||||
|
width: 80%;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 30px;
|
||||||
|
border-radius: 10px;
|
||||||
|
overflow: hidden;
|
||||||
|
background-color: aliceblue;
|
||||||
|
|
||||||
|
.nodeorgNameTg {
|
||||||
|
background-color: #1abe20;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nameTag {
|
||||||
|
line-height: 30px;
|
||||||
|
padding: 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nodeorgNameDd {
|
||||||
|
background-color: #18a2dd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fontColor {
|
||||||
|
color: #1abe20;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fontColorDd {
|
||||||
|
color: #18a2dd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.card-header {
|
||||||
|
font-size: 18px;
|
||||||
|
color: #303133;
|
||||||
|
font-weight: 600;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-card {
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-1 {
|
||||||
|
width: 48%;
|
||||||
|
font-family: verdana;
|
||||||
|
font-size: 14px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
|
||||||
|
.lable {
|
||||||
|
font-size: 14px;
|
||||||
|
width: 13%;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-image {
|
||||||
|
padding: 0 5px;
|
||||||
|
max-width: 300px;
|
||||||
|
max-height: 200px;
|
||||||
|
width: 100%;
|
||||||
|
height: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-slot {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: var(--el-fill-color-light);
|
||||||
|
color: var(--el-text-color-secondary);
|
||||||
|
font-size: 30px;
|
||||||
|
border: 1px solid silver;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid-container {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(6, 1fr);
|
||||||
|
/* 5等分列 */
|
||||||
|
gap: 0px;
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid-item {
|
||||||
|
width: 290px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -35,7 +35,10 @@
|
|||||||
</template>
|
</template>
|
||||||
<!-- 操作 -->
|
<!-- 操作 -->
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<el-link type="primary" v-if="roleList.includes('BK_SH_RY')" size="small" @click="handleDetail(row,'审核')">审核</el-link>
|
<el-link type="primary" size="small" @click="showDetail(row)">指令下发</el-link>
|
||||||
|
<el-link type="primary" v-if="roleList.includes('BK_SH_RY')" size="small" @click="createProcess(row)">审核</el-link>
|
||||||
|
<el-link type="primary" size="small" @click="opeshow(row)">详情</el-link>
|
||||||
|
<!-- <el-link type="primary" v-if="roleList.includes('BK_SH_RY')" size="small" @click="handleDetail(row,'审核')">审核</el-link> -->
|
||||||
</template>
|
</template>
|
||||||
</MyTable>
|
</MyTable>
|
||||||
<Pages
|
<Pages
|
||||||
@ -49,7 +52,14 @@
|
|||||||
></Pages>
|
></Pages>
|
||||||
</div>
|
</div>
|
||||||
<Model v-model="isShow" :data="chooeRow" @change="getList" :dic="{D_BZ_RCSHZT}"></Model>
|
<Model v-model="isShow" :data="chooeRow" @change="getList" :dic="{D_BZ_RCSHZT}"></Model>
|
||||||
|
<Details ref="details"/>
|
||||||
</div>
|
</div>
|
||||||
|
<SubmissionProcess v-model="showSp" :data="rowData"
|
||||||
|
:userData="{ ajmc: '重点人员深度发掘审批', flowType: 'ZDRYSDFJDP',modelName:'重点人' }"
|
||||||
|
:path="fixedValue" @getList="getList" />
|
||||||
|
<Information v-model="showDialog" title="发送指令" @submit='submit' @close='close'>
|
||||||
|
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="zdrfj" :tacitly="tacitly"/>
|
||||||
|
</Information>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@ -61,7 +71,10 @@ import Pages from "@/components/aboutTable/Pages.vue";
|
|||||||
import Search from "@/components/aboutTable/Search.vue";
|
import Search from "@/components/aboutTable/Search.vue";
|
||||||
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";
|
||||||
|
import SubmissionProcess from '@/components/flowPath/submissionProcess.vue'
|
||||||
|
import Details from './details.vue'
|
||||||
|
import Information from "@/views/home/model/information.vue";
|
||||||
|
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_BZ_RCSHZT, D_GS_RQFJ_LX, D_GS_RQFJ_FXDJ, D_BZ_SF, D_GS_RQFJ_FXLB } =
|
const { D_BZ_RCSHZT, D_GS_RQFJ_LX, D_GS_RQFJ_FXDJ, D_BZ_SF, D_GS_RQFJ_FXLB } =
|
||||||
proxy.$dict(
|
proxy.$dict(
|
||||||
@ -115,9 +128,9 @@ const pageData = reactive({
|
|||||||
pageSize: 20,
|
pageSize: 20,
|
||||||
pageCurrent: 1
|
pageCurrent: 1
|
||||||
},
|
},
|
||||||
controlsWidth: 120,
|
controlsWidth: 240,
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "姓名", prop: "ryXm",showOverflowTooltip:true ,showSolt: true},
|
{ label: "个人信息", prop: "ryXm",showOverflowTooltip:true ,showSolt: true},
|
||||||
{ label: "户籍地址", prop: "ryHjdz" ,showOverflowTooltip:true},
|
{ label: "户籍地址", prop: "ryHjdz" ,showOverflowTooltip:true},
|
||||||
{ label: "护照号码", prop: "ryHzhm" ,showOverflowTooltip:true},
|
{ label: "护照号码", prop: "ryHzhm" ,showOverflowTooltip:true},
|
||||||
{ label: "现住地址", prop: "ryXzdz" ,showOverflowTooltip:true},
|
{ label: "现住地址", prop: "ryXzdz" ,showOverflowTooltip:true},
|
||||||
@ -184,6 +197,45 @@ const tabHeightFn = () => {
|
|||||||
tabHeightFn();
|
tabHeightFn();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
// 审批流
|
||||||
|
// 固定值
|
||||||
|
const fixedValue = {
|
||||||
|
clueVerification:'focusExploration',
|
||||||
|
byMeansOf: 'tbGsxtRqfjRy/callback',
|
||||||
|
nobyMeansOf: 'tbGsxtRqfjRy/callback',
|
||||||
|
recycle:'tbGsxtRqfjRy/callback',
|
||||||
|
|
||||||
|
}
|
||||||
|
const showSp = ref(false);
|
||||||
|
const rowData = ref()
|
||||||
|
const createProcess = (row) => {
|
||||||
|
showSp.value = true;
|
||||||
|
rowData.value = row
|
||||||
|
}
|
||||||
|
const details=ref()
|
||||||
|
const opeshow = (row) => {
|
||||||
|
details.value.init(row)
|
||||||
|
}
|
||||||
|
//下发指令
|
||||||
|
const showDialog = ref(false)
|
||||||
|
const itemData = ref()
|
||||||
|
const semdFqzlRef=ref()
|
||||||
|
const handleClose = () => {
|
||||||
|
showDialog.value = false;
|
||||||
|
}
|
||||||
|
const showDetail = (item) => {
|
||||||
|
showDialog.value = true;
|
||||||
|
itemData.value=item
|
||||||
|
}
|
||||||
|
const submit=()=>{
|
||||||
|
semdFqzlRef.value.getsendFqzl()
|
||||||
|
}
|
||||||
|
const close = () => {
|
||||||
|
semdFqzlRef.value.close()
|
||||||
|
}
|
||||||
|
const tacitly = {
|
||||||
|
title:'ryXm'
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
@ -0,0 +1,191 @@
|
|||||||
|
<template>
|
||||||
|
<div class="dialog" v-if="dialogForm">
|
||||||
|
<div class="head_box">
|
||||||
|
<span class="title">人力情报信息采集流转详情</span>
|
||||||
|
<div>
|
||||||
|
<el-button @click="close">关闭</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form_cnt">
|
||||||
|
<FormMessage disabled v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
|
||||||
|
<template #gapdive>
|
||||||
|
<div style="width: 100%;height: 10px;" class="mb20">
|
||||||
|
<el-divider content-position="left">基础信息</el-divider>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template #gapline>
|
||||||
|
<div style="width: 100%;height: 10px;" class="mb20">
|
||||||
|
<el-divider content-position="left">情报内容</el-divider>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template #scfj>
|
||||||
|
<div style="width: 100%;padding-left: 50px;">
|
||||||
|
<div>上传附件:<span class="f12">(可附电子表格、Word文档、图像、音视频文件)</span> </div>
|
||||||
|
<div><MOSTY.Upload :showBtn="true" :isAll="true" :isImg="true" disabled :limit="10" v-model="fjdz" /> </div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</FormMessage>
|
||||||
|
<el-divider content-position="left"><span class="mr20">相关人员</span> </el-divider>
|
||||||
|
<MyTable
|
||||||
|
:tableData="pageForm.tableData"
|
||||||
|
:tableColumn="pageForm.tableColumn"
|
||||||
|
:tableHeight="pageForm.tableHeight"
|
||||||
|
:key="pageForm.keyCount"
|
||||||
|
:tableConfiger="pageForm.tableConfiger"
|
||||||
|
:controlsWidth="pageForm.controlsWidth"
|
||||||
|
>
|
||||||
|
<template #xb="{row}">
|
||||||
|
<DictTag :value="row.xb" :tag="false" :options="props.dic.D_BZ_XB" />
|
||||||
|
</template>
|
||||||
|
<template #bqList="{row}">
|
||||||
|
<div v-if="row.bqList">
|
||||||
|
<el-tag type="success" v-for="(it,idx) in row.bqList" :key="idx">{{ it.bqMc }}</el-tag >
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<!-- 操作 -->
|
||||||
|
<template #controls="{ row,index }">
|
||||||
|
<el-link size="small" type="success" @click="addEdit('detail', row,index)">详情</el-link>
|
||||||
|
</template>
|
||||||
|
</MyTable>
|
||||||
|
</div>
|
||||||
|
<!-- 人员 -->
|
||||||
|
<AddPeo ref="showAdd" v-if="showPerson" v-model="showPerson" :dic="props.dic" ></AddPeo>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import * as MOSTY from "@/components/MyComponents/index";
|
||||||
|
import AddPeo from '@/components/addPerson/index.vue'
|
||||||
|
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||||
|
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||||
|
import { qcckGet } from "@/api/qcckApi.js";
|
||||||
|
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, nextTick } from "vue";
|
||||||
|
const emit = defineEmits(["change"]);
|
||||||
|
const props = defineProps({
|
||||||
|
dic: Object
|
||||||
|
});
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const dialogForm = ref(false); //弹窗
|
||||||
|
const rules = reactive({
|
||||||
|
xsMc: [{ required: true, message: "请输入情报名称", trigger: "blur" }],
|
||||||
|
xlLx: [{ required: true, message: "请选择情报类型", trigger: "change" }],
|
||||||
|
qbLy: [{ required: true, message: "请选择情报来源", trigger: "change" }],
|
||||||
|
});
|
||||||
|
const formData = ref([
|
||||||
|
{ prop: "gapdive", type: "slot",width:'100%' },
|
||||||
|
{ label: "情报名称", prop: "xsMc", type: "input" },
|
||||||
|
{ label: "情报类型", prop: "xlLx", type: "select", options:props.dic.D_GS_XS_LX },
|
||||||
|
{ label: "情报来源", prop: "qbLy", type: "select", options:props.dic.D_GS_XS_LY},
|
||||||
|
{ label: "情报上报时间", prop: "zxkssj", type: "datetime"},
|
||||||
|
// { label: "指向结束时间", prop: "zxjssj", type: "datetime"},
|
||||||
|
{ label: "指向地点", prop: "zxdz", type: "input"},
|
||||||
|
{ label: "所属专题", prop: "sszt", type: "select",options:props.dic.D_BZ_SSZT},
|
||||||
|
{ prop: "gapline", type: "slot",width:'100%' },
|
||||||
|
{ prop: "scfj", type: "slot",width:'100%'},
|
||||||
|
{ label: "情报内容", prop: "xsNr", type: "textarea",width:'100%'},
|
||||||
|
{ label: "群体类型", prop: "qtlx", type: "select",options:props.dic.D_GS_XS_QTLX },
|
||||||
|
{ label: "群体名称", prop: "qtmc", type: "input"},
|
||||||
|
{ label: "涉及人数", prop: "sjrs", type: "inputNumber"},
|
||||||
|
{ label: "情报报送单位", prop: "ssbmdm", type: "department"},
|
||||||
|
]);
|
||||||
|
const fjdz = ref()
|
||||||
|
const listQuery = ref({}); //表单
|
||||||
|
const loading = ref(false);
|
||||||
|
const elform = ref();
|
||||||
|
const pageForm = reactive({
|
||||||
|
tableData: [],
|
||||||
|
keyCount: 0,
|
||||||
|
tableConfiger: {
|
||||||
|
rowHieght: 61,
|
||||||
|
showSelectType: "checkBox",
|
||||||
|
loading: false
|
||||||
|
},
|
||||||
|
controlsWidth: 220,
|
||||||
|
tableColumn: [
|
||||||
|
{ label: "姓名", prop: "xm" },
|
||||||
|
{ label: "性别", prop: "xb",showSolt:true },
|
||||||
|
{ label: "身份证号", prop: "sfzh" },
|
||||||
|
{ label: "户籍地", prop: "hjdz" },
|
||||||
|
{ label: "户籍地派出所", prop: "hjdpcs" },
|
||||||
|
{ label: "标签", prop: "bqList",showSolt:true }
|
||||||
|
]
|
||||||
|
});
|
||||||
|
const showAdd = ref()
|
||||||
|
const showPerson = ref(false)
|
||||||
|
onMounted(()=>{
|
||||||
|
tabHeightFn()
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
// 初始化数据
|
||||||
|
const init = (type, row) => {
|
||||||
|
fjdz.value = []
|
||||||
|
tabHeightFn()
|
||||||
|
dialogForm.value = true;
|
||||||
|
// 初始化表单数据,并根据详情页设置禁用状态
|
||||||
|
if (row) getDataById(row.id);
|
||||||
|
};
|
||||||
|
// 根据id查询详情
|
||||||
|
const getDataById = (id) => {
|
||||||
|
qcckGet({id}, "/mosty-gsxt/qbcj/selectByid").then((res) => {
|
||||||
|
fjdz.value = res.ossList || [];
|
||||||
|
listQuery.value = res;
|
||||||
|
pageForm.tableData = res.ryList || [];
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 打开弹窗
|
||||||
|
const addEdit = (type,row,index) =>{
|
||||||
|
showPerson.value = true;
|
||||||
|
nextTick(()=>{
|
||||||
|
showAdd.value.init(type,row,index)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 关闭
|
||||||
|
const close = () => {
|
||||||
|
fjdz.value = []
|
||||||
|
listQuery.value = {};
|
||||||
|
dialogForm.value = false;
|
||||||
|
loading.value = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 表格高度计算
|
||||||
|
const tabHeightFn = () => {
|
||||||
|
pageForm.tableHeight = window.innerHeight - 720;
|
||||||
|
window.onresize = function () {
|
||||||
|
tabHeightFn();
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
defineExpose({ init });
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "~@/assets/css/layout.scss";
|
||||||
|
@import "~@/assets/css/element-plus.scss";
|
||||||
|
::v-deep .el-tabs--card > .el-tabs__header .el-tabs__item.is-active {
|
||||||
|
color: #0072ff;
|
||||||
|
background: rgba(0, 114, 255, 0.3);
|
||||||
|
}
|
||||||
|
.boxlist {
|
||||||
|
width: 99%;
|
||||||
|
height: 225px;
|
||||||
|
margin-top: 10px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .avatar-uploader{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-upload-list{
|
||||||
|
margin-left: 20px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
::v-deep .el-upload-list__item-name .el-icon{
|
||||||
|
top: 3px;
|
||||||
|
}
|
||||||
|
</style>
|
@ -15,7 +15,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<template #gapline>
|
<template #gapline>
|
||||||
<div style="width: 100%;height: 10px;" class="mb20">
|
<div style="width: 100%;height: 10px;" class="mb20">
|
||||||
<el-divider content-position="left">线索内容</el-divider>
|
<el-divider content-position="left">情报内容</el-divider>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template #scfj>
|
<template #scfj>
|
||||||
@ -67,26 +67,26 @@ const props = defineProps({
|
|||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const dialogForm = ref(false); //弹窗
|
const dialogForm = ref(false); //弹窗
|
||||||
const rules = reactive({
|
const rules = reactive({
|
||||||
xsMc: [{ required: true, message: "请输入线索名称", trigger: "blur" }],
|
xsMc: [{ required: true, message: "请输入情报名称", trigger: "blur" }],
|
||||||
xlLx: [{ required: true, message: "请选择线索类型", trigger: "change" }],
|
xlLx: [{ required: true, message: "请选择情报类型", trigger: "change" }],
|
||||||
qbLy: [{ required: true, message: "请选择情报来源", trigger: "change" }],
|
qbLy: [{ required: true, message: "请选择情报来源", trigger: "change" }],
|
||||||
});
|
});
|
||||||
const formData = ref([
|
const formData = ref([
|
||||||
{ prop: "gapdive", type: "slot",width:'100%' },
|
{ prop: "gapdive", type: "slot",width:'100%' },
|
||||||
{ label: "线索名称", prop: "xsMc", type: "input" },
|
{ label: "情报名称", prop: "xsMc", type: "input" },
|
||||||
{ label: "线索类型", prop: "xlLx", type: "select", options:props.dic.D_GS_XS_LX },
|
{ label: "情报类型", prop: "xlLx", type: "select", options:props.dic.D_GS_XS_LX },
|
||||||
{ label: "情报来源", prop: "qbLy", type: "select", options:props.dic.D_GS_XS_LY},
|
{ label: "情报来源", prop: "qbLy", type: "select", options:props.dic.D_GS_XS_LY},
|
||||||
{ label: "指向开始时间", prop: "zxkssj", type: "datetime"},
|
{ label: "情报上报时间", prop: "zxkssj", type: "datetime"},
|
||||||
{ label: "指向结束时间", prop: "zxjssj", type: "datetime"},
|
// { label: "指向结束时间", prop: "zxjssj", type: "datetime"},
|
||||||
{ label: "指向地点", prop: "zxdz", type: "input"},
|
{ label: "指向地点", prop: "zxdz", type: "input"},
|
||||||
{ label: "所属专题", prop: "sszt", type: "select",options:props.dic.D_BZ_SSZT},
|
{ label: "所属专题", prop: "sszt", type: "select",options:props.dic.D_BZ_SSZT},
|
||||||
{ prop: "gapline", type: "slot",width:'100%' },
|
{ prop: "gapline", type: "slot",width:'100%' },
|
||||||
{ prop: "scfj", type: "slot",width:'100%'},
|
{ prop: "scfj", type: "slot",width:'100%'},
|
||||||
{ label: "线索内容", prop: "xsNr", type: "textarea",width:'100%'},
|
{ label: "情报内容", prop: "xsNr", type: "textarea",width:'100%'},
|
||||||
{ label: "群体类型", prop: "qtlx", type: "select",options:props.dic.D_GS_XS_QTLX },
|
{ label: "群体类型", prop: "qtlx", type: "select",options:props.dic.D_GS_XS_QTLX },
|
||||||
{ label: "群体名称", prop: "qtmc", type: "input"},
|
{ label: "群体名称", prop: "qtmc", type: "input"},
|
||||||
{ label: "涉及人数", prop: "sjrs", type: "inputNumber"},
|
{ label: "涉及人数", prop: "sjrs", type: "inputNumber"},
|
||||||
{ label: "线索报送单位", prop: "ssbmdm", type: "department"},
|
{ label: "情报报送单位", prop: "ssbmdm", type: "department"},
|
||||||
]);
|
]);
|
||||||
const fjdz = ref()
|
const fjdz = ref()
|
||||||
const listQuery = ref({}); //表单
|
const listQuery = ref({}); //表单
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
<span style="vertical-align: middle">导出</span>
|
<span style="vertical-align: middle">导出</span>
|
||||||
</el-button> -->
|
</el-button> -->
|
||||||
<el-button type="primary" @click="dologShowFn()">
|
<el-button type="primary" @click="dologShowFn()">
|
||||||
<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>
|
||||||
</PageTitle>
|
</PageTitle>
|
||||||
@ -18,13 +20,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 表格 -->
|
<!-- 表格 -->
|
||||||
<div class="tabBox">
|
<div class="tabBox">
|
||||||
<MyTable
|
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||||
:tableData="pageData.tableData"
|
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||||
:tableColumn="pageData.tableColumn"
|
|
||||||
:tableHeight="pageData.tableHeight"
|
|
||||||
:key="pageData.keyCount"
|
|
||||||
:tableConfiger="pageData.tableConfiger"
|
|
||||||
:controlsWidth="pageData.controlsWidth"
|
|
||||||
@chooseData="chooseData">
|
@chooseData="chooseData">
|
||||||
|
|
||||||
<template #xlLx="{ row }">
|
<template #xlLx="{ row }">
|
||||||
@ -33,24 +30,29 @@
|
|||||||
<template #qbLy="{ row }">
|
<template #qbLy="{ row }">
|
||||||
<DictTag :tag="false" :value="row.qbLy" :options="D_GS_XS_LY" />
|
<DictTag :tag="false" :value="row.qbLy" :options="D_GS_XS_LY" />
|
||||||
</template>
|
</template>
|
||||||
<template #czzt="{row}">
|
<!-- <template #czzt="{row}">
|
||||||
<DictTag :tag="false" :value="row.czzt" :options="D_GS_XS_CZZT" />
|
<DictTag :tag="false" :value="row.czzt" :options="D_GS_XS_CZZT" />
|
||||||
</template>
|
</template> -->
|
||||||
<template #shzt="{ row }">
|
<template #shzt="{ row }">
|
||||||
<!-- 采纳(将这条信息推送到情报管理),退回! -->
|
<!-- 采纳(将这条信息推送到情报管理),退回! -->
|
||||||
<DictTag :tag="false" :value="row.shzt" :options="D_BZ_XSSHZT" @clickTag="clickTag(row.shzt)" />
|
<DictTag :tag="false" :value="row.shzt" :options="D_BZ_XSSHZT" @clickTag="clickTag(row.shzt)" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<!-- 操作 -->
|
<!-- 操作 -->
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<el-link size="small" type="primary" @click="addEdit('edit', row)">编辑</el-link>
|
<el-link size="small" type="primary" @click="addEdit('edit', row)">详情</el-link>
|
||||||
|
<!-- <el-link size="small" type="primary" @click="addEdit('edit', row)">下发指令</el-link> -->
|
||||||
|
<el-popconfirm title="是否进行发布?" @confirm="confirm(row)">
|
||||||
|
<template #reference>
|
||||||
|
<el-link size="small" type="primary">发布</el-link>
|
||||||
|
</template>
|
||||||
|
</el-popconfirm>
|
||||||
<el-popover placement="left" :visible="row.visible" :width="400" trigger="click">
|
<el-popover placement="left" :visible="row.visible" :width="400" trigger="click">
|
||||||
<template #reference>
|
<template #reference>
|
||||||
<el-link size="small" type="primary" @click.stop="handleSh(row)">审核</el-link>
|
<el-link size="small" type="primary" @click.stop="handleSh(row)">转线索</el-link>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div class="flex mb10 align-center">
|
<div class="flex mb10 align-center">
|
||||||
<div class="w70 label-pop">审核状态 :</div>
|
<div class="w70 label-pop">状态 :</div>
|
||||||
<div style="flex:1">
|
<div style="flex:1">
|
||||||
<el-radio-group v-model="chooseRow.shzt" @change="rules.bhyy = false">
|
<el-radio-group v-model="chooseRow.shzt" @change="rules.bhyy = false">
|
||||||
<el-radio v-for="obj in D_BZ_XSSHZT" :key="obj.value" :label="obj.value">{{ obj.zdmc }}</el-radio>
|
<el-radio v-for="obj in D_BZ_XSSHZT" :key="obj.value" :label="obj.value">{{ obj.zdmc }}</el-radio>
|
||||||
@ -60,7 +62,8 @@
|
|||||||
<div class="flex" v-if="chooseRow.shzt == '01'">
|
<div class="flex" v-if="chooseRow.shzt == '01'">
|
||||||
<div class="w70 label-pop">驳回原因 :</div>
|
<div class="w70 label-pop">驳回原因 :</div>
|
||||||
<div style="flex:1">
|
<div style="flex:1">
|
||||||
<MOSTY.Other filterable style="width: 100%;" v-model="chooseRow.bhyy" type="textarea" rows="3" clearable placeholder="请输入审核原因"/>
|
<MOSTY.Other filterable style="width: 100%;" v-model="chooseRow.bhyy" type="textarea" rows="3" clearable
|
||||||
|
placeholder="请输入审核原因" />
|
||||||
<div class="f12" style="color: red;" v-if="rules.bhyy">请输入驳回原因</div>
|
<div class="f12" style="color: red;" v-if="rules.bhyy">请输入驳回原因</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -73,18 +76,14 @@
|
|||||||
<el-link size="small" type="danger" @click="delDictItem(row.id)">删除</el-link>
|
<el-link size="small" type="danger" @click="delDictItem(row.id)">删除</el-link>
|
||||||
</template>
|
</template>
|
||||||
</MyTable>
|
</MyTable>
|
||||||
<Pages
|
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||||
@changeNo="changeNo"
|
|
||||||
@changeSize="changeSize"
|
|
||||||
:tableHeight="pageData.tableHeight"
|
|
||||||
:pageConfiger="{
|
|
||||||
...pageData.pageConfiger,
|
...pageData.pageConfiger,
|
||||||
total: pageData.total
|
total: pageData.total
|
||||||
}"
|
}"></Pages>
|
||||||
></Pages>
|
|
||||||
</div>
|
</div>
|
||||||
<!-- 新增 -->
|
<!-- 新增 -->
|
||||||
<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 }" />
|
||||||
|
|
||||||
<DialogDragger title="全域搜索" top="30px" v-model="dologShow" coumClass="zdy-model-dialogs" @close="close" width="80%">
|
<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">
|
<iframe style="width: 100%; height: 1000px" src="https://www.baidu.com" frameborder="0">
|
||||||
@ -105,6 +104,7 @@ 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 {updateBkgzl} from '@/api/'
|
||||||
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();
|
||||||
@ -116,12 +116,12 @@ const rules = reactive({
|
|||||||
})
|
})
|
||||||
const isShow = ref(false)
|
const isShow = ref(false)
|
||||||
const searchConfiger = ref([
|
const searchConfiger = ref([
|
||||||
{ label: "线索名称", prop: 'xsMc', placeholder: "请输入线索名称", showType: "input" },
|
{ label: "情报名称", prop: 'xsMc', placeholder: "请输入情报名称", showType: "input" },
|
||||||
{ label: "内容关键字", prop: 'xsNr', placeholder: "请输入语义关键字", showType: "input" },
|
{ label: "内容关键字", prop: 'xsNr', placeholder: "请输入语义关键字", showType: "input" },
|
||||||
{ label: "线索类型", prop: 'xlLx', placeholder: "请选择线索类型", showType: "select",options:D_GS_XS_LX },
|
{ label: "情报类型", prop: 'xlLx', placeholder: "请选择情报类型", showType: "select", options: D_GS_XS_LX },
|
||||||
{ label: "线索来源", prop: 'qbLy', placeholder: "请选择线索来源", showType: "select",options:D_GS_XS_LY },
|
{ label: "情报来源", prop: 'qbLy', placeholder: "请选择情报来源", showType: "select", options: D_GS_XS_LY },
|
||||||
{ label: "开始时间", prop: 'kssj', placeholder: "请选择开始时间", showType: "date" },
|
{ label: "情报上报时间", prop: 'kssj', placeholder: "请选择开始时间", showType: "date" },
|
||||||
{ label: "结束时间", prop: 'jssj', placeholder: "请选择结束时间", showType: "date" },
|
// { label: "结束时间", prop: 'jssj', placeholder: "请选择结束时间", showType: "date" },
|
||||||
{ label: "指向地点", prop: 'zxdz', placeholder: "请输入指向地点", showType: "input" },
|
{ label: "指向地点", prop: 'zxdz', placeholder: "请输入指向地点", showType: "input" },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@ -140,20 +140,21 @@ const pageData = reactive({
|
|||||||
pageSize: 20,
|
pageSize: 20,
|
||||||
pageCurrent: 1
|
pageCurrent: 1
|
||||||
},
|
},
|
||||||
controlsWidth: 150,
|
controlsWidth: 240,
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "上报人姓名", prop: "xssbr" },
|
{ label: "上报人姓名", prop: "xssbr" },
|
||||||
{ label: "上报人电话", prop: "xssbrdh" },
|
// { label: "上报人电话", prop: "xssbrdh" },
|
||||||
{ label: "线索编号", prop: "xsBh" },
|
{ label: "情报编号", prop: "xsBh" },
|
||||||
{ label: "线索名称", prop: "xsMc" },
|
{ label: "情报名称", prop: "xsMc" },
|
||||||
{ label: "线索类型", prop: "xlLx",showSolt:true },
|
{ label: "情报类型", prop: "xlLx", showSolt: true },
|
||||||
{ label: "线索来源", prop: "qbLy",showSolt:true },
|
{ label: "情报来源", prop: "qbLy", showSolt: true },
|
||||||
{ label: "开始时间", prop: "zxkssj" },
|
{ label: "情报上报时间", prop: "zxkssj" },
|
||||||
{ label: "结束时间", prop: "zxjssj" },
|
// { label: "结束时间", prop: "zxjssj" },
|
||||||
{ label: "指向地点", prop: "zxdz" },
|
{ label: "指向地点", prop: "zxdz" },
|
||||||
{ label: "线索内容", prop: "xsNr"},
|
{ label: "情报内容", prop: "xsNr" },
|
||||||
{ label: "处置状态", prop: "czzt",showSolt: true},
|
// { label: "处置状态", prop: "czzt",showSolt: true},
|
||||||
{ label: "附件", prop: "fjdz", showSolt: true },
|
{ label: "附件", prop: "fjdz", showSolt: true },
|
||||||
|
// { label: "关联任务", prop: "xssbrdh" },//没有字段
|
||||||
{ label: "审核状态", prop: "shzt", showSolt: true },
|
{ label: "审核状态", prop: "shzt", showSolt: true },
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
@ -234,7 +235,14 @@ const addEdit = (type, row) => {
|
|||||||
detailDiloag.value.init(type, row);
|
detailDiloag.value.init(type, row);
|
||||||
}, 500)
|
}, 500)
|
||||||
};
|
};
|
||||||
|
//发布
|
||||||
|
const confirm = (item) => {
|
||||||
|
qcckPost({id:item.id,sffb:1}, '/mosty-gsxt/qbcj/qbfb').then(res => {
|
||||||
|
proxy.$message({ type: "success", message: "发布成功" });
|
||||||
|
getList();
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
// 表格高度计算
|
// 表格高度计算
|
||||||
const tabHeightFn = () => {
|
const tabHeightFn = () => {
|
||||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
||||||
@ -251,6 +259,7 @@ const dologShowFn = (val) =>{
|
|||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.label-pop {
|
.label-pop {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
&::before {
|
&::before {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
content: '*';
|
content: '*';
|
||||||
@ -259,17 +268,17 @@ const dologShowFn = (val) =>{
|
|||||||
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 {
|
:v-deep .el-dialog {
|
||||||
width: 90% !important;
|
width: 90% !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.zdy-model-dialogs {
|
.zdy-model-dialogs {
|
||||||
/* background-color: rgb(50, 148, 214); */
|
/* background-color: rgb(50, 148, 214); */
|
||||||
background: url("~@/assets/images/bg46.png") no-repeat center center;
|
background: url("~@/assets/images/bg46.png") no-repeat center center;
|
||||||
@ -281,4 +290,3 @@ width: 90% !important;
|
|||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="dialog" v-if="dialogForm">
|
<div class="dialog" v-if="dialogForm">
|
||||||
<div class="head_box">
|
<div class="head_box">
|
||||||
<span class="title">人力情报信息搜索任务调度{{ title }} </span>
|
<span class="title">人力情报信息收集任务调度{{ title }} </span>
|
||||||
<div>
|
<div>
|
||||||
<el-button type="primary" size="small" :loading="loading" @click="submit">保存</el-button>
|
<el-button type="primary" size="small" :loading="loading" @click="submit">保存</el-button>
|
||||||
<el-button size="small" @click="close">关闭</el-button>
|
<el-button size="small" @click="close">关闭</el-button>
|
||||||
@ -11,7 +11,7 @@
|
|||||||
<FormMessage :formList="formData" v-model="listQuery" ref="elform" :rules="rules">
|
<FormMessage :formList="formData" v-model="listQuery" ref="elform" :rules="rules">
|
||||||
<!-- 线索列表-->
|
<!-- 线索列表-->
|
||||||
<template #xsList>
|
<template #xsList>
|
||||||
<el-button @click="chooseVisiblex = true;">选择</el-button>
|
<!-- <el-button @click="chooseVisiblex = true;">选择</el-button>
|
||||||
<div class="boxlist">
|
<div class="boxlist">
|
||||||
<MyTable :tableData="listQuery.xsList" :tableColumn="tableDate.tableColumn"
|
<MyTable :tableData="listQuery.xsList" :tableColumn="tableDate.tableColumn"
|
||||||
:tableHeight="tableDate.tableHeight" :key="tableDate.keyCount" :tableConfiger="tableDate.tableConfiger"
|
:tableHeight="tableDate.tableHeight" :key="tableDate.keyCount" :tableConfiger="tableDate.tableConfiger"
|
||||||
@ -19,11 +19,24 @@
|
|||||||
<template #qbLy="{ row }">
|
<template #qbLy="{ row }">
|
||||||
<DictTag :tag="false" :value="row.qbLy" :options="props.dic.D_GS_XS_LY" />
|
<DictTag :tag="false" :value="row.qbLy" :options="props.dic.D_GS_XS_LY" />
|
||||||
</template>
|
</template>
|
||||||
<!-- 操作 -->
|
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<el-link size="small" type="danger" @click="delDictItem(row.id)">删除</el-link>
|
<el-link size="small" type="danger" @click="delDictItem(row.id)">删除</el-link>
|
||||||
</template>
|
</template>
|
||||||
</MyTable>
|
</MyTable>
|
||||||
|
</div> -->
|
||||||
|
<div class="boxlist">
|
||||||
|
<MyTable :tableData="listQuery.xsList" :tableColumn="tableDate.tableColumn"
|
||||||
|
:tableHeight="tableDate.tableHeight" :key="tableDate.keyCount" :tableConfiger="tableDate.tableConfiger"
|
||||||
|
:controlsWidth="tableDate.controlsWidth" @chooseData="chooseData">
|
||||||
|
<template #qbLy="{ row }">
|
||||||
|
<DictTag :tag="false" :value="row.qbLy" :options="props.dic.D_GS_XS_LY" />
|
||||||
|
</template>
|
||||||
|
<template #controls="{ row }">
|
||||||
|
<el-link size="small" type="danger" @click="delDictItem(row.id)">删除</el-link>
|
||||||
|
<!-- 弹窗 -->
|
||||||
|
<el-link size="small" type="danger" @click="delDictItem(row.id)">详情</el-link>
|
||||||
|
</template>
|
||||||
|
</MyTable>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</FormMessage>
|
</FormMessage>
|
||||||
@ -61,13 +74,19 @@ const tableDate = reactive({
|
|||||||
}, //分页
|
}, //分页
|
||||||
controlsWidth: 120, //操作栏宽度
|
controlsWidth: 120, //操作栏宽度
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "线索名称", prop: "xsMc" },
|
// { label: "线索名称", prop: "xsMc" },
|
||||||
{ label: "线索编号", prop: "xsBh"},
|
// { label: "线索编号", prop: "xsBh"},
|
||||||
{ label: "线索来源", prop: "qbLy", showSolt: true},
|
// { label: "线索来源", prop: "qbLy", showSolt: true},
|
||||||
{ label: "开始时间", prop: "zxkssj"},
|
// { label: "开始时间", prop: "zxkssj"},
|
||||||
{ label: "结束时间", prop: "zxjssj"},
|
// { label: "结束时间", prop: "zxjssj"},
|
||||||
{ label: "指向地点", prop: "zxdz"},
|
// { label: "指向地点", prop: "zxdz"},
|
||||||
{ label: "线索内容", prop: "xsNr",showOverflowTooltip:true },
|
// { label: "线索内容", prop: "xsNr",showOverflowTooltip:true },
|
||||||
|
// { label: "处置状态", prop: "czzt", showSolt: true },
|
||||||
|
{ label: "反馈单位", prop: "xsMc" },
|
||||||
|
{ label: "反馈民警", prop: "xsBh"},
|
||||||
|
{ label: "反馈时间", prop: "qbLy", showSolt: true},
|
||||||
|
{ label: "反馈内容", prop: "zxkssj" },
|
||||||
|
{ label: "图片", prop: "czzt", showSolt: true },
|
||||||
{ label: "处置状态", prop: "czzt", showSolt: true },
|
{ label: "处置状态", prop: "czzt", showSolt: true },
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
@ -86,7 +105,6 @@ const rules = reactive({
|
|||||||
});
|
});
|
||||||
const formData = ref([
|
const formData = ref([
|
||||||
{ label: "所属部门", prop: "ssbmdm", depMc: 'ssbmmc', type: "department" },
|
{ label: "所属部门", prop: "ssbmdm", depMc: 'ssbmmc', type: "department" },
|
||||||
{ label: "报送单位", prop: "bsDwDm",depMc:'bsDwMc', type: "department" },
|
|
||||||
{ label: "任务标题", prop: "rwBt", type: "input" },
|
{ label: "任务标题", prop: "rwBt", type: "input" },
|
||||||
{ label: "任务编号", prop: "rwBh", type: "input" },
|
{ label: "任务编号", prop: "rwBh", type: "input" },
|
||||||
{ label: "任务类型", prop: "rwLx", type: "select", options: props.dic.D_GS_RLQB_RWDD_LX },
|
{ label: "任务类型", prop: "rwLx", type: "select", options: props.dic.D_GS_RLQB_RWDD_LX },
|
||||||
@ -94,8 +112,10 @@ const formData = ref([
|
|||||||
{ label: "反馈开始时间", prop: "rwSjKs", type: "datetime" },
|
{ label: "反馈开始时间", prop: "rwSjKs", type: "datetime" },
|
||||||
{ label: "反馈截止时间", prop: "rwSjFkjz", type: "datetime" },
|
{ label: "反馈截止时间", prop: "rwSjFkjz", type: "datetime" },
|
||||||
{ label: "严重程度", prop: "rwYzcd", type: "select", options: props.dic.D_GS_RLQB_RWDD_YZCD },
|
{ label: "严重程度", prop: "rwYzcd", type: "select", options: props.dic.D_GS_RLQB_RWDD_YZCD },
|
||||||
|
{ label: "报送单位", prop: "bsDwDm", depMc: 'bsDwMc', type: "department", multiple: true, width: '100%' },
|
||||||
{ label: "任务内容", prop: "rwNr", type: "textarea", width: "100%" },
|
{ label: "任务内容", prop: "rwNr", type: "textarea", width: "100%" },
|
||||||
{ label: "线索列表", prop: "xsList", type: "slot", width: "99%" }
|
// { label: "线索列表", prop: "xsList", type: "slot", width: "99%" }
|
||||||
|
{ label: "反馈内容", prop: "xsList", type: "slot", width: "99%" }
|
||||||
]);
|
]);
|
||||||
const listQuery = ref({}); //表单
|
const listQuery = ref({}); //表单
|
||||||
const loading = ref(false);
|
const loading = ref(false);
|
||||||
@ -122,7 +142,7 @@ const submit = () => {
|
|||||||
let url = title.value == "新增" ? "/mosty-gsxt/tbGsxtRlqbRwdd/save" : "/mosty-gsxt/tbGsxtRlqbRwdd/update";
|
let url = title.value == "新增" ? "/mosty-gsxt/tbGsxtRlqbRwdd/save" : "/mosty-gsxt/tbGsxtRlqbRwdd/update";
|
||||||
let params = { ...data };
|
let params = { ...data };
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
params.xsList = params.xsList.map((item) => item.id);
|
// params.xsList = params.xsList.map((item) => item.id);
|
||||||
qcckPost(params, url).then(() => {
|
qcckPost(params, url).then(() => {
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
proxy.$message({ type: "success", message: title.value + "成功" });
|
proxy.$message({ type: "success", message: title.value + "成功" });
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div class="titleBox">
|
<div class="titleBox">
|
||||||
<PageTitle title="人力情报信息搜索任务调度">
|
<PageTitle title="人力情报信息收集任务调度">
|
||||||
<el-button type="primary" @click="addEdit('add', '')">
|
<el-button type="primary" @click="addEdit('add', '')">
|
||||||
<el-icon style="vertical-align: middle">
|
<el-icon style="vertical-align: middle">
|
||||||
<CirclePlus />
|
<CirclePlus />
|
||||||
@ -27,8 +27,12 @@
|
|||||||
<!-- 操作 -->
|
<!-- 操作 -->
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<el-link size="small" type="success" @click="addEdit('edit', row)">编辑</el-link>
|
<el-link size="small" type="success" @click="addEdit('edit', row)">编辑</el-link>
|
||||||
|
<el-link size="small" type="success" @click="addEdit('edit', row)">详情</el-link>
|
||||||
<!-- 下发将消息推送至临安码 消息中心 -->
|
<!-- 下发将消息推送至临安码 消息中心 -->
|
||||||
<el-link size="small" type="primary" @click="addEdit('xf', row)">下发</el-link>
|
<!-- 直接弹窗下发 -->
|
||||||
|
<!-- 下发后编辑隐藏 -->
|
||||||
|
<!-- addEdit('xf', row) -->
|
||||||
|
<el-link size="small" type="primary" @click="">下发</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>
|
||||||
@ -122,7 +126,7 @@ const pageData = reactive({
|
|||||||
pageSize: 20,
|
pageSize: 20,
|
||||||
pageCurrent: 1
|
pageCurrent: 1
|
||||||
},
|
},
|
||||||
controlsWidth: 150,
|
controlsWidth: 200,
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "任务标题", prop: "rwBt" },
|
{ label: "任务标题", prop: "rwBt" },
|
||||||
{ label: "任务内容", prop: "rwNr", width: 200 },
|
{ label: "任务内容", prop: "rwNr", width: 200 },
|
||||||
|
@ -7,13 +7,15 @@
|
|||||||
<el-button size="small" @click="close">关闭</el-button>
|
<el-button size="small" @click="close">关闭</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="flex">
|
||||||
|
<div :class="dataOrge.gzlid?'ww80':'ww100'">
|
||||||
<div class="form_cnt">
|
<div class="form_cnt">
|
||||||
<el-form :model="listQuery" :rules="rules" :disabled="disabled" ref="elform" inline :label-width="100"
|
<el-form :model="listQuery" :rules="rules" :disabled="disabled" ref="elform" inline :label-width="100"
|
||||||
label-position="left">
|
label-position="left">
|
||||||
<div class="smallTitle">布控信息</div>
|
<div class="smallTitle">布控信息</div>
|
||||||
<el-form-item prop="bkBt" label="布控标题">
|
<!-- <el-form-item prop="bkBt" label="布控标题">
|
||||||
<MOSTY.Other v-model="listQuery.bkBt" placeholder="请输入布控标题" clearable />
|
<MOSTY.Other v-model="listQuery.bkBt" placeholder="请输入布控标题" clearable />
|
||||||
</el-form-item>
|
</el-form-item> -->
|
||||||
<el-form-item prop="bkDx" label="布控对象">
|
<el-form-item prop="bkDx" label="布控对象">
|
||||||
<MOSTY.Select v-model="listQuery.bkDx" @change="shangeDx" :dictEnum="props.dic.D_GS_BK_DX"
|
<MOSTY.Select v-model="listQuery.bkDx" @change="shangeDx" :dictEnum="props.dic.D_GS_BK_DX"
|
||||||
placeholder="请选择布控对象" clearable />
|
placeholder="请选择布控对象" clearable />
|
||||||
@ -33,6 +35,12 @@
|
|||||||
<template #fjZp="{ row }">
|
<template #fjZp="{ row }">
|
||||||
<el-image :src="row.fjZp"></el-image>
|
<el-image :src="row.fjZp"></el-image>
|
||||||
</template>
|
</template>
|
||||||
|
<template #yjdj="{ row }">
|
||||||
|
<DictTag :tag="false" :value="row.yjdj" :options="props.dic.D_GS_ZDR_YJDJ" />
|
||||||
|
</template>
|
||||||
|
<template #yjbq="{ row }">
|
||||||
|
<DictTag :tag="false" :value="row.yjbq" :options="props.dic.BD_BK_CLYJBQ" />
|
||||||
|
</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>
|
||||||
@ -58,28 +66,30 @@
|
|||||||
</div>
|
</div>
|
||||||
<GdMap></GdMap>
|
<GdMap></GdMap>
|
||||||
</div>
|
</div>
|
||||||
<el-form-item prop="bkBt" label="布控要素" style="width: 100%;">
|
<!-- <el-form-item prop="bkBt" label="布控要素" style="width: 100%;">
|
||||||
<div class="flex align-center">
|
<div class="flex align-center">
|
||||||
<el-button @click="listQuery.bkYz = it.dm" :type="listQuery.bkYz == it.dm ? 'primary' : ''"
|
<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>
|
v-for="it in props.dic.D_GS_BK_BKYS" :key="it">{{ it.zdmc }}</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item> -->
|
||||||
<div style="width: 100%;" class="mt25">
|
<div style="width: 100%;" class="mt25">
|
||||||
<el-form-item prop="bkSjKs" label="布控开始时间" label-width="120px">
|
<el-form-item prop="bkSjKs" label="布控开始时间" label-width="120px">
|
||||||
<MOSTY.Date v-model="listQuery.bkSjKs" type="datetime" format="YYYY-MM-DD HH:mm:ss" placeholder="请选择布控开始时间"
|
<MOSTY.Date v-model="listQuery.bkSjKs" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||||
clearable />
|
placeholder="请选择布控开始时间" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item prop="bkSjJs" label="布控结束时间" label-width="120px">
|
<el-form-item prop="bkSjJs" label="布控结束时间" label-width="120px">
|
||||||
<MOSTY.Date v-model="listQuery.bkSjJs" type="datetime" format="YYYY-MM-DD HH:mm:ss" placeholder="请选择布控结束时间"
|
<MOSTY.Date v-model="listQuery.bkSjJs" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||||
clearable />
|
placeholder="请选择布控结束时间" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
<div style="width: 100%;" class="mt25">
|
<div style="width: 100%;" class="mt25">
|
||||||
<el-form-item prop="czYq" label="处置要求">
|
<el-form-item prop="czYq" label="处置要求">
|
||||||
<MOSTY.Select v-model="listQuery.czYq" :dictEnum="props.dic.D_GS_BK_CZYQ" placeholder="请选择处置要求" clearable />
|
<MOSTY.Select v-model="listQuery.czYq" :dictEnum="props.dic.D_GS_BK_CZYQ" placeholder="请选择处置要求"
|
||||||
|
clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item prop="bkDj" label="布控级别">
|
<el-form-item prop="bkDj" label="布控等级">
|
||||||
<MOSTY.Select v-model="listQuery.bkDj" :dictEnum="props.dic.D_GS_BK_DJ" placeholder="请选择布控级别" 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">
|
||||||
@ -96,65 +106,45 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="smallTitle">审批信息</div>
|
|
||||||
<el-form-item prop="czJsdwdm" label="处置接收单位" label-width="120px" style="width: 100%;">
|
|
||||||
<div class="flex align-center ww100">
|
|
||||||
<MOSTY.Department v-model="listQuery.czJsdwdm" style="width:260px;margin-right: 10px;" placeholder="请选择处置要求"
|
|
||||||
clearable />
|
|
||||||
<el-radio-group v-model="listQuery.czJsdwlx" class="flex align-center">
|
|
||||||
<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>
|
|
||||||
</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.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>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="ww20" v-if="dataOrge.gzlid">
|
||||||
|
<!-- <div class="smallTitle">审批信息</div>
|
||||||
|
<div class="ww100">
|
||||||
|
<el-steps :active="listQuery.wccz" space="500" finish-status="success" direction="vertical" status=''>
|
||||||
|
<el-step :title="item.eventType == '0' ? '发起申请' : item.eventType == '1' ? '审批结束' : item.nodeName"
|
||||||
|
v-for="(item, index) in workflow" :key="index">
|
||||||
|
<template #description>
|
||||||
|
<div class="ww100 mt10 mb20 nodeBox" v-if="item.eventType == '0'||item.eventType == '1'">
|
||||||
|
<div class="nodeorgNameTg">{{ item.log.userData.orgname }}</div>
|
||||||
|
<div class="flex just-between nameTag">
|
||||||
|
<div>{{ item.log.userName }}</div>
|
||||||
|
<div class="fontColor">{{ item.eventType == '0' ? '发起' : '结束' }}</div>
|
||||||
|
</div>
|
||||||
|
<div>{{ item.log.xtLrsj }}</div>
|
||||||
|
</div>
|
||||||
|
<div v-else class="ww100 mt10 mb20 nodeBox">
|
||||||
|
<div :class="item.taskStatus=='2'?'nodeorgNameTg':'nodeorgNameDd'">{{ item.orgNameData.orgname }}</div>
|
||||||
|
<div v-for="(items, indexs) in item.log" :key="indexs">
|
||||||
|
<div class="flex just-between nameTag" >
|
||||||
|
<div>{{ items.userName }}</div>
|
||||||
|
<div :class="item.taskStatus=='2'?'fontColor':'fontColorDd'">审批中</div>
|
||||||
|
</div>
|
||||||
|
<div>{{ items.xtLrsj }}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-step>
|
||||||
|
|
||||||
|
</el-steps>
|
||||||
|
</div> -->
|
||||||
|
<ApprovalEcho ref="approvalEcho"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
<!-- 选择布控人员 -->
|
<!-- 选择布控人员 -->
|
||||||
<BkryDialod :modelValue="chooseVisible_RY" @update:modelValue="chooseVisible_RY = $event" @choosed="choosed"
|
<BkryDialod :modelValue="chooseVisible_RY" @update:modelValue="chooseVisible_RY = $event" @choosed="choosed"
|
||||||
@choosedAdd="choosedAdd" :roleIds="roleIds" />
|
@choosedAdd="choosedAdd" :roleIds="roleIds" />
|
||||||
@ -164,6 +154,8 @@
|
|||||||
<!-- 选择布控群体 -->
|
<!-- 选择布控群体 -->
|
||||||
<BkqtDialod :modelValue="chooseVisible_QT" @update:modelValue="chooseVisible_QT = $event" @choosed="choosed"
|
<BkqtDialod :modelValue="chooseVisible_QT" @update:modelValue="chooseVisible_QT = $event" @choosed="choosed"
|
||||||
:roleIds="roleIds" />
|
:roleIds="roleIds" />
|
||||||
|
<BksfzDialod :modelValue="chooseVisible_SFZ" @update:modelValue="chooseVisible_SFZ = $event" @choosed="choosed"
|
||||||
|
:roleIds="roleIds" :bkDx="listQuery.bkDx" @choosedAdd="choosedAdd" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@ -171,11 +163,16 @@ 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 BkclDialod from '@/components/ChooseList/ChooseCl/index.vue';
|
||||||
|
import BksfzDialod from './dolog/sfzLog.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 { tableColumnList,Zd } from '@/views/backOfficeSystem/ApprovalInformation/tableRow.js'
|
||||||
|
|
||||||
|
import { ref, defineExpose, reactive, defineEmits, getCurrentInstance, nextTick, watch } from "vue";
|
||||||
|
import { queryProcessNode, queryProcessNodeLog, queryProcess } from '@/api/spl'
|
||||||
|
import ApprovalEcho from "@/components/flowPath/ApprovalEcho.vue";
|
||||||
const emit = defineEmits(["change"]);
|
const emit = defineEmits(["change"]);
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
dic: Object
|
dic: Object
|
||||||
@ -226,49 +223,11 @@ let tableDate = reactive({
|
|||||||
{ label: "手机号", prop: "rySjhm" },
|
{ label: "手机号", prop: "rySjhm" },
|
||||||
{ label: "虚拟身份", prop: "qtXnsf" },
|
{ label: "虚拟身份", prop: "qtXnsf" },
|
||||||
{ 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)
|
||||||
// 初始化数据
|
// 初始化数据
|
||||||
@ -286,6 +245,8 @@ const init = (type, row) => {
|
|||||||
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;
|
||||||
|
Zd({D_GS_BK_DJ:props.dic.D_GS_BK_DJ,BD_BK_CLYJBQ:props.dic.BD_BK_CLYJBQ})
|
||||||
|
|
||||||
get_bkqy_list(row)
|
get_bkqy_list(row)
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -299,6 +260,14 @@ const get_bkqy_list = (row) => {
|
|||||||
if (row) getDataById(row.id);
|
if (row) getDataById(row.id);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
const dataOrge=ref({})
|
||||||
|
const approvalEcho = ref()
|
||||||
|
watch(() => approvalEcho.value, (val) => {
|
||||||
|
if (val) {
|
||||||
|
approvalEcho.value.getWorkflow(dataOrge.value.gzlid)
|
||||||
|
}
|
||||||
|
|
||||||
|
},{deep:true})
|
||||||
|
|
||||||
// 根据id获取详情
|
// 根据id获取详情
|
||||||
const getDataById = (id) => {
|
const getDataById = (id) => {
|
||||||
@ -306,10 +275,18 @@ const getDataById = (id) => {
|
|||||||
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 || {}
|
||||||
|
dataOrge.value=res
|
||||||
tableDate.tableColumn = tableColumnList[res.bkDx ? res.bkDx : '01']
|
tableDate.tableColumn = tableColumnList[res.bkDx ? res.bkDx : '01']
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
watch(() => approvalEcho.value, (val) => {
|
||||||
|
if (val) {
|
||||||
|
console.log(approvalEcho.value);
|
||||||
|
approvalEcho.value.getWorkflow(dataOrge.value.gzlid)
|
||||||
|
}
|
||||||
|
|
||||||
|
},{deep:true})
|
||||||
|
|
||||||
|
|
||||||
const shangeDx = () => {
|
const shangeDx = () => {
|
||||||
tableDate.tableColumn = tableColumnList[listQuery.value.bkDx]
|
tableDate.tableColumn = tableColumnList[listQuery.value.bkDx]
|
||||||
@ -326,31 +303,30 @@ const deleteRow = (row) => {
|
|||||||
}
|
}
|
||||||
// 单独新增的数据
|
// 单独新增的数据
|
||||||
const choosedAdd = (item) => {
|
const choosedAdd = (item) => {
|
||||||
console.log(item);
|
|
||||||
|
|
||||||
let obj = {}
|
let obj = {}
|
||||||
if (listQuery.value.bkDx!=='03') {
|
if (listQuery.value.bkDx !== '02') {
|
||||||
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 }
|
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 {
|
} else {
|
||||||
obj = {
|
obj = {
|
||||||
clCph: item.hphm, clCjh: item.clCjh, clSyr: item.clSyr, clSyrsfzh: item.clSyrsfzh,
|
clCph: item.hphm, clCjh: item.clCjh, clSyr: item.clSyr, clSyrsfzh: item.clSyrsfzh,
|
||||||
clYs: item.clYs, gxSsbmmc: item.gxSsbmmc
|
clYs: item.clYs, gxSsbmmc: item.gxSsbmmc, bqList: item.bqList
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
switch (listQuery.value.bkDx) {
|
||||||
|
default:
|
||||||
|
obj = { ...item }
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
addPerson.value.push(obj);//缓存的数据
|
addPerson.value.push(obj);//缓存的数据
|
||||||
if (!listQuery.value.bkdxList) listQuery.value.bkdxList = [];
|
if (!listQuery.value.bkdxList) listQuery.value.bkdxList = [];
|
||||||
listQuery.value.bkdxList.unshift(obj);
|
listQuery.value.bkdxList.unshift(obj);
|
||||||
|
console.log(listQuery.value.bkdxList);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 选择重点人
|
// 选择重点人
|
||||||
const choosed = (val) => {
|
const choosed = (val) => {
|
||||||
console.log(val);
|
|
||||||
|
|
||||||
tableDate.tableColumn = tableColumnList[listQuery.value.bkDx]
|
tableDate.tableColumn = tableColumnList[listQuery.value.bkDx]
|
||||||
console.log(tableDate.tableColumn);
|
|
||||||
|
|
||||||
if (listQuery.value.bkDx == '01') {// 人员
|
if (listQuery.value.bkDx == '01') {// 人员
|
||||||
roleIds.value = val.map(it => it.id);
|
roleIds.value = val.map(it => it.id);
|
||||||
let arr = val.map(item => {
|
let arr = val.map(item => {
|
||||||
@ -358,23 +334,21 @@ console.log(tableDate.tableColumn);
|
|||||||
let bqs = bqArr.map(v => {
|
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 { 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 }
|
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, yjdj: item.zdrYjdj,ssbmdm:item.zrSsbmdm
|
||||||
|
}
|
||||||
})
|
})
|
||||||
listQuery.value.bkdxList = [...addPerson.value, ...arr];
|
listQuery.value.bkdxList = [...addPerson.value, ...arr];
|
||||||
} else if (listQuery.value.bkDx == '03') {
|
} else if (listQuery.value.bkDx == '03') {
|
||||||
|
|
||||||
roleIds.value = val.map(it => it.id);
|
roleIds.value = val.map(it => it.id);
|
||||||
let arr = val.map(item => {
|
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 {
|
return {
|
||||||
clCph: item.hphm, clCjh: item.clCjh, clSyr: item.clSyr, clSyrsfzh: item.clSyrsfzh,
|
clCph: item.hphm, clCjh: item.clCjh, clSyr: item.clSyr, clSyrsfzh: item.clSyrsfzh,
|
||||||
clYs: item.clYs, gxSsbmmc: item.gxSsbmmc, bqList: bqs
|
clYs: item.clYs, gxSsbmmc: item.gxSsbmmc,yjbq: item.yjbq, yjdj: item.yjdj,ssbmdm:item.zrSsbmdm
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
listQuery.value.bkdxList = [...addPerson.value, ...arr];
|
listQuery.value.bkdxList = [...addPerson.value, ...arr];
|
||||||
@ -395,10 +369,10 @@ console.log(tableDate.tableColumn);
|
|||||||
id: item.id, fjZp: item.fjZp, ryXm: item.ryXm, ryXb: item.ryXb,
|
id: item.id, fjZp: item.fjZp, ryXm: item.ryXm, ryXb: item.ryXb,
|
||||||
rySfzh: item.rySfzh, ryHjd: item.hjdXz, ryXjd: item.xzdXz,
|
rySfzh: item.rySfzh, ryHjd: item.hjdXz, ryXjd: item.xzdXz,
|
||||||
rySjhm: item.ryLxdh, qtXnsf: item.qtXnsf, clCjh: item.clCjh,
|
rySjhm: item.ryLxdh, qtXnsf: item.qtXnsf, clCjh: item.clCjh,
|
||||||
clCph: item.clCph, qtTzms: item.qtTzms, bqList: bqs
|
clCph: item.clCph, qtTzms: item.qtTzms, bqList: bqs,
|
||||||
|
yjdj: item.zdrYjdj,ssbmdm:item.zrSsbmdm
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
listQuery.value.bkdxList = brrPeo;
|
listQuery.value.bkdxList = brrPeo;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -410,12 +384,21 @@ const handleAddPeo = () => {
|
|||||||
case '01':
|
case '01':
|
||||||
chooseVisible_RY.value = true
|
chooseVisible_RY.value = true
|
||||||
break;
|
break;
|
||||||
case '02':
|
case '04':
|
||||||
chooseVisible_QT.value = true
|
case '05':
|
||||||
|
case '06':
|
||||||
|
case '07':
|
||||||
|
case '08':
|
||||||
|
case '09':
|
||||||
|
case '10':
|
||||||
|
chooseVisible_SFZ.value = true
|
||||||
break;
|
break;
|
||||||
case '03':
|
case '03':
|
||||||
chooseVisible_CL.value = true
|
chooseVisible_CL.value = true
|
||||||
break;
|
break;
|
||||||
|
case '02':
|
||||||
|
chooseVisible_QT.value = true
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -448,6 +431,42 @@ const close = () => {
|
|||||||
loading.value = false;
|
loading.value = false;
|
||||||
addPerson.value = [];
|
addPerson.value = [];
|
||||||
roleIds.value = []
|
roleIds.value = []
|
||||||
|
dataOrge.value={}
|
||||||
|
};
|
||||||
|
// 选择身份证
|
||||||
|
const chooseVisible_SFZ = ref(false)
|
||||||
|
// 获取布控信息的工作流
|
||||||
|
const workflow = ref()
|
||||||
|
const getWorkflow = async (id) => {
|
||||||
|
const promes = {
|
||||||
|
processId: id
|
||||||
|
}
|
||||||
|
const proNode = await queryProcessNode(promes)
|
||||||
|
const proNodeLog = await queryProcessNodeLog(promes)
|
||||||
|
const process = await queryProcess(promes)
|
||||||
|
workflow.value = proNode.rows.map(item => {
|
||||||
|
const log = proNodeLog.rows.filter(items => item.nodeId == items.nodeId)
|
||||||
|
|
||||||
|
if (item.eventType == '0') {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
log: {
|
||||||
|
userData: item.userData ? JSON.parse(item.userData) : JSON.parse(process.rows[0].processData).orgNameData,
|
||||||
|
userName: process.rows[0].userName,
|
||||||
|
xtLrsj: process.rows[0].xtLrsj,
|
||||||
|
processStatus: process.rows[0].processStatus,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
orgNameData: JSON.parse(log[0].userData),
|
||||||
|
log: log
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
defineExpose({ init });
|
defineExpose({ init });
|
||||||
@ -509,4 +528,60 @@ defineExpose({ init });
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 使用深度选择器覆盖子组件样式 */
|
||||||
|
::v-deep .el-step.is-vertical .el-step__title {
|
||||||
|
color: #000000 !important;
|
||||||
|
border-color: #000000 !important;
|
||||||
|
}
|
||||||
|
::v-deep .el-step__description{
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
::v-deep .el-step__description.is-wait {
|
||||||
|
|
||||||
|
color: #000000 !important;
|
||||||
|
border-color: #000000 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-step__title.is-wait {
|
||||||
|
color: #000000 !important;
|
||||||
|
border-color: #000000 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-step__head.is-wait {
|
||||||
|
color: #000000 !important;
|
||||||
|
border-color: #000000 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-step__line {
|
||||||
|
background-color: #000000 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nodeBox {
|
||||||
|
width: 80%;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 30px;
|
||||||
|
border-radius: 10px;
|
||||||
|
overflow: hidden;
|
||||||
|
background-color: aliceblue;
|
||||||
|
|
||||||
|
.nodeorgNameTg {
|
||||||
|
background-color: #1abe20;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nameTag {
|
||||||
|
line-height: 30px;
|
||||||
|
padding: 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nodeorgNameDd {
|
||||||
|
background-color: #18a2dd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fontColor {
|
||||||
|
color: #1abe20;
|
||||||
|
} .fontColorDd {
|
||||||
|
color: #18a2dd;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -0,0 +1,185 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog v-model="modelValue" :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, watch } from 'vue';
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
bkDx: {
|
||||||
|
type: String,
|
||||||
|
default: '01'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const emits = defineEmits(["update:modelValue", "choosed", "choosedAdd"]);
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const { D_BZ_XB, D_GS_ZDR_YJDJ } = proxy.$dict("D_BZ_XB", "D_GS_ZDR_YJDJ"); // 获取字典数据
|
||||||
|
const elform = ref()
|
||||||
|
const roleIds = ref([])
|
||||||
|
const chooseMarksVisible = ref(false)
|
||||||
|
const listQuery = ref({})
|
||||||
|
|
||||||
|
const formData = ref()
|
||||||
|
const rules = ref()
|
||||||
|
const tableColumnList = {
|
||||||
|
'04': [
|
||||||
|
{ label: "身份证号", prop: "rySfzh", type: "input" },
|
||||||
|
{ label: "姓名", prop: "ryXm", type: "input", },
|
||||||
|
{ label: "性别", prop: "ryXb", type: "select", options: D_BZ_XB },
|
||||||
|
{ label: "预警等级", prop: "yjdj", type: "select", options: D_GS_ZDR_YJDJ },
|
||||||
|
{ label: "责任部门", prop: "ssbmdm", type: "department" },
|
||||||
|
{ label: "标签", prop: "bqList", type: "slot", width: '100%' },
|
||||||
|
],
|
||||||
|
|
||||||
|
'05': [
|
||||||
|
{ label: "车辆识别代码", prop: "clCjh", type: "input" },
|
||||||
|
{ label: "车牌号", prop: "clCph", type: "input", },
|
||||||
|
{ label: "姓名", prop: "ryXm", type: "input", },
|
||||||
|
{ label: "责任部门", prop: "ssbmdm", type: "department" },
|
||||||
|
{ label: "预警等级", prop: "yjdj", type: "select", options: D_GS_ZDR_YJDJ },
|
||||||
|
{ label: "标签", prop: "bqList", type: "slot", width: '100%' },
|
||||||
|
],
|
||||||
|
'06': [
|
||||||
|
{ label: "Mac地址", prop: "mac", type: "input" },
|
||||||
|
{ label: "责任部门", prop: "ssbmdm", type: "department" },
|
||||||
|
{ label: "预警等级", prop: "yjdj", type: "select", options: D_GS_ZDR_YJDJ },
|
||||||
|
{ label: "标签", prop: "bqList", type: "slot", width: '100%' },
|
||||||
|
],
|
||||||
|
'07': [
|
||||||
|
{ label: "IMEI", prop: "imei", type: "input" },
|
||||||
|
{ label: "责任部门", prop: "ssbmdm", type: "department" },
|
||||||
|
{ label: "预警等级", prop: "yjdj", type: "select", options: D_GS_ZDR_YJDJ },
|
||||||
|
{ label: "标签", prop: "bqList", type: "slot", width: '100%' },
|
||||||
|
],
|
||||||
|
'08': [
|
||||||
|
{ label: "IMSI", prop: "imsi", type: "input" },
|
||||||
|
{ label: "责任部门", prop: "ssbmdm", type: "department" },
|
||||||
|
{ label: "预警等级", prop: "yjdj", type: "select", options: D_GS_ZDR_YJDJ },
|
||||||
|
{ label: "标签", prop: "bqList", type: "slot", width: '100%' },
|
||||||
|
],
|
||||||
|
'09': [
|
||||||
|
{ label: "电话", prop: "rySjhm", type: "input" },
|
||||||
|
{ label: "姓名", prop: "ryXm", type: "input", },
|
||||||
|
{ label: "责任部门", prop: "ssbmdm", type: "department" },
|
||||||
|
{ label: "预警等级", prop: "yjdj", type: "select", options: D_GS_ZDR_YJDJ },
|
||||||
|
{ label: "性别", prop: "ryXb", type: "select", options: D_BZ_XB },
|
||||||
|
{ label: "标签", prop: "bqList", type: "slot", width: '100%' },
|
||||||
|
],
|
||||||
|
'10': [{ label: "姓名", prop: "ryXm", type: "input", },
|
||||||
|
{ label: "身份证号", prop: "rySfzh", type: "input" },
|
||||||
|
{ label: "预警等级", prop: "yjdj", type: "select", options: D_GS_ZDR_YJDJ },
|
||||||
|
{ label: "性别", prop: "ryXb", type: "select", options: D_BZ_XB },
|
||||||
|
{ label: "标签", prop: "bqList", type: "slot", width: '100%' },
|
||||||
|
{ label: "责任部门", prop: "ssbmdm", type: "department" },
|
||||||
|
{ label: "人员照片", prop: "fjZp", type: "upload", width: '100%' },
|
||||||
|
],
|
||||||
|
}
|
||||||
|
const rulesList = {
|
||||||
|
'04': {
|
||||||
|
rySfzh: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||||
|
yjdj: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||||
|
ssbmdm: [{ required: true, message: "请选择责任部门", trigger: "blur" }],
|
||||||
|
|
||||||
|
},
|
||||||
|
'03': {
|
||||||
|
fjZp: [{ required: true, message: "请选择附件", trigger: "blur" }],
|
||||||
|
ssbmdm: [{ required: true, message: "请选择责任部门", trigger: "blur" }],
|
||||||
|
yjdj: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||||
|
},
|
||||||
|
'05': {
|
||||||
|
clCjh: [{ required: true, message: "请输入车辆识别代码", trigger: "blur" }],
|
||||||
|
ssbmdm: [{ required: true, message: "请选择责任部门", trigger: "blur" }],
|
||||||
|
yjdj: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||||
|
},
|
||||||
|
'06': {
|
||||||
|
mac: [{ required: true, message: "请输入Mac地址", trigger: "blur" }],
|
||||||
|
ssbmdm: [{ required: true, message: "请选择责任部门", trigger: "blur" }],
|
||||||
|
yjdj: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||||
|
},
|
||||||
|
'07': {
|
||||||
|
imei: [{ required: true, message: "请输入IMEI", trigger: "blur" }],
|
||||||
|
ssbmdm: [{ required: true, message: "请选择责任部门", trigger: "blur" }],
|
||||||
|
yjdj: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||||
|
},
|
||||||
|
'08': {
|
||||||
|
imsi: [{ required: true, message: "请输入IMSI", trigger: "blur" }],
|
||||||
|
ssbmdm: [{ required: true, message: "请选择责任部门", trigger: "blur" }],
|
||||||
|
yjdj: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||||
|
},
|
||||||
|
'09': {
|
||||||
|
dh: [{ required: true, message: "请输入电话号码", trigger: "blur" }],
|
||||||
|
ssbmdm: [{ required: true, message: "请选择责任部门", trigger: "blur" }],
|
||||||
|
yjdj: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
watch(() => props.bkDx, (val, oldval) => {
|
||||||
|
formData.value = tableColumnList[val]
|
||||||
|
rules.value = rulesList[val]
|
||||||
|
}, { immediate: 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()
|
||||||
|
emits('choosedAdd', val)
|
||||||
|
close()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const close = async () => {
|
||||||
|
roleIds.value = []
|
||||||
|
listQuery.value = {}
|
||||||
|
listQuery.value.fjZp = []
|
||||||
|
await emits("update:modelValue", false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.marks {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 32px;
|
||||||
|
border: 1px solid #e9e9e9;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
</style>
|
@ -13,14 +13,8 @@
|
|||||||
<div class="content">
|
<div class="content">
|
||||||
<!-- 表格 -->
|
<!-- 表格 -->
|
||||||
<div class="tabBox">
|
<div class="tabBox">
|
||||||
<MyTable
|
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||||
:tableData="pageData.tableData"
|
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||||
:tableColumn="pageData.tableColumn"
|
|
||||||
:tableHeight="pageData.tableHeight"
|
|
||||||
:key="pageData.keyCount"
|
|
||||||
:tableConfiger="pageData.tableConfiger"
|
|
||||||
:controlsWidth="pageData.controlsWidth"
|
|
||||||
>
|
|
||||||
<template #bkZt="{ row }">
|
<template #bkZt="{ row }">
|
||||||
<DictTag :tag="false" :value="row.bkZt" :options="D_GS_BK_ZT" />
|
<DictTag :tag="false" :value="row.bkZt" :options="D_GS_BK_ZT" />
|
||||||
</template>
|
</template>
|
||||||
@ -31,25 +25,37 @@
|
|||||||
<DictTag :tag="false" :value="row.bkDx" :options="D_GS_BK_DX" />
|
<DictTag :tag="false" :value="row.bkDx" :options="D_GS_BK_DX" />
|
||||||
</template>
|
</template>
|
||||||
<template #bkdxList="{ row }">
|
<template #bkdxList="{ row }">
|
||||||
<span v-if="row.bkdxList"><span class="nowrap" v-for="(it,idx) in row.bkdxList" :key="idx"> {{ it.ryXm }} <span v-if="idx < row.bkdxList.length-1">、</span></span></span>
|
<span v-if="row.bkdxList"><span class="nowrap" v-for="(it, idx) in row.bkdxList" :key="idx">
|
||||||
|
{{ it.ryXm ? it.ryXm : it.imei ? it.imei : it.imsi ? it.imsi : '' }}
|
||||||
|
<!-- :it.ryXm?it.mac:it.imsi?it.imsi:'xxxx' -->
|
||||||
|
<span v-if="idx < row.bkdxList.length - 1">、</span></span></span>
|
||||||
|
|
||||||
<span v-else>暂无</span>
|
<span v-else>暂无</span>
|
||||||
</template>
|
</template>
|
||||||
<template #sjrs="{ row }">
|
<!-- <template #sjrs="{ row }">
|
||||||
<span v-if="row.bkdxList"> {{ row.bkdxList.length }} </span>
|
<span v-if="row.bkdxList"> {{ row.bkdxList.length }} </span>
|
||||||
<span v-else>0</span>
|
<span v-else>0</span>
|
||||||
</template>
|
</template> -->
|
||||||
<template #qyList="{ row }">
|
<!-- <template #qyList="{ row }">
|
||||||
<span v-for="(it,idx) in row.qyList" :key="idx"> {{ it.qymc }} <span v-if="idx < row.qyList.length-1">、</span></span>
|
<span v-for="(it,idx) in row.qyList" :key="idx"> {{ it.qymc }} <span v-if="idx < row.qyList.length-1">、</span></span>
|
||||||
</template>
|
</template> -->
|
||||||
<template #yjcs="{row}">
|
<!-- <template #yjcs="{row}">
|
||||||
<span @click="openWarning(row)" style="color: #00ffff;" class="mr5 pointer">{{ row.yjcs || 0}}</span>次
|
<span @click="openWarning(row)" style="color: #00ffff;" class="mr5 pointer">{{ row.yjcs || 0}}</span>次
|
||||||
</template>
|
</template> -->
|
||||||
<!-- 操作 -->
|
<!-- 操作 -->
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<el-link type="primary" v-if="['01','03','06'].includes(row.bkZt)" size="small" @click="handleSend(row.id)">送审</el-link>
|
<template v-if="!row.gzlid">
|
||||||
<el-link type="primary" v-if="['01','03','06'].includes(row.bkZt)" size="small" @click="handleAdd('edit',row)">编辑</el-link>
|
<el-link type="primary" v-if="['01', '03', '06'].includes(row.bkZt)" size="small"
|
||||||
|
@click="createProcess(row)">送审</el-link>
|
||||||
|
<el-link type="primary" v-if="['01', '03', '06'].includes(row.bkZt)" size="small"
|
||||||
|
@click="handleAdd('edit', row)">编辑</el-link>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 审核通过后才有轨迹 -->
|
||||||
|
<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="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)"
|
||||||
|
v-if="['01', '03', '06'].includes(row.bkZt)">删除</el-link>
|
||||||
</template>
|
</template>
|
||||||
</MyTable>
|
</MyTable>
|
||||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||||
@ -59,10 +65,16 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- 布控对象 -->
|
<!-- 布控类型 -->
|
||||||
<AddBkdx ref="addBkdxForm" @change="getList" :dic="{D_GS_BK_DX,D_GS_BK_BKYS,D_BZ_XB,D_GS_BK_CZYQ,D_GS_BK_DJ,D_GS_BK_CZJSDWLX,D_GS_BK_TJFS}" />
|
<AddBkdx ref="addBkdxForm" @change="getList"
|
||||||
|
:dic="{
|
||||||
|
D_GS_BK_DX, D_GS_BK_BKYS, D_BZ_XB, D_GS_BK_CZYQ,
|
||||||
|
D_GS_BK_DJ, BD_BK_CLYJBQ, D_GS_BK_CZJSDWLX, D_GS_BK_TJFS,D_GS_ZDR_YJDJ
|
||||||
|
}" />
|
||||||
<!-- 预警弹窗 -->
|
<!-- 预警弹窗 -->
|
||||||
<YjDialog ref="warningkdxForm"></YjDialog>
|
<YjDialog ref="warningkdxForm"></YjDialog>
|
||||||
|
<SubmissionProcess v-model="showSp" :data="rowData" :userData="{ ajmc: '布控审批', flowType: 'BKSP',modelName:'布控' }"
|
||||||
|
:path="fixedValue" @getList="getList" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@ -73,24 +85,26 @@ 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 { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||||
|
import SubmissionProcess from '@/components/flowPath/submissionProcess.vue'
|
||||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_GS_BK_BKYS,D_BZ_XB,D_GS_BK_SJLX,D_GS_BK_DJ, D_GS_BK_DX, D_GS_BK_ZT,D_GS_BK_CZYQ,D_GS_BK_CZJSDWLX,D_GS_BK_TJFS } = proxy.$dict("D_GS_BK_BKYS","D_BZ_XB","D_GS_BK_SJLX","D_GS_BK_DJ","D_GS_BK_DX","D_GS_BK_ZT","D_GS_BK_CZYQ","D_GS_BK_CZJSDWLX","D_GS_BK_TJFS"); //获取字典数据
|
const { D_GS_BK_BKYS, D_BZ_XB, D_GS_BK_SJLX, D_GS_BK_DJ, BD_BK_CLYJBQ,D_GS_ZDR_YJDJ,
|
||||||
|
D_GS_BK_DX, D_GS_BK_ZT, D_GS_BK_CZYQ, D_GS_BK_CZJSDWLX, D_GS_BK_TJFS } = proxy.$dict("D_GS_ZDR_YJDJ","D_GS_BK_BKYS", "D_BZ_XB", "D_GS_BK_SJLX", "D_GS_BK_DJ", "D_GS_BK_DX", "D_GS_BK_ZT", "D_GS_BK_CZYQ", "D_GS_BK_CZJSDWLX", "D_GS_BK_TJFS", 'BD_BK_CLYJBQ'); //获取字典数据
|
||||||
const addBkdxForm = ref(null); //布控对象组件
|
const addBkdxForm = ref(null); //布控对象组件
|
||||||
const warningkdxForm = ref(); //布控对象组件
|
const warningkdxForm = ref(); //布控对象组件
|
||||||
const searchBox = ref(); //搜索框
|
const searchBox = ref(); //搜索框
|
||||||
const searchConfiger = ref([
|
const searchConfiger = ref([
|
||||||
{
|
{
|
||||||
label: "布控级别",
|
label: "布控等级",
|
||||||
prop: "bkDj",
|
prop: "bkDj",
|
||||||
placeholder: "请选择布控级别",
|
placeholder: "请选择布控等级",
|
||||||
showType: "select",
|
showType: "select",
|
||||||
options: D_GS_BK_DJ
|
options: D_GS_BK_DJ
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "布控对象",
|
label: "布控类型",
|
||||||
prop: "bkDx",
|
prop: "bkDx",
|
||||||
placeholder: "请选择布控对象",
|
placeholder: "请选择布控类型",
|
||||||
showType: "select",
|
showType: "select",
|
||||||
options: D_GS_BK_DX
|
options: D_GS_BK_DX
|
||||||
},
|
},
|
||||||
@ -116,23 +130,32 @@ const pageData = reactive({
|
|||||||
pageSize: 20,
|
pageSize: 20,
|
||||||
pageCurrent: 1
|
pageCurrent: 1
|
||||||
}, //分页
|
}, //分页
|
||||||
controlsWidth: 150, //操作栏宽度
|
controlsWidth: 250, //操作栏宽度
|
||||||
|
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "布控级别", prop: "bkDj", showSolt: true },
|
{ label: "布控对象", prop: "bkdxList", showSolt: true, showOverflowTooltip: true },
|
||||||
{ label: "布控标题", prop: "bkBt" },
|
{ label: "布控类型", prop: "bkDx", showSolt: true, showOverflowTooltip: true },
|
||||||
{ label: "布控对象", prop: "bkDx",showSolt: true ,showOverflowTooltip:true},
|
{ label: "布控等级", prop: "bkDj", showSolt: true },
|
||||||
{ label: "布控对象信息", prop: "bkdxList",showSolt: true,showOverflowTooltip:true },
|
|
||||||
{ label: "布控范围", prop: "qyList", showSolt: true,showOverflowTooltip:true },
|
|
||||||
{ label: "涉及人数", prop: "sjrs",showSolt: true },
|
|
||||||
{ label: "预警次数", prop: "yjcs",showSolt: true },
|
|
||||||
{ label: "开始时间", prop: "bkSjKs", showOverflowTooltip: true },
|
{ label: "开始时间", prop: "bkSjKs", showOverflowTooltip: true },
|
||||||
{ label: "结束时间", prop: "bkSjJs", showOverflowTooltip: true },
|
{ label: "结束时间", prop: "bkSjJs", showOverflowTooltip: true },
|
||||||
{ label: "布控发起人", prop: "bkfqrXm"},
|
{ label: "申请人", prop: "bkfqrXm" },
|
||||||
{ label: "布控状态", prop: "bkZt", showSolt: true },
|
{ label: "布控状态", prop: "bkZt", showSolt: true },
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
// 固定值
|
||||||
|
const fixedValue = {
|
||||||
|
clueVerification:'deploymentApproval',
|
||||||
|
byMeansOf: 'tbGsxtBk/gsbkCallback',
|
||||||
|
nobyMeansOf: 'tbGsxtBk/gsbkCallback',
|
||||||
|
recycle:'tbGsxtBk/gsbkCallback',
|
||||||
|
|
||||||
|
}
|
||||||
|
const showSp = ref(false);
|
||||||
|
const rowData = ref()
|
||||||
|
const createProcess = (row) => {
|
||||||
|
showSp.value = true;
|
||||||
|
rowData.value = row
|
||||||
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getList();
|
getList();
|
||||||
tabHeightFn();
|
tabHeightFn();
|
||||||
@ -212,5 +235,4 @@ const tabHeightFn = () => {
|
|||||||
.el-loading-mask {
|
.el-loading-mask {
|
||||||
background: rgba(0, 0, 0, 0.5) !important;
|
background: rgba(0, 0, 0, 0.5) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
export const ZL_LX_BM = [{ label: 'ZLLX10', value: 'ZLLX10' }, { label: 'ZLLX11', value: 'ZLLX11' }, { label: 'ZLLX12', value: 'ZLLX12' }, { label: 'ZLLX13', value: 'ZLLX13' }, { label: 'ZLLX14', value: 'ZLLX14' }]
|
||||||
|
export const ZL_LX_MC = [{ label: '普通预警', value: '普通预警' }, { label: '疲劳预警', value: '疲劳预警' }, { label: '超速预警', value: '超速预警' }, { label: '疲劳预警', value: '疲劳预警' }, { label: '疲劳预警', value: '疲劳预警' }]
|
||||||
|
export const ZL_JB_BM = [{ label: 'XTDJ10', value: 'XTDJ10' }, { label: 'XTDJ11', value: 'XTDJ11' }, { label: 'XTDJ12', value: 'XTDJ12' }, { label: 'XTDJ13', value: 'XTDJ13' }, { label: 'XTDJ14', value: 'XTDJ14' }]
|
||||||
|
export const ZL_JB_MC = [{ label: '一级', value: '一级' }, { label: '二级', value: '二级' }, { label: '三级', value: '三级' }, { label: '四级', value: '四级' }]
|
@ -0,0 +1,122 @@
|
|||||||
|
<template>
|
||||||
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="100px" ref="elform" :rules="rules">
|
||||||
|
<template #zrSsbmdm>
|
||||||
|
<MOSTY.Department filterable v-model="listQuery.receivingUnitCode" width="100%" @getDepValue="getDepValue"
|
||||||
|
clearable placeholder="请选择所属部门" :multiple="true" />
|
||||||
|
</template>
|
||||||
|
<template #ry>
|
||||||
|
<el-input readonly v-model="ryStr" @click="chooseUserVisible = true" placeholder="请选择民警"></el-input>
|
||||||
|
</template>
|
||||||
|
</FormMessage>
|
||||||
|
<ChooseUser v-model="chooseUserVisible" @choosedUsers="handleUserSelected" :roleIds="roleIds" :Single="false" />
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { reactive, ref, onMounted, watch } from "vue";
|
||||||
|
import { sendFqzl } from '@/api/commit'
|
||||||
|
import { getItem } from '@/utils/storage'
|
||||||
|
import * as MOSTY from "@/components/MyComponents/index";
|
||||||
|
import ChooseUser from "@/components/ChooseList/ChooseUser/index.vue"
|
||||||
|
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
const props = defineProps({
|
||||||
|
itemData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => { }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const emit = defineEmits(['handleClose'])
|
||||||
|
|
||||||
|
// 表单数据
|
||||||
|
const listQuery = ref({}); //表单
|
||||||
|
// 选择人员
|
||||||
|
const ryStr = ref('')
|
||||||
|
const elform = ref()
|
||||||
|
const personnelEntity = ref()
|
||||||
|
const formData = ref([
|
||||||
|
{ label: "标题", prop: "title", type: "input", width: "40%" },
|
||||||
|
{ label: "接收单位", prop: "zrSsbmdm", type: "slot", width: "40%" },
|
||||||
|
{ label: "指令状态", prop: "status", type: "input", width: "40%" },
|
||||||
|
{ label: "人员选择", prop: "ry", type: "slot", width: "40%" },
|
||||||
|
{ label: "附件", prop: "attachmentPath", type: "upload" },
|
||||||
|
{ label: "指令内容", prop: "instructionContent", type: "textarea", width: "100%" },
|
||||||
|
|
||||||
|
])
|
||||||
|
const rules = reactive({
|
||||||
|
title: [{ required: true, message: "请输入指令标题", trigger: "blur" }],
|
||||||
|
zrSsbmdm: [{ required: true, message: "请选择接收单位", trigger: "blur" }],
|
||||||
|
instructionContent: [{ required: true, message: "请输入指令内容", trigger: "blur" }],
|
||||||
|
ry: [{ required: true, message: "请选择人员", trigger: "blur" }]
|
||||||
|
});
|
||||||
|
const deptId = getItem('deptId')
|
||||||
|
const getsendFqzl = () => {
|
||||||
|
elform.value.submit((val)=>{
|
||||||
|
elform.value.validate().then(res => {
|
||||||
|
if (res) {
|
||||||
|
const data = { ...listQuery.value }
|
||||||
|
delete data.ry
|
||||||
|
const promes = {
|
||||||
|
instructionsEntity: {
|
||||||
|
unitCode: deptId[0].deptCode,
|
||||||
|
unitName: deptId[0].deptName,
|
||||||
|
...data,
|
||||||
|
receivingUnitCode: listQuery.value.receivingUnitCode.toString(),
|
||||||
|
receivingUnit: listQuery.value.receivingUnit.toString(),
|
||||||
|
attachmentPath: JSON.stringify(listQuery.value.attachmentPath)
|
||||||
|
}, id: props.itemData.id,
|
||||||
|
personnelEntity: personnelEntity.value
|
||||||
|
}
|
||||||
|
|
||||||
|
sendFqzl(promes).then((result) => {
|
||||||
|
const res = JSON.parse(result)
|
||||||
|
if (res.code == 200) {
|
||||||
|
ElMessage.success('发送成功')
|
||||||
|
emit('handleClose')
|
||||||
|
} else {
|
||||||
|
ElMessage.error(res.msg)
|
||||||
|
}
|
||||||
|
}).catch((err) => {
|
||||||
|
console.log(err);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
const itemData=ref(props.itemData)
|
||||||
|
watch(() =>itemData.value, (val) => {
|
||||||
|
listQuery.value.title = val.yjBt
|
||||||
|
listQuery.value.instructionContent = val.yjNr
|
||||||
|
}, { deep: true, immediate: true })
|
||||||
|
const chooseUserVisible = ref(false)
|
||||||
|
const roleIds = ref([])
|
||||||
|
// 选取角色
|
||||||
|
const handleUserSelected = (val) => {
|
||||||
|
personnelEntity.value = val.map((item, index) => {
|
||||||
|
return {
|
||||||
|
name: item.userName,
|
||||||
|
idNumber: item.idEntityCard,
|
||||||
|
phoneNumber: item.mobile,
|
||||||
|
personTypeId: "",
|
||||||
|
personTypeName: "",
|
||||||
|
domicilePlace: "",
|
||||||
|
orderId: index + 1
|
||||||
|
}
|
||||||
|
})
|
||||||
|
ryStr.value = personnelEntity.value.map(item => item.name)
|
||||||
|
}
|
||||||
|
// 选取部门
|
||||||
|
const getDepValue = (e) => {
|
||||||
|
listQuery.value.receivingUnit = e.map(item => item.orgName)
|
||||||
|
}
|
||||||
|
defineExpose({
|
||||||
|
getsendFqzl
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="personCard relative flex mb10 pointer" >
|
<div class="personCard relative flex mb10 pointer" >
|
||||||
<div class="cxbq f14 lh50 tc absolute" v-if="props.item.czzt == '03'">已完成</div>
|
<div class="cxbq f14 lh50 tc absolute" v-if="props.item.czzt == '03'">已完成</div>
|
||||||
<el-button color="#0072ff" size="small" @click="handleQs(props.item)" v-if="props.item.czzt == '01'" class="btn_qs f14 tc absolute">签收</el-button>
|
<el-button color="#0072ff" size="small" @click.stop="handleQs(props.item)" v-if="props.item.czzt == '01'" class="btn_qs f14 tc absolute">签收</el-button>
|
||||||
<el-button color="#0072ff" size="small" v-if="props.item.czzt == '02'" ref="buttonRef" @click.stop="isShowVisble = !isShowVisble;" class="btn_qs f14 tc absolute">反馈</el-button>
|
<el-button color="#0072ff" size="small" v-if="props.item.czzt == '02'" ref="buttonRef" @click.stop="isShowVisble = !isShowVisble;" class="btn_qs f14 tc absolute">反馈</el-button>
|
||||||
<div class="avatarBox relative">
|
<div class="avatarBox relative">
|
||||||
<div class="marks f12 absolute" :class="changeBg(props.item.yjJb)">
|
<div class="marks f12 absolute" :class="changeBg(props.item.yjJb)">
|
||||||
@ -10,7 +10,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<el-image :preview-teleported="true" style="width: 80px; height: 110px" :src="props.item.yjTp" :preview-src-list="[props.item.yjTp]"/>
|
<el-image :preview-teleported="true" style="width: 80px; height: 110px" :src="props.item.yjTp" :preview-src-list="[props.item.yjTp]"/>
|
||||||
</div>
|
</div>
|
||||||
<span class="smallbtn">全息档案</span>
|
<div> <span class="smallbtn" @click.stop="()=>{}">全息档案</span></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="infoBox">
|
<div class="infoBox">
|
||||||
<div class="items">
|
<div class="items">
|
||||||
@ -81,7 +81,7 @@ const rules = reactive({
|
|||||||
// 处理签收
|
// 处理签收
|
||||||
const handleQs = (val) =>{
|
const handleQs = (val) =>{
|
||||||
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
||||||
qcckPost({id:val.id}, "/mosty-jmxf/tbYjxx/yjqs").then(() => {
|
qcckPost({id:val.id}, "/mosty-gsxt/tbYjxx/yjqs").then(() => {
|
||||||
val.czzt = '02'
|
val.czzt = '02'
|
||||||
proxy.$message({ type: "success", message: "签收成功" });
|
proxy.$message({ type: "success", message: "签收成功" });
|
||||||
});
|
});
|
||||||
@ -93,7 +93,7 @@ const handleSendSp = (val) =>{
|
|||||||
elRowForm.value.validate((valid) => {
|
elRowForm.value.validate((valid) => {
|
||||||
if(!valid) return;
|
if(!valid) return;
|
||||||
let data = { id:val.id,...chooseRow.value }
|
let data = { id:val.id,...chooseRow.value }
|
||||||
qcckPost(data, "/mosty-jmxf/tbYjxx/yjfk").then(() => {
|
qcckPost(data, "/mosty-gsxt/tbYjxx/yjfk").then(() => {
|
||||||
val.czzt = '03';
|
val.czzt = '03';
|
||||||
proxy.$message({ type: "success", message: "反馈成功" });
|
proxy.$message({ type: "success", message: "反馈成功" });
|
||||||
cancelRowSp()
|
cancelRowSp()
|
||||||
@ -134,6 +134,9 @@ const changetText = (type) => {
|
|||||||
return "不关注";
|
return "不关注";
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
const showDetail = () => {
|
||||||
|
emit('showDetail',props.item)
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
</el-input>
|
</el-input>
|
||||||
</div>
|
</div>
|
||||||
<ul class="listContent noScollLine mt10" v-infinite-scroll="loadList" style="overflow: auto" v-loading="loading">
|
<ul class="listContent noScollLine mt10" v-infinite-scroll="loadList" style="overflow: auto" v-loading="loading">
|
||||||
<li v-for="(item, index) in personList" :key="index">
|
<li v-for="(item, index) in personList" :key="index" @click.stop="showDetail(item)">
|
||||||
<YjItem :item="item" type="yj" :dic="{D_BZ_YJCZZT}"></YjItem>
|
<YjItem :item="item" type="yj" :dic="{D_BZ_YJCZZT}"></YjItem>
|
||||||
</li>
|
</li>
|
||||||
<MOSTY.Empty :show="!loading && personList.length <= 0"></MOSTY.Empty>
|
<MOSTY.Empty :show="!loading && personList.length <= 0"></MOSTY.Empty>
|
||||||
@ -63,6 +63,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<Information v-model="showDialog" title="发送指令" @submit='submit' @close='close'>
|
||||||
|
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj" :tacitly="tacitly"/>
|
||||||
|
</Information>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@ -74,6 +77,8 @@ import WarningCount from "./components/WarningCount.vue";
|
|||||||
import BarHatEcharts from "@/views/home/echarts/barHatEcharts.vue";
|
import BarHatEcharts from "@/views/home/echarts/barHatEcharts.vue";
|
||||||
import { onMounted, reactive, ref,getCurrentInstance } from "vue";
|
import { onMounted, reactive, ref,getCurrentInstance } from "vue";
|
||||||
import { useRouter } from "vue-router";
|
import { useRouter } from "vue-router";
|
||||||
|
import Information from "@/views/home/model/information.vue";
|
||||||
|
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_BZ_YJCZZT } = proxy.$dict('D_BZ_YJCZZT')
|
const { D_BZ_YJCZZT } = proxy.$dict('D_BZ_YJCZZT')
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
@ -138,7 +143,7 @@ const loadList = () =>{
|
|||||||
const getList = () =>{
|
const getList = () =>{
|
||||||
let params = { pageSize:10, pageNum:pageNum.value };
|
let params = { pageSize:10, pageNum:pageNum.value };
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
qcckPost({params},'/mosty-jmxf/tbYjxx/getPageList').then(res=>{
|
qcckPost(params,'/mosty-gsxt/tbYjxx/getPageList').then(res=>{
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
let arr = res.records || [];
|
let arr = res.records || [];
|
||||||
personList.value = pageNum.value == 1 ? arr : personList.value.concat(arr);
|
personList.value = pageNum.value == 1 ? arr : personList.value.concat(arr);
|
||||||
@ -151,7 +156,7 @@ const getList = () =>{
|
|||||||
const init = () =>{
|
const init = () =>{
|
||||||
// 预警处置统计
|
// 预警处置统计
|
||||||
list.YjczDate.loading = true;
|
list.YjczDate.loading = true;
|
||||||
qcckGet({},'/mosty-jmxf/tbYjxx/getYjCzztTj').then(res=>{
|
qcckGet({},'/mosty-gsxt/tbYjxx/getYjCzztTj').then(res=>{
|
||||||
list.YjczDate.loading = false;
|
list.YjczDate.loading = false;
|
||||||
list.YjczDate.xDate = res.map(item=>item.zdmc);
|
list.YjczDate.xDate = res.map(item=>item.zdmc);
|
||||||
list.YjczDate.list = [{
|
list.YjczDate.list = [{
|
||||||
@ -174,7 +179,7 @@ const init = () =>{
|
|||||||
|
|
||||||
// 感知元统计
|
// 感知元统计
|
||||||
list.GzyDate.loading= true;
|
list.GzyDate.loading= true;
|
||||||
qcckGet({},'/mosty-jmxf/tbYjxx/getGzyTj').then(res=>{
|
qcckGet({},'/mosty-gsxt/tbYjxx/getGzyTj').then(res=>{
|
||||||
list.GzyDate.loading = false;
|
list.GzyDate.loading = false;
|
||||||
list.GzyDate.xDate = res.map(item=>item.yj_gzymc);
|
list.GzyDate.xDate = res.map(item=>item.yj_gzymc);
|
||||||
list.GzyDate.list = [{
|
list.GzyDate.list = [{
|
||||||
@ -186,7 +191,7 @@ const init = () =>{
|
|||||||
|
|
||||||
// 预警级别
|
// 预警级别
|
||||||
loadingyj.value = true;
|
loadingyj.value = true;
|
||||||
qcckGet({},'/mosty-jmxf/tbYjxx/getYjxxTj').then(res=>{
|
qcckGet({},'/mosty-gsxt/tbYjxx/getYjxxTj').then(res=>{
|
||||||
loadingyj.value = false;
|
loadingyj.value = false;
|
||||||
yjjbRef.value.initCharts(res)
|
yjjbRef.value.initCharts(res)
|
||||||
})
|
})
|
||||||
@ -195,6 +200,26 @@ const init = () =>{
|
|||||||
const seeMoreFn = () => {
|
const seeMoreFn = () => {
|
||||||
router.push('/ControlApproval')
|
router.push('/ControlApproval')
|
||||||
}
|
}
|
||||||
|
const showDialog = ref(false)
|
||||||
|
const itemData=ref()
|
||||||
|
const showDetail = (item) => {
|
||||||
|
showDialog.value = true;
|
||||||
|
itemData.value=item
|
||||||
|
}
|
||||||
|
const handleClose = () => {
|
||||||
|
showDialog.value = false;
|
||||||
|
}
|
||||||
|
const semdFqzlRef = ref()
|
||||||
|
const tacitly = {
|
||||||
|
title:'yjBt',
|
||||||
|
instructionContent:'yjNr'
|
||||||
|
}
|
||||||
|
const submit=()=>{
|
||||||
|
semdFqzlRef.value.getsendFqzl()
|
||||||
|
}
|
||||||
|
const close = () => {
|
||||||
|
semdFqzlRef.value.close()
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
299
src/views/backOfficeSystem/MakeAcomment/components/a/addForm.vue
Normal file
299
src/views/backOfficeSystem/MakeAcomment/components/a/addForm.vue
Normal file
@ -0,0 +1,299 @@
|
|||||||
|
<template>
|
||||||
|
<div class="dialog" v-if="dialogForm" v-infinite-scroll="load" :infinite-scroll-disabled="disabled">
|
||||||
|
<!-- class="head_box" -->
|
||||||
|
<div style="position: sticky;top: 0;float: right;">
|
||||||
|
<el-button size="small" @click="close">关闭</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="content_box">
|
||||||
|
<div>
|
||||||
|
<div class="title_box">{{ listQuery.xsMc }}</div>
|
||||||
|
<div class="content_icon flex align-center">
|
||||||
|
<div class="icon_img"><img src="@/assets/images/ly-person-icon.png" alt="" srcset=""></div>
|
||||||
|
<div class="flex align-space-around dir-column">
|
||||||
|
<div class="publisher">发布者:{{ listQuery.ssbm }}——{{ listQuery.fbrxm }}</div>
|
||||||
|
<div>发布于:{{ listQuery.fbsj }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="content_text">{{ listQuery.xsNr }} </p>
|
||||||
|
<div class="itemXs_Xs flex just-between align-center">
|
||||||
|
<div class=" flex just-between align-center">
|
||||||
|
<el-icon class="icon">
|
||||||
|
<Histogram />
|
||||||
|
</el-icon>
|
||||||
|
{{ listQuery.rd ? listQuery.rd : 0 }}
|
||||||
|
</div>
|
||||||
|
<div class=" flex just-between align-center">
|
||||||
|
<el-icon class="icon">
|
||||||
|
<ChatDotSquare />
|
||||||
|
</el-icon>
|
||||||
|
{{ pls }}
|
||||||
|
</div>
|
||||||
|
<div class="flex align-center">情报类型:
|
||||||
|
<DictTag :tag="false" :value="listQuery.xlLx" color="#5c5c5c" :options="dict.D_GS_XS_LX" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title_box virtual">评论列表</div>
|
||||||
|
<CommentList v-for="(item, index) in pagesData.listData" :key="index" :index="index" :item="item"
|
||||||
|
@postReply="postReply" @delComment="delComment" :userInfo="userInfo" @cjpjZan="cjpjZan"/>
|
||||||
|
<div class="sticky">
|
||||||
|
<div class="title_box virtual">发表评论</div>
|
||||||
|
<div class="flex flex-column ">
|
||||||
|
<el-input v-model="textarea2" style="width: 100%" type="textarea" placeholder="请输入内容" /><el-button
|
||||||
|
type="primary" @click="sendComment()">发表</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||||
|
import { ref, reactive, toRaw, watch, onMounted, onUnmounted } from "vue";
|
||||||
|
import CommentList from '../itemXs/commentList.vue'
|
||||||
|
import { getItem } from '@/utils/storage.js'
|
||||||
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||||
|
import emitter from "@/utils/eventBus.js";
|
||||||
|
const emit = defineEmits(["updateDate"]);
|
||||||
|
const props = defineProps({
|
||||||
|
dict: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const dialogForm = ref(false); //弹窗
|
||||||
|
const listQuery = ref({})
|
||||||
|
const textarea2 = ref()
|
||||||
|
const userInfo = ref(getItem('idEntityCard'))
|
||||||
|
// 初始化数据
|
||||||
|
const init = (row) => {
|
||||||
|
dialogForm.value = true;
|
||||||
|
// 根据id查询详情
|
||||||
|
if (row) {
|
||||||
|
qcckGet({ id: row }, "/mosty-gsxt/qbcj/selectByid").then((res) => {
|
||||||
|
listQuery.value = res;
|
||||||
|
});
|
||||||
|
cjpjSelectPage()
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
// 关闭
|
||||||
|
const close = () => {
|
||||||
|
dialogForm.value = false;
|
||||||
|
pagesData.pagebreak.pageCurrent = 1
|
||||||
|
};
|
||||||
|
const pagesData = reactive({
|
||||||
|
total: 0,
|
||||||
|
pagebreak: {
|
||||||
|
pageCurrent: 1,
|
||||||
|
pageSize: 10
|
||||||
|
},
|
||||||
|
listData: []
|
||||||
|
});
|
||||||
|
// 发送评论
|
||||||
|
const sendComment = () => {
|
||||||
|
const prmes = {
|
||||||
|
pldd: 'pc端发送',
|
||||||
|
plnr: textarea2.value,
|
||||||
|
cjid: listQuery.value.id,
|
||||||
|
dzs: 10
|
||||||
|
}
|
||||||
|
qcckPost(prmes, '/mosty-gsxt/gsxt/cjpj/add').then((res) => {
|
||||||
|
textarea2.value = ''; // 清空评论内容
|
||||||
|
cjpjSelectPage()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const pls=ref(0)
|
||||||
|
// 获取评论
|
||||||
|
const cjpjSelectPage = () => {
|
||||||
|
const prmes = {
|
||||||
|
...pagesData.pagebreak,
|
||||||
|
cjid: listQuery.value.id
|
||||||
|
}
|
||||||
|
qcckPost(prmes, '/mosty-gsxt/gsxt/cjpj/selectPage').then((res) => {
|
||||||
|
pagesData.listData = pagesData.pagebreak.pageCurrent == 1 ? res.records : pagesData.listData.concat(res.records)
|
||||||
|
pls.value=res.total
|
||||||
|
|
||||||
|
pagesData.total = res.pages
|
||||||
|
})
|
||||||
|
}
|
||||||
|
//回复消息
|
||||||
|
const postReply = (val) => {
|
||||||
|
qcckPost(val, '/mosty-gsxt/gsxt/cjhf/add').then((res) => {
|
||||||
|
ElMessage({
|
||||||
|
message: '回复成功',
|
||||||
|
type: 'success',
|
||||||
|
plain: true,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 删除评论
|
||||||
|
const delComment = (val) => {
|
||||||
|
ElMessageBox.confirm(
|
||||||
|
'是否删除评论',
|
||||||
|
'警告',
|
||||||
|
{
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.then(() => {
|
||||||
|
qcckPost([val], '/mosty-gsxt/gsxt/cjpj/remove ').then((res) => {
|
||||||
|
pagesData.pagebreak.pageCurrent= Math.ceil(pagesData.listData.length / pagesData.pagebreak.pageSize);
|
||||||
|
cjpjSelectPage()
|
||||||
|
ElMessage({
|
||||||
|
message: '删除成功',
|
||||||
|
type: 'success',
|
||||||
|
plain: true,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
ElMessage({
|
||||||
|
type: 'info',
|
||||||
|
message: '取消删除',
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//点赞
|
||||||
|
const cjpjZan = (val,data) => {
|
||||||
|
|
||||||
|
const promes = {
|
||||||
|
dzs: data,
|
||||||
|
id:val
|
||||||
|
}
|
||||||
|
qcckPost(promes, '/mosty-gsxt/gsxt/cjpj/gxdzs').then((res) => {
|
||||||
|
ElMessage({
|
||||||
|
message: '点赞成功',
|
||||||
|
type: 'success',
|
||||||
|
plain: true,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const disabled = ref(false)
|
||||||
|
|
||||||
|
|
||||||
|
defineExpose({ init });
|
||||||
|
|
||||||
|
const load = () => {
|
||||||
|
if (pagesData.pagebreak.pageCurrent < pagesData.total) {
|
||||||
|
pagesData.pagebreak.pageCurrent++
|
||||||
|
cjpjSelectPage()
|
||||||
|
} else {
|
||||||
|
disabled.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "~@/assets/css/layout.scss";
|
||||||
|
@import "~@/assets/css/element-plus.scss";
|
||||||
|
|
||||||
|
.boxlist {
|
||||||
|
width: 99%;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content_box {
|
||||||
|
padding-top: 5px;
|
||||||
|
|
||||||
|
.title_box {
|
||||||
|
margin: 10px 0;
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.virtual {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.virtual::after {
|
||||||
|
content: "";
|
||||||
|
height: 4px;
|
||||||
|
width: 70px;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
background: linear-gradient(90deg, rgba(0, 206, 255, 1) 0%, rgba(244, 244, 244, 1) 100%);
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sticky {
|
||||||
|
position: sticky;
|
||||||
|
bottom: -20px;
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content_icon {
|
||||||
|
margin-top: 10px;
|
||||||
|
|
||||||
|
.icon_img {
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin-right: 10px;
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-space-around {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: space-between;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #6e6e6e;
|
||||||
|
padding: 4px 0;
|
||||||
|
|
||||||
|
.publisher {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.content_text {
|
||||||
|
|
||||||
|
font-size: 16px;
|
||||||
|
margin: 20px 0;
|
||||||
|
// height: 40vh;
|
||||||
|
line-height: 30px;
|
||||||
|
overflow: auto;
|
||||||
|
color: #6c6c6c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemXs_Xs {
|
||||||
|
width: 18%;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #6c6c6c;
|
||||||
|
line-height: 20px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-column {
|
||||||
|
align-items: flex-end
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,75 @@
|
|||||||
|
<template>
|
||||||
|
<div class="content_icon flex align-center">
|
||||||
|
<div class="icon_img"><img src="@/assets/images/ly-person-icon.png" alt=""></div>
|
||||||
|
<div class="align-space-around dir-column">
|
||||||
|
<div class="publisher">{{ item.ssbm }}—{{ item.plrxm }}</div>
|
||||||
|
<div class="pubContent">{{ item.plnr }}</div>
|
||||||
|
<div class="itemXs_time flex">
|
||||||
|
<div>{{ item.pldd }}</div>
|
||||||
|
<div>{{ item.plsj }}</div>
|
||||||
|
<div>
|
||||||
|
<span @click.stop="openReply(index)">回复</span>
|
||||||
|
<span>删除</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="pubContent flex" v-if="activeIndex === index" style="align-items: flex-end">
|
||||||
|
<el-input
|
||||||
|
v-model="textarea2"
|
||||||
|
style="flex: 1; margin-right: 10px;"
|
||||||
|
type="textarea"
|
||||||
|
placeholder="请输入内容"
|
||||||
|
/>
|
||||||
|
<el-button type="primary" @click="sendComment(item)">发表</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref } from 'vue'
|
||||||
|
|
||||||
|
const emit = defineEmits(['postReply'])
|
||||||
|
const props = defineProps({
|
||||||
|
dict: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
},
|
||||||
|
item: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
},
|
||||||
|
index: {
|
||||||
|
type: Number,
|
||||||
|
default: 1
|
||||||
|
}, showIndex: {
|
||||||
|
type: Number,
|
||||||
|
default: 1
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const textarea2 = ref('')
|
||||||
|
const activeIndex = ref(null)
|
||||||
|
|
||||||
|
const openReply = (index) => {
|
||||||
|
// 如果点击的是当前已打开的回复框,则关闭它
|
||||||
|
// 否则关闭其他回复框,打开当前点击的
|
||||||
|
// activeIndex.value = activeIndex.value === index ? null : index
|
||||||
|
textarea2.value = '' // 清空输入框内容
|
||||||
|
}
|
||||||
|
|
||||||
|
const sendComment = (item) => {
|
||||||
|
if (!textarea2.value.trim()) return // 防止发送空内容
|
||||||
|
|
||||||
|
const params = {
|
||||||
|
cjid: item.cjid,
|
||||||
|
plid: item.id,
|
||||||
|
hfdd: "Pc端发送",
|
||||||
|
hfnr: textarea2.value
|
||||||
|
}
|
||||||
|
emit('postReply', params)
|
||||||
|
|
||||||
|
// 发送后重置状态
|
||||||
|
textarea2.value = ''
|
||||||
|
activeIndex.value = null
|
||||||
|
}
|
||||||
|
</script>
|
@ -0,0 +1,228 @@
|
|||||||
|
<template>
|
||||||
|
<div class="content_icon flex align-center">
|
||||||
|
<div class="icon_img"><img src="@/assets/images/ly-person-icon.png" alt="" srcset=""></div>
|
||||||
|
<div class=" align-space-around dir-column">
|
||||||
|
<div class="publisher">{{ item.ssbm }}—{{ item.plrxm }}</div>
|
||||||
|
<div class="pubContent">{{ item.plnr }}</div>
|
||||||
|
<div class="itemXs_time flex ">
|
||||||
|
<div> {{ item.pldd }}</div>
|
||||||
|
<div>{{ item.plsj }}</div>
|
||||||
|
<div><span @click="openReply(index)" class="hf">回复</span>
|
||||||
|
|
||||||
|
<span class="del" @click="delComment(item)"
|
||||||
|
v-show="userInfo==item.plrsfzh"
|
||||||
|
>删除</span></div>
|
||||||
|
<div @click="showReply(item)" class="ck">查看回复</div>
|
||||||
|
<div @click="handleLike(item)" class="ck">点赞{{dzs }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="pubContent flex" v-if="showInput" style="align-items: flex-end">
|
||||||
|
<el-input v-model="textarea2" style="flex: 1;margin-right: 10px;" type="textarea" placeholder="请输入内容" /><el-button
|
||||||
|
type="primary" @click="sendComment(item)">回复</el-button>
|
||||||
|
</div>
|
||||||
|
<div v-if="show">
|
||||||
|
<ReplyList :replyId="item" ref="replyList" :userInfo="userInfo"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref ,computed} from 'vue'
|
||||||
|
import ReplyList from './replyList.vue'
|
||||||
|
|
||||||
|
const emit = defineEmits(['postReply','cjpjZan'])
|
||||||
|
const props = defineProps({
|
||||||
|
dict: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
}, item: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
},
|
||||||
|
index: {
|
||||||
|
type: Number,
|
||||||
|
default: 1
|
||||||
|
},
|
||||||
|
showList: {
|
||||||
|
type: Boolean,
|
||||||
|
default:false
|
||||||
|
}, userInfo: {
|
||||||
|
type: String,
|
||||||
|
default:''
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const textarea2 = ref()
|
||||||
|
const showInput = ref(false)
|
||||||
|
const show = ref(false)
|
||||||
|
const dzsAdd = ref(0)
|
||||||
|
const dzs = computed(() => {
|
||||||
|
return props.item.dzs+dzsAdd.value
|
||||||
|
})
|
||||||
|
const openReply = () => {
|
||||||
|
showInput.value=! showInput.value
|
||||||
|
show.value=false
|
||||||
|
}
|
||||||
|
const replyList = ref()
|
||||||
|
const sendComment = (item) => {
|
||||||
|
const promes = {
|
||||||
|
cjid: item.cjid,
|
||||||
|
plid: item.id,
|
||||||
|
hfdd:"Pc端发送",
|
||||||
|
hfnr: textarea2.value
|
||||||
|
}
|
||||||
|
textarea2.value=''
|
||||||
|
emit('postReply',promes)
|
||||||
|
replyList.value? replyList.value.getList():""
|
||||||
|
|
||||||
|
}
|
||||||
|
const replyId = ref()
|
||||||
|
const showReply = (val) => {
|
||||||
|
show.value=!show.value
|
||||||
|
showInput.value=false
|
||||||
|
replyId.value=val
|
||||||
|
}
|
||||||
|
|
||||||
|
//删除评论
|
||||||
|
const delComment = (item) => {
|
||||||
|
emit('delComment', item.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function debounce(func, delay) {
|
||||||
|
let timer = null;
|
||||||
|
return function(...args) {
|
||||||
|
clearTimeout(timer);
|
||||||
|
timer = setTimeout(() => {
|
||||||
|
func.apply(this, args);
|
||||||
|
}, delay);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const debouncedSubmitLike = debounce(async (item) => {
|
||||||
|
try {
|
||||||
|
await emit('cjpjZan', item.id, dzsAdd.value);
|
||||||
|
console.log('点赞成功');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('点赞失败', error);
|
||||||
|
dzsAdd.value--;
|
||||||
|
}
|
||||||
|
}, 500);
|
||||||
|
|
||||||
|
const handleLike = (item) => {
|
||||||
|
dzsAdd.value++;
|
||||||
|
debouncedSubmitLike(item);
|
||||||
|
};
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "~@/assets/css/layout.scss";
|
||||||
|
@import "~@/assets/css/element-plus.scss";
|
||||||
|
|
||||||
|
.boxlist {
|
||||||
|
width: 99%;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content_box {
|
||||||
|
padding-top: 5px;
|
||||||
|
|
||||||
|
.title_box {
|
||||||
|
margin: 10px 0;
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.virtual {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.virtual::after {
|
||||||
|
content: "";
|
||||||
|
height: 4px;
|
||||||
|
width: 70px;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
background: linear-gradient(90deg, rgba(0, 206, 255, 1) 0%, rgba(244, 244, 244, 1) 100%);
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content_icon {
|
||||||
|
margin-top: 10px;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
padding: 10px 0;
|
||||||
|
|
||||||
|
.icon_img {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin-right: 10px;
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-space-around {
|
||||||
|
width: calc(100% - 40px);
|
||||||
|
// flex-wrap: wrap;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #6e6e6e;
|
||||||
|
padding: 4px 0;
|
||||||
|
|
||||||
|
.publisher {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pubContent {
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 26px;
|
||||||
|
margin: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemXs_time {
|
||||||
|
justify-content: space-between;
|
||||||
|
width: 23%;
|
||||||
|
align-items: center;
|
||||||
|
color: #000;
|
||||||
|
|
||||||
|
cursor: pointer;
|
||||||
|
.del{
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
.hf{
|
||||||
|
color: #49bb62;
|
||||||
|
}
|
||||||
|
.ck{
|
||||||
|
color: rgb(27, 115, 239);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.content_text {
|
||||||
|
margin: 20px 0;
|
||||||
|
height: 40vh;
|
||||||
|
overflow: auto;
|
||||||
|
color: #444444;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemXs_Xs {
|
||||||
|
width: 18%;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #5c5c5c;
|
||||||
|
line-height: 20px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -1,47 +1,64 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="itemXs_Box">
|
<div class="itemXs_Box" :style="{color:fontColor,backgroundColor:bgColor}">
|
||||||
<div class="itemXs_Mc">
|
<div class="itemXs_Mc">
|
||||||
情报描述情报描述情报描述情报措述情描述情报描述情报描述情报描,情报描述情报描述情报描述情报措述情描述情报描述情报描述情报描,
|
{{ item.xsMc }}
|
||||||
</div>
|
</div>
|
||||||
<div class="itemXs_Ms">
|
<div class="itemXs_Ms">
|
||||||
情报描述情报描述情报描述情报措述情描述情报描述情报描述情报描,情报描述情报描述情报描述情报措述情描述情报描述情报描述情报描,
|
{{item.xsNr }}
|
||||||
</div>
|
</div>
|
||||||
<div class="itemXs_Xs flex just-between align-center">
|
<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">
|
||||||
<div class=" flex just-between align-center"><el-icon class="icon"><ChatDotSquare /></el-icon>15522</div>
|
<el-icon class="icon"><Histogram /></el-icon>
|
||||||
<div class=" flex just-between align-center"><el-icon class="icon"><Clock /></el-icon>2025-10-10 10:10:10</div>
|
{{item.rd?item.rd:0}}
|
||||||
<div class=" flex just-between align-center"><el-icon class="icon"><Avatar /></el-icon>张三</div>
|
</div>
|
||||||
<div>情报类型:测试数据</div>
|
<div class=" flex just-between align-center">
|
||||||
|
<el-icon class="icon"><ChatDotSquare /></el-icon>
|
||||||
|
{{item.pls?item.pls:0}}
|
||||||
|
</div>
|
||||||
|
<div class=" flex just-between align-center">
|
||||||
|
<el-icon class="icon"><Clock /></el-icon>
|
||||||
|
{{item.fbsj}}
|
||||||
|
</div>
|
||||||
|
<div class=" flex just-between align-center">
|
||||||
|
<el-icon class="icon"><Avatar /></el-icon>
|
||||||
|
{{item.fbrxm}}
|
||||||
|
</div>
|
||||||
|
<div class="flex align-center">情报类型:
|
||||||
|
<DictTag :tag="false" :value="item.xlLx" color="#6c6c6c" :options="dict.D_GS_XS_LX" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<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({
|
const props = defineProps({
|
||||||
item: {
|
item: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => { },
|
default: () => { },
|
||||||
},
|
}, bgColor: {
|
||||||
|
type: String,
|
||||||
|
default: '#ffebee'
|
||||||
|
},fontColor:{
|
||||||
|
type:String,
|
||||||
|
default:'#de0909'
|
||||||
|
}, dict: {
|
||||||
|
type:Object,
|
||||||
|
default:()=>{}
|
||||||
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.itemXs_Box {
|
.itemXs_Box {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
border: 1px solid red;
|
width: 32.5%;
|
||||||
// height: 100px;
|
border-radius: 5px;
|
||||||
width: 40%;
|
padding: 20px 10px;
|
||||||
border-radius: 10px;
|
max-height: 11vh;
|
||||||
padding: 10px 15px;
|
|
||||||
|
|
||||||
.itemXs_Mc {
|
.itemXs_Mc {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: 700;
|
font-weight: 800;
|
||||||
color: #de0909;
|
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
@ -49,7 +66,7 @@ line-height: 20px;
|
|||||||
}
|
}
|
||||||
|
|
||||||
.itemXs_Ms {
|
.itemXs_Ms {
|
||||||
color: #ccc;
|
color: #6c6c6c;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
@ -57,11 +74,13 @@ line-height: 20px;
|
|||||||
margin: 10px 0;
|
margin: 10px 0;
|
||||||
}
|
}
|
||||||
.itemXs_Xs{
|
.itemXs_Xs{
|
||||||
font-size: 16px;
|
font-size: 12px;
|
||||||
color: #ccc;
|
color: #6c6c6c;
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
.icon{
|
.icon{
|
||||||
font-size: 22px;
|
font-size: 18px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,144 @@
|
|||||||
|
<template>
|
||||||
|
<div class="content_icon flex align-center">
|
||||||
|
<div class="icon_img"><img src="@/assets/images/ly-person-icon.png" alt="" srcset=""></div>
|
||||||
|
<div class=" align-space-around dir-column">
|
||||||
|
<div class="publisher">{{ item.ssbm }}—{{ item.hfrxm }}</div>
|
||||||
|
<div class="pubContent">{{ item.hfnr }}</div>
|
||||||
|
<div class="itemXs_time flex ">
|
||||||
|
<div> {{ item.hfdd }}</div>
|
||||||
|
<div>{{ item.hfsj }}</div>
|
||||||
|
<div><span class="del" @click="delComment(item)" v-show="userInfo==item.hfrsfzh">删除</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
|
||||||
|
|
||||||
|
const emit=defineEmits(['postReply','delComment'])
|
||||||
|
const props = defineProps({
|
||||||
|
dict: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
}, item: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
},
|
||||||
|
index: {
|
||||||
|
type: Number,
|
||||||
|
default: 1
|
||||||
|
},
|
||||||
|
showList: {
|
||||||
|
type: Boolean,
|
||||||
|
default:false
|
||||||
|
},userInfo:{type:String,default:''}
|
||||||
|
});
|
||||||
|
|
||||||
|
const delComment = (item) => {
|
||||||
|
emit('delComment',item.id)
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "~@/assets/css/layout.scss";
|
||||||
|
@import "~@/assets/css/element-plus.scss";
|
||||||
|
|
||||||
|
.boxlist {
|
||||||
|
width: 99%;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content_box {
|
||||||
|
padding-top: 5px;
|
||||||
|
|
||||||
|
.title_box {
|
||||||
|
margin: 10px 0;
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.virtual {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.virtual::after {
|
||||||
|
content: "";
|
||||||
|
height: 4px;
|
||||||
|
width: 70px;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
background: linear-gradient(90deg, rgba(0, 206, 255, 1) 0%, rgba(244, 244, 244, 1) 100%);
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content_icon {
|
||||||
|
margin-top: 10px;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
padding: 10px 0;
|
||||||
|
|
||||||
|
.icon_img {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin-right: 10px;
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-space-around {
|
||||||
|
width: calc(100% - 40px);
|
||||||
|
// flex-wrap: wrap;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #6e6e6e;
|
||||||
|
padding: 4px 0;
|
||||||
|
|
||||||
|
.publisher {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pubContent {
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 26px;
|
||||||
|
margin: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemXs_time {
|
||||||
|
justify-content: space-between;
|
||||||
|
width: 15%;
|
||||||
|
align-items: center;
|
||||||
|
color: #000;
|
||||||
|
.del{
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.content_text {
|
||||||
|
margin: 20px 0;
|
||||||
|
height: 40vh;
|
||||||
|
overflow: auto;
|
||||||
|
color: #444444;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemXs_Xs {
|
||||||
|
width: 18%;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #5c5c5c;
|
||||||
|
line-height: 20px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,184 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<CommentList v-for="(item, index) in pagesData.listData" :key="index" :item="item" @delComment="cjhfRemove" :userInfo="userInfo"/>
|
||||||
|
<el-pagination v-if="pagesData.total > 10" v-model:current-page="pagesData.pagebreak.pageCurrent"
|
||||||
|
v-model:page-size="pagesData.pagebreak.pageSize" :size="10" :disabled="false" :total="pagesData.total"
|
||||||
|
@size-change="handleSizeChange" @current-change="handleCurrentChange" />
|
||||||
|
<div style="text-align: center;width: 100%;height: 20px;" v-if="pagesData.total == 0">暂无回复</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||||
|
import { ref, reactive, toRaw, watch, onMounted, onUnmounted } from "vue";
|
||||||
|
import CommentList from './lstItem.vue'
|
||||||
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||||
|
const props = defineProps({
|
||||||
|
replyId: { type: Object, default: () => { } },
|
||||||
|
userInfo:{type:String,default:''}
|
||||||
|
});
|
||||||
|
|
||||||
|
const pagesData = reactive({
|
||||||
|
total: 0,
|
||||||
|
pagebreak: {
|
||||||
|
pageCurrent: 1,
|
||||||
|
pageSize: 10
|
||||||
|
},
|
||||||
|
listData: []
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
const handleSizeChange = (val) => {
|
||||||
|
pagesData.pagebreak.pageSize = val
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
const handleCurrentChange = (val) => {
|
||||||
|
pagesData.pagebreak.pageCurrent = val
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
//获取回复评论列表
|
||||||
|
const getList = () => {
|
||||||
|
const params = { ...pagesData.pagebreak, plid: props.replyId.id }
|
||||||
|
qcckPost(params, '/mosty-gsxt/gsxt/cjhf/selectPage').then(res => {
|
||||||
|
pagesData.listData = res.records
|
||||||
|
pagesData.total = res.total
|
||||||
|
// emitter.emit('pls',res.total)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除评论
|
||||||
|
const cjhfRemove = (val) => {
|
||||||
|
ElMessageBox.confirm(
|
||||||
|
'是否删除评论',
|
||||||
|
'警告',
|
||||||
|
{
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.then(() => {
|
||||||
|
qcckPost([val], '/mosty-gsxt/gsxt/cjhf/remove').then((res) => {
|
||||||
|
getList()
|
||||||
|
ElMessage({
|
||||||
|
message: '删除成功',
|
||||||
|
type: 'success',
|
||||||
|
plain: true,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
ElMessage({
|
||||||
|
type: 'info',
|
||||||
|
message: '取消删除',
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
onMounted(() => {
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
defineExpose({
|
||||||
|
getList
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "~@/assets/css/layout.scss";
|
||||||
|
@import "~@/assets/css/element-plus.scss";
|
||||||
|
|
||||||
|
.boxlist {
|
||||||
|
width: 99%;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content_box {
|
||||||
|
padding-top: 5px;
|
||||||
|
|
||||||
|
.title_box {
|
||||||
|
margin: 10px 0;
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.virtual {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.virtual::after {
|
||||||
|
content: "";
|
||||||
|
height: 4px;
|
||||||
|
width: 70px;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
background: linear-gradient(90deg, rgba(0, 206, 255, 1) 0%, rgba(244, 244, 244, 1) 100%);
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sticky {
|
||||||
|
position: sticky;
|
||||||
|
bottom: -20px;
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content_icon {
|
||||||
|
margin-top: 10px;
|
||||||
|
|
||||||
|
.icon_img {
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin-right: 10px;
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-space-around {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: space-between;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #6e6e6e;
|
||||||
|
padding: 4px 0;
|
||||||
|
|
||||||
|
.publisher {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.content_text {
|
||||||
|
|
||||||
|
font-size: 16px;
|
||||||
|
margin: 20px 0;
|
||||||
|
// height: 40vh;
|
||||||
|
line-height: 30px;
|
||||||
|
overflow: auto;
|
||||||
|
color: #444444;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemXs_Xs {
|
||||||
|
width: 18%;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #5c5c5c;
|
||||||
|
line-height: 20px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-column {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
</style>
|
@ -8,25 +8,33 @@
|
|||||||
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||||
</div>
|
</div>
|
||||||
<!-- 表格 -->
|
<!-- 表格 -->
|
||||||
<div class="tabBox " style="height: calc(100vh - 200px); display: flex;flex-wrap: wrap;">
|
<div class="tabBox tabListBox" >
|
||||||
<div v-for="(item, index) in 1000" :key="index" class="tabBox_item flex ">
|
<div class="temperatureBox" ref="temperatureBox">
|
||||||
<ItemXs :item="item" />
|
<div class="flex just-between temperature">
|
||||||
|
<div :class="{'active':pitchOn==1}" @click="handleAdd(1)">按热度</div>
|
||||||
|
<div>|</div>
|
||||||
|
<div :class="{'active':pitchOn==2}" @click="handleAdd(2)">按时间</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="just-between boxData" :style="{height:tabHeight+'px'}">
|
||||||
|
<ItemXs :dict="{D_GS_XS_LX}" :item="item" v-for="(item, index) in pageData.tableData" :key="index" style="margin-bottom: 10px;" @click="handleView(item)"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<AddForm ref="addForm" :dict="{D_GS_XS_LX}"/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||||
import Search from "@/components/aboutTable/Search.vue";
|
import Search from "@/components/aboutTable/Search.vue";
|
||||||
|
import AddForm from './components/a/addForm.vue'
|
||||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||||
import ItemXs from './components/itemXs/itemXs.vue'
|
import ItemXs from './components/itemXs/itemXs.vue'
|
||||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_GS_XS_LX } = proxy.$dict("D_GS_XS_LX"); //获取字典数据
|
const { D_GS_XS_LX } = proxy.$dict("D_GS_XS_LX"); //获取字典数据
|
||||||
const searchConfiger = reactive([
|
const searchConfiger = reactive([
|
||||||
|
|
||||||
{
|
{
|
||||||
label: "情报名称",
|
label: "情报名称",
|
||||||
showType: "input",
|
showType: "input",
|
||||||
@ -47,10 +55,11 @@ onMounted(() => {
|
|||||||
tabHeightFn()
|
tabHeightFn()
|
||||||
selectPagePbql()
|
selectPagePbql()
|
||||||
})
|
})
|
||||||
// const tabHeight = ref(0)
|
const tabHeight = ref(0)
|
||||||
|
const temperatureBox=ref()
|
||||||
// 表格高度计算
|
// 表格高度计算
|
||||||
const tabHeightFn = () => {
|
const tabHeightFn = () => {
|
||||||
// pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
tabHeight.value = window.innerHeight - 370 - temperatureBox.value.offsetHeight;
|
||||||
window.onresize = function () {
|
window.onresize = function () {
|
||||||
tabHeightFn();
|
tabHeightFn();
|
||||||
};
|
};
|
||||||
@ -58,7 +67,8 @@ const tabHeightFn = () => {
|
|||||||
const pageData = reactive({
|
const pageData = reactive({
|
||||||
parameter: {
|
parameter: {
|
||||||
pageCurrent: 1,
|
pageCurrent: 1,
|
||||||
pageSize: 10
|
pageSize: 10,
|
||||||
|
sort:"fbsj"
|
||||||
},
|
},
|
||||||
total: 0,
|
total: 0,
|
||||||
loading: false,
|
loading: false,
|
||||||
@ -69,9 +79,10 @@ const onSearch = (val) => {
|
|||||||
pageData.pageCurrent = 1;
|
pageData.pageCurrent = 1;
|
||||||
selectPagePbql()
|
selectPagePbql()
|
||||||
}
|
}
|
||||||
|
|
||||||
const selectPagePbql = () => {
|
const selectPagePbql = () => {
|
||||||
qcckGet(pageData.parameter, "/mosty-gsxt/qbcj/selectPagePbql").then((res) => {
|
qcckGet(pageData.parameter, "/mosty-gsxt/qbcj/selectPagePbql").then((res) => {
|
||||||
pageData.tableData =pageData.pageCurrent==1? res.records:pageData.tableData.concat(res.records || []);
|
pageData.tableData =pageData.parameter.pageCurrent==1? res.records:pageData.tableData.concat(res.records || []);
|
||||||
pageData.total = res.total;
|
pageData.total = res.total;
|
||||||
pageData.loading = false;
|
pageData.loading = false;
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
@ -80,9 +91,41 @@ const selectPagePbql = () => {
|
|||||||
pageData.loading = false;
|
pageData.loading = false;
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
const pitchOn = ref(1)
|
||||||
|
//查看新闻
|
||||||
|
const addForm = ref()
|
||||||
|
const handleView = (row) => {
|
||||||
|
addForm.value.init(row.id)
|
||||||
|
}
|
||||||
|
const handleAdd = (val) => {
|
||||||
|
pageData.parameter.sort = val == 1 ? "fbsj" : "rd"
|
||||||
|
pageData.parameter.pageCurrent = 1;
|
||||||
|
pitchOn.value = val
|
||||||
|
selectPagePbql()
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
.boxData{
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active{
|
||||||
|
color: #12a0ff;
|
||||||
|
}
|
||||||
|
.tabListBox{
|
||||||
|
padding: 10px 15px;
|
||||||
|
}
|
||||||
|
.temperatureBox{
|
||||||
|
margin: 10px 0;
|
||||||
|
width: 100%;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
.temperature{
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 10px;color: #000;width: 140px;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
@ -3,12 +3,16 @@
|
|||||||
<div class="head_box">
|
<div class="head_box">
|
||||||
<span class="title">{{ title }}情报信息流转</span>
|
<span class="title">{{ title }}情报信息流转</span>
|
||||||
<div>
|
<div>
|
||||||
<el-button type="primary" :loading="loading" @click="submit">保存</el-button>
|
<el-button type="primary" v-if="!listQuery.gzlid&&title!=='详情'" :loading="loading" @click="submit">保存</el-button>
|
||||||
<el-button @click="close">关闭</el-button>
|
<el-button @click="close">关闭</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form_cnt">
|
|
||||||
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
|
|
||||||
|
<div class="flex">
|
||||||
|
|
||||||
|
<div class="form_cnt" :class="listQuery.gzlid&&title=='详情' ? 'ww80' : 'ww100'">
|
||||||
|
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules" :disabled="title == '详情'">
|
||||||
<template #gapdive>
|
<template #gapdive>
|
||||||
<div style="width: 100%;height: 10px;" class="mb20">
|
<div style="width: 100%;height: 10px;" class="mb20">
|
||||||
<el-divider content-position="left">基础信息</el-divider>
|
<el-divider content-position="left">基础信息</el-divider>
|
||||||
@ -26,15 +30,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</FormMessage>
|
</FormMessage>
|
||||||
<el-divider content-position="left"><span class="mr20">相关人员</span> <el-button type="primary" size="small" @click="addEdit('add',null)">添加人员</el-button></el-divider>
|
<el-divider content-position="left"><span class="mr20">相关人员</span>
|
||||||
<MyTable
|
<el-button type="primary" size="small" @click="addEdit('add', null)" :disabled="title == '详情'">添加人员</el-button>
|
||||||
:tableData="pageForm.tableData"
|
</el-divider>
|
||||||
:tableColumn="pageForm.tableColumn"
|
<MyTable :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn" :tableHeight="pageForm.tableHeight"
|
||||||
:tableHeight="pageForm.tableHeight"
|
:key="pageForm.keyCount" :tableConfiger="pageForm.tableConfiger" :controlsWidth="pageForm.controlsWidth">
|
||||||
:key="pageForm.keyCount"
|
|
||||||
:tableConfiger="pageForm.tableConfiger"
|
|
||||||
:controlsWidth="pageForm.controlsWidth"
|
|
||||||
>
|
|
||||||
<template #xb="{ row }">
|
<template #xb="{ row }">
|
||||||
<DictTag :value="row.xb" :tag="false" :options="props.dic.D_BZ_XB" />
|
<DictTag :value="row.xb" :tag="false" :options="props.dic.D_BZ_XB" />
|
||||||
</template>
|
</template>
|
||||||
@ -50,6 +50,12 @@
|
|||||||
</template>
|
</template>
|
||||||
</MyTable>
|
</MyTable>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-if="listQuery.gzlid&&title=='详情'" class="ww20">
|
||||||
|
<ApprovalEcho ref="approvalEcho" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<!-- 人员 -->
|
<!-- 人员 -->
|
||||||
<AddPeo ref="showAdd" v-model="showPeo" v-if="showPeo" :dic="props.dic" @change="getPeo"></AddPeo>
|
<AddPeo ref="showAdd" v-model="showPeo" v-if="showPeo" :dic="props.dic" @change="getPeo"></AddPeo>
|
||||||
</div>
|
</div>
|
||||||
@ -61,7 +67,8 @@ import AddPeo from '@/components/addPerson/index.vue'
|
|||||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
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 { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||||
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, nextTick } from "vue";
|
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, nextTick,watch } from "vue";
|
||||||
|
import ApprovalEcho from "@/components/flowPath/ApprovalEcho.vue";
|
||||||
const emit = defineEmits(["change"]);
|
const emit = defineEmits(["change"]);
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
dic: Object
|
dic: Object
|
||||||
@ -97,7 +104,8 @@ const pageForm = reactive({
|
|||||||
tableConfiger: {
|
tableConfiger: {
|
||||||
rowHieght: 61,
|
rowHieght: 61,
|
||||||
showSelectType: "checkBox",
|
showSelectType: "checkBox",
|
||||||
loading: false
|
loading: false,
|
||||||
|
haveControls: !title.value == '详情'
|
||||||
},
|
},
|
||||||
controlsWidth: 220,
|
controlsWidth: 220,
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
@ -125,6 +133,9 @@ const init = (type, row) => {
|
|||||||
// 初始化表单数据,并根据详情页设置禁用状态
|
// 初始化表单数据,并根据详情页设置禁用状态
|
||||||
if (row) getDataById(row.id);
|
if (row) getDataById(row.id);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 根据id查询详情
|
// 根据id查询详情
|
||||||
const getDataById = (id) => {
|
const getDataById = (id) => {
|
||||||
qcckGet({ id }, "/mosty-gsxt/qbcj/selectByid").then((res) => {
|
qcckGet({ id }, "/mosty-gsxt/qbcj/selectByid").then((res) => {
|
||||||
@ -133,6 +144,14 @@ const getDataById = (id) => {
|
|||||||
pageForm.tableData = res.ryList || [];
|
pageForm.tableData = res.ryList || [];
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
const approvalEcho = ref()
|
||||||
|
watch(() => approvalEcho.value, (val) => {
|
||||||
|
if (val) {
|
||||||
|
console.log(approvalEcho.value);
|
||||||
|
approvalEcho.value.getWorkflow(listQuery.value.gzlid)
|
||||||
|
}
|
||||||
|
|
||||||
|
},{deep:true})
|
||||||
|
|
||||||
// 打开弹窗
|
// 打开弹窗
|
||||||
const addEdit = (type, row, index) => {
|
const addEdit = (type, row, index) => {
|
||||||
@ -203,10 +222,12 @@ 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";
|
||||||
|
|
||||||
::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
|
::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
|
||||||
color: #0072ff;
|
color: #0072ff;
|
||||||
background: rgba(0, 114, 255, 0.3);
|
background: rgba(0, 114, 255, 0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
.boxlist {
|
.boxlist {
|
||||||
width: 99%;
|
width: 99%;
|
||||||
height: 225px;
|
height: 225px;
|
||||||
@ -224,6 +245,7 @@ defineExpose({ init });
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .el-upload-list__item-name .el-icon {
|
::v-deep .el-upload-list__item-name .el-icon {
|
||||||
top: 3px;
|
top: 3px;
|
||||||
}
|
}
|
||||||
|
@ -44,9 +44,10 @@
|
|||||||
</template>
|
</template>
|
||||||
<!-- 操作 -->
|
<!-- 操作 -->
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<el-link size="small" type="success" @click="addEdit('edit', row)">编辑</el-link>
|
<template v-if="row.shzt === '0'">
|
||||||
|
</template>
|
||||||
|
|
||||||
<el-popover placement="left" :visible="row.visible" :width="400" trigger="click">
|
<!-- <el-popover placement="left" :visible="row.visible" :width="400" trigger="click">
|
||||||
<template #reference>
|
<template #reference>
|
||||||
<el-link size="small" type="primary" @click.stop="handleSh(row)">审核</el-link>
|
<el-link size="small" type="primary" @click.stop="handleSh(row)">审核</el-link>
|
||||||
</template>
|
</template>
|
||||||
@ -71,9 +72,13 @@
|
|||||||
<el-button size="small" @click.stop="cancel(row)">取消</el-button>
|
<el-button size="small" @click.stop="cancel(row)">取消</el-button>
|
||||||
<el-button size="small" type="primary" @click.stop="handleSumbit(row)">确定</el-button>
|
<el-button size="small" type="primary" @click.stop="handleSumbit(row)">确定</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-popover>
|
</el-popover> -->
|
||||||
|
<template v-if="!row.gzlid">
|
||||||
|
<el-link size="small" type="success" @click="addEdit('edit', row)">编辑</el-link>
|
||||||
|
<el-link size="small" type="primary" @click.stop="createProcess(row)">审核</el-link>
|
||||||
<el-link size="small" type="danger" @click="delDictItem(row.id)">删除</el-link>
|
<el-link size="small" type="danger" @click="delDictItem(row.id)">删除</el-link>
|
||||||
|
</template>
|
||||||
|
<el-link size="small" type="danger" @click="addEdit('info', row)">详情</el-link>
|
||||||
<!-- 续报 == 编辑 -->
|
<!-- 续报 == 编辑 -->
|
||||||
<el-link size="small" type="warning" @click="addEdit('edit', row)">续报</el-link>
|
<el-link size="small" type="warning" @click="addEdit('edit', row)">续报</el-link>
|
||||||
</template>
|
</template>
|
||||||
@ -91,6 +96,8 @@
|
|||||||
<!-- 新增 -->
|
<!-- 新增 -->
|
||||||
<AddForm ref="detailDiloag" @change="getList" 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="getList" 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>
|
</div>
|
||||||
|
<SubmissionProcess v-model="showSp" :data="rowData" :userData="{ ajmc: '线索数据采集审批', flowType: 'XSSJCJSP',modelName:'线索' }"
|
||||||
|
:path="fixedValue" @getList="getList" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@ -100,9 +107,11 @@ 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 SubmissionProcess from '@/components/flowPath/submissionProcess.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 { useRouter } from "vue-router";
|
import { useRouter } from "vue-router";
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
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"); //获取字典数据
|
||||||
@ -236,6 +245,21 @@ const tabHeightFn = () => {
|
|||||||
tabHeightFn();
|
tabHeightFn();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 工作流
|
||||||
|
const showSp = ref(false);
|
||||||
|
const rowData = ref()
|
||||||
|
// 固定值
|
||||||
|
const fixedValue = {
|
||||||
|
clueVerification:'clueVerification',
|
||||||
|
byMeansOf: 'qbcj/callback',
|
||||||
|
nobyMeansOf: 'qbcj/callback',
|
||||||
|
recycle:'qbcj/callback',
|
||||||
|
}
|
||||||
|
const createProcess = (row) => {
|
||||||
|
showSp.value = true;
|
||||||
|
rowData.value = row
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
|
|
||||||
<!-- 操作 -->
|
<!-- 操作 -->
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
|
<el-link size="small" type="primary" @click="showDetail(row)">下发指令</el-link>
|
||||||
<el-link size="small" type="primary" @click="handleZL(row)">转为指令</el-link>
|
<el-link size="small" type="primary" @click="handleZL(row)">转为指令</el-link>
|
||||||
<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>
|
||||||
@ -61,6 +62,9 @@
|
|||||||
<Qbypfx v-if="showHome" @close="showHome = false"></Qbypfx>
|
<Qbypfx v-if="showHome" @close="showHome = false"></Qbypfx>
|
||||||
</teleport>
|
</teleport>
|
||||||
</div>
|
</div>
|
||||||
|
<Information v-model="showDialog" title="发送指令" @submit='submit' @close='close'>
|
||||||
|
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="qbcj" :tacitly="tacitly"/>
|
||||||
|
</Information>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@ -72,6 +76,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 Information from "@/views/home/model/information.vue";
|
||||||
|
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||||
import { qcckGet } from "@/api/qcckApi.js";
|
import { qcckGet } from "@/api/qcckApi.js";
|
||||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
@ -182,6 +188,27 @@ const tabHeightFn = () => {
|
|||||||
tabHeightFn();
|
tabHeightFn();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
//下发指令
|
||||||
|
const showDialog = ref(false)
|
||||||
|
const itemData = ref()
|
||||||
|
const semdFqzlRef=ref()
|
||||||
|
const handleClose = () => {
|
||||||
|
showDialog.value = false;
|
||||||
|
}
|
||||||
|
const showDetail = (item) => {
|
||||||
|
showDialog.value = true;
|
||||||
|
itemData.value=item
|
||||||
|
}
|
||||||
|
const submit=()=>{
|
||||||
|
semdFqzlRef.value.getsendFqzl()
|
||||||
|
}
|
||||||
|
const close = () => {
|
||||||
|
semdFqzlRef.value.close()
|
||||||
|
}
|
||||||
|
const tacitly = {
|
||||||
|
title: 'xsMc',
|
||||||
|
instructionContent:'xsNr'
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
@ -57,9 +57,27 @@
|
|||||||
|
|
||||||
<!-- 左边弹窗 -->
|
<!-- 左边弹窗 -->
|
||||||
<LeftDialog></LeftDialog>
|
<LeftDialog></LeftDialog>
|
||||||
|
|
||||||
|
<Fxq :initial-position="{ x: position.x, y: position.y }">
|
||||||
|
<el-badge value="0" class="item badge-top-left">
|
||||||
|
<div class='fxq fxq1'>
|
||||||
|
<div class="title" @click.stop="opneMsg('xtxx')"> <img src="@/assets/images/xtxx.png" /> 系统消息</div>
|
||||||
|
</div>
|
||||||
|
</el-badge>
|
||||||
|
<!-- <div class='fxq fxq2'>
|
||||||
|
<div class="title" @click.stop="opneMsg('tztg')"> <img src="@/assets/images/tztg.png" /> 通知通报</div>
|
||||||
|
</div>
|
||||||
|
<div class='fxq fxq3'>
|
||||||
|
<div class="title"> <img src="@/assets/images/xxxt.png" /> 消息协同</div>
|
||||||
|
</div> -->
|
||||||
|
</Fxq>
|
||||||
|
<Information v-model='showDialog' :title='title'>
|
||||||
|
<systemMessages :dict="{ BD_D_XXLX, BD_D_XXLY }" :idEntityCard='idEntityCard' :xxlx="showMsgLx" />
|
||||||
|
</Information>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import { ref, getCurrentInstance, reactive } from 'vue'
|
||||||
import LeftDialog from './dialog/leftDialog'
|
import LeftDialog from './dialog/leftDialog'
|
||||||
import GdMap from "@/components/GdMap/index.vue";
|
import GdMap from "@/components/GdMap/index.vue";
|
||||||
import Head from './layout/head.vue'
|
import Head from './layout/head.vue'
|
||||||
@ -70,17 +88,113 @@ import QblyType from './model/qblyType.vue'
|
|||||||
import Bkcz from './model/bkcz.vue'
|
import Bkcz from './model/bkcz.vue'
|
||||||
import ZdryWarning from './model/zdryWarning.vue'
|
import ZdryWarning from './model/zdryWarning.vue'
|
||||||
import GroupWarning from './model/groupWarning.vue'
|
import GroupWarning from './model/groupWarning.vue'
|
||||||
import Fjqk from './model/fjqk.vue'
|
|
||||||
import Yszs from './model/yszs.vue'
|
import Yszs from './model/yszs.vue'
|
||||||
import DeployControl from './model/deployControl.vue';
|
import DeployControl from './model/deployControl.vue';
|
||||||
import SituationAssessment from './model/situationAssessment.vue'
|
import SituationAssessment from './model/situationAssessment.vue'
|
||||||
import Experience from './model/experience.vue'
|
import Experience from './model/experience.vue'
|
||||||
|
import Fxq from './model/fxq.vue'
|
||||||
|
import Information from './model/information.vue'
|
||||||
|
import systemMessages from './model/mesgSwitch/systemMessages.vue'
|
||||||
|
import { getItem } from '@/utils/storage.js'
|
||||||
|
import { queryXxTj} from '@/api/commit.js'
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const { BD_D_XXLX, BD_D_XXLY } = proxy.$dict('BD_D_XXLX', 'BD_D_XXLY'); //获取字典数据
|
||||||
|
const idEntityCard = getItem('idEntityCard')
|
||||||
|
const position = reactive({
|
||||||
|
x: window.innerWidth - 120,
|
||||||
|
y: window.innerHeight - 100
|
||||||
|
})
|
||||||
|
|
||||||
|
//消息
|
||||||
|
const title = ref('系统消息')
|
||||||
|
const showDialog = ref(false)
|
||||||
|
const showMsgLx = ref('')
|
||||||
|
const opneMsg = (val) => {
|
||||||
|
showDialog.value = true
|
||||||
|
showMsgLx.value = val
|
||||||
|
switch (val) {
|
||||||
|
case 'xtxx':
|
||||||
|
title.value = '系统消息'
|
||||||
|
break;
|
||||||
|
case 'tztg':
|
||||||
|
title.value = '通知通告'
|
||||||
|
break;
|
||||||
|
case 'xxxt':
|
||||||
|
title.value = '消息协同'
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const queryXxTjList = () => {
|
||||||
|
queryXxTj({}).then((res) => {
|
||||||
|
console.log(res);
|
||||||
|
|
||||||
|
}).catch((err) => {
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
queryXxTjList()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import "@/assets/css/homeScreen.scss";
|
@import "@/assets/css/homeScreen.scss";
|
||||||
|
|
||||||
.transition {
|
.fxq {
|
||||||
transition: all 0.5s;
|
border-radius: 35px;
|
||||||
|
width: 35px;
|
||||||
|
transition: transform 0.5s ease, width 0.5s ease;
|
||||||
|
background-color: rgb(1, 127, 245);
|
||||||
|
transform-origin: left center;
|
||||||
|
overflow: hidden;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
width: 35px;
|
||||||
|
height: 35px;
|
||||||
|
justify-content: center;
|
||||||
|
line-height: 35px;
|
||||||
|
font-size: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
height: 35px;
|
||||||
|
line-height: 35px;
|
||||||
|
|
||||||
|
img {
|
||||||
|
margin-left: 9.5px;
|
||||||
|
width: 16px;
|
||||||
|
margin-right: 10px;
|
||||||
|
margin-top: -3px;
|
||||||
|
vertical-align: middle;
|
||||||
|
height: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.fxq2 {
|
||||||
|
background-color: #9d88f9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fxq1:hover {
|
||||||
|
width: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fxq2:hover {
|
||||||
|
width: 120px;
|
||||||
|
|
||||||
|
// background-color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fxq3:hover {
|
||||||
|
width: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .badge-top-left .el-badge__content {
|
||||||
|
top: 0;
|
||||||
|
right: auto;
|
||||||
|
left: -10px;
|
||||||
|
transform: translateY(-50%) translateX(-50%);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
194
src/views/home/model/fxq.vue
Normal file
194
src/views/home/model/fxq.vue
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class="floating-ball"
|
||||||
|
:style="ballStyle"
|
||||||
|
@mousedown="startDrag"
|
||||||
|
@touchstart="startDrag"
|
||||||
|
@click="handleClick"
|
||||||
|
>
|
||||||
|
<slot>
|
||||||
|
|
||||||
|
</slot>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, onMounted, onUnmounted } from 'vue';
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
// 初始位置
|
||||||
|
initialPosition: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({ x: 0, y: 0 })
|
||||||
|
},
|
||||||
|
// 是否可拖动
|
||||||
|
draggable: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
// 自动吸附边缘的阈值
|
||||||
|
snapThreshold: {
|
||||||
|
type: Number,
|
||||||
|
default: 0
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// watch(() => props.initialPosition, (newVal) => {
|
||||||
|
// position.value = { x: newVal.x, y: newVal.y };
|
||||||
|
// },{deep:true})
|
||||||
|
const emit = defineEmits(['click']);
|
||||||
|
|
||||||
|
const position = ref({ x: props.initialPosition.x, y: props.initialPosition.y });
|
||||||
|
const isDragging = ref(false);
|
||||||
|
const startPos = ref({ x: 0, y: 0 });
|
||||||
|
const startMousePos = ref({ x: 0, y: 0 });
|
||||||
|
|
||||||
|
const ballStyle = ref({
|
||||||
|
left: `${position.value.x}px`,
|
||||||
|
top: `${position.value.y}px`,
|
||||||
|
cursor: props.draggable ? 'move' : 'pointer'
|
||||||
|
});
|
||||||
|
|
||||||
|
// 开始拖动
|
||||||
|
const startDrag = (e) => {
|
||||||
|
if (!props.draggable) return;
|
||||||
|
|
||||||
|
isDragging.value = true;
|
||||||
|
startPos.value = { ...position.value };
|
||||||
|
|
||||||
|
// 处理鼠标和触摸事件
|
||||||
|
if (e.type === 'mousedown') {
|
||||||
|
startMousePos.value = { x: e.clientX, y: e.clientY };
|
||||||
|
} else if (e.type === 'touchstart') {
|
||||||
|
startMousePos.value = { x: e.touches[0].clientX, y: e.touches[0].clientY };
|
||||||
|
}
|
||||||
|
|
||||||
|
// 阻止默认行为和冒泡
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 处理移动
|
||||||
|
const handleMove = (e) => {
|
||||||
|
if (!isDragging.value) return;
|
||||||
|
|
||||||
|
let clientX, clientY;
|
||||||
|
if (e.type === 'mousemove') {
|
||||||
|
clientX = e.clientX;
|
||||||
|
clientY = e.clientY;
|
||||||
|
} else if (e.type === 'touchmove') {
|
||||||
|
clientX = e.touches[0].clientX;
|
||||||
|
clientY = e.touches[0].clientY;
|
||||||
|
}
|
||||||
|
|
||||||
|
const dx = clientX - startMousePos.value.x;
|
||||||
|
const dy = clientY - startMousePos.value.y;
|
||||||
|
|
||||||
|
position.value = {
|
||||||
|
x: startPos.value.x + dx,
|
||||||
|
y: startPos.value.y + dy
|
||||||
|
};
|
||||||
|
|
||||||
|
updatePosition();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 结束拖动
|
||||||
|
const endDrag = () => {
|
||||||
|
if (!isDragging.value) return;
|
||||||
|
isDragging.value = false;
|
||||||
|
snapToEdge();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 自动吸附到边缘
|
||||||
|
const snapToEdge = () => {
|
||||||
|
const windowWidth = window.innerWidth;
|
||||||
|
const windowHeight = window.innerHeight;
|
||||||
|
|
||||||
|
// 检查是否靠近左右边缘
|
||||||
|
if (position.value.x < props.snapThreshold) {
|
||||||
|
position.value.x = 0;
|
||||||
|
} else if (position.value.x > windowWidth - props.snapThreshold) {
|
||||||
|
position.value.x = windowWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查是否靠近上下边缘
|
||||||
|
if (position.value.y < props.snapThreshold) {
|
||||||
|
position.value.y = 0;
|
||||||
|
} else if (position.value.y > windowHeight - props.snapThreshold) {
|
||||||
|
position.value.y = windowHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
updatePosition();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 更新位置样式
|
||||||
|
const updatePosition = () => {
|
||||||
|
ballStyle.value = {
|
||||||
|
...ballStyle.value,
|
||||||
|
left: `${position.value.x}px`,
|
||||||
|
top: `${position.value.y}px`
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// 点击事件
|
||||||
|
const handleClick = (e) => {
|
||||||
|
if (isDragging.value) {
|
||||||
|
// 如果是拖动结束的点击,不触发点击事件
|
||||||
|
isDragging.value = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
emit('click', e);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 添加事件监听
|
||||||
|
onMounted(() => {
|
||||||
|
window.addEventListener('mousemove', handleMove);
|
||||||
|
window.addEventListener('touchmove', handleMove);
|
||||||
|
window.addEventListener('mouseup', endDrag);
|
||||||
|
window.addEventListener('touchend', endDrag);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 移除事件监听
|
||||||
|
onUnmounted(() => {
|
||||||
|
window.removeEventListener('mousemove', handleMove);
|
||||||
|
window.removeEventListener('touchmove', handleMove);
|
||||||
|
window.removeEventListener('mouseup', endDrag);
|
||||||
|
window.removeEventListener('touchend', endDrag);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.floating-ball {
|
||||||
|
position: fixed;
|
||||||
|
cursor: pointer;
|
||||||
|
width: 50px;
|
||||||
|
padding: 10px;
|
||||||
|
/* height: 50px; */
|
||||||
|
/* border-radius: 50%; */
|
||||||
|
/* background-color: #409eff; */
|
||||||
|
color: white;
|
||||||
|
/* display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center; */
|
||||||
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
|
||||||
|
z-index: 9999;
|
||||||
|
user-select: none;
|
||||||
|
/* transition: all 0.3s ease; */
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.ball-content {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-ball:active {
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
</style>
|
53
src/views/home/model/information.vue
Normal file
53
src/views/home/model/information.vue
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog class="dialog-container"
|
||||||
|
:model-value="modelValue"
|
||||||
|
:title="title"
|
||||||
|
:before-close="close" :destroy-on-close="true"
|
||||||
|
|
||||||
|
>
|
||||||
|
|
||||||
|
<slot></slot>
|
||||||
|
<template #footer v-if="showFooter">
|
||||||
|
<div class="dialog-footer" >
|
||||||
|
<el-button @click="close">取消</el-button>
|
||||||
|
<el-button type="primary" @click="submit">
|
||||||
|
确认
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {ref} from 'vue'
|
||||||
|
const props=defineProps({
|
||||||
|
modelValue: {
|
||||||
|
type: Boolean,
|
||||||
|
required: true
|
||||||
|
},title:{
|
||||||
|
type:String,
|
||||||
|
default:'提示'
|
||||||
|
},showFooter:{
|
||||||
|
type:Boolean,
|
||||||
|
default:true
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
const emit=defineEmits(['update:modelValue','submit','close'])
|
||||||
|
const close = () => {
|
||||||
|
emit('update:modelValue',false)
|
||||||
|
emit('close')
|
||||||
|
}
|
||||||
|
const submit=()=>{
|
||||||
|
emit('submit')
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "@/assets/css/homeScreen.scss";
|
||||||
|
::v-deep .el-dialog__body{
|
||||||
|
padding-top: 0 !important;
|
||||||
|
padding-bottom: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
186
src/views/home/model/mesgSwitch/systemMessages.vue
Normal file
186
src/views/home/model/mesgSwitch/systemMessages.vue
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
<template>
|
||||||
|
<!-- <el-button type="success" style='position: absolute;right:30px;'>一键忽略</el-button> -->
|
||||||
|
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="chageHandle">
|
||||||
|
<el-tab-pane label="未查看" name="first">
|
||||||
|
<MyTable customClass="zdy_peo_table" :tableData="pageData.tableData" :tableColumn="pageData.tableColumn"
|
||||||
|
:tableHeight="pageData.tableHeight" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger"
|
||||||
|
:controlsWidth="pageData.controlsWidth">
|
||||||
|
<template #xxly="{ row }">
|
||||||
|
<DictTag :tag="false" :value="row.xxly" :options="dict.BD_D_XXLY" />
|
||||||
|
</template>
|
||||||
|
<template #xxlx="{ row }">
|
||||||
|
<DictTag :tag="false" :value="row.xxlx" :options="dict.BD_D_XXLX" />
|
||||||
|
</template>
|
||||||
|
<template #controls="{ row }">
|
||||||
|
<el-button size="small" type="primary" @click="handleDetail(row)">查看</el-button>
|
||||||
|
</template>
|
||||||
|
</MyTable>
|
||||||
|
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||||
|
...pageData.pageConfiger,
|
||||||
|
total: pageData.total
|
||||||
|
}"></Pages>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="已查看" name="second">
|
||||||
|
<MyTable customClass="zdy_peo_table" :tableData="pageData.tableData" :tableColumn="pageData.tableColumn"
|
||||||
|
:tableHeight="pageData.tableHeight" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger"
|
||||||
|
:controlsWidth="pageData.controlsWidth">
|
||||||
|
<template #xxly="{ row }">
|
||||||
|
<DictTag :tag="false" :value="row.xxly" :options="dict.BD_D_XXLY" />
|
||||||
|
</template>
|
||||||
|
<template #xxlx="{ row }">
|
||||||
|
<DictTag :tag="false" :value="row.xxlx" :options="dict.BD_D_XXLX" />
|
||||||
|
</template>
|
||||||
|
<template #controls="{ row }">
|
||||||
|
<el-button size="small" type="primary" @click="handleDetail(row)">查看</el-button>
|
||||||
|
</template>
|
||||||
|
</MyTable>
|
||||||
|
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||||
|
...pageData.pageConfiger,
|
||||||
|
total: pageData.total
|
||||||
|
}"></Pages>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
<Information v-model='showDialog' title='消息详情' :showFooter="false">
|
||||||
|
<Xtxi :item="msgDetail" v-if="xxlx == 'xtxx'" :dict="dict" />
|
||||||
|
</Information>
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import { ref, reactive } from 'vue'
|
||||||
|
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||||
|
import Pages from "@/components/aboutTable/Pages.vue";
|
||||||
|
import Information from "@/views/home/model/information.vue";
|
||||||
|
import { queryYdxxPageList, queryWdxxPageList, queryWdxxDetail, queryYdxxDetail, qsXx } from '@/api/commit.js'
|
||||||
|
import Xtxi from './xtxi.vue'
|
||||||
|
const props = defineProps({
|
||||||
|
dict: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
}
|
||||||
|
}, idEntityCard: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
}, xxlx: {
|
||||||
|
type: String,
|
||||||
|
default: 'xtxx'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const activeName = ref('first')
|
||||||
|
const pageData = reactive({
|
||||||
|
tableData: [],
|
||||||
|
keyCount: 0,
|
||||||
|
tableConfiger: {
|
||||||
|
loading: false,
|
||||||
|
rowHieght: 40,
|
||||||
|
haveControls: true,
|
||||||
|
},
|
||||||
|
controlsWidth: 160, //操作栏宽度
|
||||||
|
total: 0,
|
||||||
|
pageConfiger: {
|
||||||
|
pageSize: 20,
|
||||||
|
pageCurrent: 1
|
||||||
|
}, //分页
|
||||||
|
tableColumn: [
|
||||||
|
{ label: "消息标题", prop: "xxbt", showOverflowTooltip: true },
|
||||||
|
{ label: "消息来源", prop: "xxly", showOverflowTooltip: true, showSolt: true },
|
||||||
|
{ label: "消息描述", prop: "xxms", showOverflowTooltip: true },
|
||||||
|
{ label: "消息类型", prop: "xxlx", showOverflowTooltip: true, showSolt: true },
|
||||||
|
], tableHeight: "calc(80vh - 350px)",
|
||||||
|
});
|
||||||
|
const chageHandle = () => {
|
||||||
|
pageData.pageConfiger.pageCurrent = 1
|
||||||
|
pageData.pageConfiger.pageSize = 20
|
||||||
|
handleClick()
|
||||||
|
}
|
||||||
|
//请求数据
|
||||||
|
const handleClick = async () => {
|
||||||
|
let promes = {
|
||||||
|
page: pageData.pageConfiger.pageCurrent,
|
||||||
|
rows: pageData.pageConfiger.pageSize,
|
||||||
|
xxly: '005',
|
||||||
|
jsrid: props.idEntityCard,
|
||||||
|
// jsrid: '540422200010197495',
|
||||||
|
xxlx: ""
|
||||||
|
}
|
||||||
|
switch (props.xxlx) {
|
||||||
|
case 'xtxx':
|
||||||
|
promes.xxlx = 100
|
||||||
|
const res = activeName.value == 'first' ? await queryWdxxPageList(promes) : await queryYdxxPageList(promes)
|
||||||
|
pageData.tableData = res.rows
|
||||||
|
pageData.total = res.total
|
||||||
|
break;
|
||||||
|
case 'tztg':
|
||||||
|
promes.xxlx = 200
|
||||||
|
const tztgRes = activeName.value == 'first' ? await queryWdxxPageList(promes) : await queryYdxxPageList(promes)
|
||||||
|
pageData.tableData = tztgRes.rows
|
||||||
|
pageData.total = tztgRes.total
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const changeNo = (val) => {
|
||||||
|
pageData.pageConfiger.pageCurrent = val
|
||||||
|
handleClick()
|
||||||
|
}
|
||||||
|
const changeSize = (val) => {
|
||||||
|
pageData.pageConfiger.pageSize = val
|
||||||
|
handleClick()
|
||||||
|
}
|
||||||
|
handleClick()
|
||||||
|
// 查看详情
|
||||||
|
const showDialog = ref(false)
|
||||||
|
const msgDetail = ref({})
|
||||||
|
const disposition = (item) => {
|
||||||
|
let arrId = ''
|
||||||
|
if (Array.isArray(item)) {
|
||||||
|
const itemMap = item.map(it => {
|
||||||
|
return it.id
|
||||||
|
})
|
||||||
|
arrId = itemMap.join(',')
|
||||||
|
} else {
|
||||||
|
arrId = item.id
|
||||||
|
}
|
||||||
|
const promes = {
|
||||||
|
xxlx: '100',
|
||||||
|
id: arrId
|
||||||
|
}
|
||||||
|
qsXx(promes).then((result) => {
|
||||||
|
handleClick()
|
||||||
|
}).catch((err) => {
|
||||||
|
console.log(err);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const handleDetail = async (item) => {
|
||||||
|
showDialog.value = true
|
||||||
|
const res = activeName.value == 'first' ? await queryWdxxDetail({ id: item.id }) : await queryYdxxDetail({ id: item.id })
|
||||||
|
if (res) {
|
||||||
|
msgDetail.value = res[0]
|
||||||
|
if (msgDetail.value.qszt == '0') {
|
||||||
|
disposition(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "@/assets/css/homeScreen.scss";
|
||||||
|
|
||||||
|
.zdy_peo_table td.el-table__cell {
|
||||||
|
color: #ffffff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zdy_peo_table th.el-table__cell {
|
||||||
|
color: #ffffff !important;
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zdy_peo_table .el-table__body tr.el-table__row--striped td.el-table__cell {
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zdy_peo_table .table_blue_row {
|
||||||
|
background: linear-gradient(to right, #001D4B 0%, rgba(0, 29, 75, 0.1) 100%) !important;
|
||||||
|
}
|
||||||
|
</style>
|
53
src/views/home/model/mesgSwitch/tztg.vue
Normal file
53
src/views/home/model/mesgSwitch/tztg.vue
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<template>
|
||||||
|
<div style="height: 300px;overflow: auto;font-size: 16px;">
|
||||||
|
<div>通知标题:{{ item.xxbt }}</div>
|
||||||
|
<div class="mt">通知内容:{{ item.xxms }}</div>
|
||||||
|
<div class="flex align-center just-between mt">
|
||||||
|
<div class="flex align-center">接收类型:
|
||||||
|
<DictTag :tag="false" :value="item.xxlx" :options="dict.BD_D_XXLX" />
|
||||||
|
</div>
|
||||||
|
<div class="flex align-center">消息来源:
|
||||||
|
<DictTag :tag="false" :value="item.xxly" :options="dict.BD_D_XXLY" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import {ref} from 'vue'
|
||||||
|
const props = defineProps({
|
||||||
|
item: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
}
|
||||||
|
}, dict: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "@/assets/css/homeScreen.scss";
|
||||||
|
|
||||||
|
.zdy_peo_table td.el-table__cell {
|
||||||
|
color: #ffffff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zdy_peo_table th.el-table__cell {
|
||||||
|
color: #ffffff !important;
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zdy_peo_table .el-table__body tr.el-table__row--striped td.el-table__cell {
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zdy_peo_table .table_blue_row {
|
||||||
|
background: linear-gradient(to right, #001D4B 0%, rgba(0, 29, 75, 0.1) 100%) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mt {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
53
src/views/home/model/mesgSwitch/xtxi.vue
Normal file
53
src/views/home/model/mesgSwitch/xtxi.vue
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<template>
|
||||||
|
<div style="height: 300px;overflow: auto;font-size: 16px;">
|
||||||
|
<div>通知标题:{{ item.xxbt }}</div>
|
||||||
|
<div class="mt">通知内容:{{ item.xxms }}</div>
|
||||||
|
<div class="flex align-center just-between mt">
|
||||||
|
<div class="flex align-center">接收类型:
|
||||||
|
<DictTag :tag="false" :value="item.xxlx" :options="dict.BD_D_XXLX" />
|
||||||
|
</div>
|
||||||
|
<div class="flex align-center">消息来源:
|
||||||
|
<DictTag :tag="false" :value="item.xxly" :options="dict.BD_D_XXLY" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import {ref} from 'vue'
|
||||||
|
const props = defineProps({
|
||||||
|
item: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
}
|
||||||
|
}, dict: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "@/assets/css/homeScreen.scss";
|
||||||
|
|
||||||
|
.zdy_peo_table td.el-table__cell {
|
||||||
|
color: #ffffff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zdy_peo_table th.el-table__cell {
|
||||||
|
color: #ffffff !important;
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zdy_peo_table .el-table__body tr.el-table__row--striped td.el-table__cell {
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zdy_peo_table .table_blue_row {
|
||||||
|
background: linear-gradient(to right, #001D4B 0%, rgba(0, 29, 75, 0.1) 100%) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mt {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
@ -4,11 +4,18 @@ function resolve(dir) {
|
|||||||
return path.join(__dirname, dir);
|
return path.join(__dirname, dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
const serverHost = "http://192.168.1.32:8066"//波哥
|
const serverHost = "http://192.168.1.32:8006"//波哥
|
||||||
// const serverHost = "http://192.168.0.231:8006"//线上
|
// const serverHost = "http://192.168.0.231:8006"//线上
|
||||||
// const serverHost = "http://192.168.1.117:8006"//周
|
// const serverHost = "http://192.168.1.117:8006"//周
|
||||||
// const serverHost = "http://192.168.1.98:8006"//毛毛
|
// const serverHost = "http://192.168.1.98:8006"//毛毛
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
// configureWebpack: {
|
||||||
|
// resolve: {
|
||||||
|
// alias: {
|
||||||
|
// vue: '@vue/compat'
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// },
|
||||||
publicPath: "./",
|
publicPath: "./",
|
||||||
outputDir: "gsxt",
|
outputDir: "gsxt",
|
||||||
assetsDir: "static",
|
assetsDir: "static",
|
||||||
@ -44,6 +51,15 @@ module.exports = {
|
|||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
logLevel: "debug"
|
logLevel: "debug"
|
||||||
},
|
},
|
||||||
|
"/": {
|
||||||
|
target: "http://192.168.0.101:32001",
|
||||||
|
changeOrigin: true,
|
||||||
|
logLevel: "debug",
|
||||||
|
onProxyReq(proxyReq) {
|
||||||
|
// 在这里添加固定的 Cookie
|
||||||
|
proxyReq.setHeader('Cookie', 'clientKey-temp=1c2db6cac7dd405fb33c2a6725337925; static_version_fpip-manage=1.222; clientKey=30842687f48c4ed1818dbc45a0cdd4e1; static_version_fpip-jgpt=1.222; static_version_fpip-mdjf=1.222; static_version_fpip-tddx=1.222; static_version_fpip-dtbd=1.222; static_version_fpip-qzgl=1.222; static_version_fpip-bzdz=1.222; static_version_fpip-pcsgl=1.222; static_version_fpip-sydw=1.222')
|
||||||
|
},
|
||||||
|
},
|
||||||
"/chat": {
|
"/chat": {
|
||||||
target: 'https://api.deepseek.com/chat/',
|
target: 'https://api.deepseek.com/chat/',
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
@ -54,6 +70,11 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
// resolve: {
|
||||||
|
// alias: {
|
||||||
|
// vue: '@vue/compat' // 强制使用兼容模式
|
||||||
|
// }
|
||||||
|
// },
|
||||||
chainWebpack(config) {
|
chainWebpack(config) {
|
||||||
// 设置 svg-sprite-loader
|
// 设置 svg-sprite-loader
|
||||||
// config 为 webpack 配置对象
|
// config 为 webpack 配置对象
|
||||||
|
Reference in New Issue
Block a user