@abi-software/mapintegratedvuer 0.7.1-demo.0 → 0.7.2-vue3.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +150 -142
  3. package/assets/gazelle-icons-no-background.css +32 -0
  4. package/assets/styleguide.css +19 -19
  5. package/cypress.config.js +23 -23
  6. package/dist/index.html +17 -17
  7. package/dist/mapintegratedvuer.js +60394 -59859
  8. package/dist/mapintegratedvuer.umd.cjs +515 -907
  9. package/dist/matterport.pdf +0 -0
  10. package/dist/style.css +1 -1
  11. package/dist/test.txt +0 -0
  12. package/package.json +135 -136
  13. package/public/index.html +17 -17
  14. package/public/matterport.pdf +0 -0
  15. package/public/test.txt +0 -0
  16. package/q.json +690 -0
  17. package/reporter-config.json +9 -9
  18. package/src/App.vue +245 -245
  19. package/src/assets/_variables.scss +43 -43
  20. package/src/assets/fonts/mapicon-species.eot +0 -0
  21. package/src/assets/fonts/mapicon-species.ttf +0 -0
  22. package/src/assets/fonts/mapicon-species.woff +0 -0
  23. package/src/assets/header-icon.scss +67 -67
  24. package/src/assets/mapicon-species-style.css +41 -41
  25. package/src/assets/styles.scss +9 -9
  26. package/src/components/ContentBar.vue +376 -376
  27. package/src/components/ContentVuer.vue +217 -217
  28. package/src/components/ContextCard.vue +385 -385
  29. package/src/components/ContextHelp.vue +73 -73
  30. package/src/components/CustomSplitter.vue +151 -151
  31. package/src/components/DatasetHeader.vue +97 -97
  32. package/src/components/DialogToolbarContent.vue +464 -464
  33. package/src/components/EventBus.js +3 -3
  34. package/src/components/FlatmapContextCard.vue +134 -134
  35. package/src/components/MapContent.vue +333 -285
  36. package/src/components/ResizeSensor.vue +47 -47
  37. package/src/components/SearchControls.vue +115 -115
  38. package/src/components/SimulatedData.js +721 -721
  39. package/src/components/SplitDialog.vue +287 -287
  40. package/src/components/SplitFlow.vue +414 -414
  41. package/src/components/index.js +7 -7
  42. package/src/components/markerZoomLevelsHardCoded.js +255 -255
  43. package/src/components/scripts/utilities.js +173 -173
  44. package/src/components/viewers/Flatmap.vue +145 -145
  45. package/src/components/viewers/Iframe.vue +31 -31
  46. package/src/components/viewers/MultiFlatmap.vue +384 -384
  47. package/src/components/viewers/Plot.vue +23 -23
  48. package/src/components/viewers/Scaffold.vue +198 -198
  49. package/src/components/viewers/Simulation.vue +21 -21
  50. package/src/icons/yellowstar.js +1 -1
  51. package/src/main.js +32 -22
  52. package/src/mixins/ContentMixin.js +438 -438
  53. package/src/mixins/DynamicMarkerMixin.js +88 -88
  54. package/src/mixins/RetrieveContextCardMixin.js +82 -0
  55. package/src/mixins/S3Bucket.vue +37 -37
  56. package/src/stores/entries.js +40 -40
  57. package/src/stores/index.js +24 -16
  58. package/src/stores/settings.js +144 -144
  59. package/src/stores/splitFlow.js +523 -523
  60. package/static.json +7 -7
  61. package/tsconfig.json +19 -0
  62. package/vite.config.js +70 -66
  63. package/vite.static-build.js +12 -12
  64. package/vitest.workspace.js +3 -3
  65. package/vuese-generator.js +65 -0
