Skip to content

Commit 1401925

Browse files
[fix]setLayersVisible webmap 新增isSetVisible参数控制visible参数
1 parent cd7e41c commit 1401925

3 files changed

Lines changed: 127 additions & 3 deletions

File tree

src/common/mapping/utils/AppreciableLayerBase.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,12 @@ export class AppreciableLayerBase extends Events {
9898
}
9999
}
100100

101-
setLayersVisible(layers, visibility) {
101+
setLayersVisible(layers, visibility, isSetVisible = true) {
102102
layers.forEach((layer) => {
103103
const visbleId = this._getLayerVisibleId(layer);
104-
this.layersVisibleMap.set(visbleId, visibility === 'visible');
104+
if (isSetVisible) {
105+
this.layersVisibleMap.set(visbleId, visibility === 'visible');
106+
}
105107
if (layer.CLASS_INSTANCE && layer.CLASS_INSTANCE.show && layer.CLASS_INSTANCE.hide) {
106108
visibility === 'visible' ? layer.CLASS_INSTANCE.show() : layer.CLASS_INSTANCE.hide();
107109
this.map.style.fire('data', { dataType: 'style' });
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
import { AppreciableLayerBase } from '../../../../src/common/mapping/utils/AppreciableLayerBase';
2+
3+
describe('AppreciableLayerBase', () => {
4+
let instance;
5+
let mockMap;
6+
7+
beforeEach(() => {
8+
mockMap = {
9+
style: {
10+
fire: jasmine.createSpy('fire')
11+
},
12+
getLayer: jasmine.createSpy('getLayer').and.returnValue({}),
13+
setLayoutProperty: jasmine.createSpy('setLayoutProperty')
14+
};
15+
16+
instance = new AppreciableLayerBase({
17+
map: mockMap,
18+
layers: []
19+
});
20+
});
21+
22+
describe('setLayersVisible', () => {
23+
it('should set layer visibility to visible', () => {
24+
const layer = {
25+
renderLayers: ['layer1'],
26+
CLASS_NAME: 'TestLayer'
27+
};
28+
29+
instance.setLayersVisible([layer], 'visible', true);
30+
31+
expect(mockMap.setLayoutProperty).toHaveBeenCalledWith('layer1', 'visibility', 'visible');
32+
});
33+
34+
it('should set layer visibility to none', () => {
35+
const layer = {
36+
renderLayers: ['layer1'],
37+
CLASS_NAME: 'TestLayer'
38+
};
39+
40+
instance.setLayersVisible([layer], 'none', true);
41+
42+
expect(mockMap.setLayoutProperty).toHaveBeenCalledWith('layer1', 'visibility', 'none');
43+
});
44+
45+
it('should handle layer with CLASS_INSTANCE', () => {
46+
const mockShow = jasmine.createSpy('show');
47+
const mockHide = jasmine.createSpy('hide');
48+
const layer = {
49+
renderLayers: ['layer1'],
50+
CLASS_NAME: 'TestLayer',
51+
CLASS_INSTANCE: {
52+
show: mockShow,
53+
hide: mockHide
54+
}
55+
};
56+
57+
instance.setLayersVisible([layer], 'visible', true);
58+
59+
expect(mockShow).toHaveBeenCalled();
60+
expect(mockHide).not.toHaveBeenCalled();
61+
expect(mockMap.style.fire).toHaveBeenCalledWith('data', { dataType: 'style' });
62+
});
63+
64+
it('should handle layer with CLASS_INSTANCE and hide', () => {
65+
const mockShow = jasmine.createSpy('show');
66+
const mockHide = jasmine.createSpy('hide');
67+
const layer = {
68+
renderLayers: ['layer1'],
69+
CLASS_NAME: 'TestLayer',
70+
CLASS_INSTANCE: {
71+
show: mockShow,
72+
hide: mockHide
73+
}
74+
};
75+
76+
instance.setLayersVisible([layer], 'none', true);
77+
78+
expect(mockHide).toHaveBeenCalled();
79+
expect(mockShow).not.toHaveBeenCalled();
80+
expect(mockMap.style.fire).toHaveBeenCalledWith('data', { dataType: 'style' });
81+
});
82+
83+
it('should skip layersVisibleMap when isSetVisible is false', () => {
84+
const layer = {
85+
renderLayers: ['layer1'],
86+
CLASS_NAME: 'TestLayer'
87+
};
88+
89+
instance.setLayersVisible([layer], 'visible', false);
90+
91+
// isSetVisible=false 只跳过 layersVisibleMap 的设置,但 setLayoutProperty 仍会被调用
92+
expect(mockMap.setLayoutProperty).toHaveBeenCalledWith('layer1', 'visibility', 'visible');
93+
});
94+
95+
it('should handle multiple renderLayers', () => {
96+
const layer = {
97+
renderLayers: ['layer1', 'layer2', 'layer3'],
98+
CLASS_NAME: 'TestLayer'
99+
};
100+
101+
instance.setLayersVisible([layer], 'visible', true);
102+
103+
expect(mockMap.setLayoutProperty).toHaveBeenCalledTimes(3);
104+
expect(mockMap.setLayoutProperty).toHaveBeenCalledWith('layer1', 'visibility', 'visible');
105+
expect(mockMap.setLayoutProperty).toHaveBeenCalledWith('layer2', 'visibility', 'visible');
106+
expect(mockMap.setLayoutProperty).toHaveBeenCalledWith('layer3', 'visibility', 'visible');
107+
});
108+
109+
it('should skip L7Layer when getLayer returns falsy', () => {
110+
mockMap.getLayer.and.returnValue(null);
111+
const layer = {
112+
renderLayers: ['l7layer1'],
113+
CLASS_NAME: 'L7Layer'
114+
};
115+
116+
instance.setLayersVisible([layer], 'visible', true);
117+
118+
expect(mockMap.setLayoutProperty).not.toHaveBeenCalled();
119+
});
120+
});
121+
});

test/test-main-common.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,11 +226,12 @@ import './common/util/EncryptRequestSpec';
226226
import './common/util/MapCalculateUtilSpec';
227227
import './common/util/GeometryAnalysisSpec.js';
228228

229+
import './common/mapping/utils/AppreciableLayerBaseSpec.js'
229230
import './common/mapping/utils/L7LayerUtilSpec';
230231
import './common/mapping/utils/ColorUtilSpec.js';
231232
import './common/mapping/utils/SourceListModelV2Spec.js';
232233
import './common/mapping/utils/SourceListModelV3Spec.js';
233234
import './common/mapping/utils/epsgDefineSpec.js';
234235
import './common/mapping/utils/UtilSpec.js';
235236
import './common/mapping/WebMapServiceSpec';
236-
import './common/mapping/WebMapV2BaseSpec';
237+
import './common/mapping/WebMapV2BaseSpec';

0 commit comments

Comments
 (0)