智能布点方案
This commit is contained in:
parent
a3fa17bdb1
commit
be413f39e1
@ -2,8 +2,9 @@ window.webConfig = {
|
||||
"webApiBaseUrl": "http://192.168.1.20:8090/",
|
||||
"wsApiBaseUrl": "ws://192.168.1.20:8090/",
|
||||
"webApiMonitorUrl": "http://192.168.1.20:18080",
|
||||
"answeringUrl":"http://121.37.111.42:8080/ui/chat/a9d56e68484c5594",
|
||||
"answeringUrl":"http://121.37.111.42:8080/ui/chat/e151e1600161c702",
|
||||
"pythonUrl":"http://121.37.111.42:8080/api",
|
||||
"application_id":"6b915c22-351c-11f0-8b7c-0242ac130003",
|
||||
"imgUrl" :"http://192.168.1.20:8090/plan/",
|
||||
"webSystemTitle":"标题"
|
||||
}
|
@ -190,4 +190,36 @@ export function getMessageCount(params: any) {
|
||||
method: 'get',
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
// 根据Id查询部件
|
||||
export function getComponentById(params: any) {
|
||||
return request({
|
||||
url: '/basedata/substation-maindevice/getComponentById',
|
||||
method: 'get',
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
// 根据Id查询主设备
|
||||
export function getMainDeviceById(params: any) {
|
||||
return request({
|
||||
url: '/basedata/substation-maindevice/getMainDeviceById',
|
||||
method: 'get',
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
// 根据Id查询巡视设备
|
||||
export function getPatroldeviceById(params: any) {
|
||||
return request({
|
||||
url: '/basedata/substation-patroldevice/getPatroldeviceById',
|
||||
method: 'get',
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
// 根据Id查询巡视点位
|
||||
export function getSubstationDeviceById(params: any) {
|
||||
return request({
|
||||
url: '/basedata/substation-device/getSubstationDeviceById',
|
||||
method: 'get',
|
||||
params: params,
|
||||
});
|
||||
}
|
100
riis-web/src/api/pointSolution/index.ts
Normal file
100
riis-web/src/api/pointSolution/index.ts
Normal file
@ -0,0 +1,100 @@
|
||||
import request from '@/utils/request';
|
||||
|
||||
//根据主设备类型获取主设备
|
||||
export function getMainDeviceByType(params: any) {
|
||||
return request({
|
||||
url: '/basedata/substation-maindevice/getMainDeviceByType',
|
||||
method: 'get',
|
||||
params: params
|
||||
});
|
||||
}
|
||||
//查询算法布点
|
||||
export function getAlgorithmArrangePage(params: any) {
|
||||
return request({
|
||||
url: '/algorithm/algorithm-arrange/getAlgorithmArrangePage',
|
||||
method: 'get',
|
||||
params: params
|
||||
});
|
||||
}
|
||||
//新增算法布点
|
||||
export function saveAlgorithmArrange(params: any) {
|
||||
return request({
|
||||
url: '/algorithm/algorithm-arrange/saveAlgorithmArrange',
|
||||
method: 'post',
|
||||
data: params,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
});
|
||||
}
|
||||
//调用算法布点API
|
||||
export function callAlgorithmArrange(params: any) {
|
||||
return request({
|
||||
url: '/algorithm/algorithm-arrange/callAlgorithmArrange',
|
||||
method: 'post',
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
//根据Id查询算法布点
|
||||
export function getArrangeDeviceById(params: any) {
|
||||
return request({
|
||||
url: '/algorithm/algorithm-arrange-device/getArrangeDeviceById',
|
||||
method: 'get',
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
//修改算法布点
|
||||
export function updateAlgorithmArrange(params: any) {
|
||||
return request({
|
||||
url: '/algorithm/algorithm-arrange/updateAlgorithmArrange',
|
||||
method: 'post',
|
||||
data: params,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
});
|
||||
}
|
||||
//保存布点详情
|
||||
export function saveArrangeDevice(params: any) {
|
||||
return request({
|
||||
url: '/algorithm/algorithm-arrange/saveArrangeDevice',
|
||||
method: 'post',
|
||||
data: params,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
});
|
||||
}
|
||||
//查询布点区域的设备数量
|
||||
export function getArrangeDeviceInfo(params: any) {
|
||||
return request({
|
||||
url: '/algorithm/algorithm-arrange-device/getArrangeDeviceInfo',
|
||||
method: 'get',
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
//创建布点报告
|
||||
export function createArrangeById(params: any) {
|
||||
return request({
|
||||
url: '/algorithm/algorithm-arrange/createArrangeById',
|
||||
method: 'post',
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
//下载布点报告
|
||||
export function downloadArrangeReport(params: any) {
|
||||
return request({
|
||||
url: '/algorithm/algorithm-arrange/downloadArrangeReport',
|
||||
method: 'get',
|
||||
params: params,
|
||||
responseType: 'arraybuffer',
|
||||
});
|
||||
}
|
||||
//删除布点报告
|
||||
export function deleteAlgorithmArrange(params: any) {
|
||||
return request({
|
||||
url: '/algorithm/algorithm-arrange/deleteAlgorithmArrange',
|
||||
method: 'post',
|
||||
params: params,
|
||||
});
|
||||
}
|
@ -39,4 +39,12 @@ export function callAlgorithmAnalyse(params:any){
|
||||
method: 'post',
|
||||
params: params
|
||||
});
|
||||
}
|
||||
//分页查询算法分析日志
|
||||
export function getAlgorithmLogsPage(params:any){
|
||||
return request({
|
||||
url: '/algorithm/algorithm-logs/getAlgorithmLogsPage' ,
|
||||
method: 'get',
|
||||
params: params
|
||||
});
|
||||
}
|
@ -78,7 +78,7 @@ export function postOrgscope (queryParams:any){
|
||||
//获取变电站下所有摄像头
|
||||
export function getCamera (params:any){
|
||||
return request({
|
||||
url:'/basedata/substation-patroldevice/getCameraAllList' ,
|
||||
url:'/basedata/substation-patroldevice/getCameraList' ,
|
||||
method: 'get',
|
||||
params: params
|
||||
});
|
||||
|
6
riis-web/src/assets/point/1.svg
Normal file
6
riis-web/src/assets/point/1.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="18px" height="20px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -35 -10 )">
|
||||
<path d="M 17 4.76249999999999 C 17.1143806387562 3.18454357499394 15.8394440009923 1.90535714843747 14.2667299561358 1.90535714843747 L 10.470455629672 1.90535714843747 C 10.470455629672 0.853057452374401 9.62023225521239 0 8.57142857142856 0 C 7.52262488764472 0 6.67240151318515 0.853057452374401 6.67240151318515 1.90535714843747 L 2.87612718672131 1.90535714843747 C 1.30341314186478 1.90535714843747 0.0284765041009223 3.18454357499394 0 4.76249999999999 L 0 17.1428571484375 C 0.0284765041009223 18.7208135734435 1.30341314186478 20 2.87612718672131 20 L 14.2667299561358 20 C 15.8394440009923 20 17.1143806387562 18.7208135734435 17 17.1428571484375 L 17 4.76249999999999 Z M 6.19897958627496 4.28571427734374 L 6.19897958627496 3.33392857421876 L 6.80944470255395 3.33392857421876 C 7.54184293469643 3.26287838448576 8.09964233059463 2.64361561565124 8.0962268544954 1.90535714843747 C 8.0962268544954 1.64203566487743 8.30898191007293 1.42857142578123 8.57142857142856 1.42857142578123 C 8.83387523278418 1.42857142578123 9.04663028836171 1.64203566487743 9.04663028836171 1.90535714843747 C 9.04663028836171 2.6943353609405 9.68409860724364 3.33392857421876 10.470455629672 3.33392857421876 L 10.9438775565822 3.33392857421876 L 10.9438775565822 4.28571427734374 L 6.19897958627496 4.28571427734374 Z M 15.6905552974459 4.76249999999999 L 15.6905552974459 17.1428571484375 C 15.6905552974459 17.9318353609405 15.053086978564 18.5714285742188 14.2667299561358 18.5714285742188 L 2.87612718672131 18.5714285742188 C 2.0897701642931 18.5714285742188 1.45230184541117 17.9318353609405 1.45230184541117 17.1428571484375 L 1.45230184541117 4.76249999999999 C 1.45230184541117 3.97352178749696 2.0897701642931 3.33392857421876 2.87612718672131 3.33392857421876 L 4.77515424496471 3.33392857421876 L 4.77515424496471 4.76249999999999 C 4.77515424496471 5.0797619075521 4.77515424496471 4.44523809244794 4.77515424496471 4.76249999999999 C 4.77515424496471 5.28815673972974 5.19986751698445 5.71428572265626 5.72377788880817 5.71428572265626 L 11.4190792540489 5.71428572265626 C 11.9429896258727 5.71428572265626 12.3677028978924 5.28815673972974 12.3677028978924 4.76249999999999 L 12.3677028978924 3.33392857421876 L 14.2667299561358 3.33392857421876 C 15.053086978564 3.33392857421876 15.6905552974459 3.97352178749696 15.6905552974459 4.76249999999999 Z M 13.0794978567861 9.5232142871094 C 13.0794978567861 9.1287713010218 12.7608354367909 8.80899379909692 12.3677028978924 8.80892857421873 L 4.77515424496471 8.80892857421873 C 4.38202170606621 8.80899379909692 4.06335928607098 9.1287713010218 4.06335928607098 9.5232142871094 C 4.06335928607098 9.91765727319694 4.38202170606621 10.2374347751219 4.77515424496471 10.2375 L 12.3677028978924 10.2375 C 12.7608354367909 10.2374347751219 13.0794978567861 9.91765727319694 13.0794978567861 9.5232142871094 Z M 9.28322353032615 13.3339285644531 C 9.28322353032615 12.9394855783641 8.96456111032853 12.6197080764385 8.57142857142856 12.6196428515625 L 4.77515424496471 12.6196428515625 C 4.38202170606473 12.6197080764385 4.06335928606711 12.9394855783641 4.06335928606711 13.3339285644531 C 4.06335928606711 13.7283715505422 4.38202170606473 14.0481490524677 4.77515424496471 14.0482142773437 L 8.57142857142856 14.0482142773437 C 8.96456111032853 14.0481490524677 9.28322353032615 13.7283715505422 9.28322353032615 13.3339285644531 Z " fill-rule="nonzero" fill="#ffffff" stroke="none" transform="matrix(1 0 0 1 35 10 )" />
|
||||
</g>
|
||||
</svg>
|
6
riis-web/src/assets/point/2.svg
Normal file
6
riis-web/src/assets/point/2.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="19px" height="20px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -271 -10 )">
|
||||
<path d="M 15.5899325284091 14.5707563920454 L 14.0141157670455 14.5707563920454 L 14.0141157670455 12.9949396306818 C 14.0141157670455 12.6884961215871 13.765694219322 12.4400745738636 13.4592507102273 12.4400745738636 C 13.1528072011325 12.4400745738636 12.9043856534091 12.6884961215871 12.9043856534091 12.9949396306818 L 12.9043856534091 14.5707563920454 L 11.3285688920455 14.5707563920454 C 11.0221253829508 14.5707563920454 10.7737038352273 14.819177939769 10.7737038352273 15.1256214488636 C 10.7737038352273 15.4320649579583 11.0221253829508 15.6804865056818 11.3285688920455 15.6804865056818 L 12.9043856534091 15.6804865056818 L 12.9043856534091 17.2563032670454 C 12.9043856534091 17.5627467761401 13.1528072011325 17.8111683238636 13.4592507102273 17.8111683238636 C 13.765694219322 17.8111683238636 14.0141157670455 17.5627467761401 14.0141157670455 17.2563032670454 L 14.0141157670455 15.6804865056818 L 15.5899325284091 15.6804865056818 C 15.8963760375037 15.6804865056818 16.1447975852273 15.4320649579583 16.1447975852273 15.1256214488636 C 16.1447975852273 14.819177939769 15.8963760375037 14.5707563920454 15.5899325284091 14.5707563920454 Z M 18.5276100852273 5.72531960227275 C 18.5278814561334 5.52494717722777 18.4432902321178 5.33383068445664 18.2947887073864 5.19930752840907 L 13.8558682528409 0.314719460227252 C 13.8128070263069 0.267316609711997 13.7635322697948 0.225955677730724 13.7093838778409 0.191761363636374 C 13.5826613141113 0.0878870949593988 13.4237979909502 0.0312454557878823 13.2599431818181 0 L 1.474609375 0 C 0.719434053433133 0.0335968925255088 0.108483050456243 0.646633052509173 0.108975497159122 1.40181107954544 L 0.108975497159122 18.5537997159091 C 0.108605487909472 19.3088911273516 0.719520738795381 19.9217921258432 1.474609375 20 L 17.1619762073864 20 C 17.917064843591 19.9217921258432 18.5279800944769 19.3088911273516 18.5276100852273 18.5537997159091 L 18.5276100852273 5.72531960227275 Z M 17.10693359375 18.5031960227273 L 7.16530539772725 18.5036399147727 L 7.16530539772725 13.9703924005682 L 5.74485085227275 13.9703924005682 L 5.74485085227275 18.5036399147727 L 1.52943004261363 18.5036399147727 L 1.52943004261363 11.4235617897727 L 3.25905539772725 11.4235617897727 L 3.25905539772725 10.0031072443182 L 1.52943004261363 10.0031072443182 L 1.52943004261363 1.45197088068181 L 5.74485085227275 1.45197088068181 L 5.74485085227275 7.65403053977275 L 7.16530539772725 7.65403053977275 L 7.16530539772725 1.45197088068181 L 12.9698597301136 1.45197088068181 L 17.10693359375 6.00497159090907 L 17.10693359375 10.0026633522727 L 9.85085227272725 10.0026633522727 L 9.85085227272725 11.4231178977273 L 17.10693359375 11.4231178977273 L 17.10693359375 18.5031960227273 Z M 8.74112215909088 9.26558061079544 C 8.74112215909088 8.87333291915428 8.42314257800479 8.55535333806819 8.03089488636363 8.55535333806819 L 4.9629350142045 8.55535333806819 C 4.57068732256334 8.55535333806819 4.25270774147725 8.87333291915428 4.25270774147725 9.26558061079544 L 4.25270774147725 12.3344282670454 C 4.25270774147725 12.7266759586867 4.57068732256334 13.0446555397727 4.9629350142045 13.0446555397727 L 8.03089488636363 13.0446555397727 C 8.42314257800479 13.0446555397727 8.74112215909088 12.7266759586867 8.74112215909088 12.3344282670454 L 8.74112215909088 9.26558061079544 Z M 7.32066761363637 9.97580788352275 L 7.32066761363637 11.6242009943182 L 5.67316228693187 11.6242009943182 L 5.67316228693187 9.97580788352275 L 7.32066761363637 9.97580788352275 Z " fill-rule="nonzero" fill="#b5d7ff" stroke="none" transform="matrix(1 0 0 1 271 10 )" />
|
||||
</g>
|
||||
</svg>
|
6
riis-web/src/assets/point/3.svg
Normal file
6
riis-web/src/assets/point/3.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="20px" height="20px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -526 -10 )">
|
||||
<path d="M 9.89690721649481 1.35493373469717 L 1.50220912532211 5.47864507490334 L 9.89690721649481 9.74963180573451 L 18.2916053076675 5.47864507490334 L 9.89690721649481 1.35493373469717 Z M 0.91310750241621 12.9896907216495 L 2.68041237113403 12.1060382973582 L 0.91310750241621 11.2223858529317 C 0.324005899645613 10.9278350515464 0.0294550781250109 10.4860088394008 0.0294550781250109 9.89690721649487 C 0.0294550781250109 9.30780559358891 0.32400587951031 8.86597938144331 0.91310750241621 8.57142858005801 L 2.68041237113403 7.68777613563145 L 0.91310750241621 6.8041237113402 C 0.176730488885255 6.5095729099549 -0.117820332635347 5.62592046552834 0.176730488885255 4.88954345199744 C 0.324005899645613 4.59499265061208 0.618556701030911 4.30044182909148 0.765832111791269 4.30044182909148 L 9.16053018282855 0.176730488885312 C 9.60235639497421 0.0294550781250109 10.0441826071199 0.0294550781250109 10.4860088394007 0.176730488885312 L 18.8807069305734 4.30044182909148 C 19.6170839642397 4.59499263047678 19.911634765625 5.47864507490334 19.469808533344 6.2150220884343 C 19.3225331225837 6.50957288981959 19.0279823211984 6.8041237113402 18.8807069305734 6.8041237113402 L 17.1134020618556 7.68777613563145 L 18.7334315198131 8.42415316929765 C 19.4698085534793 8.71870397068301 19.7643593548646 9.16053020296391 19.7643593548646 9.89690721649487 C 19.7643593548646 10.4860088394008 19.4698085534793 11.0751104623067 18.7334315198131 11.369661263692 L 17.1134020618556 12.1060382973582 L 18.7334315198131 12.8424153108892 C 19.4698085534793 13.1369661122745 19.7643593548646 13.5787923445554 19.7643593548646 14.3151693580863 C 19.7643593548646 14.9042709809923 19.4698085534793 15.4933726038982 18.7334315198131 15.7879234254188 L 10.6332842501611 19.7643593548647 C 10.4860088394007 19.911634765625 10.1914580380154 19.911634765625 9.89690721649481 19.911634765625 C 9.60235639497421 19.911634765625 9.45508100434915 19.911634765625 9.16053018282855 19.7643593548647 L 0.765832111791269 15.6406480146585 C 0.176730488885255 15.3460972132732 0.0294550781250109 14.9042709809923 0.0294550781250109 14.3151693580863 C 0.0294550781250109 13.7260677351804 0.32400587951031 13.2842415230348 0.91310750241621 12.9896907216495 Z M 9.16053018282855 15.4933726038982 L 4.30044182909148 12.9896907216495 L 1.50220912532211 14.3151693580863 L 9.89690721649481 18.5861561090528 L 18.2916053076675 14.4624447688466 L 15.4933726038981 13.1369661324098 L 10.6332842501611 15.4933726038982 C 10.4860088394007 15.6406480146585 10.1914580380154 15.6406480146585 9.89690721649481 15.6406480146585 C 9.60235639497421 15.6406480146585 9.45508100434915 15.6406480146585 9.16053018282855 15.4933726038982 Z M 18.2916053076675 9.89690721649487 L 15.4933726038981 8.57142858005801 L 10.6332842501611 10.9278350515464 C 10.1914580380154 11.0751104623067 9.74963182586976 11.0751104623067 9.30780559358891 10.9278350515464 L 4.30044182909148 8.57142858005801 L 1.50220912532211 9.89690721649487 L 9.89690721649481 14.1678939674613 L 18.2916053076675 9.89690721649487 Z " fill-rule="nonzero" fill="#b5d7ff" stroke="none" transform="matrix(1 0 0 1 526 10 )" />
|
||||
</g>
|
||||
</svg>
|
6
riis-web/src/assets/point/4.svg
Normal file
6
riis-web/src/assets/point/4.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="20px" height="20px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -799 -10 )">
|
||||
<path d="M 19.9431818181819 10 C 19.9431818181819 4.50838955965907 15.4913884943181 0.056818181818187 10 0.056818181818187 C 4.50861150568187 0.056818181818187 0.0568181818181301 4.50861150568181 0.0568181818181301 10 C 0.0568181818181301 15.4913884943182 4.50861150568187 19.9431818181818 10 19.9431818181818 C 15.4913884943181 19.9431818181818 19.9431818181819 15.4916104403409 19.9431818181819 10 Z M 18.1676136363636 10 C 18.1676136363636 14.5108309659091 14.5108309659091 18.1676136363636 10 18.1676136363636 C 5.48916903409088 18.1676136363636 1.83238636363637 14.5108309659091 1.83238636363637 10 C 1.83238636363637 5.48916903409093 5.48916903409088 1.83238636363637 10 1.83238636363637 C 14.5108309659091 1.83238636363637 18.1676136363636 5.48916903409093 18.1676136363636 10 Z M 15.1566152681963 7.11237127130681 C 15.1566152681963 6.87690836451702 15.0630748613728 6.65109007416635 14.8965731534091 6.48459694602275 C 14.7300800252655 6.31809523805902 14.5042617349147 6.22455483123548 14.268798828125 6.22455483123548 C 14.0333359213353 6.22455483123548 13.8075176309845 6.31809523805902 13.6410245028409 6.48459694602275 L 8.49343039772725 11.6321910511364 L 6.36008522727275 9.49773615056819 C 6.19359209912909 9.33123444260445 5.96777380877836 9.23769403578098 5.73231090198863 9.23769403578098 C 5.49684799519889 9.23769403578098 5.27102970484816 9.33123444260445 5.1045365767045 9.49773615056819 C 4.93803486874083 9.66422927871184 4.84449446191729 9.89004756906252 4.84449446191729 10.1255104758523 C 4.84449446191729 10.360973382642 4.93803486874083 10.5867916729927 5.1045365767045 10.7532848011364 L 7.86554509943187 13.5154030539773 C 8.03203822757541 13.681904761941 8.25785651792614 13.7754451687645 8.49331942471588 13.7754451687645 C 8.72878233150573 13.7754451687645 8.95460062185634 13.681904761941 9.12109375 13.5154030539773 L 14.8965731534091 7.74014559659093 C 15.0630748613728 7.57365246844728 15.1566152681963 7.3478341780966 15.1566152681963 7.11237127130681 Z " fill-rule="nonzero" fill="#b5d7ff" stroke="none" transform="matrix(1 0 0 1 799 10 )" />
|
||||
</g>
|
||||
</svg>
|
6
riis-web/src/assets/point/5.svg
Normal file
6
riis-web/src/assets/point/5.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="19px" height="20px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -271 -10 )">
|
||||
<path d="M 15.5899325284091 14.5707563920454 L 14.0141157670455 14.5707563920454 L 14.0141157670455 12.9949396306818 C 14.0141157670455 12.6884961215871 13.765694219322 12.4400745738636 13.4592507102273 12.4400745738636 C 13.1528072011325 12.4400745738636 12.9043856534091 12.6884961215871 12.9043856534091 12.9949396306818 L 12.9043856534091 14.5707563920454 L 11.3285688920455 14.5707563920454 C 11.0221253829508 14.5707563920454 10.7737038352273 14.819177939769 10.7737038352273 15.1256214488636 C 10.7737038352273 15.4320649579583 11.0221253829508 15.6804865056818 11.3285688920455 15.6804865056818 L 12.9043856534091 15.6804865056818 L 12.9043856534091 17.2563032670454 C 12.9043856534091 17.5627467761401 13.1528072011325 17.8111683238636 13.4592507102273 17.8111683238636 C 13.765694219322 17.8111683238636 14.0141157670455 17.5627467761401 14.0141157670455 17.2563032670454 L 14.0141157670455 15.6804865056818 L 15.5899325284091 15.6804865056818 C 15.8963760375037 15.6804865056818 16.1447975852273 15.4320649579583 16.1447975852273 15.1256214488636 C 16.1447975852273 14.819177939769 15.8963760375037 14.5707563920454 15.5899325284091 14.5707563920454 Z M 18.5276100852273 5.72531960227275 C 18.5278814561334 5.52494717722777 18.4432902321178 5.33383068445664 18.2947887073864 5.19930752840907 L 13.8558682528409 0.314719460227252 C 13.8128070263069 0.267316609711997 13.7635322697948 0.225955677730724 13.7093838778409 0.191761363636374 C 13.5826613141113 0.0878870949593988 13.4237979909502 0.0312454557878823 13.2599431818181 0 L 1.474609375 0 C 0.719434053433133 0.0335968925255088 0.108483050456243 0.646633052509173 0.108975497159122 1.40181107954544 L 0.108975497159122 18.5537997159091 C 0.108605487909472 19.3088911273516 0.719520738795381 19.9217921258432 1.474609375 20 L 17.1619762073864 20 C 17.917064843591 19.9217921258432 18.5279800944769 19.3088911273516 18.5276100852273 18.5537997159091 L 18.5276100852273 5.72531960227275 Z M 17.10693359375 18.5031960227273 L 7.16530539772725 18.5036399147727 L 7.16530539772725 13.9703924005682 L 5.74485085227275 13.9703924005682 L 5.74485085227275 18.5036399147727 L 1.52943004261363 18.5036399147727 L 1.52943004261363 11.4235617897727 L 3.25905539772725 11.4235617897727 L 3.25905539772725 10.0031072443182 L 1.52943004261363 10.0031072443182 L 1.52943004261363 1.45197088068181 L 5.74485085227275 1.45197088068181 L 5.74485085227275 7.65403053977275 L 7.16530539772725 7.65403053977275 L 7.16530539772725 1.45197088068181 L 12.9698597301136 1.45197088068181 L 17.10693359375 6.00497159090907 L 17.10693359375 10.0026633522727 L 9.85085227272725 10.0026633522727 L 9.85085227272725 11.4231178977273 L 17.10693359375 11.4231178977273 L 17.10693359375 18.5031960227273 Z M 8.74112215909088 9.26558061079544 C 8.74112215909088 8.87333291915428 8.42314257800479 8.55535333806819 8.03089488636363 8.55535333806819 L 4.9629350142045 8.55535333806819 C 4.57068732256334 8.55535333806819 4.25270774147725 8.87333291915428 4.25270774147725 9.26558061079544 L 4.25270774147725 12.3344282670454 C 4.25270774147725 12.7266759586867 4.57068732256334 13.0446555397727 4.9629350142045 13.0446555397727 L 8.03089488636363 13.0446555397727 C 8.42314257800479 13.0446555397727 8.74112215909088 12.7266759586867 8.74112215909088 12.3344282670454 L 8.74112215909088 9.26558061079544 Z M 7.32066761363637 9.97580788352275 L 7.32066761363637 11.6242009943182 L 5.67316228693187 11.6242009943182 L 5.67316228693187 9.97580788352275 L 7.32066761363637 9.97580788352275 Z " fill-rule="nonzero" fill="#ffffff" stroke="none" transform="matrix(1 0 0 1 271 10 )" />
|
||||
</g>
|
||||
</svg>
|
6
riis-web/src/assets/point/6.svg
Normal file
6
riis-web/src/assets/point/6.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="20px" height="20px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -526 -10 )">
|
||||
<path d="M 9.89690721649481 1.35493373469717 L 1.50220912532211 5.47864507490334 L 9.89690721649481 9.74963180573451 L 18.2916053076675 5.47864507490334 L 9.89690721649481 1.35493373469717 Z M 0.91310750241621 12.9896907216495 L 2.68041237113403 12.1060382973582 L 0.91310750241621 11.2223858529317 C 0.324005899645613 10.9278350515464 0.0294550781250109 10.4860088394008 0.0294550781250109 9.89690721649487 C 0.0294550781250109 9.30780559358891 0.32400587951031 8.86597938144331 0.91310750241621 8.57142858005801 L 2.68041237113403 7.68777613563145 L 0.91310750241621 6.8041237113402 C 0.176730488885255 6.5095729099549 -0.117820332635347 5.62592046552834 0.176730488885255 4.88954345199744 C 0.324005899645613 4.59499265061208 0.618556701030911 4.30044182909148 0.765832111791269 4.30044182909148 L 9.16053018282855 0.176730488885312 C 9.60235639497421 0.0294550781250109 10.0441826071199 0.0294550781250109 10.4860088394007 0.176730488885312 L 18.8807069305734 4.30044182909148 C 19.6170839642397 4.59499263047678 19.911634765625 5.47864507490334 19.469808533344 6.2150220884343 C 19.3225331225837 6.50957288981959 19.0279823211984 6.8041237113402 18.8807069305734 6.8041237113402 L 17.1134020618556 7.68777613563145 L 18.7334315198131 8.42415316929765 C 19.4698085534793 8.71870397068301 19.7643593548646 9.16053020296391 19.7643593548646 9.89690721649487 C 19.7643593548646 10.4860088394008 19.4698085534793 11.0751104623067 18.7334315198131 11.369661263692 L 17.1134020618556 12.1060382973582 L 18.7334315198131 12.8424153108892 C 19.4698085534793 13.1369661122745 19.7643593548646 13.5787923445554 19.7643593548646 14.3151693580863 C 19.7643593548646 14.9042709809923 19.4698085534793 15.4933726038982 18.7334315198131 15.7879234254188 L 10.6332842501611 19.7643593548647 C 10.4860088394007 19.911634765625 10.1914580380154 19.911634765625 9.89690721649481 19.911634765625 C 9.60235639497421 19.911634765625 9.45508100434915 19.911634765625 9.16053018282855 19.7643593548647 L 0.765832111791269 15.6406480146585 C 0.176730488885255 15.3460972132732 0.0294550781250109 14.9042709809923 0.0294550781250109 14.3151693580863 C 0.0294550781250109 13.7260677351804 0.32400587951031 13.2842415230348 0.91310750241621 12.9896907216495 Z M 9.16053018282855 15.4933726038982 L 4.30044182909148 12.9896907216495 L 1.50220912532211 14.3151693580863 L 9.89690721649481 18.5861561090528 L 18.2916053076675 14.4624447688466 L 15.4933726038981 13.1369661324098 L 10.6332842501611 15.4933726038982 C 10.4860088394007 15.6406480146585 10.1914580380154 15.6406480146585 9.89690721649481 15.6406480146585 C 9.60235639497421 15.6406480146585 9.45508100434915 15.6406480146585 9.16053018282855 15.4933726038982 Z M 18.2916053076675 9.89690721649487 L 15.4933726038981 8.57142858005801 L 10.6332842501611 10.9278350515464 C 10.1914580380154 11.0751104623067 9.74963182586976 11.0751104623067 9.30780559358891 10.9278350515464 L 4.30044182909148 8.57142858005801 L 1.50220912532211 9.89690721649487 L 9.89690721649481 14.1678939674613 L 18.2916053076675 9.89690721649487 Z " fill-rule="nonzero" fill="#ffffff" stroke="none" transform="matrix(1 0 0 1 526 10 )" />
|
||||
</g>
|
||||
</svg>
|
6
riis-web/src/assets/point/7.svg
Normal file
6
riis-web/src/assets/point/7.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="20px" height="20px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -799 -10 )">
|
||||
<path d="M 19.9431818181819 10 C 19.9431818181819 4.50838955965907 15.4913884943181 0.056818181818187 10 0.056818181818187 C 4.50861150568187 0.056818181818187 0.0568181818181301 4.50861150568181 0.0568181818181301 10 C 0.0568181818181301 15.4913884943182 4.50861150568187 19.9431818181818 10 19.9431818181818 C 15.4913884943181 19.9431818181818 19.9431818181819 15.4916104403409 19.9431818181819 10 Z M 18.1676136363636 10 C 18.1676136363636 14.5108309659091 14.5108309659091 18.1676136363636 10 18.1676136363636 C 5.48916903409088 18.1676136363636 1.83238636363637 14.5108309659091 1.83238636363637 10 C 1.83238636363637 5.48916903409093 5.48916903409088 1.83238636363637 10 1.83238636363637 C 14.5108309659091 1.83238636363637 18.1676136363636 5.48916903409093 18.1676136363636 10 Z M 15.1566152681963 7.11237127130681 C 15.1566152681963 6.87690836451702 15.0630748613728 6.65109007416635 14.8965731534091 6.48459694602275 C 14.7300800252655 6.31809523805902 14.5042617349147 6.22455483123548 14.268798828125 6.22455483123548 C 14.0333359213353 6.22455483123548 13.8075176309845 6.31809523805902 13.6410245028409 6.48459694602275 L 8.49343039772725 11.6321910511364 L 6.36008522727275 9.49773615056819 C 6.19359209912909 9.33123444260445 5.96777380877836 9.23769403578098 5.73231090198863 9.23769403578098 C 5.49684799519889 9.23769403578098 5.27102970484816 9.33123444260445 5.1045365767045 9.49773615056819 C 4.93803486874083 9.66422927871184 4.84449446191729 9.89004756906252 4.84449446191729 10.1255104758523 C 4.84449446191729 10.360973382642 4.93803486874083 10.5867916729927 5.1045365767045 10.7532848011364 L 7.86554509943187 13.5154030539773 C 8.03203822757541 13.681904761941 8.25785651792614 13.7754451687645 8.49331942471588 13.7754451687645 C 8.72878233150573 13.7754451687645 8.95460062185634 13.681904761941 9.12109375 13.5154030539773 L 14.8965731534091 7.74014559659093 C 15.0630748613728 7.57365246844728 15.1566152681963 7.3478341780966 15.1566152681963 7.11237127130681 Z " fill-rule="nonzero" fill="#ffffff" stroke="none" transform="matrix(1 0 0 1 799 10 )" />
|
||||
</g>
|
||||
</svg>
|
BIN
riis-web/src/assets/point/bigbg.jpg
Normal file
BIN
riis-web/src/assets/point/bigbg.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.1 MiB |
6
riis-web/src/assets/point/kan.svg
Normal file
6
riis-web/src/assets/point/kan.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="16px" height="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -1748 -16 )">
|
||||
<path d="M 7.71655097466237 11.8313219598768 C 7.71655097466237 9.97444206804556 9.22162863151448 8.46902673420914 11.0785084759671 8.46861017478813 C 12.9354971834723 8.46887285239114 14.4407446770344 9.97433328411091 14.4407446770344 11.8313220108491 C 14.4407446770344 12.5524335200516 14.2089357011816 13.2544453354905 13.7795254241673 13.8337627118644 L 14.8187118697756 14.8751186440678 C 14.938324843486 14.9968341366684 15.0053487445193 15.1606589613549 15.0053487445193 15.3313104325732 C 15.0053487445193 15.6907635578867 14.7139544123083 15.9821578902003 14.3545012871216 15.9821578902003 C 14.1835842262076 15.9821578902003 14.0195263647963 15.9149257649332 13.897762717558 15.7949830455509 L 12.8151864361598 14.7113220286017 C 12.291228192114 15.0271385065574 11.6910408169433 15.1940338295802 11.0792628431802 15.1940338295802 C 9.22208836012283 15.1940338295802 7.71655097466237 13.688496443589 7.71655097466237 11.8313219598768 Z M 2.15972882339111 0 L 12.1589152552472 0 C 13.222812654335 0.00576297203389231 14.1255497753082 0.782162839408215 14.2904406782245 1.83322034427965 L 14.3121355881744 2.00352541843222 L 14.3186440627485 2.16949152012711 L 14.3186440627485 6.64298305614409 C 14.3186440627485 7.00243618145765 14.0272497305377 7.29383051377118 13.6677966053508 7.29383051377118 C 13.308343480164 7.29383051377118 13.0169491479533 7.00243618145765 13.0169491479533 6.64298305614409 L 13.0169491479533 2.19986440677968 L 13.0136949106661 2.09138982521188 C 12.9779997377104 1.68823526251305 12.6683553661749 1.36328869566876 12.2673898367768 1.30820338983051 L 12.1589152552472 1.30169491525425 L 2.18901695897398 1.30169491525425 L 2.08162712850344 1.30494915254235 C 1.67943886052853 1.34574628265108 1.35869227615262 1.65884532857928 1.30820338936928 2.05993220338985 L 1.30169491479523 2.16949152012711 L 1.30169491479523 13.2024406779661 L 1.30494915208237 13.3109152595339 C 1.34064432653122 13.7140698273654 1.65028870623723 14.0390163958654 2.05125424186167 14.0941016949153 L 2.15972882339111 14.1006101694915 L 6.06047457943123 14.1006101694915 C 6.42030540471819 14.100610059898 6.71169973692895 14.3920043922115 6.71169973692895 14.7514575175251 C 6.71169973692895 15.0700279252301 6.48110251723642 15.341778832869 6.16677965884287 15.3936271239407 L 6.06047457943123 15.4023050847458 L 2.15972882339111 15.4023050847458 C 1.09583142430347 15.3965421127119 0.193094303330099 14.6201422453375 0.0282034004137586 13.5690847404661 L 0.0065084745740478 13.3987796663135 L 0 13.2338982997881 L 0 2.17057627118646 C 0 1.10427119173727 0.772338988075262 0.203932198093241 1.8245423828314 0.0282033845339242 L 1.99267797069569 0.00650847457626469 L 2.15972882339111 0 Z M 13.1393444622504 11.8313220365466 C 13.1393444622504 10.6931244750002 12.2167060327247 9.77040502939406 11.0785084759671 9.77030509004237 C 9.94005927585454 9.77030508209748 9.01731055481582 10.6930538034616 9.01731055481582 11.8313220365466 C 9.01731055481582 12.9695902696316 9.94005927585454 13.8923389909958 11.0783275085382 13.8923389909958 C 12.2167060327247 13.8922390436992 13.1393444622504 12.969519598093 13.1393444622504 11.8313220365466 Z M 5.82942373205492 8.1160677966102 L 5.82833898099602 8.1160677966102 C 6.16894914507088 8.1160677966102 6.44664406552374 8.40027119173726 6.44664406552374 8.74847458156779 C 6.44664406552374 9.06088136122884 6.22210169272171 9.32338983050846 5.92922033689274 9.37220338983053 L 5.82942373205492 9.37979661546609 L 4.28474577179441 9.37979661546609 C 3.94016949036131 9.37503542254922 3.66402295337048 9.09307527415388 3.66644068726669 8.74847458156779 C 3.66644068726669 8.43389831567799 3.89206781112784 8.17355933262712 4.18494915106703 8.12366102224576 L 4.28474577179441 8.1160677966102 L 5.82942373205492 8.1160677966102 Z M 4.28474577179441 4.39105085275423 L 9.22684745967081 4.39105085275423 C 9.56745762374567 4.39105085275423 9.84515254419853 4.67525424788136 9.84515254419853 5.02345762182205 C 9.84515254419853 5.33586440148304 9.61952542033737 5.59837287076272 9.3266440645084 5.64718644597457 L 9.22684745967081 5.65586440677964 L 4.28474577179441 5.65586440677964 C 3.93974306160226 5.65110202667057 3.66342307645095 5.36848000430342 3.66644068726669 5.02345762182205 C 3.66644068726669 4.70996609110171 3.89206781112784 4.44854237288138 4.18494915106703 4.39864406250001 L 4.28474577179441 4.39105085275423 Z " fill-rule="nonzero" fill="#00ffff" stroke="none" transform="matrix(1 0 0 1 1748 16 )" />
|
||||
</g>
|
||||
</svg>
|
6
riis-web/src/assets/point/shan.svg
Normal file
6
riis-web/src/assets/point/shan.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="16px" height="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -1779 -16 )">
|
||||
<path d="M 15.9454838709678 3.69354838709683 C 15.9454838709678 3.31903225806458 15.6435483870969 3.01612903225805 15.2690322580643 3.01612903225805 L 11.2703225806451 3.01612903225805 L 11.2703225806451 2.09096774193553 C 11.2703225806451 0.968387096774222 10.3567741935481 0.0548387096773695 9.23419354838711 0.0548387096773695 L 6.51774193548385 0.0548387096773695 C 5.39516129032245 0.0548387096773695 4.48161290322582 0.968387096774222 4.48161290322582 2.09096774193553 L 4.48161290322582 3.01612903225805 L 0.736451612903238 3.01612903225805 C 0.361935483870639 3.01612903225805 0.0590322580644624 3.31903225806458 0.0590322580644624 3.69354838709683 C 0.0590322580644624 4.06806451612907 0.361935483870639 4.37096774193547 0.736451612903238 4.37096774193547 L 1.84548387096743 4.37096774193547 L 1.84548387096743 12.5783870967742 C 1.84548387096743 14.1035483870968 3.08612903225776 15.3432258064516 4.61032258064506 15.3432258064516 L 11.1551612903227 15.3432258064516 C 12.680322580645 15.3432258064516 13.9199999999998 14.1025806451613 13.9199999999998 12.5783870967742 L 13.9199999999998 4.37096774193547 L 15.2680645161292 4.37096774193547 C 15.6425806451614 4.37096774193547 15.9454838709678 4.06806451612907 15.9454838709678 3.69354838709683 Z M 5.83645161290315 3.01612903225805 L 5.83645161290315 2.09096774193553 C 5.83645161290315 1.71548387096777 6.14225806451623 1.40967741935479 6.51774193548385 1.40967741935479 L 9.23516129032259 1.40967741935479 C 9.61064516129022 1.40967741935479 9.9164516129033 1.71548387096777 9.9164516129033 2.09096774193553 L 9.9164516129033 3.01612903225805 L 5.83645161290315 3.01612903225805 Z M 12.566129032258 12.5774193548388 C 12.566129032258 13.3554838709677 11.9332258064517 13.9874193548387 11.1561290322581 13.9874193548387 L 4.61129032258054 13.9874193548387 C 3.83322580645154 13.9874193548387 3.20129032258069 13.3545161290323 3.20129032258069 12.5774193548388 L 3.20129032258069 4.37096774193547 L 12.5670967741935 4.37096774193547 L 12.5670967741935 12.5774193548388 Z M 6.74032258064517 7.11548387096777 C 6.74032258064517 6.74096774193549 6.43741935483877 6.43806451612909 6.06290322580639 6.43806451612909 C 5.68838709677425 6.43806451612909 5.38548387096785 6.74096774193549 5.38548387096785 7.11548387096777 L 5.38548387096785 11.2593548387097 C 5.38548387096785 11.6338709677419 5.68838709677425 11.9367741935484 6.06290322580639 11.9367741935484 C 6.43741935483877 11.9367741935484 6.74032258064517 11.6338709677419 6.74032258064517 11.2593548387097 L 6.74032258064517 7.11548387096777 Z M 10.3035483870967 7.11548387096777 C 10.3035483870967 6.74096774193549 9.99967741935484 6.43806451612909 9.62612903225795 6.43806451612909 C 9.25161290322603 6.43806451612909 8.9487096774194 6.74096774193549 8.9487096774194 7.11548387096777 L 8.9487096774194 11.2593548387097 C 8.9487096774194 11.6338709677419 9.25161290322603 11.9367741935484 9.62612903225795 11.9367741935484 C 10.0006451612903 11.9367741935484 10.3035483870967 11.6338709677419 10.3035483870967 11.2593548387097 L 10.3035483870967 7.11548387096777 Z " fill-rule="nonzero" fill="#00ffff" stroke="none" transform="matrix(1 0 0 1 1779 16 )" />
|
||||
</g>
|
||||
</svg>
|
BIN
riis-web/src/assets/point/success.png
Normal file
BIN
riis-web/src/assets/point/success.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.3 KiB |
6
riis-web/src/assets/point/weitu.svg
Normal file
6
riis-web/src/assets/point/weitu.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="60px" height="52px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="matrix(1 0 0 1 -462 -578 )">
|
||||
<path d="M 59 8.16313823163142 L 59 28.8149906600249 L 59.7619047851563 43.6550435865504 C 59.7619047851563 48.1469878580324 56.0974702845982 51.7886052072793 51.5773809291295 51 L 8.42261907087055 51 C 3.90252978515628 51.7886052072793 0.238095284598216 48.1469878580324 1 43.6550435865504 L 1 8.16313823163142 C 0.238095214843725 3.67119396014942 3.90252971540178 0.0295766109024953 8.42261907087055 0 L 51.5773809291295 0 C 56.0974702148437 0.0295766109024953 59.7619047154018 3.67119396014942 59 8.16313823163142 Z M 43.3928571428571 20.7331880217251 C 47.9761904994419 20.7331880217251 52.2514880719867 21.8962873599004 55 23.6420454545455 L 55 8.16313823163142 C 55.2976190708705 8.16313823163142 55.2976190708705 8.16313823163142 55.2976190708705 8.16313823163142 C 55.2976190708705 6.12130094543875 53.632011751782 4.46606478026735 51.5773809988839 4.46606478026735 C 51.5773809988839 4.46606478026735 51.5773809291295 4.46606478026735 51.5773809291295 5 L 8.42261907087055 5 C 8.42261907087055 4.46606478026735 8.42261900111606 4.46606478026735 8.42261900111606 4.46606478026735 C 6.36798824821796 4.46606478026735 4.70238092912945 6.12130094543875 4.70238092912945 8.16313823163142 L 5 8.16313823163142 L 5 32.0425358032379 C 5.68768962878914 31.8971274925515 6.68245769926585 31.8242201530594 7.67857142857139 31.8244084451374 C 12.3456790041784 31.8176321279673 16.8683841660041 33.4322049588147 20.4642857142857 36.3888154029323 C 24.0729166434152 27.0448318804483 33.1324404994419 20.7331880217251 43.3928571428571 20.7331880217251 Z M 55 29.3421933143778 L 55.2976190708705 29.3429327521793 C 54.9255952845982 28.7661892901618 53.8236607142857 27.841920944651 52.2529762137277 27.0610990268427 C 49.8638392857143 25.873599003736 46.8139880719866 25.16967619109 43.3928571428571 25.16967619109 C 34.898809500558 25.16967619109 27.4099702148438 30.4564912826899 24.5290178571428 38.2499221899809 C 24.3385416434152 38.7660336239103 24.0126487862723 39.6585071837543 23.5528273577009 40.9243851183063 C 23.0171130719866 42.4009962409033 21.1495535714286 42.8727428624591 19.9694940708705 41.8294287048568 C 18.8229167131696 40.8149517203553 17.9776785714286 40.0918041487488 17.4486607142857 39.6703377726592 C 14.6796492172683 37.4578304963227 11.231613518914 36.2545789721066 7.67857142857139 36.2608966145023 C 6.66964285714283 36.2608966145023 5.67485121372766 36.355541672342 4.70238092912945 36.5418742447755 L 4.70238092912945 43.6550435865504 C 4.70238092912945 45.6968808727431 6.36798824821796 47.3521170379145 8.42261900111606 47.3521170379145 C 8.42261900111606 47.3521170379145 8.42261907087055 47.3521170379145 8.42261907087055 47 L 51.5773809291295 47 C 51.5773809291295 47.3521170379145 51.5773809988839 47.3521170379145 51.5773809988839 47.3521170379145 C 53.632011751782 47.3521170379145 55.2976190708705 45.6968808727431 55.2976190708705 43.6550435865504 C 55.2976190708705 43.6550435865504 55.2976190708705 43.6550435865504 55 43.6550435865504 L 55 29.3421933143778 Z M 16.6071428571429 23.6908468244084 C 12.9088074788117 23.6908468244084 9.91071428571428 20.7114217084786 9.91071428571428 17.0361145703611 C 9.91071428571428 13.3608074322437 12.9088074788117 10.3813823163138 16.6071428571429 10.3813823163138 C 20.3054782354741 10.3813823163138 23.3035714285714 13.3608074322437 23.3035714285714 17.0361145703611 C 23.3035714285714 20.7114217084786 20.3054782354741 23.6908468244084 16.6071428571429 23.6908468244084 Z M 16.6071428571429 19.2543586550436 C 17.8399213165866 19.2543586550436 18.8392857142857 18.2612169497336 18.8392857142857 17.0361145703611 C 18.8392857142857 15.8110121909887 17.8399213165866 14.8178704856787 16.6071428571429 14.8178704856787 C 15.3743643976991 14.8178704856787 14.375 15.8110121909887 14.375 17.0361145703611 C 14.375 18.2612169497336 15.3743643976991 19.2543586550436 16.6071428571429 19.2543586550436 Z " fill-rule="nonzero" fill="#b5d7ff" stroke="none" fill-opacity="0.498039215686275" transform="matrix(1 0 0 1 462 578 )" />
|
||||
</g>
|
||||
</svg>
|
BIN
riis-web/src/assets/point/xiu.png
Normal file
BIN
riis-web/src/assets/point/xiu.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
466
riis-web/src/components/IntelligentPoint/index.vue
Normal file
466
riis-web/src/components/IntelligentPoint/index.vue
Normal file
@ -0,0 +1,466 @@
|
||||
<template>
|
||||
<div style="width: 100%;height: calc(76vh);">
|
||||
<el-scrollbar>
|
||||
<canvas ref="canvas" :width="width" :height="height" :style="{ cursor: cursorStyle }"
|
||||
@mousedown="handleMouseDown" @mousemove="handleMouseMove" @mouseup="handleMouseUp"
|
||||
@mouseleave="handleMouseLeave" @wheel.prevent="handleWheel"
|
||||
@contextmenu.prevent="handleContextMenu"></canvas>
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
|
||||
<div style="width: 100%;margin: auto; display: flex; justify-content: end;margin: 10px 0px;">
|
||||
<el-button class="searchButton" @click="sureedit()">确认修改</el-button>
|
||||
</div>
|
||||
|
||||
<!-- 右键菜单 -->
|
||||
<div v-if="contextMenuVisible" class="context-menu"
|
||||
:style="{ left: `${contextMenuPosition.x}px`, top: `${contextMenuPosition.y}px` }" @click.stop>
|
||||
<div class="menu-item" :class="{ disabled: !selectedRightClickId }" @click="deleteIcon">删除图标</div>
|
||||
<div class="menu-item" @click="addIcon">新增图标</div>
|
||||
</div>
|
||||
<Eldialog v-if="addwang" :title="'新增'" :zIndex="2000" :width="'800'" @before-close="addclose">
|
||||
<template v-slot:PopFrameContent>
|
||||
<el-form ref="infoForm" :model="schemeform" label-width="90px" style="margin-top:30px ;">
|
||||
|
||||
<el-form-item label="区域" prop="stationCode">
|
||||
<el-select v-model="schemeform.areaId" placeholder=" " clearable style="width: 100%;">
|
||||
<el-option v-for="item in areaList" :key="item.areaId" :label="item.areaName"
|
||||
:value="item.areaId" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="设备类型">
|
||||
<el-select v-model="schemeform.patroldeviceType" placeholder=" " clearable style="width: 100%;">
|
||||
<el-option v-for="item in arrangeDeviceTypearr" :key="item.itemcode" :label="item.dictname"
|
||||
:value="item.itemcode" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
<span
|
||||
style="width: 100%;margin: auto; display: flex;display: -webkit-flex; justify-content: center;-webkit-justify-content: center;margin: 10px 0px;">
|
||||
<el-button class="searchButton" @click="addtubiao">确定</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</Eldialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted, watch, defineEmits, computed } from 'vue';
|
||||
import Eldialog from '@/components/seccmsdialog/eldialog.vue'
|
||||
import { useUserStore } from '@/store/modules/user';
|
||||
import {
|
||||
getDeviceByType
|
||||
} from '@/api/device';
|
||||
import {
|
||||
getSubstationAreaByCode,
|
||||
} from "@/api/algorithm";
|
||||
import { fa } from 'element-plus/es/locale';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import camera from '@/assets/point/1.svg'
|
||||
import voiceprint from '@/assets/point/2.svg'
|
||||
import partial from '@/assets/point/3.svg'
|
||||
import humidity from '@/assets/point/4.svg'
|
||||
const userStore = useUserStore();
|
||||
const props = defineProps({
|
||||
width: { type: Number, default: 600 },
|
||||
height: { type: Number, default: 600 },
|
||||
mainImage: { type: String, required: true },
|
||||
overlayImages: {
|
||||
type: Array as () => Array<{
|
||||
id: string | number;
|
||||
url: string;
|
||||
size: number;
|
||||
x?: number;
|
||||
y?: number;
|
||||
}>,
|
||||
default: () => [],
|
||||
validator: (value: any[]) =>
|
||||
value.every(item => 'id' in item)
|
||||
}
|
||||
});
|
||||
const schemeform: any = ref({})
|
||||
// 新增缩放和平移状态
|
||||
const scale = ref(1);
|
||||
const offset = ref({ x: 0, y: 0 });
|
||||
const isDraggingBackground = ref(false);
|
||||
const bgDragStartPos = ref({ x: 0, y: 0 });
|
||||
// 右键菜单状态
|
||||
const contextMenuVisible = ref(false);
|
||||
const contextMenuPosition = ref({ x: 0, y: 0 });
|
||||
const selectedRightClickId = ref<string | number | null>(null);
|
||||
// 修改后的光标样式计算
|
||||
const cursorStyle = computed(() => {
|
||||
if (selectedId.value) return 'pointer';
|
||||
return isDraggingBackground.value ? 'grabbing' : 'grab';
|
||||
});
|
||||
// 坐标转换方法
|
||||
const getCanvasCoords = (clientX: number, clientY: number) => {
|
||||
const rect = canvas.value!.getBoundingClientRect();
|
||||
return {
|
||||
x: (clientX - rect.left - offset.value.x) / scale.value,
|
||||
y: (clientY - rect.top - offset.value.y) / scale.value
|
||||
};
|
||||
};
|
||||
// 事件定义
|
||||
const emit = defineEmits([
|
||||
'position-change',
|
||||
]);
|
||||
|
||||
interface OverlayPosition {
|
||||
ids: string | number;
|
||||
x: number;
|
||||
y: number;
|
||||
size: number;
|
||||
img: HTMLImageElement;
|
||||
}
|
||||
|
||||
// 图标状态
|
||||
const overlays: any = ref([]);
|
||||
const selectedId = ref<string | number | null>(null);
|
||||
const isDragging = ref(false);
|
||||
const dragStartPos = ref({ x: 0, y: 0 });
|
||||
const canvas = ref<HTMLCanvasElement | null>(null);
|
||||
const mainImg = new Image();
|
||||
|
||||
// 图片加载
|
||||
const loadImages = async () => {
|
||||
await new Promise((resolve) => {
|
||||
mainImg.src = props.mainImage;
|
||||
mainImg.onload = resolve;
|
||||
mainImg.crossOrigin = "anonymous"; // 关键设置
|
||||
});
|
||||
|
||||
overlays.value = await Promise.all(
|
||||
props.overlayImages.map(async (config: any) => {
|
||||
const img = new Image();
|
||||
await new Promise((resolve) => {
|
||||
img.src = config.url;
|
||||
img.onload = resolve;
|
||||
img.crossOrigin = "anonymous"; // 关键设置
|
||||
});
|
||||
return {
|
||||
id: config.id,
|
||||
ids: config.id,
|
||||
x: config.x || 100,
|
||||
y: config.y || 100,
|
||||
size: config.size || 50,
|
||||
img,
|
||||
areaId: config.areaId,
|
||||
areaName: config.areaName,
|
||||
patroldeviceType: config.patroldeviceType,
|
||||
};
|
||||
})
|
||||
);
|
||||
};
|
||||
// 绘制逻辑
|
||||
const draw = () => {
|
||||
if (!canvas.value) return;
|
||||
const ctx = canvas.value.getContext('2d');
|
||||
if (!ctx) return;
|
||||
|
||||
ctx.resetTransform();
|
||||
ctx.clearRect(0, 0, props.width, props.height);
|
||||
|
||||
// 应用变换矩阵
|
||||
ctx.translate(offset.value.x, offset.value.y);
|
||||
ctx.scale(scale.value, scale.value);
|
||||
|
||||
// 绘制主图
|
||||
ctx.drawImage(mainImg, 0, 0, props.width, props.height);
|
||||
|
||||
overlays.value.forEach((overlay: any) => {
|
||||
// 边界约束
|
||||
const safeX = Math.max(overlay.size / 2, Math.min(props.width - overlay.size / 2, overlay.x));
|
||||
const safeY = Math.max(overlay.size / 2, Math.min(props.height - overlay.size / 2, overlay.y));
|
||||
|
||||
overlay.x = safeX;
|
||||
overlay.y = safeY;
|
||||
|
||||
// 绘制图标
|
||||
ctx.drawImage(
|
||||
overlay.img,
|
||||
safeX - overlay.size / 2,
|
||||
safeY - overlay.size / 2,
|
||||
overlay.size,
|
||||
overlay.size
|
||||
);
|
||||
|
||||
// 绘制选中边框
|
||||
if (overlay.ids === selectedId.value) {
|
||||
ctx.strokeStyle = '#409eff';
|
||||
ctx.lineWidth = 2;
|
||||
ctx.setLineDash([5, 3]);
|
||||
ctx.strokeRect(
|
||||
safeX - overlay.size / 2 - 2,
|
||||
safeY - overlay.size / 2 - 2,
|
||||
overlay.size + 4,
|
||||
overlay.size + 4
|
||||
);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// 鼠标事件处理
|
||||
const handleMouseDown = (e: MouseEvent) => {
|
||||
const canvasCoords = getCanvasCoords(e.clientX, e.clientY);
|
||||
const clickedOverlay = overlays.value.find((overlay: any) =>
|
||||
canvasCoords.x > overlay.x - overlay.size / 2 &&
|
||||
canvasCoords.x < overlay.x + overlay.size / 2 &&
|
||||
canvasCoords.y > overlay.y - overlay.size / 2 &&
|
||||
canvasCoords.y < overlay.y + overlay.size / 2
|
||||
);
|
||||
|
||||
if (clickedOverlay) {
|
||||
selectedId.value = clickedOverlay.ids === selectedId.value ? null : clickedOverlay.ids;
|
||||
isDragging.value = !!selectedId.value;
|
||||
if (isDragging.value) {
|
||||
dragStartPos.value = { x: canvasCoords.x, y: canvasCoords.y };
|
||||
}
|
||||
} else {
|
||||
isDraggingBackground.value = true;
|
||||
bgDragStartPos.value = { x: e.clientX - offset.value.x, y: e.clientY - offset.value.y };
|
||||
}
|
||||
draw();
|
||||
};
|
||||
// 右键菜单处理
|
||||
const rightClickCanvasCoords = ref({ x: 0, y: 0 });
|
||||
const handleContextMenu = (e: MouseEvent) => {
|
||||
const canvasCoords = getCanvasCoords(e.clientX, e.clientY);
|
||||
rightClickCanvasCoords.value = canvasCoords;
|
||||
const clickedOverlay = overlays.value.find((overlay: any) =>
|
||||
canvasCoords.x > overlay.x - overlay.size / 2 &&
|
||||
canvasCoords.x < overlay.x + overlay.size / 2 &&
|
||||
canvasCoords.y > overlay.y - overlay.size / 2 &&
|
||||
canvasCoords.y < overlay.y + overlay.size / 2
|
||||
);
|
||||
|
||||
selectedRightClickId.value = clickedOverlay?.ids || null;
|
||||
contextMenuPosition.value = { x: e.clientX, y: e.clientY };
|
||||
contextMenuVisible.value = true;
|
||||
};
|
||||
|
||||
// 菜单操作方法
|
||||
const deleteIcon = () => {
|
||||
if (selectedRightClickId.value) {
|
||||
overlays.value = overlays.value.filter((o: any) => o.ids !== selectedRightClickId.value);
|
||||
|
||||
contextMenuVisible.value = false;
|
||||
draw()
|
||||
}
|
||||
};
|
||||
|
||||
const addwang = ref(false)
|
||||
function addclose() {
|
||||
addwang.value = false
|
||||
}
|
||||
const addIcon = () => {
|
||||
schemeform.value.areaId = ''
|
||||
schemeform.value.patroldeviceType = ''
|
||||
|
||||
contextMenuVisible.value = false;
|
||||
console.log(rightClickCanvasCoords.value)
|
||||
addwang.value = true
|
||||
};
|
||||
const addtubiao = async () => {
|
||||
if (!schemeform.value.areaId && !schemeform.value.patroldeviceType) {
|
||||
ElMessage.warning('请先选择区域和设备类型')
|
||||
return
|
||||
}
|
||||
const img = new Image();
|
||||
await new Promise((resolve) => {
|
||||
img.src = gettypearr(arrangeDeviceTypearr.value, schemeform.value.patroldeviceType);
|
||||
img.onload = resolve;
|
||||
img.crossOrigin = "anonymous"; // 关键设置
|
||||
});
|
||||
const user = areaList.value.find((item: any) => item.areaId === schemeform.value.areaId);
|
||||
overlays.value.push({
|
||||
ids: Math.random().toString(36).substr(2, 9),
|
||||
img: img,
|
||||
size: 16,
|
||||
x: rightClickCanvasCoords.value.x,
|
||||
y: rightClickCanvasCoords.value.y,
|
||||
areaId: schemeform.value.areaId,
|
||||
patroldeviceType: schemeform.value.patroldeviceType,
|
||||
areaName: user.areaName,
|
||||
})
|
||||
console.log(overlays.value)
|
||||
draw()
|
||||
addwang.value = false
|
||||
|
||||
}
|
||||
function sureedit() {
|
||||
|
||||
saveAsImage()
|
||||
}
|
||||
const saveAsImage = () => {
|
||||
if (!canvas.value) return;
|
||||
// 1. Canvas 转 DataURL (base64)
|
||||
const dataURL = canvas.value.toDataURL('image/png');
|
||||
|
||||
// 2. 将 base64 转换为 Blob 对象(更适合文件上传)
|
||||
const blob = dataURLtoBlob(dataURL);
|
||||
|
||||
// // 3. 创建 FormData 并添加文件
|
||||
// const formData = new FormData();
|
||||
// formData.append('file', blob, 'canvas_image.png'); // 'file' 是后端接收的字段名
|
||||
// console.log(formData)
|
||||
console.log(blob)
|
||||
emit('position-change', overlays.value, blob);
|
||||
};
|
||||
// Base64 转 Blob 工具函数
|
||||
const dataURLtoBlob = (dataURL: any) => {
|
||||
const arr = dataURL.split(',');
|
||||
const mime = arr[0].match(/:(.*?);/)[1];
|
||||
const bstr = atob(arr[1]);
|
||||
let n = bstr.length;
|
||||
const u8arr = new Uint8Array(n);
|
||||
|
||||
while (n--) {
|
||||
u8arr[n] = bstr.charCodeAt(n);
|
||||
}
|
||||
|
||||
return new Blob([u8arr], { type: mime });
|
||||
};
|
||||
function gettypearr(list: any, type: any) {
|
||||
let urlname = ''
|
||||
list.forEach((item: any) => {
|
||||
if (item.itemcode == type) {
|
||||
if (item.dictname == '摄像机') {
|
||||
urlname = camera
|
||||
} else if (item.dictname == '声纹传感器') {
|
||||
urlname = voiceprint
|
||||
} else if (item.dictname == '局放传感器') {
|
||||
urlname = partial
|
||||
} else if (item.dictname == '温湿度传感器') {
|
||||
urlname = humidity
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
return urlname
|
||||
}
|
||||
|
||||
// 关闭菜单
|
||||
const closeContextMenu = () => {
|
||||
contextMenuVisible.value = false;
|
||||
};
|
||||
const handleMouseMove = (e: MouseEvent) => {
|
||||
if (isDraggingBackground.value) {
|
||||
const deltaX = e.clientX - bgDragStartPos.value.x;
|
||||
const deltaY = e.clientY - bgDragStartPos.value.y;
|
||||
offset.value.x = deltaX;
|
||||
offset.value.y = deltaY;
|
||||
draw();
|
||||
}
|
||||
else if (isDragging.value && selectedId.value) {
|
||||
const canvasCoords = getCanvasCoords(e.clientX, e.clientY);
|
||||
const deltaX = canvasCoords.x - dragStartPos.value.x;
|
||||
const deltaY = canvasCoords.y - dragStartPos.value.y;
|
||||
|
||||
const selectedOverlay = overlays.value.find((o: any) => o.ids === selectedId.value);
|
||||
if (selectedOverlay) {
|
||||
selectedOverlay.x += deltaX;
|
||||
selectedOverlay.y += deltaY;
|
||||
dragStartPos.value = {
|
||||
x: canvasCoords.x,
|
||||
y: canvasCoords.y
|
||||
};
|
||||
draw();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 修改后的mouseup处理
|
||||
const handleMouseUp = () => {
|
||||
isDragging.value = false;
|
||||
isDraggingBackground.value = false; // 明确重置背景拖拽状态
|
||||
bgDragStartPos.value = { x: 0, y: 0 }; // 重置背景拖拽起点
|
||||
};
|
||||
|
||||
const handleMouseLeave = () => {
|
||||
// 仅当没有进行任何拖拽操作时才重置选中状态
|
||||
if (!isDragging.value && !isDraggingBackground.value) {
|
||||
selectedId.value = null;
|
||||
}
|
||||
isDragging.value = false;
|
||||
};
|
||||
const handleWheel = (e: WheelEvent) => {
|
||||
const delta = e.deltaY > 0 ? 0.9 : 1.1;
|
||||
const newScale = Math.min(Math.max(scale.value * delta, 0.1), 3);
|
||||
|
||||
// 计算以鼠标为中心的缩放
|
||||
const { x: mouseX, y: mouseY } = getCanvasCoords(e.clientX, e.clientY);
|
||||
offset.value.x -= (mouseX * (newScale - scale.value));
|
||||
offset.value.y -= (mouseY * (newScale - scale.value));
|
||||
|
||||
scale.value = newScale;
|
||||
draw();
|
||||
};
|
||||
// 暴露方法
|
||||
const setDraggable = (id: string | number, state: boolean) => {
|
||||
const overlay = overlays.value.find((o: any) => o.ids === id);
|
||||
if (overlay && !state && selectedId.value === id) {
|
||||
selectedId.value = null;
|
||||
}
|
||||
draw();
|
||||
};
|
||||
|
||||
defineExpose({ setDraggable });
|
||||
const arrangeDeviceTypearr: any = ref([])
|
||||
const areaList: any = ref([])
|
||||
function getType() {
|
||||
getSubstationAreaByCode({ stationCode: userStore.stationCode }).then((res: any) => {
|
||||
areaList.value = res.data
|
||||
})
|
||||
getDeviceByType({ dictcode: 'arrangeDeviceType' }).then((res: any) => {
|
||||
arrangeDeviceTypearr.value = res.data
|
||||
})
|
||||
}
|
||||
|
||||
// 初始化
|
||||
onMounted(async () => {
|
||||
await loadImages();
|
||||
draw();
|
||||
document.addEventListener('click', closeContextMenu);
|
||||
getType()
|
||||
});
|
||||
|
||||
watch(() => props.mainImage, loadImages);
|
||||
watch(() => props.overlayImages, loadImages, { deep: true });
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
canvas {
|
||||
transition: cursor 0.2s ease-in-out;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.context-menu {
|
||||
position: fixed;
|
||||
background: white;
|
||||
border: 1px solid #ccc;
|
||||
box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2);
|
||||
z-index: 1000;
|
||||
padding: 4px 0;
|
||||
min-width: 120px;
|
||||
}
|
||||
|
||||
.menu-item {
|
||||
padding: 8px 16px;
|
||||
cursor: pointer;
|
||||
white-space: nowrap;
|
||||
font-size: 14px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.menu-item:hover {
|
||||
background: #f5f5f5;
|
||||
}
|
||||
|
||||
.disabled {
|
||||
color: #999;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
</style>
|
237
riis-web/src/components/IntelligentPoint/point.vue
Normal file
237
riis-web/src/components/IntelligentPoint/point.vue
Normal file
@ -0,0 +1,237 @@
|
||||
<template>
|
||||
<canvas ref="canvas" :width="(width * (870 / width))" :height="(height * (450 / height))" :style="{ cursor: cursorStyle }"
|
||||
@mousedown="handleMouseDown" @mousemove="handleMouseMove" @mouseup="handleMouseUp"
|
||||
@mouseleave="handleMouseLeave" @wheel.prevent="handleWheel"></canvas>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted, watch, defineEmits, computed } from 'vue';
|
||||
|
||||
const props = defineProps({
|
||||
width: { type: Number, default: 600 },
|
||||
height: { type: Number, default: 600 },
|
||||
mainImage: { type: String, required: true },
|
||||
overlayImages: {
|
||||
type: Array as () => Array<{
|
||||
id: string | number;
|
||||
url: string;
|
||||
size: number;
|
||||
x?: number;
|
||||
y?: number;
|
||||
}>,
|
||||
default: () => [],
|
||||
validator: (value: any[]) =>
|
||||
value.every(item => 'id' in item)
|
||||
}
|
||||
});
|
||||
// 新增缩放和平移状态
|
||||
const scale = ref(1);
|
||||
const offset = ref({ x: 0, y: 0 });
|
||||
const isDraggingBackground = ref(false);
|
||||
const bgDragStartPos = ref({ x: 0, y: 0 });
|
||||
|
||||
// 修改后的光标样式计算
|
||||
const cursorStyle = computed(() => {
|
||||
if (selectedId.value) return 'pointer';
|
||||
return isDraggingBackground.value ? 'grabbing' : 'grab';
|
||||
});
|
||||
// 坐标转换方法
|
||||
const getCanvasCoords = (clientX: number, clientY: number) => {
|
||||
const rect = canvas.value!.getBoundingClientRect();
|
||||
return {
|
||||
x: (clientX - rect.left - offset.value.x) / scale.value,
|
||||
y: (clientY - rect.top - offset.value.y) / scale.value
|
||||
};
|
||||
};
|
||||
const emit = defineEmits(['position-change']);
|
||||
|
||||
interface OverlayPosition {
|
||||
id: string | number;
|
||||
x: number;
|
||||
y: number;
|
||||
size: number;
|
||||
img: HTMLImageElement;
|
||||
}
|
||||
|
||||
const overlays = ref<OverlayPosition[]>([]);
|
||||
const selectedId = ref<string | number | null>(null);
|
||||
const isDragging = ref(false);
|
||||
const dragStartPos = ref({ x: 0, y: 0 });
|
||||
const canvas = ref<HTMLCanvasElement | null>(null);
|
||||
const mainImg = new Image();
|
||||
|
||||
// 图片加载
|
||||
const loadImages = async () => {
|
||||
await new Promise((resolve) => {
|
||||
mainImg.src = props.mainImage;
|
||||
mainImg.onload = resolve;
|
||||
});
|
||||
|
||||
overlays.value = await Promise.all(
|
||||
props.overlayImages.map(async (config) => {
|
||||
const img = new Image();
|
||||
await new Promise((resolve) => {
|
||||
img.src = config.url;
|
||||
img.onload = resolve;
|
||||
});
|
||||
return {
|
||||
id: config.id,
|
||||
x: config.x || 100,
|
||||
y: config.y || 100,
|
||||
size: config.size || 50,
|
||||
img
|
||||
};
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
// 绘制逻辑
|
||||
const draw = () => {
|
||||
if (!canvas.value) return;
|
||||
const ctx = canvas.value.getContext('2d');
|
||||
if (!ctx) return;
|
||||
|
||||
ctx.resetTransform();
|
||||
ctx.clearRect(0, 0, (props.width * (870 / props.width)), (props.height * (450 / props.height)));
|
||||
|
||||
// 应用变换矩阵
|
||||
ctx.translate(offset.value.x, offset.value.y);
|
||||
ctx.scale(scale.value, scale.value);
|
||||
|
||||
// 绘制主图
|
||||
ctx.drawImage(mainImg, 0, 0, (props.width * (870 / props.width)), (props.height * (450 / props.height)));
|
||||
|
||||
overlays.value.forEach((overlay) => {
|
||||
// 保持原有边界约束逻辑
|
||||
const safeX = Math.max(overlay.size / 2, Math.min(props.width - overlay.size / 2, overlay.x));
|
||||
const safeY = Math.max(overlay.size / 2, Math.min(props.height - overlay.size / 2, overlay.y));
|
||||
|
||||
// 更新位置
|
||||
overlay.x = safeX;
|
||||
overlay.y = safeY;
|
||||
|
||||
// 绘制图标
|
||||
ctx.drawImage(
|
||||
overlay.img,
|
||||
(safeX - overlay.size / 2) * (870 / props.width),
|
||||
(safeY - overlay.size / 2) * (450 / props.height),
|
||||
overlay.size * (870 / props.width),
|
||||
overlay.size * (450 / props.height)
|
||||
);
|
||||
|
||||
// 绘制选中边框(保持原有逻辑)
|
||||
if (overlay.id === selectedId.value) {
|
||||
ctx.strokeStyle = '#409eff';
|
||||
ctx.lineWidth = 2;
|
||||
ctx.setLineDash([5, 3]);
|
||||
ctx.strokeRect(
|
||||
safeX - overlay.size / 2 - 2,
|
||||
safeY - overlay.size / 2 - 2,
|
||||
overlay.size + 4,
|
||||
overlay.size + 4
|
||||
);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// 鼠标事件处理
|
||||
const handleMouseDown = (e: MouseEvent) => {
|
||||
// 启动背景拖拽
|
||||
isDraggingBackground.value = true;
|
||||
bgDragStartPos.value = {
|
||||
x: e.clientX - offset.value.x,
|
||||
y: e.clientY - offset.value.y
|
||||
};
|
||||
draw();
|
||||
};
|
||||
|
||||
const handleMouseMove = (e: MouseEvent) => {
|
||||
if (isDraggingBackground.value) {
|
||||
const deltaX = e.clientX - bgDragStartPos.value.x;
|
||||
const deltaY = e.clientY - bgDragStartPos.value.y;
|
||||
offset.value.x = deltaX;
|
||||
offset.value.y = deltaY;
|
||||
draw();
|
||||
}
|
||||
else if (isDragging.value && selectedId.value) {
|
||||
const canvasCoords = getCanvasCoords(e.clientX, e.clientY);
|
||||
const deltaX = canvasCoords.x - dragStartPos.value.x;
|
||||
const deltaY = canvasCoords.y - dragStartPos.value.y;
|
||||
|
||||
const selectedOverlay = overlays.value.find(o => o.id === selectedId.value);
|
||||
if (selectedOverlay) {
|
||||
selectedOverlay.x += deltaX;
|
||||
selectedOverlay.y += deltaY;
|
||||
dragStartPos.value = {
|
||||
x: canvasCoords.x,
|
||||
y: canvasCoords.y
|
||||
};
|
||||
draw();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 修改后的mouseup处理
|
||||
const handleMouseUp = () => {
|
||||
if (selectedId.value) {
|
||||
const selectedOverlay = overlays.value.find(o => o.id === selectedId.value);
|
||||
if (selectedOverlay) {
|
||||
emit('position-change', {
|
||||
id: selectedId.value,
|
||||
position: {
|
||||
x: selectedOverlay.x,
|
||||
y: selectedOverlay.y
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
isDragging.value = false;
|
||||
isDraggingBackground.value = false;
|
||||
};
|
||||
|
||||
const handleMouseLeave = () => {
|
||||
selectedId.value = null;
|
||||
isDragging.value = false;
|
||||
};
|
||||
const handleWheel = (e: WheelEvent) => {
|
||||
const delta = e.deltaY > 0 ? 0.9 : 1.1;
|
||||
const newScale = Math.min(Math.max(scale.value * delta, 0.1), 6);
|
||||
|
||||
// 计算以鼠标为中心的缩放
|
||||
const { x: mouseX, y: mouseY } = getCanvasCoords(e.clientX, e.clientY);
|
||||
offset.value.x -= (mouseX * (newScale - scale.value));
|
||||
offset.value.y -= (mouseY * (newScale - scale.value));
|
||||
|
||||
scale.value = newScale;
|
||||
draw();
|
||||
};
|
||||
// 暴露方法
|
||||
const setDraggable = (id: string | number, state: boolean) => {
|
||||
const overlay = overlays.value.find(o => o.id === id);
|
||||
if (overlay) {
|
||||
// 如果禁用拖动且当前选中,则取消选中
|
||||
if (!state && selectedId.value === id) {
|
||||
selectedId.value = null;
|
||||
}
|
||||
draw();
|
||||
}
|
||||
};
|
||||
|
||||
defineExpose({ setDraggable });
|
||||
|
||||
// 初始化
|
||||
onMounted(async () => {
|
||||
await loadImages();
|
||||
draw();
|
||||
});
|
||||
|
||||
watch(() => props.mainImage, loadImages);
|
||||
watch(() => props.overlayImages, loadImages, { deep: true });
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
canvas {
|
||||
transition: cursor 0.2s ease-in-out;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
@ -3,8 +3,8 @@
|
||||
<div class="header-nav">
|
||||
<div class="nav-box">
|
||||
<div style="margin-right: 420px;"></div>
|
||||
<div title="首页" class="homeImgBox" @mousemove="mousemoveNav(navlist[0], 0)"
|
||||
:class="{ 'homeImgActive': activeIndex == 0 }" @click="navClick(navlist[0], 0)">首页</div>
|
||||
<div title="系统总览" class="homeImgBox" @mousemove="mousemoveNav(navlist[0], 0)"
|
||||
:class="{ 'homeImgActive': activeIndex == 0 }" @click="navClick(navlist[0], 0)">系统总览</div>
|
||||
<div class="nav-list" v-for="(item, index) in navlist" v-show="index != 0"
|
||||
:class="{ 'nav-active': activeIndex == index }" @click.stop="navClick(item, index)">
|
||||
<div class="nav-imgtitle">{{ item.name }}</div>
|
||||
|
@ -43,6 +43,7 @@ export const useUserStore = defineStore('user', () => {
|
||||
const wsApiBaseUrl:any = process.env.NODE_ENV=='development'? import.meta.env.VITE_APP_BASE_WS:window.webConfig.wsApiBaseUrl
|
||||
const answeringUrl:any = window.webConfig.answeringUrl
|
||||
const pythonUrl:any = window.webConfig.pythonUrl
|
||||
const imgUrl:any = window.webConfig.imgUrl
|
||||
const application_id:any = window.webConfig.application_id
|
||||
const promptTitle:any = ref('')
|
||||
// actions
|
||||
@ -254,6 +255,7 @@ export const useUserStore = defineStore('user', () => {
|
||||
webApiBaseUrl,
|
||||
wsApiBaseUrl,
|
||||
answeringUrl,
|
||||
imgUrl,
|
||||
pythonUrl,
|
||||
application_id
|
||||
};
|
||||
|
@ -5298,7 +5298,6 @@ function closeVideo(index) { // 关闭视频
|
||||
// var source = new EventSource(userStore.webApiBaseUrl + '/sse/connect/taskresult_' + userStore.stationCode + "_" + userStore.userId,)
|
||||
const ws1 = new WebSocket(userStore.wsApiBaseUrl + '/websocket/taskresult_' + userStore.stationCode + "_" + userStore.userId);
|
||||
function setupWebSocket() {
|
||||
|
||||
ws1.onopen = () => {
|
||||
|
||||
};
|
||||
|
@ -824,6 +824,29 @@ const isGaoliang: any = ref("")
|
||||
</svg>
|
||||
</span>
|
||||
|
||||
</span>
|
||||
<span v-if="node.data.type == 10 && node.data.useMode == 12">
|
||||
<span v-if="node.level != 1" :style="{ color: node.data.online == '1' ? '#009bff' : 'red' }">
|
||||
<svg t="1709272044398" class="icon" viewBox="0 0 1024 1024" version="1.1" style="margin-right: 5px;"
|
||||
xmlns="http://www.w3.org/2000/svg" p-id="5986" xmlns:xlink="http://www.w3.org/1999/xlink" width="20"
|
||||
height="20">
|
||||
<path
|
||||
d="M747.1 420.1c-0.9 2.3-1.9 4.4-2.9 6.5 15.4-1.5 88.5-8.5 95.8-9.4 5.3-0.8 9.4-8.2 11-11.9 0.1-0.4 0.3-0.8 0.4-1.1v-0.1s5-12.1 9.4-23.1c-14.2 0.9-80 6.3-100.5 7.6-2.2 4.8-5.2 12.2-9.7 23.1l-3.5 8.4zM106.3 141.8c-0.3 0.4-0.5 0.8-0.8 1.3-1.1 2.6 0 6.1 3.1 15l2.3 6.4c3 8.7 14.9 46.7 25.4 80.3 7.4 23.6 13.8 43.9 14.9 47.3 1.8 5.3 10 7.4 14.9 6.8 1.3-0.2 3.3-0.5 5.7-1-1.6-15.4-2.6-27.4-2-29.8 0.9-4.1 21-61.1 32.9-94.6-43.1-15.6-83-29.9-91.8-33.2-2.5 0.1-4.1 0.7-4.6 1.5zM429.9 409.8c-1.9 0.2-4.3 0.5-7.1 0.3l-21.1 54.8c-0.4 0.9-0.8 1.9-1.1 2.6 39.3-3.1 298.9-23.1 306.7-23.1 6-0.1 17.1 0.1 29-28.7l3.6-8.5c3.1-7.3 5.6-13.2 7.4-17.6-120.8 7.9-309.7 20-314.8 19.9l-2.6 0.3z"
|
||||
p-id="5987" fill="currentColor"></path>
|
||||
<path
|
||||
d="M410.3 371.9c4.5 11 9.1 10.5 15 9.7l3.5-0.2h0c8.7-0.3 441.7-27.4 445-27.6l3.9-0.2c8.7-0.3 16.1-0.6 20.4-11 1.3-3 2.3-7 3-11.9 2.8-20.3 18.2-94.5 19.1-104.1 1.8-17.1-10.9-24.4-39.5-34.3-9.3-3.2-51.3-18.2-88.2-31.5L729.1 138c-6.6-2.4-34.8-8.1-41.2-8.7-25-2.3-50.3-1.5-74.8-0.9-11.7 0.4-55.4 2-67.4 1.9-26.8 0.1-54.3 0.8-80.8 1.5l-55.4 1.3c-30.4 0.4-61.2 1.2-90.9 2l-50.9 1.1-26.2 0.5-85 2s-6.7 0.1-14.5 0.4c49.7 18 148.8 53.7 178.5 64.4 42.3 15.2 54 55.3 54.7 58.2 1.5 4.5 29.8 90.2 35.1 110.2z"
|
||||
p-id="5988" fill="currentColor"></path>
|
||||
<path
|
||||
d="M316.7 214.5c-18-6.3-60.9-22-103.2-37.1-14.3 40.5-31.1 87.9-32.4 92.7-0.4 8.1 10.9 105.5 15.3 119.4 3.7 11.7 10 15 18.3 18.7 10.1 4.3 145 55.9 153.6 58.8 14.5 4.8 19.1 1.9 22.2-5.6 0.1-0.3 0.1-0.5 0.3-0.8 0 0 13.1-34.1 21.1-54.5-3.4-2.7-6.5-6.9-9.3-13.4l-0.1-0.3v-0.4c-5.2-18.8-38-125.9-38.4-127l-0.1-0.1c0.1-0.5-10.2-37.3-47.3-50.4z m-66.9 50.3c1-12 3.2-21.4 14.7-16.9 4.4 1.5 8.7 3 13.1 4.6 14.5 5.2 28.9 10.6 43.4 16 6.8 2.5 13.6 5.3 20.4 8 7 2.8 14.4 5.1 18.1 12.3 3.6 6.7 1.6 13.2 0.8 20.2-1.3 14-2.9 28.2-4.5 42.2-0.8 6.8-1.5 13.4-2.2 20.2-0.6 5.1-1.1 11.3-4.9 15-2.9 2.9-10.1 1.7-13.2 0.4-3-1.3-38.3-14.2-52.8-19.7-8.7-3.3-17.7-6.5-26.4-9.8 0 0-9.2-2.8-12.4-7.9-3.4-4.9-1.6-14.8-1.6-14.8s6.6-57.9 7.5-69.8zM436.2 425l6.9 202.9 55.8 2.6-3.3-97.6c-0.8-22.9 20.2-40.9 46.8-40.3l29.7 0.4c26.4 0.7 48.5 19.6 49.3 42.3l3.3 97.9h32.9l-6.9-202.9-214.5-5.3zM668.8 861.4c-0.9-11.3-53.7-20.1-117.9-19.6s-115.6 10.1-114.6 21.4c0.9 11.3 53.7 20.1 117.9 19.6s115.5-10.1 114.6-21.4zM612.466 693.98l19.562 2.33-3.785 31.776-19.562-2.33z"
|
||||
p-id="5989" fill="currentColor"></path>
|
||||
<path d="M619.5 848.9h-141l-26.3-120.8h197.5z" p-id="5990" fill="currentColor">
|
||||
</path>
|
||||
<path
|
||||
d="M664.2 744.6H437.7c-20.6 0-37.5-16.9-37.5-37.5V603.6c0-20.6 16.9-37.5 37.5-37.5h226.5c20.6 0 37.5 16.9 37.5 37.5v103.5c0 20.6-16.9 37.5-37.5 37.5z"
|
||||
p-id="5991" fill="currentColor"></path>
|
||||
</svg>
|
||||
</span>
|
||||
|
||||
</span>
|
||||
<span>{{ node.data.name }}</span>
|
||||
<span>{{ node.label }}</span>
|
||||
|
@ -9,7 +9,7 @@
|
||||
position: fixed;
|
||||
top: 60px;
|
||||
">
|
||||
<!-- <Modelset v-if="isModelset" :isautoRotate="isautoRotate" /> -->
|
||||
<Modelset v-if="isModelset" :isautoRotate="isautoRotate" />
|
||||
</div>
|
||||
<div class="three_button" @click="autoRotateClick">
|
||||
<span v-if="isautoRotate == true">暂停</span>
|
||||
|
1024
riis-web/src/views/digitalEmployees/pointSolution/index.vue
Normal file
1024
riis-web/src/views/digitalEmployees/pointSolution/index.vue
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted, reactive, nextTick,computed } from 'vue'
|
||||
import { ref, onMounted, reactive, nextTick, computed } from 'vue'
|
||||
import MarkdownIt from 'markdown-it'
|
||||
import DOMPurify from 'dompurify'
|
||||
import Page from '@/components/Pagination/page.vue'
|
||||
@ -8,9 +8,10 @@ import { getDeviceByType } from '@/api/device'
|
||||
import Eldialog from '@/components/seccmsdialog/eldialog.vue'
|
||||
import { useUserStore } from '@/store/modules/user';
|
||||
import * as echarts from 'echarts'
|
||||
import { getAlgorithmClassTree, getAlgorithmDeviceParams, getAlgorithmDeviceCurve, getAlgorithmParamsNameList, callAlgorithmAnalyse } from '@/api/question';
|
||||
import { getAlgorithmClassTree, getAlgorithmDeviceParams, getAlgorithmDeviceCurve, getAlgorithmParamsNameList, callAlgorithmAnalyse, getAlgorithmLogsPage } from '@/api/question';
|
||||
import { fa } from 'element-plus/es/locale'
|
||||
import axios from 'axios';
|
||||
import dayjs from 'dayjs'
|
||||
const userStore = useUserStore();//pythonUrl
|
||||
//树形控件类型定义
|
||||
interface Tree {
|
||||
@ -38,7 +39,7 @@ const vMove = {
|
||||
// 创建计算属性处理文本
|
||||
const md = new MarkdownIt()
|
||||
const processedActionData = computed(() => {
|
||||
return md.render(DOMPurify.sanitize(actionData.value))
|
||||
return md.render(DOMPurify.sanitize(actionData.value))
|
||||
})
|
||||
const defaultProps = { label: "name" };
|
||||
const treeRef = ref<InstanceType<typeof ElTree>>()
|
||||
@ -60,7 +61,7 @@ function init() {
|
||||
treeloading.value = false
|
||||
if (res.data.length !== 0 && res.data !== null) {
|
||||
treeData.value = res.data
|
||||
|
||||
|
||||
if (res.data.length !== 0 && res.data !== null) {
|
||||
componentId.value = res.data[0].children[0].id
|
||||
algorithmId.value = res.data[0].children[0].parentId
|
||||
@ -86,7 +87,7 @@ function handleNodeClick(data: any, node: any) {
|
||||
// console.log(data)
|
||||
componentId.value = data.id
|
||||
algorithmId.value = data.parentId
|
||||
|
||||
|
||||
gatdata()
|
||||
getecharts()
|
||||
getfenList()
|
||||
@ -105,7 +106,7 @@ function gatdata() {
|
||||
const eacherslist: any = ref([1, 2, 3, 4])
|
||||
function getecharts() {
|
||||
checloading.value = true
|
||||
getAlgorithmDeviceCurve({ algorithmId: algorithmId.value, componentId: componentId.value,type:type.value }).then((res: any) => {
|
||||
getAlgorithmDeviceCurve({ algorithmId: algorithmId.value, componentId: componentId.value, type: type.value }).then((res: any) => {
|
||||
checloading.value = false
|
||||
eacherslist.value = res.data
|
||||
setTimeout(() => {
|
||||
@ -204,12 +205,58 @@ function fenfault() {
|
||||
analysis()
|
||||
actionloading.value = true
|
||||
}
|
||||
//分析记录
|
||||
const record = ref(false)
|
||||
const recordData = ref([])
|
||||
const recordloading = ref(false)
|
||||
const recordtotal = ref(0)
|
||||
const detaall: any = ref([])
|
||||
const recordform = ref({
|
||||
size: 20,
|
||||
current: 1,
|
||||
startDate: '',
|
||||
endDate: ''
|
||||
})
|
||||
function gettoday() {
|
||||
// 获取今天0点
|
||||
let startTime = dayjs().startOf('day').format('YYYY-MM-DD HH:mm:ss')
|
||||
// 获取当前时间
|
||||
let endTime = dayjs().format('YYYY-MM-DD HH:mm:ss')
|
||||
detaall.value[0] = startTime
|
||||
detaall.value[1] = endTime
|
||||
getrecorddata()
|
||||
}
|
||||
function analysisRecord() {
|
||||
record.value = true
|
||||
gettoday()
|
||||
|
||||
|
||||
}
|
||||
function getrecorddata() {
|
||||
if (detaall.value) {
|
||||
recordform.value.startDate = detaall.value[0]
|
||||
recordform.value.endDate = detaall.value[1]
|
||||
} else {
|
||||
recordform.value.startDate = ''
|
||||
recordform.value.endDate = ''
|
||||
}
|
||||
recordloading.value = true
|
||||
getAlgorithmLogsPage(recordform.value).then((res: any) => {
|
||||
if (res.code == 0) {
|
||||
recordData.value = res.data.records
|
||||
recordtotal.value = res.data.total
|
||||
recordform.value.size = res.data.size
|
||||
recordform.value.current = res.data.current
|
||||
recordloading.value = false
|
||||
}
|
||||
})
|
||||
}
|
||||
//生成处理方案
|
||||
|
||||
const actionData = ref('')
|
||||
const actionloading = ref(false)
|
||||
function getaction() {
|
||||
|
||||
|
||||
axios.get(userStore.pythonUrl + '/application/' + userStore.application_id + '/chat/open', {
|
||||
headers: {
|
||||
'AUTHORIZATION': 'application-2f942bee58ee12591b4a47deebd5b71b'
|
||||
@ -217,7 +264,7 @@ function getaction() {
|
||||
}).then((res: any) => {
|
||||
const object = ref(
|
||||
{
|
||||
message: comainName.value + canshuList.value,
|
||||
message: comainName.value + canshuList.value,
|
||||
re_chat: false,
|
||||
stream: false,
|
||||
}
|
||||
@ -238,6 +285,21 @@ function changeType(val: any) {
|
||||
type.value = val
|
||||
getecharts()
|
||||
}
|
||||
//控制行变色
|
||||
const tableRowClassName = ({
|
||||
row,
|
||||
rowIndex,
|
||||
}: {
|
||||
row: any
|
||||
rowIndex: number
|
||||
}) => {
|
||||
if (rowIndex % 2 === 0) {
|
||||
return 'warning-row'
|
||||
} else if (rowIndex % 2 === 1) {
|
||||
return 'success-row'
|
||||
}
|
||||
return ''
|
||||
}
|
||||
</script>
|
||||
<template>
|
||||
<div class="faulttemplate-box">
|
||||
@ -268,11 +330,13 @@ function changeType(val: any) {
|
||||
<img src="@/assets/navigation/ty_bq.png" alt="">
|
||||
<div>信号/点位折线图</div>
|
||||
<div class="selectdata">
|
||||
<div :class="type==1?'select':''" @click="changeType(1)">近一小时</div>
|
||||
<div :class="type==2?'select':''" @click="changeType(2)">近一天</div>
|
||||
<div :class="type == 1 ? 'select' : ''" @click="changeType(1)">近一小时</div>
|
||||
<div :class="type == 2 ? 'select' : ''" @click="changeType(2)">近一天</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<el-button style="margin-left: 10px;" @click="fenfault()" class="searchButton">故障分析</el-button>
|
||||
<el-button style="margin-left: 10px;" @click="fenfault()" class="searchButton">实时故障分析</el-button>
|
||||
<el-button style="margin-left: 10px;" @click="analysisRecord()"
|
||||
class="searchButton">分析记录</el-button>
|
||||
</div>
|
||||
|
||||
<el-scrollbar :height="parameter.length > 0 ? '70vh' : '85vh'">
|
||||
@ -296,7 +360,7 @@ function changeType(val: any) {
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
</section>
|
||||
<Eldialog v-model="fault" :close-on-click-modal="false" @before-close="fault = false" :title="'故障分析'"
|
||||
<Eldialog v-model="fault" :close-on-click-modal="false" @before-close="fault = false" :title="'实时故障分析'"
|
||||
append-to-body width="1100px" draggable>
|
||||
<template v-slot:PopFrameContent>
|
||||
<div class="tree_title" style="padding: 5px 0px ;">
|
||||
@ -312,41 +376,74 @@ function changeType(val: any) {
|
||||
<img src="@/assets/navigation/ty_bq.png" alt="">
|
||||
<div>分析结果</div>
|
||||
</div>
|
||||
<div class="fixed_params right_botom" style="margin-bottom: 15px;">{{ comainName }}<span>{{
|
||||
<div class="fixed_params right_botom" style="margin-bottom: 15px;">{{ comainName }}<span>{{
|
||||
canshuList ? canshuList : '--' }}</span></div>
|
||||
<div class="tree_title" style="padding: 5px 0px ;">
|
||||
<img src="@/assets/navigation/ty_bq.png" alt="">
|
||||
<div>处理方案</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="fixed_params_right_botom">
|
||||
<el-scrollbar height="400px" v-loading="actionloading" style="margin-top: 10px;">
|
||||
<div v-if="actionData" v-html="processedActionData" ></div>
|
||||
<div v-if="actionData" v-html="processedActionData"></div>
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
</template>
|
||||
</Eldialog>
|
||||
<Eldialog v-model="record" :close-on-click-modal="false" @before-close="record = false" :title="'分析记录'"
|
||||
append-to-body width="1600px" draggable>
|
||||
<template v-slot:PopFrameContent>
|
||||
<div class="cont_top_left">
|
||||
<div style="width: 400px;">
|
||||
<el-date-picker v-model="detaall" type="datetimerange" start-placeholder="开始时间"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" end-placeholder="结束时间" @change="getrecorddata()" />
|
||||
</div>
|
||||
<el-button style="margin-left: 10px;" @click="getrecorddata()" class="searchButton">搜索</el-button>
|
||||
</div>
|
||||
<el-table :data="recordData" :row-class-name="tableRowClassName" class="PatrolMonitoring"
|
||||
v-loading="recordloading" element-loading-background="rgb(11, 40, 34)" highlight-current-row
|
||||
style="width: 99%;margin:auto;position: relative;margin-top: 15px; height:calc(70vh); overflow: auto "
|
||||
:header-cell-style="{ background: '#002b6a', color: '#B5D7FF', height: '50px' }">
|
||||
<el-table-column type="index" label="序号" width="40px" align="center" />
|
||||
<el-table-column property="stationName" width="140px" label="变电站名称" />
|
||||
<el-table-column property="areaName" width="120px" label="区域名称" />
|
||||
<el-table-column property="bayName" width="120px" label="间隔名称" />
|
||||
<el-table-column property="mainDeviceName" width="140px" label="主设备名称" />
|
||||
<el-table-column property="componentName" width="100px" label="部件名称" />
|
||||
<el-table-column property="paramsValue" label="参数详情" />
|
||||
<el-table-column property="description" width="140px" label="分析结果" />
|
||||
<el-table-column property="analysisTime" width="180px" label="分析时间" align="center" />
|
||||
</el-table>
|
||||
<div style="width:100%;display:flex;align-items:center;margin-top:10px;">
|
||||
<Page style="margin:0 auto ;" :total="recordtotal" v-model:size="recordform.size" :jumper="'hide'"
|
||||
v-model:current="recordform.current" @pagination="getrecorddata()"></Page>
|
||||
</div>
|
||||
</template>
|
||||
</Eldialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.selectdata{
|
||||
.selectdata {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
div{
|
||||
|
||||
div {
|
||||
padding: 3px 5px;
|
||||
border: 1px solid #0099ffa2;
|
||||
margin-left: 10px;
|
||||
border-radius: 5px;
|
||||
margin-left: 10px;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.select{
|
||||
|
||||
.select {
|
||||
background-color: #004e978a;
|
||||
color: #0099ff;
|
||||
border: 1px solid #0099ff;
|
||||
}
|
||||
}
|
||||
|
||||
.silderLeft-default {
|
||||
:deep(.el-tree-node__label) {
|
||||
font-size: 16px !important;
|
||||
@ -393,38 +490,47 @@ function changeType(val: any) {
|
||||
|
||||
|
||||
}
|
||||
:deep(.el-scrollbar__view) {
|
||||
color: #e6e6e6;
|
||||
line-height: 1.8;
|
||||
padding: 15px;
|
||||
|
||||
h3 {
|
||||
color: #409EFF;
|
||||
margin: 20px 0 10px;
|
||||
font-size: 18px;
|
||||
border-left: 4px solid #67C23A;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
strong {
|
||||
color: #E6A23C;
|
||||
}
|
||||
.fixed_params_right_botom {
|
||||
:deep(.el-scrollbar__view) {
|
||||
color: #e6e6e6;
|
||||
line-height: 1.8;
|
||||
padding: 15px;
|
||||
|
||||
ul {
|
||||
list-style: square inside;
|
||||
margin: 10px 0;
|
||||
|
||||
li {
|
||||
margin: 8px 0;
|
||||
h3 {
|
||||
color: #409EFF;
|
||||
margin: 20px 0 10px;
|
||||
font-size: 18px;
|
||||
border-left: 4px solid #67C23A;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
strong {
|
||||
color: #E6A23C;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style: square inside;
|
||||
margin: 10px 0;
|
||||
|
||||
li {
|
||||
margin: 8px 0;
|
||||
}
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 20px 0;
|
||||
border: 0;
|
||||
border-top: 1px solid #606266;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 20px 0;
|
||||
border: 0;
|
||||
border-top: 1px solid #606266;
|
||||
}
|
||||
}
|
||||
|
||||
.cont_top_left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
/* 拖动条 */
|
||||
.moveBtn {
|
||||
height: 100%;
|
||||
|
@ -21,6 +21,7 @@ const treedata: any = ref([])
|
||||
const treeRef = ref();
|
||||
const treeId = ref('');
|
||||
const defaultProps = { label: 'dictName' }
|
||||
const dictName = ref('')
|
||||
// 字典弹框
|
||||
const title = ref('');
|
||||
const dialogdict = ref(false);
|
||||
@ -124,7 +125,8 @@ function rowDrop() {
|
||||
// 查询左侧树
|
||||
function getTree() {
|
||||
const params = {
|
||||
dictType: activeName.value
|
||||
dictType: activeName.value,
|
||||
dictName:dictName.value
|
||||
}
|
||||
treeloading.value = true
|
||||
getTreelist(params).then((res) => {
|
||||
@ -437,17 +439,20 @@ const total = ref()
|
||||
<template>
|
||||
<div class="faulttemplate-box">
|
||||
<aside id="silderLeft">
|
||||
<el-tabs :class="useAppStore().size === 'default' ? 'silderLeft-large' : 'silderLeft-default'" v-model="activeName"
|
||||
class="demo-tabs" @tab-click="activeNameChange">
|
||||
<el-tabs :class="useAppStore().size === 'default' ? 'silderLeft-large' : 'silderLeft-default'"
|
||||
v-model="activeName" class="demo-tabs" @tab-click="activeNameChange">
|
||||
<el-tab-pane label="系统配置" name="00"></el-tab-pane>
|
||||
<el-tab-pane label="用户配置" name="01"></el-tab-pane>
|
||||
</el-tabs>
|
||||
<div class="menu-box">
|
||||
<el-button class="searchButton"
|
||||
<el-button class="searchButton"
|
||||
style=" color: #009bff; border: 1px solid #009bff;width:100%;margin-bottom:10px;background-color: #123958;"
|
||||
@click="dictAdd">
|
||||
新增字典</el-button>
|
||||
<el-scrollbar height="calc(77vh)">
|
||||
<el-input v-model="dictName" clearable @change="getTree()" placeholder="请输入方案名称"
|
||||
style="width: 100%;margin-bottom: 10px; ">
|
||||
</el-input>
|
||||
<el-scrollbar height="calc(72vh)">
|
||||
<el-tree v-loading="treeloading" ref="treeRef"
|
||||
:class="useAppStore().size === 'default' ? 'silderLeft-large' : 'silderLeft-default'" node-key="id"
|
||||
:allow-drop="allowDrop" :data="treedata" draggable :highlight-current="true" :props="defaultProps"
|
||||
@ -479,14 +484,14 @@ const total = ref()
|
||||
<el-row>
|
||||
<el-col :span="24" class="top-nav">
|
||||
<div style="margin-bottom:10px">
|
||||
<el-input v-model="querystr.dictName" placeholder="请输入项名称" clearable style="width: 200px;margin-right: 10px;"
|
||||
@clear="init" @keyup.enter="init" />
|
||||
<el-button class="searchButton" type="primary" @click="init">搜索</el-button>
|
||||
<el-input v-model="querystr.dictName" placeholder="请输入项名称" clearable
|
||||
style="width: 200px;margin-right: 10px;" @clear="init" @keyup.enter="init" />
|
||||
<el-button class="searchButton" type="primary" @click="init">搜索</el-button>
|
||||
</div>
|
||||
<div class="left-nav">
|
||||
<el-button class="searchButton" type="primary" @click="addClick()"> 新增</el-button>
|
||||
<el-button class="searchButton" :type="multipleSelection.length > 0 ? 'primary' : ''" :disabled="multipleSelection.length <= 0"
|
||||
@click="delsClick">
|
||||
<el-button class="searchButton" type="primary" @click="addClick()"> 新增</el-button>
|
||||
<el-button class="searchButton" :type="multipleSelection.length > 0 ? 'primary' : ''"
|
||||
:disabled="multipleSelection.length <= 0" @click="delsClick">
|
||||
删除</el-button>
|
||||
</div>
|
||||
</el-col>
|
||||
@ -495,7 +500,7 @@ const total = ref()
|
||||
<el-table v-loading="tableloading" :data="tableData" row-key="id" style="width: 100%;margin-bottom: 20px;height: calc(77vh);
|
||||
overflow: auto;" border @selection-change="handleSelectionChange" default-expand-all
|
||||
:row-class-name="tableRowClassName"
|
||||
:header-cell-style="{ background: '#002b6a', color: '#B5D7FF', height: '50px'}">
|
||||
:header-cell-style="{ background: '#002b6a', color: '#B5D7FF', height: '50px' }">
|
||||
<el-table-column type="selection" width="30" align="center" />
|
||||
<el-table-column prop="orderNo" label="序号" width="50">
|
||||
<template #default="scope">
|
||||
@ -507,7 +512,7 @@ const total = ref()
|
||||
</el-table-column>
|
||||
<el-table-column prop="itemCode" label="项编码" width="160"></el-table-column>
|
||||
<el-table-column prop="dictName" label="项名称"></el-table-column>
|
||||
<el-table-column prop="parentCode" label="父项编码" ></el-table-column>
|
||||
<el-table-column prop="parentCode" label="父项编码"></el-table-column>
|
||||
<el-table-column prop="custom1" label="备注"></el-table-column>
|
||||
<el-table-column fixed="right" label="操作" width="110">
|
||||
<template #default="scope">
|
||||
@ -521,7 +526,8 @@ const total = ref()
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<Page :total="total" v-model:size="querystr.size" v-model:current="querystr.current" @pagination="init()"></Page>
|
||||
<Page :total="total" v-model:size="querystr.size" v-model:current="querystr.current" @pagination="init()">
|
||||
</Page>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@ -563,7 +569,8 @@ const total = ref()
|
||||
<template v-slot:PopFrameContent>
|
||||
<el-form ref="dictInfoRef" :model="dictInfo" label-width="90px" style="margin-top:15px" :rules="rules">
|
||||
<el-form-item label="字典类型">
|
||||
<el-input :value="dictInfo.dictType == '00' ? '系统配置' : '用户配置'" style="width:95%" :disabled="true"></el-input>
|
||||
<el-input :value="dictInfo.dictType == '00' ? '系统配置' : '用户配置'" style="width:95%"
|
||||
:disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="字典编码" prop="dictCode">
|
||||
<el-input v-model="dictInfo.dictCode" style="width:95%" placeholder="请输入字典编码"></el-input>
|
||||
@ -656,7 +663,7 @@ const total = ref()
|
||||
box-sizing: border-box;
|
||||
margin-left: 15px;
|
||||
background: url(@/assets/newimg/cjrw_1890.png);
|
||||
background-size: 100% 100%;
|
||||
background-size: 100% 100%;
|
||||
|
||||
}
|
||||
|
||||
@ -681,6 +688,7 @@ background-size: 100% 100%;
|
||||
-webkit-user-drag: none;
|
||||
}
|
||||
}
|
||||
|
||||
.faulttemplate-box {
|
||||
.is-current .treeediticon {
|
||||
color: #009bff !important;
|
||||
|
@ -15,7 +15,7 @@ export default ({ mode }: ConfigEnv): UserConfig => {
|
||||
// 指定symbolId格式
|
||||
symbolId: 'icon-[dir]-[name]'
|
||||
}),
|
||||
|
||||
|
||||
],
|
||||
// 本地反向代理解决浏览器跨域限制
|
||||
server: {
|
||||
@ -31,6 +31,13 @@ export default ({ mode }: ConfigEnv): UserConfig => {
|
||||
changeOrigin: true,
|
||||
rewrite: path =>
|
||||
path.replace(new RegExp('^' + env.VITE_APP_BASE_API), '')
|
||||
},
|
||||
'/assets': {
|
||||
target: 'http://localhost:3000',
|
||||
headers: {
|
||||
"Access-Control-Allow-Origin": "*",
|
||||
"Access-Control-Allow-Methods": "GET"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -44,7 +51,7 @@ export default ({ mode }: ConfigEnv): UserConfig => {
|
||||
build: {
|
||||
sourcemap: false, // 不生成 source map
|
||||
chunkSizeWarningLimit: 1500,
|
||||
terserOptions: {
|
||||
terserOptions: {
|
||||
compress: { // 打包时清除 console 和 debug 相关代码
|
||||
drop_console: true,
|
||||
drop_debugger: true,
|
||||
@ -52,7 +59,7 @@ export default ({ mode }: ConfigEnv): UserConfig => {
|
||||
},
|
||||
rollupOptions: {
|
||||
output: {
|
||||
assetFileNames: (assetInfo:any) => {
|
||||
assetFileNames: (assetInfo: any) => {
|
||||
var info = assetInfo.name.split('.')
|
||||
var extType = info[info.length - 1]
|
||||
if (
|
||||
|
Loading…
Reference in New Issue
Block a user