@@ -1,286 +1,334 @@
1
- <template>
2
- <div
3
- ref="MapApp"
4
- v-loading="!isReady"
5
- class="mapcontent"
6
- element-loading-text="Loading..."
7
- element-loading-background="rgba(0, 0, 0, 0.3)"
8
- >
9
- <map-svg-sprite-color/>
10
- <SplitFlow
11
- v-if="isReady"
12
- @onFullscreen="onFullscreen"
13
- :state="stateToSet"
14
- ref="flow"
15
- @vue:mounted="flowMounted"
16
- />
17
- </div>
18
- </template>
19
-
20
- <script>
21
- /* eslint-disable no-alert, no-console */
22
- import SplitFlow from './SplitFlow.vue';
23
- import EventBus from './EventBus';
24
- import { mapStores } from 'pinia';
25
- import { useSettingsStore } from '../stores/settings';
26
- import { findSpeciesKey } from './scripts/utilities.js';
27
- import { MapSvgSpriteColor} from '@abi-software/svg-sprite';
28
- import { initialState } from "./scripts/utilities.js";
29
- import {
30
- ElLoading as Loading
31
- } from "element-plus";
32
-
33
- /**
34
- * Content of the app. More work flows will be added here.
35
- */
36
- export default {
37
- name: "MapContent",
38
- components: {
39
- MapSvgSpriteColor,
40
- Loading,
41
- SplitFlow,
42
- },
43
- props: {
44
- shareLink: {
45
- type: String,
46
- default: undefined
47
- },
48
- state: {
49
- type: Object,
50
- default: undefined
51
- },
52
- options: {
53
- type: Object,
54
- default: () => {}
55
- },
56
- //New option to start the map in AC, FC or WholeBody
57
- startingMap: {
58
- type: String,
59
- default: "AC"
60
- }
61
- },
62
- data: function () {
63
- return {
64
- isReady: false,
65
- initialState: undefined,
66
- }
67
- },
68
- methods: {
69
- isFullscreen: function(){
70
- return (document.fullscreenElement || document.webkitFullscreenElement ||
71
- document.mozFullScreenElement || document.msFullscreenElement )
72
- },
73
- onFullscreen: function(fullscreenReq) {
74
- //If a request is sent, try it
75
- if (fullscreenReq !== undefined){
76
- if (fullscreenReq && !this.isFullscreen()){
77
- this.goFullscreen()
78
- }
79
- if(!fullscreenReq && this.isFullscreen()){
80
- this.leaveFullscreen()
81
- }
82
- }
83
- // Else we toggle fullscreen
84
- else{
85
- if(this.isFullscreen()){
86
- this.leaveFullscreen()
87
- } else {
88
- this.goFullscreen()
89
- }
90
- }
91
- },
92
- leaveFullscreen: function(){
93
- if (this.isFullscreen()) {
94
- if (document.exitFullscreen) {
95
- document.exitFullscreen();
96
- } else if (document.mozCancelFullScreen) { /* Firefox */
97
- document.mozCancelFullScreen();
98
- } else if (document.webkitExitFullscreen) { /* Chrome, Safari and Opera */
99
- document.webkitExitFullscreen();
100
- } else if (document.msExitFullscreen) { /* IE/Edge */
101
- document.msExitFullscreen();
102
- }
103
- }
104
- },
105
- goFullscreen: function(){
106
- let mapApp = this.$refs.MapApp;
107
- if (mapApp.requestFullscreen) {
108
- mapApp.requestFullscreen();
109
- } else if (mapApp.mozRequestFullScreen) { /* Firefox */
110
- mapApp.mozRequestFullScreen();
111
- } else if (mapApp.webkitRequestFullscreen) { /* Chrome, Safari and Opera */
112
- mapApp.webkitRequestFullscreen();
113
- } else if (parent.msRequestFullscreen) { /* IE/Edge */
114
- mapApp.msRequestFullscreen();
115
- }
116
- },
117
- setState: function(state){
118
- return this.$refs.flow.setState(state);
119
- },
120
- getState: function(){
121
- return this.$refs.flow.getState();
122
- },
123
- /**
124
- * Provide a way to set the current view, this is currently limited
125
- * to setting view for flatmapm, multiflatmap or scaffold.
126
- * In the case of the multiflatmap, it will not create a new entry and
127
- * instead change the current entry by setting the state.
128
- *
129
- */
130
- setCurrentEntry: function(state) {
131
- if (state && state.type) {
132
- if (state.type === "Scaffold" && state.url) {
133
- //State for scaffold containing the following items:
134
- // label - Setting the name of the dialog
135
- // region - Which region/group currently focusing on
136
- // resource - the url to metadata
137
- // state - state to restore (viewport)
138
- // viewUrl - relative path of the view file to metadata
139
- const newView = {
140
- type: state.type,
141
- label: state.label,
142
- region: state.region,
143
- resource: state.url,
144
- state: state.state,
145
- viewUrl: state.viewUrl
146
- };
147
- this.$refs.flow.createNewEntry(newView);
148
- } else if (state.type === "MultiFlatmap") {
149
- //State for scaffold containing the following items:
150
- // label - Setting the name of the dialog
151
- // taxo - taxo of species to set
152
- // biologicalSex - biological sex to be displayed (PATO)
153
- // organ - Target organ, flatmap will conduct a local search
154
- // using this
155
-
156
- //Look for the key in the available species array,
157
- //it will use the taxo and biologicalSex as hints.
158
- const key = findSpeciesKey(state);
159
- if (key) {
160
- const currentState = this.getState();
161
- if (currentState && currentState.entries) {
162
- for (let i = 0; i < currentState.entries.length; i++) {
163
- const entry = currentState.entries[i];
164
- if (entry.type === "MultiFlatmap") {
165
- entry.resource = key;
166
- entry.state = {species: key};
167
- if (state.organ || state.uuid) {
168
- entry.state.state = { searchTerm: state.organ, uuid: state.uuid };
169
- //if it contains an uuid, use the taxo to help identify if the uuid
170
- //is current
171
- if (state.uuid) entry.state.state.entry = state.taxo;
172
- }
173
- this.$refs.flow.setState(currentState);
174
- //Do not create a new entry, instead set the multiflatmap viewer
175
- //to the primary slot
176
- this.$refs.flow.setIdToPrimaryPane(entry.id);
177
- break;
178
- }
179
- }
180
- }
181
- }
182
- }
183
- else if (state.type === "Flatmap") {
184
- //State for scaffold containing the following items:
185
- // label - Setting the name of the dialog
186
- // region - Which region/group currently focusing on
187
- // resource - the url to metadata
188
- // state - state to restore (viewport)
189
- // viewUrl - relative path of the view file to metadata
190
- const newView = {
191
- type: state.type,
192
- resource: state.resource,
193
- state: state.state,
194
- label: state.label
195
- };
196
- this.$refs.flow.createNewEntry(newView);
197
- }
198
- }
199
- },
200
- /**
201
- * Open the sidebar with the specified facets and query.
202
- */
203
- openSearch: function(facets, query) {
204
- return this.$refs.flow.openSearch(facets, query);
205
- },
206
- flowMounted: function () {
207
- this._flowMounted = true;
208
- this.$emit("isReady");
209
- },
210
- },
211
- computed: {
212
- ...mapStores(useSettingsStore),
213
- stateToSet() {
214
- return this.state ? this.state : this.initialState;
215
- },
216
- },
217
- watch: {
218
- "shareLink" : {
219
- handler: function (newLink) {
220
- this.settingsStore.updateShareLink(newLink);
221
- },
222
- immediate: true,
223
- },
224
- },
225
- beforeMount: function() {
226
- if (this.options) {
227
- // Split options prop up to commit to the store
228
- this.options.sparcApi ? this.settingsStore.updateSparcAPI(this.options.sparcApi) : null
229
- this.options.algoliaIndex ? this.settingsStore.updateAlgoliaIndex(this.options.algoliaIndex) : null
230
- this.options.algoliaKey ? this.settingsStore.updateAlgoliaKey(this.options.algoliaKey) : null
231
- this.options.algoliaId ? this.settingsStore.updateAlgoliaId(this.options.algoliaId) : null
232
- this.options.pennsieveApi ? this.settingsStore.updatePennsieveApi(this.options.pennsieveApi) : null
233
- this.options.flatmapAPI ? this.settingsStore.updateFlatmapAPI(this.options.flatmapAPI) : null,
234
- this.options.nlLinkPrefix ? this.settingsStore.updateNLLinkPrefix(this.options.nlLinkPrefix) : null
235
- this.options.rootUrl ? this.settingsStore.updateRootUrl(this.options.rootUrl) : null
236
- }
237
- },
238
- mounted: async function() {
239
- EventBus.on("updateShareLinkRequested", () => {
240
- this.$emit("updateShareLinkRequested");
241
- });
242
- if (!this.state) {
243
- this.initialState = await initialState(this.startingMap, this.options.sparcApi);
244
- }
245
- this.isReady = true;
246
- }
247
- }
248
-
249
- </script>
250
-
251
- <style scoped lang="scss">
252
-
253
- :deep(.el-loading-spinner) {
254
- .path {
255
- stroke: $app-primary-color;
256
- }
257
- .el-loading-text {
258
- color: $app-primary-color;
259
- }
260
- }
261
-
262
- .map-help-dialog {
263
- position: fixed;
264
- z-index: 20;
265
- bottom: 30px;
266
- right: 30px;
267
- }
268
-
269
- .mapcontent {
270
- height: 100%;
271
- width:100%;
272
- z-index:1;
273
- }
274
-
275
- </style>
276
-
277
- <style lang="scss">
278
-
279
- .mapcontent {
280
- --el-color-primary: #8300BF;
281
- --el-color-primary-light-7: #dab3ec;
282
- --el-color-primary-light-8: #e6ccf2;
283
- --el-color-primary-light-9: #f3e6f9;
284
- }
285
-
1
+ <template>
2
+ <div
3
+ ref="MapApp"
4
+ v-loading="!isReady"
5
+ class="mapcontent"
6
+ element-loading-text="Loading..."
7
+ element-loading-background="rgba(0, 0, 0, 0.3)"
8
+ >
9
+ <map-svg-sprite-color/>
10
+ <SplitFlow
11
+ v-if="isReady"
12
+ @onFullscreen="onFullscreen"
13
+ :state="stateToSet"
14
+ ref="flow"
15
+ @vue:mounted="flowMounted"
16
+ />
17
+ </div>
18
+ </template>
19
+
20
+ <script>
21
+ /* eslint-disable no-alert, no-console */
22
+ import SplitFlow from './SplitFlow.vue';
23
+ import EventBus from './EventBus';
24
+ import { mapStores } from 'pinia';
25
+ import { useSettingsStore } from '../stores/settings';
26
+ import { findSpeciesKey } from './scripts/utilities.js';
27
+ import { MapSvgSpriteColor} from '@abi-software/svg-sprite';
28
+ import { initialState } from "./scripts/utilities.js";
29
+ import RetrieveContextCardMixin from "../mixins/RetrieveContextCardMixin.js"
30
+ import {
31
+ ElLoading as Loading
32
+ } from "element-plus";
33
+
34
+ /**
35
+ * Content of the app. More work flows will be added here.
36
+ */
37
+ export default {
38
+ name: "MapContent",
39
+ components: {
40
+ MapSvgSpriteColor,
41
+ Loading,
42
+ SplitFlow,
43
+ },
44
+ mixins: [RetrieveContextCardMixin],
45
+ props: {
46
+ /**
47
+ * A link (URL) to share.
48
+ */
49
+ shareLink: {
50
+ type: String,
51
+ default: undefined
52
+ },
53
+ /**
54
+ * State containing state of the scaffold.
55
+ */
56
+ state: {
57
+ type: Object,
58
+ default: undefined
59
+ },
60
+ /**
61
+ * The options include APIs and Keys.
62
+ */
63
+ options: {
64
+ type: Object,
65
+ default: () => {},
66
+ required: true
67
+ },
68
+ /**
69
+ * New option to start the map in AC, FC or WholeBody.
70
+ */
71
+ startingMap: {
72
+ type: String,
73
+ default: "AC"
74
+ }
75
+ },
76
+ data: function () {
77
+ return {
78
+ isReady: false,
79
+ initialState: undefined,
80
+ }
81
+ },
82
+ methods: {
83
+ /**
84
+ * @vuese
85
+ * Function to check whether it is in fullscreen mode or not.
86
+ *
87
+ */
88
+ isFullscreen: function(){
89
+ return (document.fullscreenElement || document.webkitFullscreenElement ||
90
+ document.mozFullScreenElement || document.msFullscreenElement )
91
+ },
92
+ /**
93
+ * @vuese
94
+ * Function to toggle fullscreen.
95
+ * @arg fullscreenRequest
96
+ */
97
+ onFullscreen: function(fullscreenReq) {
98
+ //If a request is sent, try it
99
+ if (fullscreenReq !== undefined){
100
+ if (fullscreenReq && !this.isFullscreen()){
101
+ this.goFullscreen()
102
+ }
103
+ if(!fullscreenReq && this.isFullscreen()){
104
+ this.leaveFullscreen()
105
+ }
106
+ }
107
+ // Else we toggle fullscreen
108
+ else{
109
+ if(this.isFullscreen()){
110
+ this.leaveFullscreen()
111
+ } else {
112
+ this.goFullscreen()
113
+ }
114
+ }
115
+ },
116
+ /**
117
+ * @vuese
118
+ * Function to leave fullscreen mode.
119
+ */
120
+ leaveFullscreen: function(){
121
+ if (this.isFullscreen()) {
122
+ if (document.exitFullscreen) {
123
+ document.exitFullscreen();
124
+ } else if (document.mozCancelFullScreen) { /* Firefox */
125
+ document.mozCancelFullScreen();
126
+ } else if (document.webkitExitFullscreen) { /* Chrome, Safari and Opera */
127
+ document.webkitExitFullscreen();
128
+ } else if (document.msExitFullscreen) { /* IE/Edge */
129
+ document.msExitFullscreen();
130
+ }
131
+ }
132
+ },
133
+ /**
134
+ * @vuese
135
+ * Function to go to fullscreen mode.
136
+ */
137
+ goFullscreen: function(){
138
+ let mapApp = this.$refs.MapApp;
139
+ if (mapApp.requestFullscreen) {
140
+ mapApp.requestFullscreen();
141
+ } else if (mapApp.mozRequestFullScreen) { /* Firefox */
142
+ mapApp.mozRequestFullScreen();
143
+ } else if (mapApp.webkitRequestFullscreen) { /* Chrome, Safari and Opera */
144
+ mapApp.webkitRequestFullscreen();
145
+ } else if (parent.msRequestFullscreen) { /* IE/Edge */
146
+ mapApp.msRequestFullscreen();
147
+ }
148
+ },
149
+ setState: function(state){
150
+ return this.$refs.flow.setState(state);
151
+ },
152
+ getState: function(){
153
+ return this.$refs.flow.getState();
154
+ },
155
+ /**
156
+ * @vuese
157
+ * Provide a way to set the current view, this is currently limited
158
+ * to setting view for flatmapm, multiflatmap or scaffold.
159
+ * In the case of the multiflatmap, it will not create a new entry and
160
+ * instead change the current entry by setting the state.
161
+ * @arg state
162
+ */
163
+ setCurrentEntry: async function(state) {
164
+ if (state && state.type) {
165
+ if (state.type === "Scaffold" && state.url) {
166
+ //State for scaffold containing the following items:
167
+ // label - Setting the name of the dialog
168
+ // region - Which region/group currently focusing on
169
+ // resource - the url to metadata
170
+ // state - state to restore (viewport)
171
+ // viewUrl - relative path of the view file to metadata
172
+ let newView = {
173
+ type: state.type,
174
+ label: state.label,
175
+ region: state.region,
176
+ resource: state.url,
177
+ state: state.state,
178
+ viewUrl: state.viewUrl
179
+ };
180
+ // Add content from scicrunch for the context card
181
+ const contextCardInfo = await this.retrieveContextCardFromUrl(state.url);
182
+ newView = {...newView, ...contextCardInfo};
183
+ this.$refs.flow.createNewEntry(newView);
184
+ } else if (state.type === "MultiFlatmap") {
185
+ //State for scaffold containing the following items:
186
+ // label - Setting the name of the dialog
187
+ // taxo - taxo of species to set
188
+ // biologicalSex - biological sex to be displayed (PATO)
189
+ // organ - Target organ, flatmap will conduct a local search
190
+ // using this
191
+
192
+ //Look for the key in the available species array,
193
+ //it will use the taxo and biologicalSex as hints.
194
+ const key = findSpeciesKey(state);
195
+ if (key) {
196
+ const currentState = this.getState();
197
+ if (currentState && currentState.entries) {
198
+ for (let i = 0; i < currentState.entries.length; i++) {
199
+ const entry = currentState.entries[i];
200
+ if (entry.type === "MultiFlatmap") {
201
+ entry.resource = key;
202
+ entry.state = {species: key};
203
+ if (state.organ || state.uuid) {
204
+ entry.state.state = { searchTerm: state.organ, uuid: state.uuid };
205
+ //if it contains an uuid, use the taxo to help identify if the uuid
206
+ //is current
207
+ if (state.uuid) entry.state.state.entry = state.taxo;
208
+ }
209
+ this.$refs.flow.setState(currentState);
210
+ //Do not create a new entry, instead set the multiflatmap viewer
211
+ //to the primary slot
212
+ this.$refs.flow.setIdToPrimaryPane(entry.id);
213
+ break;
214
+ }
215
+ }
216
+ }
217
+ }
218
+ }
219
+ else if (state.type === "Flatmap") {
220
+ //State for scaffold containing the following items:
221
+ // label - Setting the name of the dialog
222
+ // region - Which region/group currently focusing on
223
+ // resource - the url to metadata
224
+ // state - state to restore (viewport)
225
+ // viewUrl - relative path of the view file to metadata
226
+ const newView = {
227
+ type: state.type,
228
+ resource: state.resource,
229
+ state: state.state,
230
+ label: state.label
231
+ };
232
+ this.$refs.flow.createNewEntry(newView);
233
+ }
234
+ }
235
+ },
236
+ /**
237
+ * @vuese
238
+ * Open the sidebar with the specified facets and query.
239
+ * @arg facets, query
240
+ */
241
+ openSearch: function(facets, query) {
242
+ return this.$refs.flow.openSearch(facets, query);
243
+ },
244
+ /**
245
+ * @vuese
246
+ * Function to run when the component is mounted.
247
+ */
248
+ flowMounted: function () {
249
+ this._flowMounted = true;
250
+ /**
251
+ * This event emit when the component is mounted.
252
+ */
253
+ this.$emit("isReady");
254
+ },
255
+ },
256
+ computed: {
257
+ ...mapStores(useSettingsStore),
258
+ stateToSet() {
259
+ return this.state ? this.state : this.initialState;
260
+ },
261
+ },
262
+ watch: {
263
+ "shareLink" : {
264
+ handler: function (newLink) {
265
+ this.settingsStore.updateShareLink(newLink);
266
+ },
267
+ immediate: true,
268
+ },
269
+ },
270
+ beforeMount: function() {
271
+ if (this.options) {
272
+ // Split options prop up to commit to the store
273
+ this.options.sparcApi ? this.settingsStore.updateSparcAPI(this.options.sparcApi) : null
274
+ this.options.algoliaIndex ? this.settingsStore.updateAlgoliaIndex(this.options.algoliaIndex) : null
275
+ this.options.algoliaKey ? this.settingsStore.updateAlgoliaKey(this.options.algoliaKey) : null
276
+ this.options.algoliaId ? this.settingsStore.updateAlgoliaId(this.options.algoliaId) : null
277
+ this.options.pennsieveApi ? this.settingsStore.updatePennsieveApi(this.options.pennsieveApi) : null
278
+ this.options.flatmapAPI ? this.settingsStore.updateFlatmapAPI(this.options.flatmapAPI) : null,
279
+ this.options.nlLinkPrefix ? this.settingsStore.updateNLLinkPrefix(this.options.nlLinkPrefix) : null
280
+ this.options.rootUrl ? this.settingsStore.updateRootUrl(this.options.rootUrl) : null
281
+ }
282
+ },
283
+ mounted: async function() {
284
+ EventBus.on("updateShareLinkRequested", () => {
285
+ /**
286
+ * This event emits when the share link is requested.
287
+ */
288
+ this.$emit("updateShareLinkRequested");
289
+ });
290
+ if (!this.state) {
291
+ this.initialState = await initialState(this.startingMap, this.options.sparcApi);
292
+ }
293
+ this.isReady = true;
294
+ }
295
+ }
296
+
297
+ </script>
298
+
299
+ <style scoped lang="scss">
300
+
301
+ :deep(.el-loading-spinner) {
302
+ .path {
303
+ stroke: $app-primary-color;
304
+ }
305
+ .el-loading-text {
306
+ color: $app-primary-color;
307
+ }
308
+ }
309
+
310
+ .map-help-dialog {
311
+ position: fixed;
312
+ z-index: 20;
313
+ bottom: 30px;
314
+ right: 30px;
315
+ }
316
+
317
+ .mapcontent {
318
+ height: 100%;
319
+ width:100%;
320
+ z-index:1;
321
+ }
322
+
323
+ </style>
324
+
325
+ <style lang="scss">
326
+
327
+ .mapcontent {
328
+ --el-color-primary: #8300BF;
329
+ --el-color-primary-light-7: #dab3ec;
330
+ --el-color-primary-light-8: #e6ccf2;
331
+ --el-color-primary-light-9: #f3e6f9;
332
+ }
333
+
286
334
  </style>