完成 电能质量问题管理页面 修改 谐波普测管理页面

This commit is contained in:
GGJ
2024-04-10 20:33:20 +08:00
parent 926112d2a7
commit 071ee4d2b5
23 changed files with 1242 additions and 524 deletions

View File

@@ -17,6 +17,15 @@ export function exportSurveyPlan(data: any) {
responseType: 'blob'
})
}
//删除普测计划
export function deletePlan(data: any) {
return createAxios({
url: '/process-boot/rGeneralSurveyPlan/deletePlan',
method: 'post',
data,
})
}
//新增
export function getGeneratrixByCondition(data: any) {
return createAxios({

View File

@@ -146,3 +146,10 @@ export function existMonitorDeptTree() {
method: 'post'
})
}
// 获取用户
export function getUserByRoleType(data:any) {
return request({
url: '/user-boot/user/getUserByRoleType?roleType=' + data,
method: 'GET'
})
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,866 @@
{
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"properties": { "adcode": 460100, "name": "海口", "center": [110.33119, 20.031971], "centroid": [110.422966, 19.852113], "childrenNum": 4, "level": "city", "parent": { "adcode": 460000 }, "subFeatureIndex": 0, "acroutes": [100000, 460000] },
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[110.106525, 20.026851],
[110.161895, 19.977693],
[110.143932, 19.889106],
[110.186246, 19.864193],
[110.228283, 19.753767],
[110.208468, 19.716679],
[110.222357, 19.67974],
[110.262449, 19.687318],
[110.314208, 19.697421],
[110.340041, 19.720625],
[110.393373, 19.698053],
[110.372633, 19.654004],
[110.401151, 19.606626],
[110.455687, 19.574559],
[110.486705, 19.593357],
[110.519297, 19.563341],
[110.540223, 19.535532],
[110.611518, 19.526841],
[110.641333, 19.549122],
[110.636148, 19.593989],
[110.672814, 19.647214],
[110.623463, 19.664109],
[110.623, 19.735461],
[110.670314, 19.812776],
[110.704665, 19.805992],
[110.699573, 19.861512],
[110.676147, 19.860092],
[110.675314, 19.907868],
[110.634666, 19.965401],
[110.598, 19.98305],
[110.526612, 20.075206],
[110.495039, 20.077253],
[110.387355, 20.11347],
[110.318467, 20.109061],
[110.293282, 20.059614],
[110.24319, 20.077568],
[110.144395, 20.074418],
[110.106525, 20.026851]
]
]
]
}
}, {
"type": "Feature",
"properties": { "adcode": 460200, "name": "三亚", "center": [109.508268, 18.247872], "centroid": [109.421656, 18.362263], "childrenNum": 4, "level": "city", "parent": { "adcode": 460000 }, "subFeatureIndex": 1, "acroutes": [100000, 460000] },
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[108.932374, 18.335288],
[108.956448, 18.307433],
[109.006632, 18.323032],
[109.108298, 18.323828],
[109.138668, 18.267791],
[109.174686, 18.260149],
[109.28811, 18.264925],
[109.355887, 18.214922],
[109.441349, 18.199153],
[109.4632, 18.177171],
[109.527366, 18.169046],
[109.561718, 18.143554],
[109.63792, 18.171595],
[109.72616, 18.177808],
[109.749863, 18.19326],
[109.783381, 18.337516],
[109.805418, 18.347543],
[109.785048, 18.426622],
[109.809955, 18.459388],
[109.781159, 18.51107],
[109.725234, 18.493102],
[109.710882, 18.426462],
[109.665883, 18.391462],
[109.539866, 18.396713],
[109.515607, 18.429008],
[109.536996, 18.490717],
[109.535237, 18.53142],
[109.506163, 18.551291],
[109.423386, 18.574657],
[109.405146, 18.623443],
[109.332832, 18.575451],
[109.313295, 18.517429],
[109.246537, 18.558921],
[109.203574, 18.553517],
[109.185056, 18.507095],
[109.195148, 18.469407],
[109.072557, 18.452231],
[109.015243, 18.422645],
[108.932374, 18.335288]
]
]
]
}
},
{
"type": "Feature",
"properties": { "adcode": 460400, "name": "儋州", "center": [109.576782, 19.517486], "centroid": [109.390059, 19.579264], "childrenNum": 0, "level": "city", "parent": { "adcode": 460000 }, "subFeatureIndex": 3, "acroutes": [100000, 460000] },
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[108.928671, 19.524313],
[108.939596, 19.497287],
[108.982744, 19.477213],
[108.997373, 19.431522],
[109.04478, 19.430415],
[109.051447, 19.487803],
[109.117557, 19.46757],
[109.13052, 19.479584],
[109.178389, 19.399262],
[109.26774, 19.376803],
[109.318943, 19.398155],
[109.384035, 19.355448],
[109.424405, 19.354815],
[109.457275, 19.39942],
[109.483848, 19.406063],
[109.506348, 19.359561],
[109.468386, 19.301178],
[109.541625, 19.311939],
[109.587365, 19.243249],
[109.611995, 19.252589],
[109.634031, 19.20256],
[109.673105, 19.207627],
[109.686994, 19.178965],
[109.706808, 19.22156],
[109.697271, 19.271267],
[109.713382, 19.309881],
[109.700234, 19.349436],
[109.647272, 19.357505],
[109.646439, 19.402425],
[109.737734, 19.407486],
[109.751993, 19.416974],
[109.728197, 19.496023],
[109.760048, 19.528895],
[109.7694, 19.578508],
[109.709308, 19.57756],
[109.659402, 19.611048],
[109.664216, 19.629685],
[109.582921, 19.637581],
[109.557366, 19.697421],
[109.599402, 19.730726],
[109.569218, 19.797947],
[109.564588, 19.854888],
[109.498663, 19.873339],
[109.410794, 19.895256],
[109.349591, 19.898724],
[109.30811, 19.9178],
[109.264592, 19.90503],
[109.255611, 19.867189],
[109.218574, 19.855834],
[109.15913, 19.790689],
[109.169501, 19.736724],
[109.147649, 19.704998],
[109.093668, 19.689844],
[109.048576, 19.620051],
[108.993392, 19.586723],
[108.928671, 19.524313]
]
]
]
}
}, {
"type": "Feature",
"properties": { "adcode": 469001, "name": "五指山", "center": [109.516662, 18.776921], "centroid": [109.511892, 18.824035], "childrenNum": 0, "level": "city", "parent": { "adcode": 460000 }, "subFeatureIndex": 4, "acroutes": [100000, 460000] },
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[109.715419, 18.833686],
[109.699123, 18.889379],
[109.730512, 18.913649],
[109.676531, 18.925862],
[109.601532, 18.910318],
[109.55357, 18.946321],
[109.524033, 19.030986],
[109.468386, 19.032254],
[109.456349, 18.995635],
[109.424775, 18.990403],
[109.367739, 18.936171],
[109.34848, 18.946321],
[109.32635, 18.926338],
[109.343109, 18.877163],
[109.374591, 18.853998],
[109.353387, 18.812896],
[109.356628, 18.710653],
[109.398109, 18.671104],
[109.408016, 18.627733],
[109.448293, 18.655378],
[109.48857, 18.64664],
[109.539866, 18.659508],
[109.533662, 18.694295],
[109.576717, 18.714782],
[109.619865, 18.678252],
[109.641809, 18.72304],
[109.703012, 18.721769],
[109.681531, 18.786071],
[109.689216, 18.830036],
[109.715419, 18.833686]
]
]
]
}
}, {
"type": "Feature",
"properties": { "adcode": 469002, "name": "琼海", "center": [110.466785, 19.246011], "centroid": [110.421962, 19.210377], "childrenNum": 0, "level": "city", "parent": { "adcode": 460000 }, "subFeatureIndex": 5, "acroutes": [100000, 460000] },
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[110.610593, 19.084394],
[110.619296, 19.152041],
[110.676703, 19.286302],
[110.706517, 19.320167],
[110.730035, 19.378859],
[110.633555, 19.391354],
[110.604574, 19.350386],
[110.584111, 19.367787],
[110.581426, 19.419504],
[110.546242, 19.46836],
[110.504853, 19.46836],
[110.484761, 19.443223],
[110.450317, 19.447492],
[110.423928, 19.413495],
[110.368744, 19.391829],
[110.327356, 19.315261],
[110.3593, 19.298646],
[110.344392, 19.228368],
[110.300226, 19.21586],
[110.224857, 19.221718],
[110.170598, 19.191317],
[110.150876, 19.208419],
[110.115229, 19.133191],
[110.124118, 19.04747],
[110.158562, 18.99944],
[110.229579, 19.002452],
[110.249949, 18.976292],
[110.465039, 19.074411],
[110.477539, 19.096912],
[110.521797, 19.102932],
[110.610593, 19.084394]
]
]
]
}
}, {
"type": "Feature",
"properties": { "adcode": 469005, "name": "文昌", "center": [110.753975, 19.612986], "centroid": [110.788535, 19.747363], "childrenNum": 0, "level": "city", "parent": { "adcode": 460000 }, "subFeatureIndex": 6, "acroutes": [100000, 460000] },
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[110.730035, 19.378859],
[110.781053, 19.395783],
[110.844015, 19.450179],
[110.920774, 19.552598],
[111.008921, 19.60394],
[111.071327, 19.628895],
[111.044013, 19.763551],
[111.013643, 19.850472],
[110.969569, 20.010151],
[110.940959, 20.028583],
[110.871515, 20.011569],
[110.808738, 20.035672],
[110.778368, 20.068276],
[110.744665, 20.073946],
[110.717258, 20.148734],
[110.687073, 20.16353],
[110.655685, 20.134409],
[110.56226, 20.109691],
[110.526612, 20.075206],
[110.598, 19.98305],
[110.634666, 19.965401],
[110.675314, 19.907868],
[110.676147, 19.860092],
[110.699573, 19.861512],
[110.704665, 19.805992],
[110.670314, 19.812776],
[110.623, 19.735461],
[110.623463, 19.664109],
[110.672814, 19.647214],
[110.636148, 19.593989],
[110.641333, 19.549122],
[110.611518, 19.526841],
[110.540223, 19.535532],
[110.519297, 19.563341],
[110.469854, 19.531424],
[110.485779, 19.502345],
[110.520594, 19.509931],
[110.546242, 19.46836],
[110.581426, 19.419504],
[110.584111, 19.367787],
[110.604574, 19.350386],
[110.633555, 19.391354],
[110.730035, 19.378859]
]
]
]
}
}, {
"type": "Feature",
"properties": { "adcode": 469006, "name": "万宁", "center": [110.388793, 18.796216], "centroid": [110.324496, 18.830445], "childrenNum": 0, "level": "city", "parent": { "adcode": 460000 }, "subFeatureIndex": 7, "acroutes": [100000, 460000] },
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[110.158562, 18.99944],
[110.108284, 18.944577],
[110.097729, 18.911746],
[110.045322, 18.884778],
[110.095785, 18.811467],
[110.057267, 18.758448],
[110.014952, 18.732885],
[110.020786, 18.658873],
[110.115877, 18.592774],
[110.137543, 18.606123],
[110.213931, 18.578789],
[110.246246, 18.609619],
[110.329393, 18.642509],
[110.36754, 18.632182],
[110.495316, 18.649976],
[110.500779, 18.752732],
[110.577908, 18.784642],
[110.590593, 18.839082],
[110.585871, 18.897786],
[110.610593, 19.084394],
[110.521797, 19.102932],
[110.477539, 19.096912],
[110.465039, 19.074411],
[110.249949, 18.976292],
[110.229579, 19.002452],
[110.158562, 18.99944]
]
]
]
}
}, {
"type": "Feature",
"properties": { "adcode": 469007, "name": "东方", "center": [108.653789, 19.10198], "centroid": [108.818801, 18.996184], "childrenNum": 0, "level": "city", "parent": { "adcode": 460000 }, "subFeatureIndex": 8, "acroutes": [100000, 460000] },
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[109.125242, 18.878432],
[109.089779, 18.909842],
[109.113668, 18.969949],
[109.098853, 19.028291],
[109.008762, 19.050005],
[109.022929, 19.107052],
[108.99191, 19.13034],
[108.954874, 19.218869],
[108.916171, 19.218552],
[108.833209, 19.25987],
[108.783765, 19.244674],
[108.704136, 19.262719],
[108.644785, 19.349278],
[108.605712, 19.264619],
[108.591082, 19.141587],
[108.598305, 19.055869],
[108.630434, 19.003086],
[108.637841, 18.924593],
[108.595619, 18.872086],
[108.593212, 18.809404],
[108.659785, 18.716846],
[108.761543, 18.732091],
[108.81145, 18.720022],
[108.844412, 18.750827],
[108.928578, 18.790198],
[108.987003, 18.786547],
[109.015151, 18.808928],
[109.071076, 18.807499],
[109.094965, 18.857012],
[109.125242, 18.878432]
]
]
]
}
}, {
"type": "Feature",
"properties": { "adcode": 469021, "name": "定安", "center": [110.349235, 19.684966], "centroid": [110.312936, 19.483405], "childrenNum": 0, "level": "city", "parent": { "adcode": 460000 }, "subFeatureIndex": 9, "acroutes": [100000, 460000] },
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[110.224857, 19.221718],
[110.300226, 19.21586],
[110.344392, 19.228368],
[110.3593, 19.298646],
[110.327356, 19.315261],
[110.368744, 19.391829],
[110.423928, 19.413495],
[110.450317, 19.447492],
[110.484761, 19.443223],
[110.504853, 19.46836],
[110.546242, 19.46836],
[110.520594, 19.509931],
[110.485779, 19.502345],
[110.469854, 19.531424],
[110.519297, 19.563341],
[110.486705, 19.593357],
[110.455687, 19.574559],
[110.401151, 19.606626],
[110.372633, 19.654004],
[110.393373, 19.698053],
[110.340041, 19.720625],
[110.314208, 19.697421],
[110.262449, 19.687318],
[110.221616, 19.629843],
[110.186524, 19.636791],
[110.160784, 19.67153],
[110.13134, 19.648003],
[110.137266, 19.56034],
[110.192172, 19.58925],
[110.196339, 19.535374],
[110.243005, 19.517675],
[110.227727, 19.450654],
[110.194024, 19.455871],
[110.164487, 19.426146],
[110.165691, 19.361459],
[110.188283, 19.306242],
[110.228098, 19.301969],
[110.224857, 19.221718]
]
]
]
}
}, {
"type": "Feature",
"properties": { "adcode": 469022, "name": "屯昌", "center": [110.102773, 19.362916], "centroid": [110.055723, 19.342208], "childrenNum": 0, "level": "city", "parent": { "adcode": 460000 }, "subFeatureIndex": 10, "acroutes": [100000, 460000] },
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[110.115229, 19.133191],
[110.150876, 19.208419],
[110.170598, 19.191317],
[110.224857, 19.221718],
[110.228098, 19.301969],
[110.188283, 19.306242],
[110.165691, 19.361459],
[110.164487, 19.426146],
[110.194024, 19.455871],
[110.227727, 19.450654],
[110.243005, 19.517675],
[110.196339, 19.535374],
[110.192172, 19.58925],
[110.137266, 19.56034],
[110.101803, 19.54928],
[110.119488, 19.503293],
[110.072081, 19.492071],
[110.045785, 19.456029],
[110.020508, 19.485432],
[109.938287, 19.485749],
[109.94699, 19.468044],
[109.914583, 19.42409],
[109.912917, 19.391671],
[109.876436, 19.386926],
[109.826436, 19.343108],
[109.822733, 19.289626],
[109.923565, 19.239608],
[109.957638, 19.188625],
[110.026526, 19.17564],
[110.057267, 19.134617],
[110.115229, 19.133191]
]
]
]
}
}, {
"type": "Feature",
"properties": { "adcode": 469023, "name": "澄迈", "center": [110.007147, 19.737095], "centroid": [109.990417, 19.700201], "childrenNum": 0, "level": "city", "parent": { "adcode": 460000 }, "subFeatureIndex": 11, "acroutes": [100000, 460000] },
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[110.137266, 19.56034],
[110.13134, 19.648003],
[110.160784, 19.67153],
[110.186524, 19.636791],
[110.221616, 19.629843],
[110.262449, 19.687318],
[110.222357, 19.67974],
[110.208468, 19.716679],
[110.228283, 19.753767],
[110.186246, 19.864193],
[110.143932, 19.889106],
[110.161895, 19.977693],
[110.106525, 20.026851],
[109.997638, 19.979899],
[109.965231, 19.993608],
[109.855047, 19.984153],
[109.879491, 19.885322],
[109.842269, 19.871446],
[109.884121, 19.853311],
[109.874306, 19.799524],
[109.897084, 19.77933],
[109.852732, 19.652582],
[109.786437, 19.608047],
[109.7694, 19.578508],
[109.760048, 19.528895],
[109.728197, 19.496023],
[109.751993, 19.416974],
[109.737734, 19.407486],
[109.793474, 19.379966],
[109.857269, 19.412388],
[109.876436, 19.386926],
[109.912917, 19.391671],
[109.914583, 19.42409],
[109.94699, 19.468044],
[109.938287, 19.485749],
[110.020508, 19.485432],
[110.045785, 19.456029],
[110.072081, 19.492071],
[110.119488, 19.503293],
[110.101803, 19.54928],
[110.137266, 19.56034]
]
]
]
}
}, {
"type": "Feature",
"properties": { "adcode": 469024, "name": "临高", "center": [109.687697, 19.908293], "centroid": [109.71548, 19.809704], "childrenNum": 0, "level": "city", "parent": { "adcode": 460000 }, "subFeatureIndex": 12, "acroutes": [100000, 460000] },
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[109.855047, 19.984153],
[109.814307, 19.992977],
[109.761715, 19.981317],
[109.712271, 20.017398],
[109.585328, 19.98825],
[109.526626, 19.943494],
[109.498663, 19.873339],
[109.564588, 19.854888],
[109.569218, 19.797947],
[109.599402, 19.730726],
[109.557366, 19.697421],
[109.582921, 19.637581],
[109.664216, 19.629685],
[109.659402, 19.611048],
[109.709308, 19.57756],
[109.7694, 19.578508],
[109.786437, 19.608047],
[109.852732, 19.652582],
[109.897084, 19.77933],
[109.874306, 19.799524],
[109.884121, 19.853311],
[109.842269, 19.871446],
[109.879491, 19.885322],
[109.855047, 19.984153]
]
]
]
}
}, {
"type": "Feature",
"properties": { "adcode": 469025, "name": "白沙", "center": [109.452606, 19.224584], "centroid": [109.351743, 19.20989], "childrenNum": 0, "level": "city", "parent": { "adcode": 460000 }, "subFeatureIndex": 13, "acroutes": [100000, 460000] },
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[109.298203, 18.960911],
[109.34848, 18.946321],
[109.367739, 18.936171],
[109.424775, 18.990403],
[109.456349, 18.995635],
[109.468386, 19.032254],
[109.524033, 19.030986],
[109.561347, 19.072668],
[109.601439, 19.053492],
[109.613569, 19.086454],
[109.687734, 19.118775],
[109.686994, 19.178965],
[109.673105, 19.207627],
[109.634031, 19.20256],
[109.611995, 19.252589],
[109.587365, 19.243249],
[109.541625, 19.311939],
[109.468386, 19.301178],
[109.506348, 19.359561],
[109.483848, 19.406063],
[109.457275, 19.39942],
[109.424405, 19.354815],
[109.384035, 19.355448],
[109.318943, 19.398155],
[109.26774, 19.376803],
[109.178389, 19.399262],
[109.13052, 19.479584],
[109.117557, 19.46757],
[109.051447, 19.487803],
[109.04478, 19.430415],
[109.043669, 19.342792],
[109.08265, 19.328869],
[109.142834, 19.265727],
[109.120242, 19.203985],
[109.163667, 19.14222],
[109.177093, 19.083443],
[109.271166, 19.067438],
[109.298203, 18.960911]
]
]
]
}
}, {
"type": "Feature",
"properties": { "adcode": 469026, "name": "昌江", "center": [109.053351, 19.260968], "centroid": [108.993675, 19.226048], "childrenNum": 0, "level": "city", "parent": { "adcode": 460000 }, "subFeatureIndex": 14, "acroutes": [100000, 460000] },
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[109.04478, 19.430415],
[108.997373, 19.431522],
[108.982744, 19.477213],
[108.939596, 19.497287],
[108.928671, 19.524313],
[108.887004, 19.4897],
[108.806357, 19.450654],
[108.747654, 19.391671],
[108.694137, 19.387084],
[108.644785, 19.349278],
[108.704136, 19.262719],
[108.783765, 19.244674],
[108.833209, 19.25987],
[108.916171, 19.218552],
[108.954874, 19.218869],
[108.99191, 19.13034],
[109.022929, 19.107052],
[109.008762, 19.050005],
[109.098853, 19.028291],
[109.113668, 18.969949],
[109.089779, 18.909842],
[109.125242, 18.878432],
[109.141816, 18.904449],
[109.206722, 18.894772],
[109.265518, 18.905877],
[109.298203, 18.960911],
[109.271166, 19.067438],
[109.177093, 19.083443],
[109.163667, 19.14222],
[109.120242, 19.203985],
[109.142834, 19.265727],
[109.08265, 19.328869],
[109.043669, 19.342792],
[109.04478, 19.430415]
]
]
]
}
}, {
"type": "Feature",
"properties": { "adcode": 469027, "name": "乐东", "center": [109.175444, 18.74758], "centroid": [109.029671, 18.639822], "childrenNum": 0, "level": "city", "parent": { "adcode": 460000 }, "subFeatureIndex": 15, "acroutes": [100000, 460000] },
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[109.405146, 18.623443],
[109.408016, 18.627733],
[109.398109, 18.671104],
[109.356628, 18.710653],
[109.353387, 18.812896],
[109.374591, 18.853998],
[109.343109, 18.877163],
[109.32635, 18.926338],
[109.34848, 18.946321],
[109.298203, 18.960911],
[109.265518, 18.905877],
[109.206722, 18.894772],
[109.141816, 18.904449],
[109.125242, 18.878432],
[109.094965, 18.857012],
[109.071076, 18.807499],
[109.015151, 18.808928],
[108.987003, 18.786547],
[108.928578, 18.790198],
[108.844412, 18.750827],
[108.81145, 18.720022],
[108.761543, 18.732091],
[108.659785, 18.716846],
[108.664137, 18.673328],
[108.641082, 18.565279],
[108.644971, 18.486741],
[108.658304, 18.462728],
[108.70997, 18.444119],
[108.776728, 18.442051],
[108.881264, 18.416599],
[108.932374, 18.335288],
[109.015243, 18.422645],
[109.072557, 18.452231],
[109.195148, 18.469407],
[109.185056, 18.507095],
[109.203574, 18.553517],
[109.246537, 18.558921],
[109.313295, 18.517429],
[109.332832, 18.575451],
[109.405146, 18.623443]
]
]
]
}
}, {
"type": "Feature",
"properties": { "adcode": 469028, "name": "陵水", "center": [110.037218, 18.505006], "centroid": [109.951436, 18.549546], "childrenNum": 0, "level": "city", "parent": { "adcode": 460000 }, "subFeatureIndex": 16, "acroutes": [100000, 460000] },
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[110.014952, 18.732885],
[109.980416, 18.76718],
[109.94412, 18.771942],
[109.902361, 18.739395],
[109.891065, 18.754479],
[109.830696, 18.728597],
[109.773474, 18.809404],
[109.756159, 18.788928],
[109.771993, 18.723675],
[109.802177, 18.725263],
[109.839677, 18.67857],
[109.804677, 18.594364],
[109.846621, 18.57116],
[109.828751, 18.511229],
[109.781159, 18.51107],
[109.809955, 18.459388],
[109.785048, 18.426622],
[109.805418, 18.347543],
[109.919676, 18.375551],
[109.999767, 18.359797],
[110.070785, 18.376187],
[110.090507, 18.399258],
[110.116618, 18.506618],
[110.213931, 18.578789],
[110.137543, 18.606123],
[110.115877, 18.592774],
[110.020786, 18.658873],
[110.014952, 18.732885]
]
]
]
}
}, {
"type": "Feature",
"properties": { "adcode": 469029, "name": "保亭", "center": [109.70245, 18.636371], "centroid": [109.650759, 18.589686], "childrenNum": 0, "level": "city", "parent": { "adcode": 460000 }, "subFeatureIndex": 17, "acroutes": [100000, 460000] },
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[109.715419, 18.833686],
[109.689216, 18.830036],
[109.681531, 18.786071],
[109.703012, 18.721769],
[109.641809, 18.72304],
[109.619865, 18.678252],
[109.576717, 18.714782],
[109.533662, 18.694295],
[109.539866, 18.659508],
[109.48857, 18.64664],
[109.448293, 18.655378],
[109.408016, 18.627733],
[109.405146, 18.623443],
[109.423386, 18.574657],
[109.506163, 18.551291],
[109.535237, 18.53142],
[109.536996, 18.490717],
[109.515607, 18.429008],
[109.539866, 18.396713],
[109.665883, 18.391462],
[109.710882, 18.426462],
[109.725234, 18.493102],
[109.781159, 18.51107],
[109.828751, 18.511229],
[109.846621, 18.57116],
[109.804677, 18.594364],
[109.839677, 18.67857],
[109.802177, 18.725263],
[109.771993, 18.723675],
[109.756159, 18.788928],
[109.773474, 18.809404],
[109.715419, 18.833686]
]
]
]
}
}, {
"type": "Feature",
"properties": { "adcode": 469030, "name": "琼中", "center": [109.839996, 19.03557], "centroid": [109.854584, 19.033919], "childrenNum": 0, "level": "city", "parent": { "adcode": 460000 }, "subFeatureIndex": 18, "acroutes": [100000, 460000] },
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[109.876436, 19.386926],
[109.857269, 19.412388],
[109.793474, 19.379966],
[109.737734, 19.407486],
[109.646439, 19.402425],
[109.647272, 19.357505],
[109.700234, 19.349436],
[109.713382, 19.309881],
[109.697271, 19.271267],
[109.706808, 19.22156],
[109.686994, 19.178965],
[109.687734, 19.118775],
[109.613569, 19.086454],
[109.601439, 19.053492],
[109.561347, 19.072668],
[109.524033, 19.030986],
[109.55357, 18.946321],
[109.601532, 18.910318],
[109.676531, 18.925862],
[109.730512, 18.913649],
[109.699123, 18.889379],
[109.715419, 18.833686],
[109.773474, 18.809404],
[109.830696, 18.728597],
[109.891065, 18.754479],
[109.902361, 18.739395],
[109.94412, 18.771942],
[109.980416, 18.76718],
[110.014952, 18.732885],
[110.057267, 18.758448],
[110.095785, 18.811467],
[110.045322, 18.884778],
[110.097729, 18.911746],
[110.108284, 18.944577],
[110.158562, 18.99944],
[110.124118, 19.04747],
[110.115229, 19.133191],
[110.057267, 19.134617],
[110.026526, 19.17564],
[109.957638, 19.188625],
[109.923565, 19.239608],
[109.822733, 19.289626],
[109.826436, 19.343108],
[109.876436, 19.386926]
]
]
]
}
}
]
}

View File

@@ -10,7 +10,7 @@
import { onBeforeUnmount, ref, watch, onMounted, defineEmits } from 'vue'
import * as echarts from 'echarts4'
import { useDictData } from '@/stores/dictData'
const dictData = useDictData()
const dictData = useDictData()
const props = defineProps(['options'])
const myCharts = ref()
const showCircle = ref(false)
@@ -29,7 +29,8 @@ const GetEchar = async (name: string) => {
let chartDom = document.getElementById('chartMap')
myCharts.value?.dispose()
myCharts.value = echarts.init(chartDom)
name == '中国' ? (showCircle.value = false) : (showCircle.value = true)
name == dictData.state.area?.[0].name ? (showCircle.value = false) : (showCircle.value = true)
echarts.registerMap(name, await fetchConfig(name)) //注册可用的地图
let option = {
@@ -156,7 +157,8 @@ const GetEchar = async (name: string) => {
// 点击事件
myCharts.value.off('click')
myCharts.value.on('click', (e: any) => {
if (name == '中国' && e.componentIndex == 0) {
// if (name == dictData.state.area?.[0].name && e.componentIndex == 0) {
if (name == '中国' && e.componentIndex == 0) {
MapReturn(e.name)
// console.log('🚀 ~ file: MyEchartMap.vue:156 ~ myCharts.value.on ~ MapReturn(e.name):', MapReturn(e.name))

View File

@@ -31,7 +31,7 @@
ref='treeRef'
:props='defaultProps'
highlight-current
default-expand-all
:filter-node-method='filterNode'
node-key='id'
v-bind='$attrs'

View File

@@ -130,8 +130,7 @@
}
}
.el-select,
.el-input {
.el-select {
min-width: 200px;
}
@@ -182,7 +181,8 @@
cursor: pointer;
}
.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner {
background-color: var(--el-checkbox-checked-bg-color);
.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner,
.el-radio__input.is-disabled.is-checked .el-radio__inner {
background-color: var(--el-color-primary);
opacity: 0.6;
}

View File

@@ -1,45 +1,54 @@
<template>
<div>
<div>
<TableHeader area datePicker ref="TableHeaderRef">
<template #select>
<el-form-item label="问题来源">
<el-select
v-model="tableStore.table.params.problemSources"
clearable
placeholder="请选择问题来源"
>
<el-option
v-for="item in problemData"
:key="item.code"
:label="item.name"
:value="item.code"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="填报进度">
<el-select v-model="tableStore.table.params.reportProcess" clearable placeholder="请选择填报进度">
<el-option
v-for="item in fillingProgress"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<TableHeader area datePicker ref="TableHeaderRef">
<template #select>
<el-form-item label="问题来源">
<el-select v-model="tableStore.table.params.problemSources" clearable placeholder="请选择问题来源">
<el-option
v-for="item in problemData"
:key="item.code"
:label="item.name"
:value="item.code"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="填报进度">
<el-select v-model="tableStore.table.params.reportProcess" clearable placeholder="请选择填报进度">
<el-option
v-for="item in fillingProgress"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="问题名称">
<el-input
v-model="tableStore.table.params.problemName"
clearable
placeholder="请输入问题名称"
style="width: 100%"
></el-input>
</el-form-item>
</template>
</TableHeader>
<Table ref="tableRef" />
</div>
<el-form-item label="问题名称">
<el-input
v-model="tableStore.table.params.problemName"
clearable
placeholder="请输入问题名称"
style="width: 100%"
></el-input>
</el-form-item>
</template>
</TableHeader>
<Table ref="tableRef" />
<!-- 审核 -->
<el-dialog draggable title="问题审核" v-model="dialogVisible" width="1400px" :before-close="beforeClose">
<Filling
ref="FillingRef"
v-if="dialogVisible"
:isDisabled="true"
:audit="true"
:flag="true"
@beforeClose="beforeClose"
/>
</el-dialog>
<!-- 审核记录 -->
<recording ref="recordingRef" />
</div>
</template>
<script setup lang="ts">
@@ -47,23 +56,25 @@ import { ref, onMounted, provide, nextTick } from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { mainHeight } from '@/utils/layout'
import { useDictData } from '@/stores/dictData'
import { addUse, updateUse, removeUse } from '@/api/advance-boot/bearingCapacity'
import Filling from './filling.vue'
import recording from './recording.vue'
const dictData = useDictData()
const problemData = dictData.getBasicData('Problem_Sources')
const fillingProgress = dictData.getBasicData('Fill_Progress')
const TableHeaderRef = ref()
const FillingRef = ref()
const ruleFormRef = ref()
const list: any = ref({})
const recordingRef = ref(false)
const dialogVisible = ref(false)
const tableStore = new TableStore({
url: '/process-boot/electricityQuality/getIssues',
publicHeight: 65,
method: 'POST',
column: [
// { width: '60', type: 'checkbox' },
{
field: 'index',
title: '序号',
@@ -99,7 +110,13 @@ const tableStore = new TableStore({
type: 'primary',
icon: 'el-icon-Plus',
render: 'basicButton',
click: async row => {}
click: async row => {
dialogVisible.value = true
setTimeout(() => {
list.value = row
FillingRef.value.open(row)
}, 10)
}
},
{
name: 'edit',
@@ -107,7 +124,9 @@ const tableStore = new TableStore({
type: 'primary',
icon: 'el-icon-Plus',
render: 'basicButton',
click: async row => {}
click: async row => {
recordingRef.value.open(row)
}
}
]
}
@@ -124,7 +143,12 @@ tableStore.table.params.reportProcess = ''
tableStore.table.params.problemName = ''
tableStore.table.params.reportProcessStatus = 'Auditt'
const beforeClose = () => {
tableStore.index()
dialogVisible.value = false
}
provide('tableStore', tableStore)
onMounted(() => {
tableStore.index()
})

View File

@@ -166,7 +166,7 @@
</el-form>
</el-tab-pane>
<el-tab-pane label="流程" name="2">
<Filling v-if="dialogVisible" :isDisabled="true" ref="FillingRef" />
<Filling v-if="dialogVisible" :isDisabled="true" :audit="true" ref="FillingRef" />
</el-tab-pane>
</el-tabs>
</el-dialog>

View File

@@ -72,10 +72,37 @@
@handleClose="handleClose"
/>
<!-- 填报 -->
<div style="display: flex; justify-content: center; margin-top: 10px" v-show="!disabled">
<el-button type="primary" @click="Submit">提交审核</el-button>
<el-button @click="handleClose">取消</el-button>
</div>
<!-- 审核 -->
<el-form
label-width="100px"
:model="form"
ref="ruleFormRef"
:rules="rules"
v-if="disabled && audit && flag && control == active"
>
<el-form-item prop="checkComment" label="审核意见:">
<el-input
type="textarea"
style="width: 400px"
:autosize="{ minRows: 2, maxRows: 4 }"
placeholder="请输入内容"
v-model="form.checkComment"
></el-input>
</el-form-item>
</el-form>
<div
style="display: flex; justify-content: center; margin-top: 10px"
v-if="disabled && audit && flag && control == active"
>
<el-button type="primary" @click="adopt(1)">通过</el-button>
<el-button type="primary" @click="adopt(0)">不通过</el-button>
<el-button @click="handleClose">取消</el-button>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue'
@@ -84,11 +111,13 @@ import process1 from './process1.vue'
import process2 from './process2.vue'
import process3 from './process3.vue'
import process4 from './process4.vue'
import { ElMessage } from 'element-plus'
import {
getAbnormalDetail,
getComplaintDetail,
getGeneralSurveyDetail,
getExcessiveDetail
getExcessiveDetail,
checkPowerQuality
} from '@/api/process-boot/electricitymanagement'
const emit = defineEmits(['beforeClose'])
const dictData = useDictData()
@@ -96,18 +125,31 @@ const addData: any = ref({})
const List: any = ref({})
const active = ref(4)
const control = ref()
const ruleFormRef = ref()
const stepTitle = ['原因分析', '计划整改措施', '实际采取措施', '成效分析']
const process0Ref = ref()
const process1Ref = ref()
const process2Ref = ref()
const process3Ref = ref()
const form = ref({
checkComment: ''
})
const disabled = ref(false)
const prop = defineProps({
isDisabled: {
type: Boolean,
default: false
},
audit: {
type: Boolean,
default: false
},
flag: {
type: Boolean,
default: false
}
})
const problemData = dictData.getBasicData('Problem_Sources')
const open = async (row: any) => {
addData.value = row
@@ -124,7 +166,6 @@ const open = async (row: any) => {
setTimeout(() => {
List.value = res.data
if (res.data.filePathYyfx == null) {
active.value = 0
} else if (res.data.filePathJhzg == null) {
@@ -143,9 +184,18 @@ const open = async (row: any) => {
active.value = 2
}
}
// 审核判断
if (prop.audit) {
active.value == 0 ? 0 : (active.value = active.value - 1)
}
control.value = active.value == 4 ? 3 : active.value
}, 0)
}
const rules = {
checkComment: [{ required: true, message: '请输入审核意见', trigger: 'blur' }]
}
const step = (e: number) => {
if (active.value >= e) {
@@ -176,8 +226,31 @@ const Submit = () => {
}
// 取消
const handleClose = () => {
form.value.checkComment = ''
emit('beforeClose')
}
// 审核
const adopt = (type: number) => {
ruleFormRef.value.validate((valid: any) => {
if (valid) {
const adminInfo = window.localStorage.getItem('adminInfo')
const adminName = adminInfo ? JSON.parse(adminInfo).name : ''
checkPowerQuality({
checkComment: form.value.checkComment,
checkPerson: adminName,
checkResult: type,
powerQualityProblemNo: addData.value.powerQualityProblemNo,
reportProcess: addData.value.reportProcess
}).then((res: any) => {
ElMessage.success(res.message)
handleClose()
})
}
})
}
defineExpose({ open })
</script>
<style lang="scss" scoped>

View File

@@ -15,9 +15,9 @@
<el-select v-model="tableStore.table.params.reportProcess" clearable placeholder="请选择填报进度">
<el-option
v-for="item in fillingProgress"
:key="item.id"
:key="item.code"
:label="item.name"
:value="item.id"
:value="item.code"
></el-option>
</el-select>
</el-form-item>
@@ -25,9 +25,9 @@
<el-select v-model="tableStore.table.params.reportProcessStatus" clearable placeholder="请选择审核状态">
<el-option
v-for="item in auditStatus"
:key="item.id"
:key="item.code"
:label="item.name"
:value="item.id"
:value="item.code"
></el-option>
</el-select>
</el-form-item>
@@ -49,11 +49,14 @@
<NewlyAdd v-if="showNewlyAdded" @handleClose="handleClose" @onSubmit="beforeClose" />
<!-- 填报 -->
<el-dialog draggable title="填报" v-model="dialogVisible" width="1400px" :before-close="beforeClose">
<Filling ref="FillingRef" v-if="dialogVisible"@beforeClose="beforeClose" />
<Filling ref="FillingRef" v-if="dialogVisible" @beforeClose="beforeClose" />
</el-dialog>
<!-- 详情 -->
<Detail ref="detailRef" />
<!-- 审核记录 -->
<recording ref="recordingRef" />
</template>
<script setup lang="ts">
import { ref, onMounted, provide, nextTick } from 'vue'
@@ -66,11 +69,13 @@ import { useDictData } from '@/stores/dictData'
import NewlyAdd from './NewlyAdd.vue'
import Filling from './filling.vue'
import Detail from './detail.vue'
import recording from './recording.vue'
const dictData = useDictData()
const FillingRef = ref()
const showNewlyAdded = ref(false)
const dialogVisible = ref(false)
const recordingRef = ref(false)
const TableHeaderRef = ref()
const detailRef = ref()
const problemData = dictData.getBasicData('Problem_Sources')
@@ -82,7 +87,7 @@ const tableStore: any = new TableStore({
publicHeight: 65,
method: 'POST',
column: [
{ width: '60', type: 'checkbox' },
// { width: '60', type: 'checkbox' },
{
field: 'index',
title: '序号',
@@ -182,7 +187,9 @@ const tableStore: any = new TableStore({
},
icon: 'el-icon-PieChart',
render: 'basicButton',
click: async row => {}
click: row => {
recordingRef.value.open(row)
}
},
{
name: 'del',

View File

@@ -153,7 +153,6 @@ onMounted(() => {
if (prop.List.filePathYyfx != null) {
causeAnalysisData.value = prop.List
}
console.log(prop.disabled)
})
const submit = (num: number) => {
console.log(prop.addData.problemSources)

View File

@@ -1,16 +1,43 @@
<template>
<div>
<vxe-table v-bind="defaultAttribute" height="350" ref="xTable1Ref" :data="list">
<vxe-column field="sustationName" title="变电站"></vxe-column>
<vxe-column field="barName" title="母线"></vxe-column>
<vxe-column field="measurementPointName" title="监测点名称"></vxe-column>
<el-dialog draggable v-model="dialogVisible" title="历史审核记录" width="1000px">
<vxe-table v-bind="defaultAttribute" height="500" ref="xTable1Ref" :data="list">
<vxe-column field="reportProcess" title="审核节点" :formatter="formatter"></vxe-column>
<vxe-column field="type" title="审核结果" :formatter="formatter"></vxe-column>
<vxe-column field="checker" title="审核人"></vxe-column>
<vxe-column field="orgName" title="审核人单位"></vxe-column>
<vxe-column field="dataDate" title="审核时间" min-width="100px"></vxe-column>
<vxe-column field="description" title="审核意见" min-width="180px"></vxe-column>
</vxe-table>
</div>
</el-dialog>
</template>
<script setup lang="ts">
import { ref, reactive } from 'vue'
import { defaultAttribute } from '@/components/table/defaultAttribute'
import { queryCheckTrack } from '@/api/process-boot/electricitymanagement'
import { useDictData } from '@/stores/dictData'
const dictData = useDictData()
const problemData = dictData.getBasicData('Fill_Progress')
const auditStatus = dictData.getBasicData('Audit_Status')
const list = ref([])
const dialogVisible = ref(false)
const formatter = (row: any) => {
if (row.column.field == 'reportProcess') {
return problemData.filter((item: any) => item.code == row.cellValue)[0]?.name
} else if (row.column.field == 'type') {
return auditStatus.filter((item: any) => item.code == row.cellValue)[0]?.name
} else {
return row.cellValue
}
}
const open = (row: any) => {
dialogVisible.value = true
queryCheckTrack(row.powerQualityProblemNo).then((res: any) => {
list.value = res.data
})
}
defineExpose({ open })
</script>
<style lang="scss" scoped></style>

View File

@@ -2,20 +2,37 @@
<TableHeader area datePicker ref="TableHeaderRef">
<template #select>
<el-form-item label="计划状态">
<el-select v-model="tableStore.table.params.status" placeholder="请选择计划状态">
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择计划状态">
<el-option v-for="item in list" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
</template>
<template #operation>
<el-button icon="el-icon-Plus" type="primary" @click="add">新增计划</el-button>
<el-button icon="el-icon-Stamp" type="primary" @click="planReviewFn">提交审核</el-button>
<el-button icon="el-icon-Download" type="primary">导出</el-button>
<el-button icon="el-icon-Stamp" type="primary" @click="submit">提交审核</el-button>
<el-button icon="el-icon-Download" type="primary" @click="exportFn">导出</el-button>
</template>
</TableHeader>
</TableHeader ref="tableRef">
<Table ref="tableRef" />
<!-- 新增 -->
<planAdd ref="planAddRef" @onsubmit="tableStore.index()" />
<!-- 选择审核人 -->
<el-dialog v-model="dialogVisible" title="审核" width="300" :before-close="handleClose">
选择审核人: <el-select v-model="auditUser" clearable placeholder="请选择计划状态">
<el-option v-for="item in auditList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
<template #footer>
<span class="dialog-footer">
<el-button type="primary" @click="planReviewFn">确定</el-button>
<el-button @click="handleClose">取消</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import { ref, onMounted, provide, nextTick } from 'vue'
@@ -27,8 +44,11 @@ import { planStatus } from '@/api/process-boot/generalTest'
import planAdd from './planAdd.vue'
import { useDictData } from '@/stores/dictData'
import { initDetpStataionTree } from '@/api/process-boot/generalTest'
import { queryPlan,deletePlan } from '@/api/process-boot/generalTest'
import { getUserByRoleType } from '@/api/user-boot/user'
const dictData = useDictData()
const dialogVisible=ref(false)
const tableRef = ref()
const list = [
{
id: 0,
@@ -50,6 +70,8 @@ const list = [
const planAddRef = ref()
const TableHeaderRef = ref()
const auditList:any = ref([])
const auditUser = ref('')
const ruleFormRef = ref()
const tableStore = new TableStore({
@@ -113,6 +135,28 @@ const tableStore = new TableStore({
click: async row => {
planAddRef.value.open('编辑计划', row)
}
},
{
name: 'del',
title: '删除',
type: 'danger',
icon: 'el-icon-Delete',
render: 'confirmButton',
disabled: row => {
return !(row.status == 0 || row.status == 2)
},
popconfirm: {
confirmButtonText: '确认',
cancelButtonText: '取消',
confirmButtonType: 'danger',
title: '确定删除吗?'
},
click: row => {
deletePlan([row.planNo]).then(res => {
ElMessage.success('删除成功')
tableStore.index()
})
}
}
]
}
@@ -131,31 +175,61 @@ const add = () => {
// title.value = '普测计划新增'
planAddRef.value.open('普测计划新增')
}
const submit = () => {
if(tableStore.table.selection.length == 0){
return ElMessage.warning('请选择计划进行审核')
}
const flag = !tableStore.table.selection.some(item => item.status !== 0 && item.status !== 2);
if (flag) {
dialogVisible.value = true
} else {
ElMessage.warning('请选择新建、未通过的计划进行审核!')
}
}
// 提交审核
const planReviewFn = () => {
let planNo: any = []
let flag = true
tableStore.table.selection.forEach(item => {
if (item.status == 0 || item.status == 2) {
planNo.push(item.planNo)
} else {
flag = false
}
}
})
if (flag) {
planStatus(planNo).then(res => {
ElMessage.success('提交成功!')
tableStore.index()
})
} else {
ElMessage.warning('请选择新建、未通过的计划进行审核!')
}
}
const exportFn = () => {
let form = JSON.parse(JSON.stringify(tableStore.table.params))
form.pageNum = 1
form.pageSize = tableStore.table.total
queryPlan(form).then(res => {
tableRef.value.getRef().exportData({
filename: '普测计划', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
data: res.data.records, // 数据源 // 过滤那个字段导出
columnFilterMethod: function (column: any) {
return !(column.$columnIndex === 0)
}
})
})
}
const handleClose = () => {
dialogVisible.value = false
auditUser.value = ''
}
// 取消
onMounted(() => {
tableStore.index()
getUserByRoleType(3).then(res => {
auditList.value = res.data
})
})
</script>

View File

@@ -7,8 +7,8 @@
<el-tab-pane label="普测计划审批" name="2">
<planAudits v-if="activeName == '2'"/>
</el-tab-pane>
<el-tab-pane label="普测结果管理" name="3"><outcome v-if="activeName == '3'"/></el-tab-pane>
<el-tab-pane label="普测计划占比配置" name="4"><occupancy v-if="activeName == '4'"/></el-tab-pane>
<!-- <el-tab-pane label="普测结果管理" name="3"><outcome v-if="activeName == '3'"/></el-tab-pane>
<el-tab-pane label="普测计划占比配置" name="4"><occupancy v-if="activeName == '4'"/></el-tab-pane> -->
</el-tabs>
</div>
</template>

View File

@@ -59,20 +59,20 @@
<el-divider content-position="left" style="font-weight: bolder; font-size: 18px">
入网评估结论填报
</el-divider>
<el-form-item label="是否超标:" style="margin-top: 10px" prop="iIsOverLimit">
<el-form-item label="是否超标:" style="margin-top: 10px" prop="iIsOverLimit" @change="changeOverLimit">
<el-radio v-model="addForm.iIsOverLimit" :label="1"></el-radio>
<el-radio v-model="addForm.iIsOverLimit" :label="0"></el-radio>
</el-form-item>
<br />
<el-form-item label="超标指标:" style="margin-top: 10px" prop="IOverLimitTarget">
<br v-if="show"/>
<el-form-item label="超标指标:" style="margin-top: 10px" prop="IOverLimitTarget" v-if="show">
<el-checkbox-group v-model="addForm.IOverLimitTarget">
<el-checkbox v-for="(item, ind) in exceeded" :label="item.id">
{{ item.name }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<br />
<el-form-item label="计划采取措施:" style="margin-top: 10px" prop="IPlanStep">
<br v-if="show"/>
<el-form-item label="计划采取措施:" style="margin-top: 10px" prop="IPlanStep" v-if="show">
<el-select v-model="addForm.IPlanStep" placeholder="请选择">
<el-option
v-for="item in takeMeasures"
@@ -94,7 +94,7 @@
</el-form-item>
</el-form>
<div style="display: flex; justify-content: center; margin-top: 30px" v-if="title != '未建档干扰源用户详情'">
<el-button type="primary" class="ml20" @click="submit(1)">提交</el-button>
<el-button type="primary" class="ml20" @click="submit(1)">审核</el-button>
<el-button type="primary" class="ml20" @click="submit(2)">保存</el-button>
<el-button type="primary" class="ml20" @click="cancel">取消</el-button>
</div>
@@ -115,7 +115,7 @@ const interferenceType = dictData.getBasicData('Interference_Source')
const emit = defineEmits(['onSubmit'])
const uploadConclusions = ref(false)
const show = ref(false)
const addForm: any = ref({
id: '',
orgNo: '',
@@ -143,7 +143,7 @@ const submit = (flag: any) => {
if (valid) {
const formData = new FormData()
addForm.value.fileList.forEach(item => {
addForm.value.fileList.forEach((item: any) => {
if (item.raw == undefined) {
} else {
formData.append('file', item.raw)
@@ -211,6 +211,15 @@ const open = (text: string, row: any) => {
uploadConclusions.value = true
}
const changeOverLimit = (e: any) => {
if (e.target.value == 0) {
show.value = false
} else {
show.value = true
}
addForm.value.IOverLimitTarget = []
addForm.value.IPlanStep = ''
}
defineExpose({ open })
</script>

View File

@@ -28,8 +28,8 @@
</template>
<template #operation>
<el-button icon="el-icon-Plus" type="primary" @click="addList">新增</el-button>
<el-button icon="el-icon-Download" type="primary">导出</el-button>
<el-button icon="el-icon-Download" @click="exportEvent" type="primary">导出</el-button>
</template>
</TableHeader>
<Table ref="tableRef" />
@@ -47,9 +47,11 @@ import { mainHeight } from '@/utils/layout'
import Add from './add.vue'
import Audit from './audit.vue'
import { useDictData } from '@/stores/dictData'
import { getLoadTypeUserList } from '@/api/process-boot/interference'
const dictData = useDictData()
const TableHeaderRef = ref()
const tableRef = ref()
const interferenceType = dictData.getBasicData('Interference_Source')
const istatusList = dictData.getBasicData('On-network_Status')
@@ -102,7 +104,7 @@ const tableStore = new TableStore({
buttons: [
{
name: 'edit',
title: '上传',
title: '审核',
type: 'primary',
disabled: row => {
return !(
@@ -152,13 +154,25 @@ provide('tableStore', tableStore)
const addList = () => {
addRef.value.open()
}
// 提交
const submit = () => {
console.log(123, fileList.value)
}
// 保存
const preservation = () => {}
// 导出
const exportEvent = () => {
let form = JSON.parse(JSON.stringify(tableStore.table.params))
form.pageNum = 1
form.pageSize = tableStore.table.total
getLoadTypeUserList(form).then(res => {
tableRef.value.getRef().exportData({
filename: '未建档非线性用户', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
data: res.data.records, // 数据源 // 过滤那个字段导出
columnFilterMethod: function (column: any) {
return !(column.$columnIndex === 0)
}
})
})
}
onMounted(() => {
tableStore.index()
})

View File

@@ -1,12 +1,12 @@
<template>
<div class="default-main" :style="layout">
<work />
<!-- <work /> -->
</div>
</template>
<script setup lang="ts">
import { onMounted, reactive, ref, provide } from 'vue'
import work from './work.vue'
// import work from './work.vue'
import { mainHeight } from '@/utils/layout'
defineOptions({

View File

@@ -1,416 +1,11 @@
<template>
<div v-loading.fullscreen.lock="loading" class="bpmn-dialog">
<el-dialog v-model="dialogVisible" :fullscreen="true" draggable @close="close">
<template #header>
<el-space>
<el-button icon="FolderChecked" @click="saveModeler">保存</el-button>
<el-button icon="Download" @click="downloadProcess('xml')">导出xml</el-button>
<el-button icon="Download" @click="downloadProcess('bpmn')">导出bpmn</el-button>
<el-upload
ref="uploadRef"
:auto-upload="false"
:show-file-list="false"
:limit="1"
accept="text/xml"
@change="openProcess"
>
<template #trigger>
<el-button icon="Upload">导入</el-button>
</template>
</el-upload>
</el-space>
<ul class="icon-btn">
<li v-for="item in iconBtn1" :key="item.key" :title="item.name" @click="handlerAlign(item)">
<el-icon>
<component :is="item.icon"></component>
</el-icon>
</li>
</ul>
<div> </div>
<ul class="icon-btn">
<li v-for="item in iconBtn2" :key="item.key" :title="item.name" @click="handlerReset(item)">
<el-icon>
<component :is="item.icon"></component>
</el-icon>
</li>
</ul>
</template>
<splitpanes class="default-theme bpmn-body">
<pane min-size="20">
<div ref="canvasRef" class="canvas"></div>
</pane>
<!--属性面板将通过该元素呈现到其中-->
<pane :size="25" min-size="15" style="overflow-y: auto">
<div id="js-properties-panel" class="panel"></div>
</pane>
</splitpanes>
</el-dialog>
</div>
</template>
<script lang="ts" setup name="ActDefinitionPage">
import { computed, watch, ref, nextTick } from 'vue'
import { ElMessage, type UploadFile } from 'element-plus'
import BpmnModeler from 'bpmn-js/lib/Modeler' // 引入 bpmn-js
import type { ModdleElement } from 'bpmn-js/lib/BaseModeler'
// 导入一下有关于bpmn-js的字体库以及样式文件
import 'bpmn-js/dist/assets/diagram-js.css'
import 'bpmn-js/dist/assets/bpmn-font/css/bpmn.css'
import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css'
import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-embedded.css'
// // 右侧属性面包样式
// import "bpmn-js-properties-panel/dist/assets/properties-panel.css";
// import "bpmn-js-properties-panel/dist/assets/element-templates.css";
// 属性面板相关模块
import {
BpmnPropertiesPanelModule,
BpmnPropertiesProviderModule,
CamundaPlatformPropertiesProviderModule
} from 'bpmn-js-properties-panel'
import CamundaBpmnModdle from 'camunda-bpmn-moddle/resources/camunda.json'
// 汉化包
import customTranslate from '@/assets/bpmn/translate'
// 注意这个xml文件
import createBpmnXml, { activitiToCamundaXml, camundaToActivitiXml } from './xml' // 放在下面了
// 窗格拆分器插件
import { Splitpanes, Pane } from 'splitpanes'
import 'splitpanes/dist/splitpanes.css'
import saveAs from 'file-saver'
import type CommandStack from 'diagram-js/lib/command/CommandStack'
import { getModelerDetail, updateModeler, type ActModelerObj, type XmlMetaInfo } from '@/api/activiti/modeler'
//外部参数 ################################################
const props = withDefaults(
defineProps<{
modelValue: boolean
modelId: string
}>(),
{}
)
//ref对象 ################################################
const loading = ref(false)
const iconBtn1 = ref([
{ name: '左对齐', key: 'left', icon: 'myAlignStartVertical' },
{ name: '水平居中', key: 'center', icon: 'myAlignCenterVertical' },
{ name: '右对齐', key: 'right', icon: 'myAlignEndVertical' },
{ name: '上对齐', key: 'top', icon: 'myAlignStartHorizontal' },
{ name: '垂直居中', key: 'middle', icon: 'myAlignCenterHorizontal' },
{ name: '下对齐', key: 'bottom', icon: 'myAlignEndHorizontal' }
])
const iconBtn2 = ref([
{ name: '撤销', key: 'undo', icon: 'myUndo' },
{ name: '恢复', key: 'redo', icon: 'myRedo' },
{ name: '擦除重做', key: 'restart', icon: 'myEraser' }
])
//elment ################################################
const canvasRef = ref()
const uploadRef = ref()
//emit
const emit = defineEmits<{ (event: 'update:modelValue', value: boolean): void; (event: 'close'): void }>()
//内部变量 ################################################
let bpmnModeler: BpmnModeler | undefined = undefined
let modelData: ActModelerObj = { id: '' }
//computed ################################################
const dialogVisible = computed({
get() {
return props.modelValue
},
set(value) {
emit('update:modelValue', value)
}
})
// watch ################################################
watch(dialogVisible, value => {
nextTick(() => {
if (value && !bpmnModeler) {
initModeler()
}
if (value) {
refuseModelerData()
}
})
})
// Function ################################################
/**
* 初始化 BpmnModeler
*/
const initModeler = () => {
// 将汉化包装成一个模块
const customTranslateModule = {
translate: ['value', customTranslate]
}
// 生成实例
bpmnModeler = new BpmnModeler({
container: canvasRef.value, // 获取到属性ref为“canvasRef”的dom节点
propertiesPanel: {
parent: '#js-properties-panel'
},
additionalModules: [
BpmnPropertiesPanelModule,
BpmnPropertiesProviderModule,
CamundaPlatformPropertiesProviderModule,
customTranslateModule // 汉化模块
],
moddleExtensions: {
camunda: CamundaBpmnModdle
}
})
}
/**刷新视图数据 */
const refuseModelerData = () => {
loading.value = true
getModelerDetail(props.modelId)
.then(({ data }) => {
data && (modelData = data)
const xml = data?.bpmnXml
createNewDiagram(xml ? activitiToCamundaXml(xml) : undefined)
})
.finally(() => {
loading.value = false
})
}
/**
* 对齐操作
*/
const handlerAlign = ({ key }: { key: string }) => {
if (bpmnModeler) {
const modeling = bpmnModeler.get('modeling')
const selection = bpmnModeler.get<{ get: () => ModdleElement[] }>('selection')
const align = bpmnModeler.get<ModdleElement>('alignElements')
if (modeling && selection) {
const SelectedElements = selection.get()
if (!SelectedElements || SelectedElements.length <= 1) {
return ElMessage.warning('请按住 Shift 键选择多个元素对齐')
}
align.trigger(SelectedElements, key)
}
}
}
/**
* 重置操作
*/
const handlerReset = ({ key }: { key: string }) => {
if (bpmnModeler) {
const command = bpmnModeler.get<CommandStack>('commandStack')
switch (key) {
case 'undo':
command && command.canUndo() && command.undo()
break
case 'redo':
command && command.canRedo() && command.redo()
break
case 'restart':
command && command.clear()
createNewDiagram()
break
}
}
}
/**
* 打开文件
*/
const openProcess = (rawFile: UploadFile) => {
if (!rawFile.raw) {
return false
}
loading.value = true
const reader = new FileReader()
reader.readAsText(rawFile.raw, 'utf8')
reader.onload = () => {
if (typeof reader.result === 'string' && bpmnModeler) {
if (reader.result.indexOf('bpmn2:definitions') <= 0) {
ElMessage.error('请选择bpmn20标准的流程文件')
loading.value = false
} else {
bpmnModeler
.importXML(reader.result)
.then(({ warnings }) => {
warnings && warnings.length > 0 && console.warn(warnings)
warnings && warnings.length > 0 && ElMessage.warning(warnings.toString())
})
.finally(() => {
loading.value = false
})
}
} else {
loading.value = false
}
uploadRef.value.clearFiles()
}
}
/**
* 加载bpmn.xml配置文件
*/
const createNewDiagram = (xml?: string) => {
loading.value = true
let bpmnXml = xml
if (!bpmnXml) {
const metaInfo = modelData.metaInfo ? (JSON.parse(modelData.metaInfo) as XmlMetaInfo) : {}
const param = {
key: modelData.key,
name: modelData.name,
description: metaInfo?.description,
version: metaInfo?.version
}
bpmnXml = createBpmnXml(param)
}
bpmnModeler &&
bpmnModeler
.importXML(bpmnXml)
.then(({ warnings }) => {
warnings && warnings.length > 0 && ElMessage.warning(warnings.toString())
})
.finally(() => {
loading.value = false
})
}
/**
* 保存模型
*/
const saveModeler = () => {
loading.value = true
if (!bpmnModeler) {
return
}
// 读取xml、svg
Promise.all([bpmnModeler.saveXML({}), bpmnModeler.saveSVG()])
.then(([rsp1, rsp2]) => {
const { error, xml } = rsp1
const { svg } = rsp2
if (error) {
return { code: 500, msg: error.message }
}
if (!xml) {
return { code: 500, msg: 'xml文件不存在' }
}
if (!svg) {
return { code: 500, msg: 'svg文件不存在' }
}
return updateModeler({
id: modelData.id,
name: modelData.name,
description: modelData.description,
bpmnXml: camundaToActivitiXml(xml),
svgXml: svg
})
})
.then(rsp => {
if (rsp.code === 200) {
ElMessage.success('保存成功')
} else {
ElMessage.success(rsp.msg)
}
})
.finally(() => {
loading.value = false
})
}
// 下载流程图到本地
/**
* @param {string} type
* @param {string} name
*/
const downloadProcess = (type = 'xml', name = 'diagram') => {
loading.value = true
bpmnModeler &&
bpmnModeler
.saveXML({})
.then(({ error, xml }) => {
// 读取异常时抛出异常
if (error || !xml) {
console.error(`[Process Designer Warn ]:`, error)
} else {
const blob = new Blob([camundaToActivitiXml(xml)], {
type: type === 'xml' ? 'text/xml' : 'bpmn20-xml'
})
saveAs(blob, `${name}.${type}`)
}
})
.finally(() => {
loading.value = false
})
}
const close = () => {
emit('close')
}
<script setup lang='ts'>
import { ref, reactive } from 'vue'
</script>
<style lang="scss" scoped>
<style lang="less" scoped>
.bpmn-dialog {
:deep(.el-dialog__body) {
padding: 0;
width: 100%;
height: calc(100vh - 65px);
overflow-y: auto;
}
.bpmn-body {
width: 100%;
height: 100%;
min-height: 600px;
.canvas {
width: 100%;
height: 100%;
background: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImEiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTTAgMTBoNDBNMTAgMHY0ME0wIDIwaDQwTTIwIDB2NDBNMCAzMGg0ME0zMCAwdjQwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlMGUwZTAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZD0iTTQwIDBIMHY0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIi8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+')
repeat !important;
}
.panel {
width: 100%;
}
}
}
.icon-btn {
margin: 0;
padding: 0;
display: inline-flex;
margin-left: 30px;
li {
border-left: 1px solid var(--el-border-color);
border-top: 1px solid var(--el-border-color);
border-bottom: 1px solid var(--el-border-color);
color: var(--el-text-color-regular);
list-style: none;
font-size: 24px;
text-align: center;
cursor: pointer;
padding: 3px 8px 0 8px;
height: 32px;
}
li:hover {
background-color: #ecf5ff;
}
li:first-child {
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
}
li:last-child {
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
border-right: 1px solid var(--el-border-color);
}
.icon-popper {
width: 60px;
}
}
</style>

View File

@@ -93,12 +93,9 @@ const map = (res: any) => {
tooltip: {
formatter: function (params) {
var tips = ''
if (params.color != undefined) {
if (params.value >= 0) {
tips += params.name + '</br/>'
tips += '暂降次数' + ':' + params.value + '次' + '<br/>'
} else if (params.color == undefined) {
tips += params.name + '</br/>'
tips += '暂降次数' + ':' + '暂无数据' + '<br/>'
}
return tips
}

View File

@@ -128,7 +128,21 @@ const map = (res: any) => {
title: {
text: '区域暂降评估'
},
tooltip: {
formatter: function (params: any) {
var tips = ''
console.log('🚀 ~ map ~ params:', params)
if (Number.isNaN(params.value) == true) {
tips += params.name + '</br>'
tips += '评估值:暂无数据'
} else {
tips += params.name + '</br>'
tips += '评估值:' + params.value
}
return tips
}
},
visualMap: {
min: 0,
max: 2,

View File

@@ -59,14 +59,14 @@ import { useDictData } from '@/stores/dictData'
import Area from '@/components/form/area/index.vue'
defineOptions({
name: 'voltage/sags/operationsManagement/index'
name: 'Operationmanagement/terminalmanagement'
})
const dictData = useDictData()
const manufacturer = dictData.getBasicData('Dev_Manufacturers')
const manufacturerForm = ref<string[]>([])
const tableStore = new TableStore({
isWebPaging: true,
url: 'Operationmanagement/terminalmanagement',
url: '/device-boot/runManage/getRuntimeData',
method: 'POST',
column: [
{

View File

@@ -171,7 +171,7 @@ const tableStore = new TableStore({
type: 'bar'
},
{
name: '热备用',
name: '停运',
stack: 'one',
barMaxWidth: 30,
barMinHeight: 5,
@@ -306,7 +306,7 @@ const tableStore = new TableStore({
type: 'bar'
},
{
name: '热备用',
name: '停运',
stack: 'one',
barMaxWidth: 30,
barMinHeight: 5,