diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js index f2de86c..dec2bb9 100644 --- a/build/webpack.base.conf.js +++ b/build/webpack.base.conf.js @@ -44,7 +44,10 @@ } }, externals: { - 'sapoOcx': 'sapoOcx' + 'sapoOcx': 'sapoOcx', + 'FMap': 'FMap', + 'FUtil': 'FUtil', + 'Options': 'Options' }, module: { rules: [ diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js index f2de86c..dec2bb9 100644 --- a/build/webpack.base.conf.js +++ b/build/webpack.base.conf.js @@ -44,7 +44,10 @@ } }, externals: { - 'sapoOcx': 'sapoOcx' + 'sapoOcx': 'sapoOcx', + 'FMap': 'FMap', + 'FUtil': 'FUtil', + 'Options': 'Options' }, module: { rules: [ diff --git a/index.html b/index.html index eeac1bb..b294ef8 100644 --- a/index.html +++ b/index.html @@ -3,12 +3,15 @@ + + +
+ + diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js index f2de86c..dec2bb9 100644 --- a/build/webpack.base.conf.js +++ b/build/webpack.base.conf.js @@ -44,7 +44,10 @@ } }, externals: { - 'sapoOcx': 'sapoOcx' + 'sapoOcx': 'sapoOcx', + 'FMap': 'FMap', + 'FUtil': 'FUtil', + 'Options': 'Options' }, module: { rules: [ diff --git a/index.html b/index.html index eeac1bb..b294ef8 100644 --- a/index.html +++ b/index.html @@ -3,12 +3,15 @@ + + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js index f2de86c..dec2bb9 100644 --- a/build/webpack.base.conf.js +++ b/build/webpack.base.conf.js @@ -44,7 +44,10 @@ } }, externals: { - 'sapoOcx': 'sapoOcx' + 'sapoOcx': 'sapoOcx', + 'FMap': 'FMap', + 'FUtil': 'FUtil', + 'Options': 'Options' }, module: { rules: [ diff --git a/index.html b/index.html index eeac1bb..b294ef8 100644 --- a/index.html +++ b/index.html @@ -3,12 +3,15 @@ + + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/src/components/fMap/base/events.js b/src/components/fMap/base/events.js new file mode 100644 index 0000000..b8a8a2c --- /dev/null +++ b/src/components/fMap/base/events.js @@ -0,0 +1,24 @@ +export default { + 'map': [ + 'click', + 'dblclick', + 'singleclick', + 'rtclick', + 'moveend', + 'movestart', + 'prointerdrag', + 'pointermove' + ], + 'view': [ + 'change:zoom', + 'change:center' + ], + 'layer': [ + 'create', + 'clear', + 'change:opacity', + 'change:source', + 'change:visible', + 'change:zIndex' + ] +} diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js index f2de86c..dec2bb9 100644 --- a/build/webpack.base.conf.js +++ b/build/webpack.base.conf.js @@ -44,7 +44,10 @@ } }, externals: { - 'sapoOcx': 'sapoOcx' + 'sapoOcx': 'sapoOcx', + 'FMap': 'FMap', + 'FUtil': 'FUtil', + 'Options': 'Options' }, module: { rules: [ diff --git a/index.html b/index.html index eeac1bb..b294ef8 100644 --- a/index.html +++ b/index.html @@ -3,12 +3,15 @@ + + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/src/components/fMap/base/events.js b/src/components/fMap/base/events.js new file mode 100644 index 0000000..b8a8a2c --- /dev/null +++ b/src/components/fMap/base/events.js @@ -0,0 +1,24 @@ +export default { + 'map': [ + 'click', + 'dblclick', + 'singleclick', + 'rtclick', + 'moveend', + 'movestart', + 'prointerdrag', + 'pointermove' + ], + 'view': [ + 'change:zoom', + 'change:center' + ], + 'layer': [ + 'create', + 'clear', + 'change:opacity', + 'change:source', + 'change:visible', + 'change:zIndex' + ] +} diff --git a/src/components/fMap/base/factory.js b/src/components/fMap/base/factory.js new file mode 100644 index 0000000..0f1e497 --- /dev/null +++ b/src/components/fMap/base/factory.js @@ -0,0 +1,4 @@ +export function createPoint (options = {}) { + const { lng, lat } = options + return [lng, lat] +} diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js index f2de86c..dec2bb9 100644 --- a/build/webpack.base.conf.js +++ b/build/webpack.base.conf.js @@ -44,7 +44,10 @@ } }, externals: { - 'sapoOcx': 'sapoOcx' + 'sapoOcx': 'sapoOcx', + 'FMap': 'FMap', + 'FUtil': 'FUtil', + 'Options': 'Options' }, module: { rules: [ diff --git a/index.html b/index.html index eeac1bb..b294ef8 100644 --- a/index.html +++ b/index.html @@ -3,12 +3,15 @@ + + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/src/components/fMap/base/events.js b/src/components/fMap/base/events.js new file mode 100644 index 0000000..b8a8a2c --- /dev/null +++ b/src/components/fMap/base/events.js @@ -0,0 +1,24 @@ +export default { + 'map': [ + 'click', + 'dblclick', + 'singleclick', + 'rtclick', + 'moveend', + 'movestart', + 'prointerdrag', + 'pointermove' + ], + 'view': [ + 'change:zoom', + 'change:center' + ], + 'layer': [ + 'create', + 'clear', + 'change:opacity', + 'change:source', + 'change:visible', + 'change:zIndex' + ] +} diff --git a/src/components/fMap/base/factory.js b/src/components/fMap/base/factory.js new file mode 100644 index 0000000..0f1e497 --- /dev/null +++ b/src/components/fMap/base/factory.js @@ -0,0 +1,4 @@ +export function createPoint (options = {}) { + const { lng, lat } = options + return [lng, lat] +} diff --git a/src/components/fMap/base/loadScript.js b/src/components/fMap/base/loadScript.js new file mode 100644 index 0000000..18112fd --- /dev/null +++ b/src/components/fMap/base/loadScript.js @@ -0,0 +1,60 @@ +const callbacks = {} + +/** + * 加载一个远程脚本 + * @param {String} src 一个远程脚本 + * @param {Function} callback 回调 + */ +function loadScript(src, callback) { + const existingScript = document.getElementById(src) + const cb = callback || (() => {}) + if (!existingScript) { + callbacks[src] = [] + const $script = document.createElement('script') + $script.src = src + $script.id = src + $script.async = 1 + document.body.appendChild($script) + const onEnd = 'onload' in $script ? stdOnEnd.bind($script) : ieOnEnd.bind($script) + onEnd($script) + } + + callbacks[src].push(cb) + + function stdOnEnd(script) { + script.onload = () => { + this.onerror = this.onload = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + script.onerror = () => { + this.onerror = this.onload = null + cb(new Error(`Failed to load ${src}`), script) + } + } + + function ieOnEnd(script) { + script.onreadystatechange = () => { + if (this.readyState !== 'complete' && this.readyState !== 'loaded') return + this.onreadystatechange = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + } +} + +/** + * 顺序加载一组远程脚本 + * @param {Array} list 一组远程脚本 + * @param {Function} cb 回调 + */ +export function loadScriptQueue(list, cb) { + const first = list.shift() + list.length ? loadScript(first, () => loadScriptQueue(list, cb)) : loadScript(first, cb) +} + +export default loadScript diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js index f2de86c..dec2bb9 100644 --- a/build/webpack.base.conf.js +++ b/build/webpack.base.conf.js @@ -44,7 +44,10 @@ } }, externals: { - 'sapoOcx': 'sapoOcx' + 'sapoOcx': 'sapoOcx', + 'FMap': 'FMap', + 'FUtil': 'FUtil', + 'Options': 'Options' }, module: { rules: [ diff --git a/index.html b/index.html index eeac1bb..b294ef8 100644 --- a/index.html +++ b/index.html @@ -3,12 +3,15 @@ + + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/src/components/fMap/base/events.js b/src/components/fMap/base/events.js new file mode 100644 index 0000000..b8a8a2c --- /dev/null +++ b/src/components/fMap/base/events.js @@ -0,0 +1,24 @@ +export default { + 'map': [ + 'click', + 'dblclick', + 'singleclick', + 'rtclick', + 'moveend', + 'movestart', + 'prointerdrag', + 'pointermove' + ], + 'view': [ + 'change:zoom', + 'change:center' + ], + 'layer': [ + 'create', + 'clear', + 'change:opacity', + 'change:source', + 'change:visible', + 'change:zIndex' + ] +} diff --git a/src/components/fMap/base/factory.js b/src/components/fMap/base/factory.js new file mode 100644 index 0000000..0f1e497 --- /dev/null +++ b/src/components/fMap/base/factory.js @@ -0,0 +1,4 @@ +export function createPoint (options = {}) { + const { lng, lat } = options + return [lng, lat] +} diff --git a/src/components/fMap/base/loadScript.js b/src/components/fMap/base/loadScript.js new file mode 100644 index 0000000..18112fd --- /dev/null +++ b/src/components/fMap/base/loadScript.js @@ -0,0 +1,60 @@ +const callbacks = {} + +/** + * 加载一个远程脚本 + * @param {String} src 一个远程脚本 + * @param {Function} callback 回调 + */ +function loadScript(src, callback) { + const existingScript = document.getElementById(src) + const cb = callback || (() => {}) + if (!existingScript) { + callbacks[src] = [] + const $script = document.createElement('script') + $script.src = src + $script.id = src + $script.async = 1 + document.body.appendChild($script) + const onEnd = 'onload' in $script ? stdOnEnd.bind($script) : ieOnEnd.bind($script) + onEnd($script) + } + + callbacks[src].push(cb) + + function stdOnEnd(script) { + script.onload = () => { + this.onerror = this.onload = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + script.onerror = () => { + this.onerror = this.onload = null + cb(new Error(`Failed to load ${src}`), script) + } + } + + function ieOnEnd(script) { + script.onreadystatechange = () => { + if (this.readyState !== 'complete' && this.readyState !== 'loaded') return + this.onreadystatechange = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + } +} + +/** + * 顺序加载一组远程脚本 + * @param {Array} list 一组远程脚本 + * @param {Function} cb 回调 + */ +export function loadScriptQueue(list, cb) { + const first = list.shift() + list.length ? loadScript(first, () => loadScriptQueue(list, cb)) : loadScript(first, cb) +} + +export default loadScript diff --git a/src/components/fMap/base/mixins/abstract.js b/src/components/fMap/base/mixins/abstract.js new file mode 100644 index 0000000..9cf6d52 --- /dev/null +++ b/src/components/fMap/base/mixins/abstract.js @@ -0,0 +1,13 @@ +class Mixin { + constructor({ component, props, events, extraProps, exceptProps }) { + this.render = function(h) { + return h(component, { + props: props.reduce((obj, key) => Object.assign(obj, { [key]: this[key] }), {}), + on: events.reduce((obj, key) => Object.assign(obj, { [key]: this.transmitEvent }), {}) + }) + } + this.props = [...extraProps, ...props.filter(prop => exceptProps.indexOf(prop))] + } +} + +export default prop => new Mixin(prop) diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js index f2de86c..dec2bb9 100644 --- a/build/webpack.base.conf.js +++ b/build/webpack.base.conf.js @@ -44,7 +44,10 @@ } }, externals: { - 'sapoOcx': 'sapoOcx' + 'sapoOcx': 'sapoOcx', + 'FMap': 'FMap', + 'FUtil': 'FUtil', + 'Options': 'Options' }, module: { rules: [ diff --git a/index.html b/index.html index eeac1bb..b294ef8 100644 --- a/index.html +++ b/index.html @@ -3,12 +3,15 @@ + + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/src/components/fMap/base/events.js b/src/components/fMap/base/events.js new file mode 100644 index 0000000..b8a8a2c --- /dev/null +++ b/src/components/fMap/base/events.js @@ -0,0 +1,24 @@ +export default { + 'map': [ + 'click', + 'dblclick', + 'singleclick', + 'rtclick', + 'moveend', + 'movestart', + 'prointerdrag', + 'pointermove' + ], + 'view': [ + 'change:zoom', + 'change:center' + ], + 'layer': [ + 'create', + 'clear', + 'change:opacity', + 'change:source', + 'change:visible', + 'change:zIndex' + ] +} diff --git a/src/components/fMap/base/factory.js b/src/components/fMap/base/factory.js new file mode 100644 index 0000000..0f1e497 --- /dev/null +++ b/src/components/fMap/base/factory.js @@ -0,0 +1,4 @@ +export function createPoint (options = {}) { + const { lng, lat } = options + return [lng, lat] +} diff --git a/src/components/fMap/base/loadScript.js b/src/components/fMap/base/loadScript.js new file mode 100644 index 0000000..18112fd --- /dev/null +++ b/src/components/fMap/base/loadScript.js @@ -0,0 +1,60 @@ +const callbacks = {} + +/** + * 加载一个远程脚本 + * @param {String} src 一个远程脚本 + * @param {Function} callback 回调 + */ +function loadScript(src, callback) { + const existingScript = document.getElementById(src) + const cb = callback || (() => {}) + if (!existingScript) { + callbacks[src] = [] + const $script = document.createElement('script') + $script.src = src + $script.id = src + $script.async = 1 + document.body.appendChild($script) + const onEnd = 'onload' in $script ? stdOnEnd.bind($script) : ieOnEnd.bind($script) + onEnd($script) + } + + callbacks[src].push(cb) + + function stdOnEnd(script) { + script.onload = () => { + this.onerror = this.onload = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + script.onerror = () => { + this.onerror = this.onload = null + cb(new Error(`Failed to load ${src}`), script) + } + } + + function ieOnEnd(script) { + script.onreadystatechange = () => { + if (this.readyState !== 'complete' && this.readyState !== 'loaded') return + this.onreadystatechange = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + } +} + +/** + * 顺序加载一组远程脚本 + * @param {Array} list 一组远程脚本 + * @param {Function} cb 回调 + */ +export function loadScriptQueue(list, cb) { + const first = list.shift() + list.length ? loadScript(first, () => loadScriptQueue(list, cb)) : loadScript(first, cb) +} + +export default loadScript diff --git a/src/components/fMap/base/mixins/abstract.js b/src/components/fMap/base/mixins/abstract.js new file mode 100644 index 0000000..9cf6d52 --- /dev/null +++ b/src/components/fMap/base/mixins/abstract.js @@ -0,0 +1,13 @@ +class Mixin { + constructor({ component, props, events, extraProps, exceptProps }) { + this.render = function(h) { + return h(component, { + props: props.reduce((obj, key) => Object.assign(obj, { [key]: this[key] }), {}), + on: events.reduce((obj, key) => Object.assign(obj, { [key]: this.transmitEvent }), {}) + }) + } + this.props = [...extraProps, ...props.filter(prop => exceptProps.indexOf(prop))] + } +} + +export default prop => new Mixin(prop) diff --git a/src/components/fMap/base/mixins/common.js b/src/components/fMap/base/mixins/common.js new file mode 100644 index 0000000..3c9e2f0 --- /dev/null +++ b/src/components/fMap/base/mixins/common.js @@ -0,0 +1,82 @@ +const types = { + map: { + unload: 'clearMap' + }, + control: { + unload: 'removeControl' + }, + layer: { + unload: 'removeLayer' + }, + features: { + unload: 'removeFeatures' + }, + listener: { + unload: 'removeListener' + } +} + +const getParent = $component => ($component.abstract || $component.$el === $component.$children[0].$el) ? getParent($component.$parent) : $component + +function destroyInstance () { + const { unload, renderByParent, $parent } = this + if (renderByParent) { + $parent.reload() + } + unload() +} + +class Mixin { + constructor (prop) { + this.methods = { + ready () { + const $parent = getParent(this.$parent) + const fmap = this.fmap = $parent.fmap + this.load() + this.$emit('ready', { + fmap + }) + }, + transmitEvent (e) { + this.$emit(e.type.replace(/^on/, ''), e) + }, + reload () { + this && this.$nextTick(() => { + this.unload() + this.$nextTick(this.load) + }) + }, + unload () { + const {fmap, originInstance} = this + try { + switch (prop.type) { + case 'search': + return originInstance.clearResults() + case 'autoComplete': + case 'lushu': + return originInstance.dispose() + case 'markerClusterer': + return originInstance.clearMarkers() + default: + fmap[types[prop.type].unload](originInstance) + } + } catch (e) {} + } + } + this.computed = { + renderByParent () { + return this.$parent.preventChildrenRender + } + } + this.mounted = function () { + const $parent = getParent(this.$parent) + const fmap = $parent.fmap + const { ready } = this + fmap ? ready() : $parent.$on('ready', ready) + } + this.destroyed = destroyInstance + this.beforeDestroy = destroyInstance + } +} + +export default type => new Mixin({ type }) diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js index f2de86c..dec2bb9 100644 --- a/build/webpack.base.conf.js +++ b/build/webpack.base.conf.js @@ -44,7 +44,10 @@ } }, externals: { - 'sapoOcx': 'sapoOcx' + 'sapoOcx': 'sapoOcx', + 'FMap': 'FMap', + 'FUtil': 'FUtil', + 'Options': 'Options' }, module: { rules: [ diff --git a/index.html b/index.html index eeac1bb..b294ef8 100644 --- a/index.html +++ b/index.html @@ -3,12 +3,15 @@ + + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/src/components/fMap/base/events.js b/src/components/fMap/base/events.js new file mode 100644 index 0000000..b8a8a2c --- /dev/null +++ b/src/components/fMap/base/events.js @@ -0,0 +1,24 @@ +export default { + 'map': [ + 'click', + 'dblclick', + 'singleclick', + 'rtclick', + 'moveend', + 'movestart', + 'prointerdrag', + 'pointermove' + ], + 'view': [ + 'change:zoom', + 'change:center' + ], + 'layer': [ + 'create', + 'clear', + 'change:opacity', + 'change:source', + 'change:visible', + 'change:zIndex' + ] +} diff --git a/src/components/fMap/base/factory.js b/src/components/fMap/base/factory.js new file mode 100644 index 0000000..0f1e497 --- /dev/null +++ b/src/components/fMap/base/factory.js @@ -0,0 +1,4 @@ +export function createPoint (options = {}) { + const { lng, lat } = options + return [lng, lat] +} diff --git a/src/components/fMap/base/loadScript.js b/src/components/fMap/base/loadScript.js new file mode 100644 index 0000000..18112fd --- /dev/null +++ b/src/components/fMap/base/loadScript.js @@ -0,0 +1,60 @@ +const callbacks = {} + +/** + * 加载一个远程脚本 + * @param {String} src 一个远程脚本 + * @param {Function} callback 回调 + */ +function loadScript(src, callback) { + const existingScript = document.getElementById(src) + const cb = callback || (() => {}) + if (!existingScript) { + callbacks[src] = [] + const $script = document.createElement('script') + $script.src = src + $script.id = src + $script.async = 1 + document.body.appendChild($script) + const onEnd = 'onload' in $script ? stdOnEnd.bind($script) : ieOnEnd.bind($script) + onEnd($script) + } + + callbacks[src].push(cb) + + function stdOnEnd(script) { + script.onload = () => { + this.onerror = this.onload = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + script.onerror = () => { + this.onerror = this.onload = null + cb(new Error(`Failed to load ${src}`), script) + } + } + + function ieOnEnd(script) { + script.onreadystatechange = () => { + if (this.readyState !== 'complete' && this.readyState !== 'loaded') return + this.onreadystatechange = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + } +} + +/** + * 顺序加载一组远程脚本 + * @param {Array} list 一组远程脚本 + * @param {Function} cb 回调 + */ +export function loadScriptQueue(list, cb) { + const first = list.shift() + list.length ? loadScript(first, () => loadScriptQueue(list, cb)) : loadScript(first, cb) +} + +export default loadScript diff --git a/src/components/fMap/base/mixins/abstract.js b/src/components/fMap/base/mixins/abstract.js new file mode 100644 index 0000000..9cf6d52 --- /dev/null +++ b/src/components/fMap/base/mixins/abstract.js @@ -0,0 +1,13 @@ +class Mixin { + constructor({ component, props, events, extraProps, exceptProps }) { + this.render = function(h) { + return h(component, { + props: props.reduce((obj, key) => Object.assign(obj, { [key]: this[key] }), {}), + on: events.reduce((obj, key) => Object.assign(obj, { [key]: this.transmitEvent }), {}) + }) + } + this.props = [...extraProps, ...props.filter(prop => exceptProps.indexOf(prop))] + } +} + +export default prop => new Mixin(prop) diff --git a/src/components/fMap/base/mixins/common.js b/src/components/fMap/base/mixins/common.js new file mode 100644 index 0000000..3c9e2f0 --- /dev/null +++ b/src/components/fMap/base/mixins/common.js @@ -0,0 +1,82 @@ +const types = { + map: { + unload: 'clearMap' + }, + control: { + unload: 'removeControl' + }, + layer: { + unload: 'removeLayer' + }, + features: { + unload: 'removeFeatures' + }, + listener: { + unload: 'removeListener' + } +} + +const getParent = $component => ($component.abstract || $component.$el === $component.$children[0].$el) ? getParent($component.$parent) : $component + +function destroyInstance () { + const { unload, renderByParent, $parent } = this + if (renderByParent) { + $parent.reload() + } + unload() +} + +class Mixin { + constructor (prop) { + this.methods = { + ready () { + const $parent = getParent(this.$parent) + const fmap = this.fmap = $parent.fmap + this.load() + this.$emit('ready', { + fmap + }) + }, + transmitEvent (e) { + this.$emit(e.type.replace(/^on/, ''), e) + }, + reload () { + this && this.$nextTick(() => { + this.unload() + this.$nextTick(this.load) + }) + }, + unload () { + const {fmap, originInstance} = this + try { + switch (prop.type) { + case 'search': + return originInstance.clearResults() + case 'autoComplete': + case 'lushu': + return originInstance.dispose() + case 'markerClusterer': + return originInstance.clearMarkers() + default: + fmap[types[prop.type].unload](originInstance) + } + } catch (e) {} + } + } + this.computed = { + renderByParent () { + return this.$parent.preventChildrenRender + } + } + this.mounted = function () { + const $parent = getParent(this.$parent) + const fmap = $parent.fmap + const { ready } = this + fmap ? ready() : $parent.$on('ready', ready) + } + this.destroyed = destroyInstance + this.beforeDestroy = destroyInstance + } +} + +export default type => new Mixin({ type }) diff --git a/src/components/fMap/components/fMap.vue b/src/components/fMap/components/fMap.vue new file mode 100644 index 0000000..8f80f93 --- /dev/null +++ b/src/components/fMap/components/fMap.vue @@ -0,0 +1,197 @@ + + + + + + diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js index f2de86c..dec2bb9 100644 --- a/build/webpack.base.conf.js +++ b/build/webpack.base.conf.js @@ -44,7 +44,10 @@ } }, externals: { - 'sapoOcx': 'sapoOcx' + 'sapoOcx': 'sapoOcx', + 'FMap': 'FMap', + 'FUtil': 'FUtil', + 'Options': 'Options' }, module: { rules: [ diff --git a/index.html b/index.html index eeac1bb..b294ef8 100644 --- a/index.html +++ b/index.html @@ -3,12 +3,15 @@ + + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/src/components/fMap/base/events.js b/src/components/fMap/base/events.js new file mode 100644 index 0000000..b8a8a2c --- /dev/null +++ b/src/components/fMap/base/events.js @@ -0,0 +1,24 @@ +export default { + 'map': [ + 'click', + 'dblclick', + 'singleclick', + 'rtclick', + 'moveend', + 'movestart', + 'prointerdrag', + 'pointermove' + ], + 'view': [ + 'change:zoom', + 'change:center' + ], + 'layer': [ + 'create', + 'clear', + 'change:opacity', + 'change:source', + 'change:visible', + 'change:zIndex' + ] +} diff --git a/src/components/fMap/base/factory.js b/src/components/fMap/base/factory.js new file mode 100644 index 0000000..0f1e497 --- /dev/null +++ b/src/components/fMap/base/factory.js @@ -0,0 +1,4 @@ +export function createPoint (options = {}) { + const { lng, lat } = options + return [lng, lat] +} diff --git a/src/components/fMap/base/loadScript.js b/src/components/fMap/base/loadScript.js new file mode 100644 index 0000000..18112fd --- /dev/null +++ b/src/components/fMap/base/loadScript.js @@ -0,0 +1,60 @@ +const callbacks = {} + +/** + * 加载一个远程脚本 + * @param {String} src 一个远程脚本 + * @param {Function} callback 回调 + */ +function loadScript(src, callback) { + const existingScript = document.getElementById(src) + const cb = callback || (() => {}) + if (!existingScript) { + callbacks[src] = [] + const $script = document.createElement('script') + $script.src = src + $script.id = src + $script.async = 1 + document.body.appendChild($script) + const onEnd = 'onload' in $script ? stdOnEnd.bind($script) : ieOnEnd.bind($script) + onEnd($script) + } + + callbacks[src].push(cb) + + function stdOnEnd(script) { + script.onload = () => { + this.onerror = this.onload = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + script.onerror = () => { + this.onerror = this.onload = null + cb(new Error(`Failed to load ${src}`), script) + } + } + + function ieOnEnd(script) { + script.onreadystatechange = () => { + if (this.readyState !== 'complete' && this.readyState !== 'loaded') return + this.onreadystatechange = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + } +} + +/** + * 顺序加载一组远程脚本 + * @param {Array} list 一组远程脚本 + * @param {Function} cb 回调 + */ +export function loadScriptQueue(list, cb) { + const first = list.shift() + list.length ? loadScript(first, () => loadScriptQueue(list, cb)) : loadScript(first, cb) +} + +export default loadScript diff --git a/src/components/fMap/base/mixins/abstract.js b/src/components/fMap/base/mixins/abstract.js new file mode 100644 index 0000000..9cf6d52 --- /dev/null +++ b/src/components/fMap/base/mixins/abstract.js @@ -0,0 +1,13 @@ +class Mixin { + constructor({ component, props, events, extraProps, exceptProps }) { + this.render = function(h) { + return h(component, { + props: props.reduce((obj, key) => Object.assign(obj, { [key]: this[key] }), {}), + on: events.reduce((obj, key) => Object.assign(obj, { [key]: this.transmitEvent }), {}) + }) + } + this.props = [...extraProps, ...props.filter(prop => exceptProps.indexOf(prop))] + } +} + +export default prop => new Mixin(prop) diff --git a/src/components/fMap/base/mixins/common.js b/src/components/fMap/base/mixins/common.js new file mode 100644 index 0000000..3c9e2f0 --- /dev/null +++ b/src/components/fMap/base/mixins/common.js @@ -0,0 +1,82 @@ +const types = { + map: { + unload: 'clearMap' + }, + control: { + unload: 'removeControl' + }, + layer: { + unload: 'removeLayer' + }, + features: { + unload: 'removeFeatures' + }, + listener: { + unload: 'removeListener' + } +} + +const getParent = $component => ($component.abstract || $component.$el === $component.$children[0].$el) ? getParent($component.$parent) : $component + +function destroyInstance () { + const { unload, renderByParent, $parent } = this + if (renderByParent) { + $parent.reload() + } + unload() +} + +class Mixin { + constructor (prop) { + this.methods = { + ready () { + const $parent = getParent(this.$parent) + const fmap = this.fmap = $parent.fmap + this.load() + this.$emit('ready', { + fmap + }) + }, + transmitEvent (e) { + this.$emit(e.type.replace(/^on/, ''), e) + }, + reload () { + this && this.$nextTick(() => { + this.unload() + this.$nextTick(this.load) + }) + }, + unload () { + const {fmap, originInstance} = this + try { + switch (prop.type) { + case 'search': + return originInstance.clearResults() + case 'autoComplete': + case 'lushu': + return originInstance.dispose() + case 'markerClusterer': + return originInstance.clearMarkers() + default: + fmap[types[prop.type].unload](originInstance) + } + } catch (e) {} + } + } + this.computed = { + renderByParent () { + return this.$parent.preventChildrenRender + } + } + this.mounted = function () { + const $parent = getParent(this.$parent) + const fmap = $parent.fmap + const { ready } = this + fmap ? ready() : $parent.$on('ready', ready) + } + this.destroyed = destroyInstance + this.beforeDestroy = destroyInstance + } +} + +export default type => new Mixin({ type }) diff --git a/src/components/fMap/components/fMap.vue b/src/components/fMap/components/fMap.vue new file mode 100644 index 0000000..8f80f93 --- /dev/null +++ b/src/components/fMap/components/fMap.vue @@ -0,0 +1,197 @@ + + + + + + diff --git a/src/utils/request.js b/src/utils/request.js index 517107c..da89ae9 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -35,7 +35,7 @@ const res = response.data if (res instanceof Blob) { return response - } else if (res.code !== 200) { + } else if (res.code !== 200 && res.code !== '1') { // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了; if (res.code === 401 || res.code === 50012 || res.code === 50014) { MessageBox.confirm( diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js index f2de86c..dec2bb9 100644 --- a/build/webpack.base.conf.js +++ b/build/webpack.base.conf.js @@ -44,7 +44,10 @@ } }, externals: { - 'sapoOcx': 'sapoOcx' + 'sapoOcx': 'sapoOcx', + 'FMap': 'FMap', + 'FUtil': 'FUtil', + 'Options': 'Options' }, module: { rules: [ diff --git a/index.html b/index.html index eeac1bb..b294ef8 100644 --- a/index.html +++ b/index.html @@ -3,12 +3,15 @@ + + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/src/components/fMap/base/events.js b/src/components/fMap/base/events.js new file mode 100644 index 0000000..b8a8a2c --- /dev/null +++ b/src/components/fMap/base/events.js @@ -0,0 +1,24 @@ +export default { + 'map': [ + 'click', + 'dblclick', + 'singleclick', + 'rtclick', + 'moveend', + 'movestart', + 'prointerdrag', + 'pointermove' + ], + 'view': [ + 'change:zoom', + 'change:center' + ], + 'layer': [ + 'create', + 'clear', + 'change:opacity', + 'change:source', + 'change:visible', + 'change:zIndex' + ] +} diff --git a/src/components/fMap/base/factory.js b/src/components/fMap/base/factory.js new file mode 100644 index 0000000..0f1e497 --- /dev/null +++ b/src/components/fMap/base/factory.js @@ -0,0 +1,4 @@ +export function createPoint (options = {}) { + const { lng, lat } = options + return [lng, lat] +} diff --git a/src/components/fMap/base/loadScript.js b/src/components/fMap/base/loadScript.js new file mode 100644 index 0000000..18112fd --- /dev/null +++ b/src/components/fMap/base/loadScript.js @@ -0,0 +1,60 @@ +const callbacks = {} + +/** + * 加载一个远程脚本 + * @param {String} src 一个远程脚本 + * @param {Function} callback 回调 + */ +function loadScript(src, callback) { + const existingScript = document.getElementById(src) + const cb = callback || (() => {}) + if (!existingScript) { + callbacks[src] = [] + const $script = document.createElement('script') + $script.src = src + $script.id = src + $script.async = 1 + document.body.appendChild($script) + const onEnd = 'onload' in $script ? stdOnEnd.bind($script) : ieOnEnd.bind($script) + onEnd($script) + } + + callbacks[src].push(cb) + + function stdOnEnd(script) { + script.onload = () => { + this.onerror = this.onload = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + script.onerror = () => { + this.onerror = this.onload = null + cb(new Error(`Failed to load ${src}`), script) + } + } + + function ieOnEnd(script) { + script.onreadystatechange = () => { + if (this.readyState !== 'complete' && this.readyState !== 'loaded') return + this.onreadystatechange = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + } +} + +/** + * 顺序加载一组远程脚本 + * @param {Array} list 一组远程脚本 + * @param {Function} cb 回调 + */ +export function loadScriptQueue(list, cb) { + const first = list.shift() + list.length ? loadScript(first, () => loadScriptQueue(list, cb)) : loadScript(first, cb) +} + +export default loadScript diff --git a/src/components/fMap/base/mixins/abstract.js b/src/components/fMap/base/mixins/abstract.js new file mode 100644 index 0000000..9cf6d52 --- /dev/null +++ b/src/components/fMap/base/mixins/abstract.js @@ -0,0 +1,13 @@ +class Mixin { + constructor({ component, props, events, extraProps, exceptProps }) { + this.render = function(h) { + return h(component, { + props: props.reduce((obj, key) => Object.assign(obj, { [key]: this[key] }), {}), + on: events.reduce((obj, key) => Object.assign(obj, { [key]: this.transmitEvent }), {}) + }) + } + this.props = [...extraProps, ...props.filter(prop => exceptProps.indexOf(prop))] + } +} + +export default prop => new Mixin(prop) diff --git a/src/components/fMap/base/mixins/common.js b/src/components/fMap/base/mixins/common.js new file mode 100644 index 0000000..3c9e2f0 --- /dev/null +++ b/src/components/fMap/base/mixins/common.js @@ -0,0 +1,82 @@ +const types = { + map: { + unload: 'clearMap' + }, + control: { + unload: 'removeControl' + }, + layer: { + unload: 'removeLayer' + }, + features: { + unload: 'removeFeatures' + }, + listener: { + unload: 'removeListener' + } +} + +const getParent = $component => ($component.abstract || $component.$el === $component.$children[0].$el) ? getParent($component.$parent) : $component + +function destroyInstance () { + const { unload, renderByParent, $parent } = this + if (renderByParent) { + $parent.reload() + } + unload() +} + +class Mixin { + constructor (prop) { + this.methods = { + ready () { + const $parent = getParent(this.$parent) + const fmap = this.fmap = $parent.fmap + this.load() + this.$emit('ready', { + fmap + }) + }, + transmitEvent (e) { + this.$emit(e.type.replace(/^on/, ''), e) + }, + reload () { + this && this.$nextTick(() => { + this.unload() + this.$nextTick(this.load) + }) + }, + unload () { + const {fmap, originInstance} = this + try { + switch (prop.type) { + case 'search': + return originInstance.clearResults() + case 'autoComplete': + case 'lushu': + return originInstance.dispose() + case 'markerClusterer': + return originInstance.clearMarkers() + default: + fmap[types[prop.type].unload](originInstance) + } + } catch (e) {} + } + } + this.computed = { + renderByParent () { + return this.$parent.preventChildrenRender + } + } + this.mounted = function () { + const $parent = getParent(this.$parent) + const fmap = $parent.fmap + const { ready } = this + fmap ? ready() : $parent.$on('ready', ready) + } + this.destroyed = destroyInstance + this.beforeDestroy = destroyInstance + } +} + +export default type => new Mixin({ type }) diff --git a/src/components/fMap/components/fMap.vue b/src/components/fMap/components/fMap.vue new file mode 100644 index 0000000..8f80f93 --- /dev/null +++ b/src/components/fMap/components/fMap.vue @@ -0,0 +1,197 @@ + + + + + + diff --git a/src/utils/request.js b/src/utils/request.js index 517107c..da89ae9 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -35,7 +35,7 @@ const res = response.data if (res instanceof Blob) { return response - } else if (res.code !== 200) { + } else if (res.code !== 200 && res.code !== '1') { // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了; if (res.code === 401 || res.code === 50012 || res.code === 50014) { MessageBox.confirm( diff --git a/src/views/caseManage/createCase.vue b/src/views/caseManage/createCase.vue index 768520d..4fc7073 100644 --- a/src/views/caseManage/createCase.vue +++ b/src/views/caseManage/createCase.vue @@ -1,7 +1,7 @@ @@ -180,10 +201,11 @@ import { getNextNodeList } from '@/api/process' import { getAreaList } from '@/api/system/area' import { getCustomerList } from '@/api/customer' +import FMap from '@/components/fMap/components/fMap' export default { name: 'CreateCase', - components: { KnowledgeSearch }, + components: { KnowledgeSearch, FMap }, data() { const validateAddress = function(rule, value, callback) { console.log(value) @@ -231,7 +253,9 @@ limitedTime: '', // 事件办理期限 processWay: '', // 处理方式 processDept: '', // 处理单位 - processUser: '' // 处理人 + processUser: '', // 处理人 + lng: '0', // 事件经度 + lat: '0' // 事件纬度 }, allowAdd: true, // 允许新增联系人 addLoading: false, // 添加允许等待 @@ -248,6 +272,9 @@ caseSourceList: [], userList: [], // 处理人列表 inputSize: 'small', // 按钮样式 + showMap: false, + mapHeight: '0px', + keyword: '', rules: { caseId: [{ required: true, message: '事件编号不能为空', trigger: ['blur'] }], sound: [{ required: true, message: '来电录音编号不能为空', trigger: ['blur'] }], @@ -339,7 +366,9 @@ limitedTime: this.form.limitedTime, // 事件办理期限 processWay: '' + this.form.processWay, // 处理方式 processDept: this.form.processDept, // 处理单位 - processUser: this.form.processUser // 处理人 + processUser: this.form.processUser, // 处理人 + lng: this.form.lng, // 事件经度 + lat: this.form.lat // 事件纬度 } addCase(form).then(response => { if (response.code === 200) { @@ -526,6 +555,34 @@ const id = getToday('yyMMddhhmmss') const seat = this.$store.getters.seat this.form.caseId = id + seat + }, + showMapDiv() { + this.showMap = true + this.$refs.mapComp.initMap() + + this.mapHeight = this.$refs.caseContainer.offsetHeight + 'px' + }, + queryPoi() { + if (this.keyword === '') { + this.$message.warning('请输入关键字') + } else { + this.$refs.mapComp.queryPoi(this.keyword) + } + }, + confirmPos() { + this.form.lng = this.$refs.mapComp.longitude + this.form.lat = this.$refs.mapComp.latitude + + this.showMap = false + this.clearMap() + console.log(this.form) + }, + clearMap() { + this.$refs.mapComp.clearMap() + }, + backToForm() { + this.showMap = false + this.clearMap() } } } @@ -541,6 +598,7 @@ } .form-div{ width: calc( 100%- 300px); + /*height: 50vh;*/ .checkbox{ display: inline-block; line-height: 32px; // 设置行高 @@ -552,4 +610,9 @@ width: $rightwidth; } + #map { + width: 100%; + height: 50vh; + } + diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js index f2de86c..dec2bb9 100644 --- a/build/webpack.base.conf.js +++ b/build/webpack.base.conf.js @@ -44,7 +44,10 @@ } }, externals: { - 'sapoOcx': 'sapoOcx' + 'sapoOcx': 'sapoOcx', + 'FMap': 'FMap', + 'FUtil': 'FUtil', + 'Options': 'Options' }, module: { rules: [ diff --git a/index.html b/index.html index eeac1bb..b294ef8 100644 --- a/index.html +++ b/index.html @@ -3,12 +3,15 @@ + + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/src/components/fMap/base/events.js b/src/components/fMap/base/events.js new file mode 100644 index 0000000..b8a8a2c --- /dev/null +++ b/src/components/fMap/base/events.js @@ -0,0 +1,24 @@ +export default { + 'map': [ + 'click', + 'dblclick', + 'singleclick', + 'rtclick', + 'moveend', + 'movestart', + 'prointerdrag', + 'pointermove' + ], + 'view': [ + 'change:zoom', + 'change:center' + ], + 'layer': [ + 'create', + 'clear', + 'change:opacity', + 'change:source', + 'change:visible', + 'change:zIndex' + ] +} diff --git a/src/components/fMap/base/factory.js b/src/components/fMap/base/factory.js new file mode 100644 index 0000000..0f1e497 --- /dev/null +++ b/src/components/fMap/base/factory.js @@ -0,0 +1,4 @@ +export function createPoint (options = {}) { + const { lng, lat } = options + return [lng, lat] +} diff --git a/src/components/fMap/base/loadScript.js b/src/components/fMap/base/loadScript.js new file mode 100644 index 0000000..18112fd --- /dev/null +++ b/src/components/fMap/base/loadScript.js @@ -0,0 +1,60 @@ +const callbacks = {} + +/** + * 加载一个远程脚本 + * @param {String} src 一个远程脚本 + * @param {Function} callback 回调 + */ +function loadScript(src, callback) { + const existingScript = document.getElementById(src) + const cb = callback || (() => {}) + if (!existingScript) { + callbacks[src] = [] + const $script = document.createElement('script') + $script.src = src + $script.id = src + $script.async = 1 + document.body.appendChild($script) + const onEnd = 'onload' in $script ? stdOnEnd.bind($script) : ieOnEnd.bind($script) + onEnd($script) + } + + callbacks[src].push(cb) + + function stdOnEnd(script) { + script.onload = () => { + this.onerror = this.onload = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + script.onerror = () => { + this.onerror = this.onload = null + cb(new Error(`Failed to load ${src}`), script) + } + } + + function ieOnEnd(script) { + script.onreadystatechange = () => { + if (this.readyState !== 'complete' && this.readyState !== 'loaded') return + this.onreadystatechange = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + } +} + +/** + * 顺序加载一组远程脚本 + * @param {Array} list 一组远程脚本 + * @param {Function} cb 回调 + */ +export function loadScriptQueue(list, cb) { + const first = list.shift() + list.length ? loadScript(first, () => loadScriptQueue(list, cb)) : loadScript(first, cb) +} + +export default loadScript diff --git a/src/components/fMap/base/mixins/abstract.js b/src/components/fMap/base/mixins/abstract.js new file mode 100644 index 0000000..9cf6d52 --- /dev/null +++ b/src/components/fMap/base/mixins/abstract.js @@ -0,0 +1,13 @@ +class Mixin { + constructor({ component, props, events, extraProps, exceptProps }) { + this.render = function(h) { + return h(component, { + props: props.reduce((obj, key) => Object.assign(obj, { [key]: this[key] }), {}), + on: events.reduce((obj, key) => Object.assign(obj, { [key]: this.transmitEvent }), {}) + }) + } + this.props = [...extraProps, ...props.filter(prop => exceptProps.indexOf(prop))] + } +} + +export default prop => new Mixin(prop) diff --git a/src/components/fMap/base/mixins/common.js b/src/components/fMap/base/mixins/common.js new file mode 100644 index 0000000..3c9e2f0 --- /dev/null +++ b/src/components/fMap/base/mixins/common.js @@ -0,0 +1,82 @@ +const types = { + map: { + unload: 'clearMap' + }, + control: { + unload: 'removeControl' + }, + layer: { + unload: 'removeLayer' + }, + features: { + unload: 'removeFeatures' + }, + listener: { + unload: 'removeListener' + } +} + +const getParent = $component => ($component.abstract || $component.$el === $component.$children[0].$el) ? getParent($component.$parent) : $component + +function destroyInstance () { + const { unload, renderByParent, $parent } = this + if (renderByParent) { + $parent.reload() + } + unload() +} + +class Mixin { + constructor (prop) { + this.methods = { + ready () { + const $parent = getParent(this.$parent) + const fmap = this.fmap = $parent.fmap + this.load() + this.$emit('ready', { + fmap + }) + }, + transmitEvent (e) { + this.$emit(e.type.replace(/^on/, ''), e) + }, + reload () { + this && this.$nextTick(() => { + this.unload() + this.$nextTick(this.load) + }) + }, + unload () { + const {fmap, originInstance} = this + try { + switch (prop.type) { + case 'search': + return originInstance.clearResults() + case 'autoComplete': + case 'lushu': + return originInstance.dispose() + case 'markerClusterer': + return originInstance.clearMarkers() + default: + fmap[types[prop.type].unload](originInstance) + } + } catch (e) {} + } + } + this.computed = { + renderByParent () { + return this.$parent.preventChildrenRender + } + } + this.mounted = function () { + const $parent = getParent(this.$parent) + const fmap = $parent.fmap + const { ready } = this + fmap ? ready() : $parent.$on('ready', ready) + } + this.destroyed = destroyInstance + this.beforeDestroy = destroyInstance + } +} + +export default type => new Mixin({ type }) diff --git a/src/components/fMap/components/fMap.vue b/src/components/fMap/components/fMap.vue new file mode 100644 index 0000000..8f80f93 --- /dev/null +++ b/src/components/fMap/components/fMap.vue @@ -0,0 +1,197 @@ + + + + + + diff --git a/src/utils/request.js b/src/utils/request.js index 517107c..da89ae9 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -35,7 +35,7 @@ const res = response.data if (res instanceof Blob) { return response - } else if (res.code !== 200) { + } else if (res.code !== 200 && res.code !== '1') { // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了; if (res.code === 401 || res.code === 50012 || res.code === 50014) { MessageBox.confirm( diff --git a/src/views/caseManage/createCase.vue b/src/views/caseManage/createCase.vue index 768520d..4fc7073 100644 --- a/src/views/caseManage/createCase.vue +++ b/src/views/caseManage/createCase.vue @@ -1,7 +1,7 @@ @@ -180,10 +201,11 @@ import { getNextNodeList } from '@/api/process' import { getAreaList } from '@/api/system/area' import { getCustomerList } from '@/api/customer' +import FMap from '@/components/fMap/components/fMap' export default { name: 'CreateCase', - components: { KnowledgeSearch }, + components: { KnowledgeSearch, FMap }, data() { const validateAddress = function(rule, value, callback) { console.log(value) @@ -231,7 +253,9 @@ limitedTime: '', // 事件办理期限 processWay: '', // 处理方式 processDept: '', // 处理单位 - processUser: '' // 处理人 + processUser: '', // 处理人 + lng: '0', // 事件经度 + lat: '0' // 事件纬度 }, allowAdd: true, // 允许新增联系人 addLoading: false, // 添加允许等待 @@ -248,6 +272,9 @@ caseSourceList: [], userList: [], // 处理人列表 inputSize: 'small', // 按钮样式 + showMap: false, + mapHeight: '0px', + keyword: '', rules: { caseId: [{ required: true, message: '事件编号不能为空', trigger: ['blur'] }], sound: [{ required: true, message: '来电录音编号不能为空', trigger: ['blur'] }], @@ -339,7 +366,9 @@ limitedTime: this.form.limitedTime, // 事件办理期限 processWay: '' + this.form.processWay, // 处理方式 processDept: this.form.processDept, // 处理单位 - processUser: this.form.processUser // 处理人 + processUser: this.form.processUser, // 处理人 + lng: this.form.lng, // 事件经度 + lat: this.form.lat // 事件纬度 } addCase(form).then(response => { if (response.code === 200) { @@ -526,6 +555,34 @@ const id = getToday('yyMMddhhmmss') const seat = this.$store.getters.seat this.form.caseId = id + seat + }, + showMapDiv() { + this.showMap = true + this.$refs.mapComp.initMap() + + this.mapHeight = this.$refs.caseContainer.offsetHeight + 'px' + }, + queryPoi() { + if (this.keyword === '') { + this.$message.warning('请输入关键字') + } else { + this.$refs.mapComp.queryPoi(this.keyword) + } + }, + confirmPos() { + this.form.lng = this.$refs.mapComp.longitude + this.form.lat = this.$refs.mapComp.latitude + + this.showMap = false + this.clearMap() + console.log(this.form) + }, + clearMap() { + this.$refs.mapComp.clearMap() + }, + backToForm() { + this.showMap = false + this.clearMap() } } } @@ -541,6 +598,7 @@ } .form-div{ width: calc( 100%- 300px); + /*height: 50vh;*/ .checkbox{ display: inline-block; line-height: 32px; // 设置行高 @@ -552,4 +610,9 @@ width: $rightwidth; } + #map { + width: 100%; + height: 50vh; + } + diff --git a/static/fMap/fc-map.min.css b/static/fMap/fc-map.min.css new file mode 100644 index 0000000..e9cccd0 --- /dev/null +++ b/static/fMap/fc-map.min.css @@ -0,0 +1,271 @@ +.ol-box { + box-sizing: border-box; + border-radius: 2px; + border: 2px solid blue; +} + +.ol-mouse-position { + top: 8px; + right: 8px; + position: absolute; +} + +.ol-scale-line { + background: rgba(0,60,136,0.3); + border-radius: 4px; + bottom: 8px; + left: 8px; + padding: 2px; + position: absolute; +} +.ol-scale-line-inner { + border: 1px solid #eee; + border-top: none; + color: #eee; + font-size: 10px; + text-align: center; + margin: 1px; + will-change: contents, width; +} +.ol-overlay-container { + will-change: left,right,top,bottom; +} + +.ol-unsupported { + display: none; +} +.ol-viewport, .ol-unselectable { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} +.ol-selectable { + -webkit-touch-callout: default; + -webkit-user-select: auto; + -moz-user-select: auto; + -ms-user-select: auto; + user-select: auto; +} +.ol-grabbing { + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; +} +.ol-grab { + cursor: move; + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; +} +.ol-control { + position: absolute; + background-color: rgba(255,255,255,0.4); + border-radius: 4px; + padding: 2px; +} +.ol-control:hover { + background-color: rgba(255,255,255,0.6); +} +.ol-zoom { + top: .5em; + left: .5em; +} +.ol-rotate { + top: .5em; + right: .5em; + transition: opacity .25s linear, visibility 0s linear; +} +.ol-rotate.ol-hidden { + opacity: 0; + visibility: hidden; + transition: opacity .25s linear, visibility 0s linear .25s; +} +.ol-zoom-extent { + top: 4.643em; + left: .5em; +} +.ol-full-screen { + right: .5em; + top: .5em; +} +@media print { + .ol-control { + display: none; + } +} + +.ol-control button { + display: block; + margin: 1px; + padding: 0; + color: white; + font-size: 1.14em; + font-weight: bold; + text-decoration: none; + text-align: center; + height: 1.375em; + width: 1.375em; + line-height: .4em; + background-color: rgba(0,60,136,0.5); + border: none; + border-radius: 2px; +} +.ol-control button::-moz-focus-inner { + border: none; + padding: 0; +} +.ol-zoom-extent button { + line-height: 1.4em; +} +.ol-compass { + display: block; + font-weight: normal; + font-size: 1.2em; + will-change: transform; +} +.ol-touch .ol-control button { + font-size: 1.5em; +} +.ol-touch .ol-zoom-extent { + top: 5.5em; +} +.ol-control button:hover, +.ol-control button:focus { + text-decoration: none; + background-color: rgba(0,60,136,0.7); +} +.ol-zoom .ol-zoom-in { + border-radius: 2px 2px 0 0; +} +.ol-zoom .ol-zoom-out { + border-radius: 0 0 2px 2px; +} + + +.ol-attribution { + text-align: right; + bottom: .5em; + right: .5em; + max-width: calc(100% - 1.3em); +} + +.ol-attribution ul { + margin: 0; + padding: 0 .5em; + font-size: .7rem; + line-height: 1.375em; + color: #000; + text-shadow: 0 0 2px #fff; +} +.ol-attribution li { + display: inline; + list-style: none; + line-height: inherit; +} +.ol-attribution li:not(:last-child):after { + content: " "; +} +.ol-attribution img { + max-height: 2em; + max-width: inherit; + vertical-align: middle; +} +.ol-attribution ul, .ol-attribution button { + display: inline-block; +} +.ol-attribution.ol-collapsed ul { + display: none; +} +.ol-attribution.ol-logo-only ul { + display: block; +} +.ol-attribution:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-attribution.ol-uncollapsible { + bottom: 0; + right: 0; + border-radius: 4px 0 0; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-logo-only { + background: transparent; + bottom: .4em; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-uncollapsible img { + margin-top: -.2em; + max-height: 1.6em; +} +.ol-attribution.ol-logo-only button, +.ol-attribution.ol-uncollapsible button { + display: none; +} + +.ol-zoomslider { + top: 4.5em; + left: .5em; + height: 200px; +} +.ol-zoomslider button { + position: relative; + height: 10px; +} + +.ol-touch .ol-zoomslider { + top: 5.5em; +} + +.ol-overviewmap { + left: 0.5em; + bottom: 0.5em; +} +.ol-overviewmap.ol-uncollapsible { + bottom: 0; + left: 0; + border-radius: 0 4px 0 0; +} +.ol-overviewmap .ol-overviewmap-map, +.ol-overviewmap button { + display: inline-block; +} +.ol-overviewmap .ol-overviewmap-map { + border: 1px solid #7b98bc; + height: 150px; + margin: 2px; + width: 150px; +} +.ol-overviewmap:not(.ol-collapsed) button{ + bottom: 1px; + left: 2px; + position: absolute; +} +.ol-overviewmap.ol-collapsed .ol-overviewmap-map, +.ol-overviewmap.ol-uncollapsible button { + display: none; +} +.ol-overviewmap:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-overviewmap-box { + border: 2px dotted rgba(0,60,136,0.7); +} + +.ol-overviewmap .ol-overviewmap-box:hover { + cursor: move; +} + +/*! + * ol3-contextmenu - v2.5.0 + * Custom Context Menu for Openlayers + * https://github.com/jonataswalker/ol3-contextmenu + * Built: Fri Nov 10 2017 09:09:46 GMT+0800 (中国标准时间) + */ +.ol-ctx-menu-container{position:absolute;padding:8px;background:#fff;color:#222;font-size:13px;border-radius:5px;box-shadow:3px 3px 5px rgba(0,0,0,.2);box-sizing:border-box}.ol-ctx-menu-container a,.ol-ctx-menu-container div,.ol-ctx-menu-container img,.ol-ctx-menu-container li,.ol-ctx-menu-container span,.ol-ctx-menu-container ul{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}.ol-ctx-menu-container a img{border:none}.ol-ctx-menu-container *,.ol-ctx-menu-container :after,.ol-ctx-menu-container :before{box-sizing:inherit}.ol-ctx-menu-container.ol-ctx-menu-hidden{opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container ul{list-style:none}.ol-ctx-menu-container li{position:relative;line-height:20px;padding:2px 5px}.ol-ctx-menu-container li:not(.ol-ctx-menu-separator):hover{cursor:pointer;background-color:#333;color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-submenu .ol-ctx-menu-container{border:1px solid #eee;padding:8px;top:0;opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover .ol-ctx-menu-container{opacity:1;visibility:visible;transition-delay:0s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:after{position:absolute;top:7px;right:10px;content:"";display:inline-block;width:.6em;height:.6em;border-right:.3em solid #222;border-top:.3em solid #222;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover:after{border-color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-separator{padding:0}.ol-ctx-menu-container li.ol-ctx-menu-separator hr{border:0;height:1px;background-image:linear-gradient(270deg,transparent,rgba(0,0,0,.75),transparent)}.ol-ctx-menu-icon{text-indent:20px;background-size:20px auto;background-repeat:no-repeat;background-position:0}.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABaUlEQVQ4T72U7VHCQBCGn90GtAMuNGCswFiBWIFQgWMFxg6wArECsQKhArEBiB1Qwa1zgQn5IAYcxv13k71n3919L8KJQ07M47+BzgG9TRfZ/JBuWhS6BJFHRJICYrZGZIz3z5Ct2+B7gG6I6kt+wewdkQVwjtkAkR5mC8yu26A1oItR/cTsOweQBdgutD8G7jGm2PJ2n8oqUKIpIjd4HxTM8gvaT/F+AlmWnyWaIXKF95eNguFzTYFhNsdWu9kFgFlaFMANUH3D8wDLoLgSTSD2il8NCe2ZXQBxWDGwxmyUzzOMBZ7wy7Qb2K0wQfXjMOBuhlFpZtNty5sFaTQBuTusZdymeqs1SpYKcO9HkE3KbTd9WFijMHJQ5hBNEAYNq5Qd0dhyke0GiE4QzjqfW23mHT8Hl4DG4Lce3FPE7AtbBSdsbNqpoJLgYkRnNeUV+xwJDHTnUEkxHGbhBXUs5TjJjew/KPy94g+NRaIVRYmMXwAAAABJRU5ErkJggg==")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABc0lEQVQ4T71U21ECQRDsJgGdvQDECMQIxAjECMQILCPwzAAjECIQI0AiEDPQAPaWCBhrcKHuCUcV5f7dY3v6tUscefHIePhfwBBCF8CZqRCReRs1tQxDCH1VfQLQz4EsSY4AvIjIsgm8AhhCGKrqa9zwrqoLAKckB5HtguR1E2gBMITQU9VPAD8GICIGtl3e+xHJBwBT59xtHcsCYJZlUwA3kcGHbfDep51OZywi3/acZZm9vyJ5WR5o38uACmDunNt6ZwAkUxFZDwghDFT1jeSjiJinhVUBVNVJkiTDKO8CQA+AsbNQ7s1Ps0VVn5MkSfcCtmBoDZi1Bdx4eJ7zbBolrwPy3o9J3rWSHPs3A1BbjVKlYBaIyDgvu9LDXDU2RTZmXVW1oKyLxRD+OrkOrJLy5mVM0iaftDhuhVbsvBzMglzKUNW6IV/OOWtCM8MmVvEkmbwt83LaB19fdgOtVquUZJeknaDdobTwbOcvBzPcN/AXH1DFFWP7u9oAAAAASUVORK5CYII=")}.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABU0lEQVQ4T72U7VECMRRFz3sNaAdkacC1AtcKxApcKnCsQOwAK3CtQKxAqEBsANYOqCDPyTIC+8WCw5jfybn33dxEOPGSE/P4b6BzQG89RT47ZJoWhy5B5BGRZAMxWyEyxvtnyFdt8AagS1F9KQ6YvSMyB84xGyDSw2yO2XUbtAJ0MaqfmH0XAPIA2y7tj4F7jAm2uG1yWQZKNEHkBu+Dg2njWBJNEbnC+8uaIFRuWfuG2QxbbrOrUd0A1Tc8D7AIjkur7DAAsVf8MiWMZ3ZR2m02LPIMscATfjHqBnY7TFD9OAy4zTCCPG/MUKMM5O6wkXFr9dZq7FQqqHk/hDzbFa73cFONTZFDdRyiCcKg5rrSiLaXkiI6RjjrfG6VzDs+B5eAxuDXeYpmNRGzL2wZ/wof+du4GNFpBVqqz5HA4MM5VEYYDrOs+1I6Q9u/4Q8O9wN/AGgWjBVqQjjgAAAAAElFTkSuQmCC")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABYklEQVQ4T72U4VHCQBCF36tA91KAWIFYgViBWIFYgWMFYgdYgVCBWAFSgdiBFpAsFWSdxcDkQoBkhnF/ZjbfvX377ogjF4/Mw/8CVbUD4MynEJF5k2lqFapqz8yeAPRKkCXJEYAXEVnugm8BVXVgZq/FD+9mtgBwSrJfqF2QvN4FjYCq2jWzTwA/DhARh20qTdMRyQcA0xDCbZ3KCJhl2RTATaHgo+6HLMv8+xXJy+qB3l8FGoB5CKHsXcRV1b6ZvZF8FBH3NKotoJlNkiQZFONdlLtJ3rufbouZPSdJMjwIbKDQEzBrClx7eC4i33Uepmk6JnnXaOQifzMAtdGoRApugYiMI1uqKkrRWAfZo9MxM1+UZzFewl8mN4nYdVM83L7BkwbXLUrF3sfBLQDQBbDy08x8vOohXyEE71lVq9emuEk+3gZa3XYroCvwFyjP8yHJDsnxwaU08GxvS2uFhw78BbzWrxXgMbsHAAAAAElFTkSuQmCC")} +.plot-helper-control-point-div{width:10px;height:10px;border:1px solid #000;border-radius:100%;background-color:#fff;opacity:.6;cursor:move}.ol-plot-text-area-content{position:relative}.ol-plot-text-area-content .ol-plot-text-area-editor{position:absolute;top:0;right:0;width:20px;height:20px;background-color:#4cae4c} +.fc-map-single-bubble.iframe-bubble-box .btn-close,.popup-label{display:none}.fc-map{width:100%;height:100%}.popup-label{background-color:#fff;border:2px solid #444;border-radius:7px;-webkit-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);-moz-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);color:#111;font:12px/20px "Helvetica Neue",Arial,Helvetica,sans-serif;font-weight:700;padding:3px 6px;position:absolute;white-space:nowrap;top:-35px;left:20px}.popup-label img{vertical-align:middle}.popup-label.marker:before{border-top:6px solid transparent;border-bottom:6px solid transparent;content:"";border-right:6px solid #000;border-right-color:inherit;position:absolute;left:-8px;top:5px}.ol-full-screen{position:absolute;top:50%}.p-helper-control-point-div{width:12px;height:12px;border:1px solid #000;background-color:#ff0;opacity:.8;cursor:move}.mtooltip{position:relative;background:rgba(0,0,0,.5);border-radius:4px;color:#fff;padding:4px 8px;opacity:.7;white-space:nowrap}.mtooltip-measure{opacity:1;font-weight:700}.mtooltip-static{background-color:#fc3;color:#000;border:1px solid #fff}.mtooltip-measure:before,.mtooltip-static:before{border-top:6px solid rgba(0,0,0,.5);border-right:6px solid transparent;border-left:6px solid transparent;content:"";position:absolute;bottom:-6px;margin-left:-7px;left:50%}.mtooltip-static:before{border-top-color:#fc3}.fc-map-single-bubble.normal-bubble-box{min-width:100px;min-height:32px;width:auto;height:auto;background-color:#fff;border:1px solid #23b1ed;webkit-border-radius:15px;-moz-border-radius:15px;border-radius:6px;-webkit-box-shadow:2px 2px 4px #888;-moz-box-shadow:2px 2px 4px #888;box-shadow:2px 2px 4px #888}.fc-map-single-bubble.normal-bubble-box .bubble-content{padding:5px}.fc-map-single-bubble.normal-bubble-box:before{content:' ';position:absolute;width:0;height:0;left:15px;bottom:-21px;border:11px solid;border-color:#23b1ed transparent transparent #23b1ed}.fc-map-single-bubble.normal-bubble-box:after{content:' ';position:absolute;width:0;height:0;left:16px;bottom:-19px;border:10px solid;border-color:#fff transparent transparent #fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer;color:#fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons a{color:#fff}.fc-map-single-bubble.iframe-bubble-boxdefault-nohead .btn-close{display:block;font-size:24px;position:absolute;top:-12px;right:-12px;cursor:pointer;color:#000}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer}.fc-map-single-bubble .general-bubble-box-content{max-width:400px;max-height:300px;overflow:auto;margin-left:10px;margin-right:10px}.fc-map-single-bubble .general-bubble-box-content tr{height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th{max-width:100px;width:100px;color:#a39e98;font-weight:400;font-size:13px;height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th:after{content:' :'}.fc-map-single-bubble .general-bubble-box-content .item-td{padding-left:10px;height:24px;line-height:24px;font-weight:400;font-size:13px}.fc-map-single-bubble .general-bubble-box-content .item-td span{float:left;margin-right:10px;max-width:200px;overflow:auto}.fc-map-single-bubble .general-bubble-box-content .item-td span i{font-size:32px;cursor:pointer;float:left}.selected-trace-effect{position:absolute;width:8px;height:8px;margin:-4px 0 0 -5px;background:#2dc3e8;-webkit-border-radius:8px;-moz-border-radius:8px;-ms-border-radius:8px;-o-border-radius:8px;border-radius:8px}.selected-trace-effect:after{content:"";position:absolute;height:6px;width:6px;left:1px;top:1px;background:#fbfbfb;border-radius:4px}.selected-trace-effect .ring{position:absolute;width:100px;height:50px;border:5px solid #2dc3e8;background-color:#fbfbfb;top:50%;left:50%;margin:-25px 0 0 -50px;opacity:0;-webkit-border-radius:100px/50px;-moz-border-radius:100px/50px;-ms-border-radius:100px/50px;-o-border-radius:100px/50px;border-radius:100px/50px;-webkit-animation:selectedTrace 1s infinite linear;-moz-animation:selectedTrace 1s infinite linear;-ms-animation:selectedTrace 1s infinite linear;-o-animation:selectedTrace 1s infinite linear;animation:selectedTrace 1s infinite linear}.selected-trace-effect .ring:last-of-type{-webkit-animation-delay:.5s;-moz-animation-delay:.5s;-ms-animation-delay:.5s;-o-animation-delay:.5s;animation-delay:.5s}@-webkit-keyframes selectedTrace{0%{-webkit-transform:scale(.1);opacity:1}100%{-webkit-transform:scale(1);opacity:0}}@-moz-keyframes selectedTrace{0%{-moz-transform:scale(.1);opacity:1}100%{-moz-transform:scale(1);opacity:0}}@-ms-keyframes selectedTrace{0%{-ms-transform:scale(.1);opacity:1}100%{-ms-transform:scale(1);opacity:0}}@-o-keyframes selectedTrace{0%{-o-transform:scale(.1);opacity:1}100%{-o-transform:scale(1);opacity:0}}@keyframes selectedTrace{0%{transform:scale(.1);opacity:1}100%{transform:scale(1);opacity:0}}.fc-map .ol-scale-line{background:0 0;border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.fc-map .ol-scale-line-inner{height:2px;border:1px solid #000;border-bottom-width:4px;border-top:none;color:#000;font-size:10px;text-align:center;padding-bottom:15px;margin:1px;will-change:contents,width}.fc-map .fmouseposition{position:absolute}.fc-map .fmouseposition.position-lt{left:0;top:0}.fc-map .fmouseposition.position-lc{left:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-lb{left:0;bottom:4px}.fc-map .fmouseposition.position-ct{left:calc(50% - 84px);top:0}.fc-map .fmouseposition.position-cc{left:calc(50% - 84px);top:calc(50% - 2px)}.fc-map .fmouseposition.position-cb{left:calc(50% - 84px);bottom:4px}.fc-map .fmouseposition.position-rt{right:0;top:0}.fc-map .fmouseposition.position-rc{right:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-rb{right:0;bottom:2px}.fmap-mapswitch{z-index:2;position:absolute;bottom:0;right:0;height:80px;cursor:pointer;-webkit-transition-property:width,background-color;transition-property:width,background-color;-webkit-transition-duration:.5s;transition-duration:.5s;background-color:#fff;background-color:rgba(255,255,255,.4)}.fmap-mapswitch .map-type-card{height:60px;width:86px;position:absolute;border-radius:2px;top:10px;box-sizing:border-box;border:1px solid rgba(255,255,255,0);-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-mapswitch .map-type-card span{position:absolute;bottom:0;right:0;display:inline-block;padding:3px 3px 2px 4px;font-size:12px;line-height:12px;color:#FFF;border-top-left-radius:2px;background-color:rgba(38,38,38,.6);width:100%;height:18px;text-align:center}.fmap-mapswitch .map-type-card.active,.fmap-mapswitch .map-type-card:hover{border:1px solid #3385FF}.fmap-mapswitch .map-type-card.active span{background-color:#3283ff;font-size:12px}.fmap-mapswitch .map-type-card:hover span{background-color:#3283ff}.fmap-mapswitch .map-type-card .type1{background-position:0 0}.fmap-mapswitch .map-type-card .type2{background-position:0 -60px}.fmap-mapswitch .map-type-card .type3{background-position:0 -120px}.fmap-mapswitch .map-type-card .type4{background-position:0 0}.fmap-mapswitch .map-type-card .type5{background-position:0 -60px}.fmap-mapswitch .map-type-card .type6{background-position:0 -120px}.fmap-mapswitch .map-type-card .type7{background-position:0 0}.fmap-mapswitch .map-type-card .type8{background-position:0 -60px}.fmap-mapswitch .map-type-card .type9{background-position:0 -120px}.fmap-mapswitch .map-type-card .type10{background-position:0 0}.fmap-mapswitch .map-type-card .type11{background-position:0 -60px}.fmap-mapswitch .map-type-card .type12{background-position:0 -120px}.fmap-mapswitch.closed{width:110px;background-color:rgba(255,255,255,0)}.fmap-mapswitch.closed span{font-size:0}.fmap-mapswitch.closed .map-type-card{border:1px solid rgba(153,153,153,.42);background:url(img/map_type_card_bg.png) no-repeat;-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-drawbar,.fmap-toolbar{border-radius:3px;background:#fff}.fmap-mapswitch.closed .type1{right:5px}.fmap-mapswitch.closed .type2{right:10px}.fmap-mapswitch.closed .type3{right:15px}.fmap-mapswitch.closed .type4{right:20px}.fmap-mapswitch.closed .type5{right:25px}.fmap-mapswitch.closed .type6{right:30px}.fmap-mapswitch.closed .type7{right:35px}.fmap-mapswitch.closed .type8{right:40px}.fmap-mapswitch.closed .type9{right:45px}.fmap-mapswitch.closed .type10{right:50px}.fmap-mapswitch.closed .type11{right:55px}.fmap-mapswitch.closed .type12{right:60px}.fmap-mapswitch.filter0{filter:alpha(opacity=10)}.fmap-mapswitch.filter1{filter:alpha(opacity=80)}.type1{right:10px}.type2{right:106px}.type3{right:202px}.type4{right:298px}.type5{right:390px}.type6{right:486px}.type7{right:582px}.type8{right:678px}.type9{right:774px}.type10{right:870px}.type11{right:966px}.type12{right:1062px}.fmap-toolbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.tool-item-h i{font-size:18px;color:grey;top:2px;position:relative;display:inline-block}.tool-item-h i:hover{color:#00e5ff}.tool-item-h.tool-item-group .down-list{max-width:68px;font-size:12px}.tool-item-h.tool-item-group .down-list.downpan{max-width:200px}.toolbtn{width:24px;height:24px;display:block}.toolbtn_export:before{content:"\E182"}.toolbtn_cut:before{content:"\E094"}.toolbtn_fullscreen:before{content:"\E350"}.toolbtn_measureline:before{content:"\E098"}.toolbtn_measurepolygon:before{content:"\E097"}.toolbtn_measureclear:before{content:"\e020"}.fmap-toolbar-content .down-list{background:#fff;border:1px solid #ccc;position:absolute;left:0;top:30px;font-size:12px}@keyframes card-drop{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes card-up{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animated-card-drop{-webkit-animation-name:card-drop;animation-name:card-drop;display:block;-webkit-animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s}.animated-card-up{-webkit-animation-name:card-up;animation-name:card-up;display:none;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-fill-mode:forwards}.ol-full-screen{display:none}.fmap-drawbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-pluging-nocontainer{position:absolute;top:0;right:0}.tool-item-h{height:32px;width:32px;display:inline-block;position:relative;float:left;padding:4px;cursor:pointer}.drawbtn,.drawbtn_x24,.drawbtn_x32{display:block}.tool-item-h:hover{border:1px solid #dcdcdc}.tool-item-h.tool-item-group,.tool-item-h.tool-item-group .down-list{width:68px}.drawbtn_x24{width:24px;height:24px}.drawbtn_x32{width:32px;height:32px}.drawbtn_AssaultDirection_x24{background:url(img/icon_drawbtn.png) 0 -160px no-repeat}.drawbtn_FreePolygon_x24{background:url(img/icon_drawbtn.png) -24px -160px no-repeat}.drawbtn_AttackArrow_x24{background:url(img/icon_drawbtn.png) -48px -160px no-repeat}.drawbtn_Circle_x24{background:url(img/icon_drawbtn.png) -72px -160px no-repeat}.drawbtn_ClosedCurve_x24{background:url(img/icon_drawbtn.png) -96px -160px no-repeat}.drawbtn_Curve_x24{background:url(img/icon_drawbtn.png) 0 -184px no-repeat}.drawbtn_DoubleArrow_x24{background:url(img/icon_drawbtn.png) -24px -184px no-repeat}.drawbtn_Ellipse_x24{background:url(img/icon_drawbtn.png) -48px -184px no-repeat}.drawbtn_FineArrow_x24{background:url(img/icon_drawbtn.png) -72px -184px no-repeat}.drawbtn_FreeLine_x24{background:url(img/icon_drawbtn.png) -96px -184px no-repeat}.drawbtn_Arc_x24{background:url(img/icon_drawbtn.png) 0 -208px no-repeat}.drawbtn_GatheringPlace_x24{background:url(img/icon_drawbtn.png) -24px -208px no-repeat}.drawbtn_Lune_x24{background:url(img/icon_drawbtn.png) -48px -208px no-repeat}.drawbtn_Polygon_x24{background:url(img/icon_drawbtn.png) -72px -208px no-repeat}.drawbtn_Polyline_x24{background:url(img/icon_drawbtn.png) -96px -208px no-repeat}.drawbtn_RectAngle_x24{background:url(img/icon_drawbtn.png) 0 -232px no-repeat}.drawbtn_Sector_x24{background:url(img/icon_drawbtn.png) -24px -232px no-repeat}.drawbtn_SquadCombat_x24{background:url(img/icon_drawbtn.png) -48px -232px no-repeat}.drawbtn_StraightArrow_x24{background:url(img/icon_drawbtn.png) -72px -232px no-repeat}.drawbtn_TailedAttackArrow_x24{background:url(img/icon_drawbtn.png) -96px -232px no-repeat}.drawbtn_TailedSquadCombat_x24{background:url(img/icon_drawbtn.png) 0 -256px no-repeat}.drawbtn_AssaultDirection_x24:hover{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_x24:hover{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_x24:hover{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_x24:hover{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_x24:hover{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_x24:hover{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_x24:hover{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_x24:hover{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_x24:hover{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_x24:hover{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_x24:hover{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_x24:hover{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_x24:hover{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_x24:hover{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_x24:hover{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_AssaultDirection_hover_x24{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_hover_x24{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_hover_x24{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_hover_x24{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_hover_x24{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_hover_x24{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_hover_x24{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_hover_x24{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_hover_x24{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_hover_x24{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_hover_x24{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_hover_x24{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_hover_x24{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_hover_x24{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_hover_x24{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_SquadCombat_x32{background:url(img/icon_drawbtn.png) no-repeat}.drawbtn_StraightArrow_x32{background:url(img/icon_drawbtn.png) -32px 0 no-repeat}.drawbtn_TailedAttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -32px no-repeat}.drawbtn_TailedSquadCombat_x32{background:url(img/icon_drawbtn.png) -32px -32px no-repeat}.drawbtn_Arc_x32{background:url(img/icon_drawbtn.png) -64px 0 no-repeat}.drawbtn_AssaultDirection_x32{background:url(img/icon_drawbtn.png) -64px -32px no-repeat}.drawbtn_AttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -64px no-repeat}.drawbtn_Circle_x32{background:url(img/icon_drawbtn.png) -32px -64px no-repeat}.drawbtn_ClosedCurve_x32{background:url(img/icon_drawbtn.png) -64px -64px no-repeat}.drawbtn_Curve_x32{background:url(img/icon_drawbtn.png) -96px 0 no-repeat}.drawbtn_DoubleArrow_x32{background:url(img/icon_drawbtn.png) -96px -32px no-repeat}.drawbtn_Ellipse_x32{background:url(img/icon_drawbtn.png) -96px -64px no-repeat}.drawbtn_FineArrow_x32{background:url(img/icon_drawbtn.png) 0 -96px no-repeat}.drawbtn_FreeLine_x32{background:url(img/icon_drawbtn.png) -32px -96px no-repeat}.drawbtn_FreePolygon_x32{background:url(img/icon_drawbtn.png) -64px -96px no-repeat}.drawbtn_GatheringPlace_x32{background:url(img/icon_drawbtn.png) -96px -96px no-repeat}.drawbtn_Lune_x32{background:url(img/icon_drawbtn.png) -128px 0 no-repeat}.drawbtn_Polygon_x32{background:url(img/icon_drawbtn.png) -128px -32px no-repeat}.drawbtn_Polyline_x32{background:url(img/icon_drawbtn.png) -128px -64px no-repeat}.drawbtn_RectAngle_x32{background:url(img/icon_drawbtn.png) -128px -96px no-repeat}.drawbtn_Sector_x32{background:url(img/icon_drawbtn.png) 0 -128px no-repeat}.drawbtn_SquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -160px 0 no-repeat}.drawbtn_StraightArrow_hover_x32{background:url(img/icon_drawbtn.png) -192px 0 no-repeat}.drawbtn_TailedAttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -32px no-repeat}.drawbtn_TailedSquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -192px -32px no-repeat}.drawbtn_Arc_hover_x32{background:url(img/icon_drawbtn.png) -224px 0 no-repeat}.drawbtn_AssaultDirection_hover_x32{background:url(img/icon_drawbtn.png) -224px -32px no-repeat}.drawbtn_AttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -64px no-repeat}.drawbtn_Circle_hover_x32{background:url(img/icon_drawbtn.png) -192px -64px no-repeat}.drawbtn_ClosedCurve_hover_x32{background:url(img/icon_drawbtn.png) -224px -64px no-repeat}.drawbtn_Curve_hover_hover_x32{background:url(img/icon_drawbtn.png) -256px 0 no-repeat}.drawbtn_DoubleArrow_hover_x32{background:url(img/icon_drawbtn.png) -256px -32px no-repeat}.drawbtn_Ellipse_hover_x32{background:url(img/icon_drawbtn.png) -256px -64px no-repeat}.drawbtn_FineArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -96px no-repeat}.drawbtn_FreeLine_hover_x32{background:url(img/icon_drawbtn.png) -192px -96px no-repeat}.drawbtn_FreePolygon_hover_x32{background:url(img/icon_drawbtn.png) -224px -96px no-repeat}.drawbtn_GatheringPlace_hover_x32{background:url(img/icon_drawbtn.png) -256px -96px no-repeat}.drawbtn_Lune_hover_x32{background:url(img/icon_drawbtn.png) -288px 0 no-repeat}.drawbtn_Polygon_hover_x32{background:url(img/icon_drawbtn.png) -288px -32px no-repeat}.drawbtn_Polyline_hover_x32{background:url(img/icon_drawbtn.png) -288px -64px no-repeat}.drawbtn_RectAngle_hover_x32{background:url(img/icon_drawbtn.png) -288px -96px no-repeat}.drawbtn_Sector_hover_x32{background:url(img/icon_drawbtn.png) -160px -128px no-repeat}.ol-zoom{display:none}.fmap-zoompan{width:62px;height:192px}.fmap-zoompan div{position:absolute}.fmap-zoompan .fmap-zoompan-pan{width:44px;height:44px;overflow:hidden;background:url(img/mapctrl_zoompan.png) no-repeat}.fmap-zoompan .fmap-zoompan-pan .fmap-btn{height:15px;width:15px;cursor:pointer}.fmap-zoompan .fmap-zoompan-pan .fmap-panE,.fmap-zoompan .fmap-zoompan-pan .fmap-panN,.fmap-zoompan .fmap-zoompan-pan .fmap-panS,.fmap-zoompan .fmap-zoompan-pan .fmap-panW{overflow:hidden}.fmap-zoompan .fmap-zoompan-pan .fmap-panN{left:14px;top:0}.fmap-zoompan .fmap-zoompan-pan .fmap-panW{left:1px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panE{left:27px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panS{left:14px;top:25px}.fmap-zoompan .fmap-zoompan-zoom{top:45px;height:147px;width:62px;overflow:hidden}.fmap-zoompan .fmap-zoompan-zoom .fmap-btn{width:22px;height:21px;left:12px;overflow:hidden;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;z-index:10}.fmap-zoompan .fmap-zoompan-zoom .zoomIn{cursor:pointer;background-position:0 -221px}.fmap-zoompan .fmap-zoompan-zoom .zoomIn:hover{background-position:0 -243px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut{cursor:pointer;background-position:0 -265px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut:hover{background-position:0 -287px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider{width:37px;top:18px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgtop{left:18px;width:10px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -23px -226px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbottom{left:19px;height:8px;width:10px;top:124px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -33px bottom no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgmask{height:100%;width:24px;left:10px;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar{height:11px;width:19px;left:13px;top:80px;overflow:hidden;background:url(img/mapctrl_zoompan.png) 0 -309px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar:hover{background:url(img/mapctrl_zoompan.png) 0 -320px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder{display:none;position:absolute;top:0}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{position:absolute;left:34px;height:21px;width:28px;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;font-size:0;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{background-position:0 -380px;top:21px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city{background-position:0 -401px;top:52px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov{background-position:0 -422px;top:76px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country{background-position:0 -443px;top:100px}.fmap-zoompan .fmap-zoompan-zoom:hover .fmap-zoompan-zlholder{display:block}.fmap-zoompan.zoom-mode-pan .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-slider{width:62px;height:150px}.fmap-zoompan.zoom-mode-slider .fmap-zoompan-zoom{top:0;height:147px;width:62px}.fmap-zoompan.zoom-mode-slider .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-btn{width:48px;height:40px}.fmap-zoompan.zoom-mode-btn .fmap-zoompan-zoom{top:0;height:40px;width:48px}.fmap-zoompan.zoom-mode-btn .fmap-btn.zoomOut{top:20px}.fmap-areanav{position:absolute;float:left;top:5px;right:300px;z-index:2;height:25px;width:76px;margin-right:6px;background:#fff;border-radius:3px;box-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-areanav a,.fmap-areanav img{border:0;text-decoration:none}.fmap-areanav>i{position:absolute;top:5px;left:2px;font-size:14px}.fmap-areanav.hover .content{display:block}.fmap-areanav:focus{outline:0}.fmap-areanav.opened .content{display:block}.fmap-areanav a:link,.fmap-areanav a:visited{color:#005aa0}.fmap-areanav a:hover{background:#8cc0fb;color:#fff;cursor:pointer}.fmap-areanav a:active{background:#005aa0;color:#fff}.fmap-areanav em{font-style:normal}.fmap-areanav ol,.fmap-areanav ul{list-style:none;padding:0;margin:0}.fmap-areanav .tab .tab-item,.fmap-areanav .tab a,.fmap-areanav .tab li{cursor:pointer;float:left;text-align:center}.fmap-areanav .text{float:left;position:relative;top:0;left:15px;z-index:2;height:100%;width:100%;background:0 0;padding:0 20px 0 4px;line-height:23px;overflow:hidden;font-size:13px;font-family:'微软雅黑','黑体',Arial,Helvetica,sans-serif;color:#555}.fmap-areanav .text .updown-btn{font-size:12px;color:#ccc;font-weight:400}.fmap-areanav .text b{display:block;position:absolute;top:0;right:12px;overflow:hidden;width:17px;height:25px;line-height:25px}.fmap-areanav .close{display:none;position:absolute;z-index:2;top:19px;left:366px;cursor:pointer;width:17px;height:17px;background:#f20d0d}.fmap-areanav .content{display:none;position:absolute;top:23px;width:350px;padding:5px;background:#fff;-moz-box-shadow:0 0 5px #ddd;-webkit-box-shadow:0 0 5px #ddd;box-shadow:0 0 5px #ddd}.fmap-areanav .content select{float:left;width:120px;border:1px solid #cecbce;margin-right:15px}.fmap-areanav .content .select3{margin-right:0}.fmap-areanav .content .fstock{position:relative;margin-bottom:0}.fmap-areanav .content .fstock .tab{width:95%;height:25px;float:left;border-bottom:1px solid #2dc3e8;overflow:visible}.fmap-areanav .content .fstock .tab a{position:relative;float:left;height:23px;padding:0 20px 1px 10px;line-height:23px;text-align:center;text-decoration:none;cursor:pointer;color:#005AA0;outline:0}.fmap-areanav .content .fstock .tab a:hover{background:0;color:#005AA0}.fmap-areanav .content .fstock .tab a:hover i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .tab a i{position:absolute;right:5px;top:10px;display:block;width:7px;height:5px;overflow:hidden;filter:alpha(opacity=50)}.fmap-areanav .content .fstock .tab li{float:left;clear:none;height:23px;padding:1px 1px 0;border:1px solid #ddd;border-bottom:0;margin-right:3px;background-color:#fff;line-height:22px;text-decoration:none}.fmap-areanav .content .fstock .tab .curr{position:relative;height:25px;padding:0;border:1px solid #2dc3e8;border-bottom:0}.fmap-areanav .content .fstock .tab .curr i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .area-list{padding-top:5px}.fmap-areanav .content .fstock .area-list li{float:left;width:80px;padding:2px 0 2px 15px;clear:none}.fmap-areanav .content .fstock .area-list li a{float:left;padding:2px 4px;color:#005aa0}.fmap-areanav .content .fstock .area-list li a:hover{color:#fff}.fmap-areanav .content .fstock .area-list .disable-li a{float:left;padding:2px 4px;color:#eee}.fmap-areanav .content .fstock .area-list .disable-li a:hover{background:#fff;color:#eee;cursor:default}.fmap-areanav.hovae .text{border-bottom:0}.fmap-areanav.hovae .close,.fmap-areanav.hovae .content{display:block}.fcplayer-container{padding:0;margin:0;width:100%;z-index:9999}.fcplayer-container .fcplayer{background:rgba(0,0,0,.8);border:1px solid #acb2bb;width:100%;height:52px;position:relative;padding:4px 12px}.fcplayer-container .fcplayer .fcplayer-progressbar{height:14px;width:100%}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-bg{background-color:#dadada;width:100%;height:4px;position:relative;top:5px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-pass{position:relative;height:4px;width:100px;top:1px;background-color:#01dbfb}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-thumb{background:url(img/player_progressbar_thumb.png) no-repeat;width:16px;height:16px;position:relative;top:-8px;left:0}.fcplayer-container .fcplayer .fcplayer-opbar{height:28px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed{color:#fff;width:200px;font-size:9px!important}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .speed-ctrl{border:1px solid #fff;float:left;display:block;width:32px;height:28px;line-height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span{float:left;display:block;width:20px;height:14px;border:1px solid #fff;line-height:12px;padding-left:3px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span.actived{background-color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn{width:16px;height:16px;line-height:24px;font-size:16px;float:left;color:#e8e8e8;margin-right:8px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn.active,.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn:hover{color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar{height:22px;float:left;font-size:13px!important;line-height:28px;color:#fff}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-progressinfo{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-title{float:left;margin-left:20px} \ No newline at end of file diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js index f2de86c..dec2bb9 100644 --- a/build/webpack.base.conf.js +++ b/build/webpack.base.conf.js @@ -44,7 +44,10 @@ } }, externals: { - 'sapoOcx': 'sapoOcx' + 'sapoOcx': 'sapoOcx', + 'FMap': 'FMap', + 'FUtil': 'FUtil', + 'Options': 'Options' }, module: { rules: [ diff --git a/index.html b/index.html index eeac1bb..b294ef8 100644 --- a/index.html +++ b/index.html @@ -3,12 +3,15 @@ + + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/src/components/fMap/base/events.js b/src/components/fMap/base/events.js new file mode 100644 index 0000000..b8a8a2c --- /dev/null +++ b/src/components/fMap/base/events.js @@ -0,0 +1,24 @@ +export default { + 'map': [ + 'click', + 'dblclick', + 'singleclick', + 'rtclick', + 'moveend', + 'movestart', + 'prointerdrag', + 'pointermove' + ], + 'view': [ + 'change:zoom', + 'change:center' + ], + 'layer': [ + 'create', + 'clear', + 'change:opacity', + 'change:source', + 'change:visible', + 'change:zIndex' + ] +} diff --git a/src/components/fMap/base/factory.js b/src/components/fMap/base/factory.js new file mode 100644 index 0000000..0f1e497 --- /dev/null +++ b/src/components/fMap/base/factory.js @@ -0,0 +1,4 @@ +export function createPoint (options = {}) { + const { lng, lat } = options + return [lng, lat] +} diff --git a/src/components/fMap/base/loadScript.js b/src/components/fMap/base/loadScript.js new file mode 100644 index 0000000..18112fd --- /dev/null +++ b/src/components/fMap/base/loadScript.js @@ -0,0 +1,60 @@ +const callbacks = {} + +/** + * 加载一个远程脚本 + * @param {String} src 一个远程脚本 + * @param {Function} callback 回调 + */ +function loadScript(src, callback) { + const existingScript = document.getElementById(src) + const cb = callback || (() => {}) + if (!existingScript) { + callbacks[src] = [] + const $script = document.createElement('script') + $script.src = src + $script.id = src + $script.async = 1 + document.body.appendChild($script) + const onEnd = 'onload' in $script ? stdOnEnd.bind($script) : ieOnEnd.bind($script) + onEnd($script) + } + + callbacks[src].push(cb) + + function stdOnEnd(script) { + script.onload = () => { + this.onerror = this.onload = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + script.onerror = () => { + this.onerror = this.onload = null + cb(new Error(`Failed to load ${src}`), script) + } + } + + function ieOnEnd(script) { + script.onreadystatechange = () => { + if (this.readyState !== 'complete' && this.readyState !== 'loaded') return + this.onreadystatechange = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + } +} + +/** + * 顺序加载一组远程脚本 + * @param {Array} list 一组远程脚本 + * @param {Function} cb 回调 + */ +export function loadScriptQueue(list, cb) { + const first = list.shift() + list.length ? loadScript(first, () => loadScriptQueue(list, cb)) : loadScript(first, cb) +} + +export default loadScript diff --git a/src/components/fMap/base/mixins/abstract.js b/src/components/fMap/base/mixins/abstract.js new file mode 100644 index 0000000..9cf6d52 --- /dev/null +++ b/src/components/fMap/base/mixins/abstract.js @@ -0,0 +1,13 @@ +class Mixin { + constructor({ component, props, events, extraProps, exceptProps }) { + this.render = function(h) { + return h(component, { + props: props.reduce((obj, key) => Object.assign(obj, { [key]: this[key] }), {}), + on: events.reduce((obj, key) => Object.assign(obj, { [key]: this.transmitEvent }), {}) + }) + } + this.props = [...extraProps, ...props.filter(prop => exceptProps.indexOf(prop))] + } +} + +export default prop => new Mixin(prop) diff --git a/src/components/fMap/base/mixins/common.js b/src/components/fMap/base/mixins/common.js new file mode 100644 index 0000000..3c9e2f0 --- /dev/null +++ b/src/components/fMap/base/mixins/common.js @@ -0,0 +1,82 @@ +const types = { + map: { + unload: 'clearMap' + }, + control: { + unload: 'removeControl' + }, + layer: { + unload: 'removeLayer' + }, + features: { + unload: 'removeFeatures' + }, + listener: { + unload: 'removeListener' + } +} + +const getParent = $component => ($component.abstract || $component.$el === $component.$children[0].$el) ? getParent($component.$parent) : $component + +function destroyInstance () { + const { unload, renderByParent, $parent } = this + if (renderByParent) { + $parent.reload() + } + unload() +} + +class Mixin { + constructor (prop) { + this.methods = { + ready () { + const $parent = getParent(this.$parent) + const fmap = this.fmap = $parent.fmap + this.load() + this.$emit('ready', { + fmap + }) + }, + transmitEvent (e) { + this.$emit(e.type.replace(/^on/, ''), e) + }, + reload () { + this && this.$nextTick(() => { + this.unload() + this.$nextTick(this.load) + }) + }, + unload () { + const {fmap, originInstance} = this + try { + switch (prop.type) { + case 'search': + return originInstance.clearResults() + case 'autoComplete': + case 'lushu': + return originInstance.dispose() + case 'markerClusterer': + return originInstance.clearMarkers() + default: + fmap[types[prop.type].unload](originInstance) + } + } catch (e) {} + } + } + this.computed = { + renderByParent () { + return this.$parent.preventChildrenRender + } + } + this.mounted = function () { + const $parent = getParent(this.$parent) + const fmap = $parent.fmap + const { ready } = this + fmap ? ready() : $parent.$on('ready', ready) + } + this.destroyed = destroyInstance + this.beforeDestroy = destroyInstance + } +} + +export default type => new Mixin({ type }) diff --git a/src/components/fMap/components/fMap.vue b/src/components/fMap/components/fMap.vue new file mode 100644 index 0000000..8f80f93 --- /dev/null +++ b/src/components/fMap/components/fMap.vue @@ -0,0 +1,197 @@ + + + + + + diff --git a/src/utils/request.js b/src/utils/request.js index 517107c..da89ae9 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -35,7 +35,7 @@ const res = response.data if (res instanceof Blob) { return response - } else if (res.code !== 200) { + } else if (res.code !== 200 && res.code !== '1') { // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了; if (res.code === 401 || res.code === 50012 || res.code === 50014) { MessageBox.confirm( diff --git a/src/views/caseManage/createCase.vue b/src/views/caseManage/createCase.vue index 768520d..4fc7073 100644 --- a/src/views/caseManage/createCase.vue +++ b/src/views/caseManage/createCase.vue @@ -1,7 +1,7 @@ @@ -180,10 +201,11 @@ import { getNextNodeList } from '@/api/process' import { getAreaList } from '@/api/system/area' import { getCustomerList } from '@/api/customer' +import FMap from '@/components/fMap/components/fMap' export default { name: 'CreateCase', - components: { KnowledgeSearch }, + components: { KnowledgeSearch, FMap }, data() { const validateAddress = function(rule, value, callback) { console.log(value) @@ -231,7 +253,9 @@ limitedTime: '', // 事件办理期限 processWay: '', // 处理方式 processDept: '', // 处理单位 - processUser: '' // 处理人 + processUser: '', // 处理人 + lng: '0', // 事件经度 + lat: '0' // 事件纬度 }, allowAdd: true, // 允许新增联系人 addLoading: false, // 添加允许等待 @@ -248,6 +272,9 @@ caseSourceList: [], userList: [], // 处理人列表 inputSize: 'small', // 按钮样式 + showMap: false, + mapHeight: '0px', + keyword: '', rules: { caseId: [{ required: true, message: '事件编号不能为空', trigger: ['blur'] }], sound: [{ required: true, message: '来电录音编号不能为空', trigger: ['blur'] }], @@ -339,7 +366,9 @@ limitedTime: this.form.limitedTime, // 事件办理期限 processWay: '' + this.form.processWay, // 处理方式 processDept: this.form.processDept, // 处理单位 - processUser: this.form.processUser // 处理人 + processUser: this.form.processUser, // 处理人 + lng: this.form.lng, // 事件经度 + lat: this.form.lat // 事件纬度 } addCase(form).then(response => { if (response.code === 200) { @@ -526,6 +555,34 @@ const id = getToday('yyMMddhhmmss') const seat = this.$store.getters.seat this.form.caseId = id + seat + }, + showMapDiv() { + this.showMap = true + this.$refs.mapComp.initMap() + + this.mapHeight = this.$refs.caseContainer.offsetHeight + 'px' + }, + queryPoi() { + if (this.keyword === '') { + this.$message.warning('请输入关键字') + } else { + this.$refs.mapComp.queryPoi(this.keyword) + } + }, + confirmPos() { + this.form.lng = this.$refs.mapComp.longitude + this.form.lat = this.$refs.mapComp.latitude + + this.showMap = false + this.clearMap() + console.log(this.form) + }, + clearMap() { + this.$refs.mapComp.clearMap() + }, + backToForm() { + this.showMap = false + this.clearMap() } } } @@ -541,6 +598,7 @@ } .form-div{ width: calc( 100%- 300px); + /*height: 50vh;*/ .checkbox{ display: inline-block; line-height: 32px; // 设置行高 @@ -552,4 +610,9 @@ width: $rightwidth; } + #map { + width: 100%; + height: 50vh; + } + diff --git a/static/fMap/fc-map.min.css b/static/fMap/fc-map.min.css new file mode 100644 index 0000000..e9cccd0 --- /dev/null +++ b/static/fMap/fc-map.min.css @@ -0,0 +1,271 @@ +.ol-box { + box-sizing: border-box; + border-radius: 2px; + border: 2px solid blue; +} + +.ol-mouse-position { + top: 8px; + right: 8px; + position: absolute; +} + +.ol-scale-line { + background: rgba(0,60,136,0.3); + border-radius: 4px; + bottom: 8px; + left: 8px; + padding: 2px; + position: absolute; +} +.ol-scale-line-inner { + border: 1px solid #eee; + border-top: none; + color: #eee; + font-size: 10px; + text-align: center; + margin: 1px; + will-change: contents, width; +} +.ol-overlay-container { + will-change: left,right,top,bottom; +} + +.ol-unsupported { + display: none; +} +.ol-viewport, .ol-unselectable { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} +.ol-selectable { + -webkit-touch-callout: default; + -webkit-user-select: auto; + -moz-user-select: auto; + -ms-user-select: auto; + user-select: auto; +} +.ol-grabbing { + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; +} +.ol-grab { + cursor: move; + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; +} +.ol-control { + position: absolute; + background-color: rgba(255,255,255,0.4); + border-radius: 4px; + padding: 2px; +} +.ol-control:hover { + background-color: rgba(255,255,255,0.6); +} +.ol-zoom { + top: .5em; + left: .5em; +} +.ol-rotate { + top: .5em; + right: .5em; + transition: opacity .25s linear, visibility 0s linear; +} +.ol-rotate.ol-hidden { + opacity: 0; + visibility: hidden; + transition: opacity .25s linear, visibility 0s linear .25s; +} +.ol-zoom-extent { + top: 4.643em; + left: .5em; +} +.ol-full-screen { + right: .5em; + top: .5em; +} +@media print { + .ol-control { + display: none; + } +} + +.ol-control button { + display: block; + margin: 1px; + padding: 0; + color: white; + font-size: 1.14em; + font-weight: bold; + text-decoration: none; + text-align: center; + height: 1.375em; + width: 1.375em; + line-height: .4em; + background-color: rgba(0,60,136,0.5); + border: none; + border-radius: 2px; +} +.ol-control button::-moz-focus-inner { + border: none; + padding: 0; +} +.ol-zoom-extent button { + line-height: 1.4em; +} +.ol-compass { + display: block; + font-weight: normal; + font-size: 1.2em; + will-change: transform; +} +.ol-touch .ol-control button { + font-size: 1.5em; +} +.ol-touch .ol-zoom-extent { + top: 5.5em; +} +.ol-control button:hover, +.ol-control button:focus { + text-decoration: none; + background-color: rgba(0,60,136,0.7); +} +.ol-zoom .ol-zoom-in { + border-radius: 2px 2px 0 0; +} +.ol-zoom .ol-zoom-out { + border-radius: 0 0 2px 2px; +} + + +.ol-attribution { + text-align: right; + bottom: .5em; + right: .5em; + max-width: calc(100% - 1.3em); +} + +.ol-attribution ul { + margin: 0; + padding: 0 .5em; + font-size: .7rem; + line-height: 1.375em; + color: #000; + text-shadow: 0 0 2px #fff; +} +.ol-attribution li { + display: inline; + list-style: none; + line-height: inherit; +} +.ol-attribution li:not(:last-child):after { + content: " "; +} +.ol-attribution img { + max-height: 2em; + max-width: inherit; + vertical-align: middle; +} +.ol-attribution ul, .ol-attribution button { + display: inline-block; +} +.ol-attribution.ol-collapsed ul { + display: none; +} +.ol-attribution.ol-logo-only ul { + display: block; +} +.ol-attribution:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-attribution.ol-uncollapsible { + bottom: 0; + right: 0; + border-radius: 4px 0 0; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-logo-only { + background: transparent; + bottom: .4em; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-uncollapsible img { + margin-top: -.2em; + max-height: 1.6em; +} +.ol-attribution.ol-logo-only button, +.ol-attribution.ol-uncollapsible button { + display: none; +} + +.ol-zoomslider { + top: 4.5em; + left: .5em; + height: 200px; +} +.ol-zoomslider button { + position: relative; + height: 10px; +} + +.ol-touch .ol-zoomslider { + top: 5.5em; +} + +.ol-overviewmap { + left: 0.5em; + bottom: 0.5em; +} +.ol-overviewmap.ol-uncollapsible { + bottom: 0; + left: 0; + border-radius: 0 4px 0 0; +} +.ol-overviewmap .ol-overviewmap-map, +.ol-overviewmap button { + display: inline-block; +} +.ol-overviewmap .ol-overviewmap-map { + border: 1px solid #7b98bc; + height: 150px; + margin: 2px; + width: 150px; +} +.ol-overviewmap:not(.ol-collapsed) button{ + bottom: 1px; + left: 2px; + position: absolute; +} +.ol-overviewmap.ol-collapsed .ol-overviewmap-map, +.ol-overviewmap.ol-uncollapsible button { + display: none; +} +.ol-overviewmap:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-overviewmap-box { + border: 2px dotted rgba(0,60,136,0.7); +} + +.ol-overviewmap .ol-overviewmap-box:hover { + cursor: move; +} + +/*! + * ol3-contextmenu - v2.5.0 + * Custom Context Menu for Openlayers + * https://github.com/jonataswalker/ol3-contextmenu + * Built: Fri Nov 10 2017 09:09:46 GMT+0800 (中国标准时间) + */ +.ol-ctx-menu-container{position:absolute;padding:8px;background:#fff;color:#222;font-size:13px;border-radius:5px;box-shadow:3px 3px 5px rgba(0,0,0,.2);box-sizing:border-box}.ol-ctx-menu-container a,.ol-ctx-menu-container div,.ol-ctx-menu-container img,.ol-ctx-menu-container li,.ol-ctx-menu-container span,.ol-ctx-menu-container ul{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}.ol-ctx-menu-container a img{border:none}.ol-ctx-menu-container *,.ol-ctx-menu-container :after,.ol-ctx-menu-container :before{box-sizing:inherit}.ol-ctx-menu-container.ol-ctx-menu-hidden{opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container ul{list-style:none}.ol-ctx-menu-container li{position:relative;line-height:20px;padding:2px 5px}.ol-ctx-menu-container li:not(.ol-ctx-menu-separator):hover{cursor:pointer;background-color:#333;color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-submenu .ol-ctx-menu-container{border:1px solid #eee;padding:8px;top:0;opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover .ol-ctx-menu-container{opacity:1;visibility:visible;transition-delay:0s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:after{position:absolute;top:7px;right:10px;content:"";display:inline-block;width:.6em;height:.6em;border-right:.3em solid #222;border-top:.3em solid #222;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover:after{border-color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-separator{padding:0}.ol-ctx-menu-container li.ol-ctx-menu-separator hr{border:0;height:1px;background-image:linear-gradient(270deg,transparent,rgba(0,0,0,.75),transparent)}.ol-ctx-menu-icon{text-indent:20px;background-size:20px auto;background-repeat:no-repeat;background-position:0}.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABaUlEQVQ4T72U7VHCQBCGn90GtAMuNGCswFiBWIFQgWMFxg6wArECsQKhArEBiB1Qwa1zgQn5IAYcxv13k71n3919L8KJQ07M47+BzgG9TRfZ/JBuWhS6BJFHRJICYrZGZIz3z5Ct2+B7gG6I6kt+wewdkQVwjtkAkR5mC8yu26A1oItR/cTsOweQBdgutD8G7jGm2PJ2n8oqUKIpIjd4HxTM8gvaT/F+AlmWnyWaIXKF95eNguFzTYFhNsdWu9kFgFlaFMANUH3D8wDLoLgSTSD2il8NCe2ZXQBxWDGwxmyUzzOMBZ7wy7Qb2K0wQfXjMOBuhlFpZtNty5sFaTQBuTusZdymeqs1SpYKcO9HkE3KbTd9WFijMHJQ5hBNEAYNq5Qd0dhyke0GiE4QzjqfW23mHT8Hl4DG4Lce3FPE7AtbBSdsbNqpoJLgYkRnNeUV+xwJDHTnUEkxHGbhBXUs5TjJjew/KPy94g+NRaIVRYmMXwAAAABJRU5ErkJggg==")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABc0lEQVQ4T71U21ECQRDsJgGdvQDECMQIxAjECMQILCPwzAAjECIQI0AiEDPQAPaWCBhrcKHuCUcV5f7dY3v6tUscefHIePhfwBBCF8CZqRCReRs1tQxDCH1VfQLQz4EsSY4AvIjIsgm8AhhCGKrqa9zwrqoLAKckB5HtguR1E2gBMITQU9VPAD8GICIGtl3e+xHJBwBT59xtHcsCYJZlUwA3kcGHbfDep51OZywi3/acZZm9vyJ5WR5o38uACmDunNt6ZwAkUxFZDwghDFT1jeSjiJinhVUBVNVJkiTDKO8CQA+AsbNQ7s1Ps0VVn5MkSfcCtmBoDZi1Bdx4eJ7zbBolrwPy3o9J3rWSHPs3A1BbjVKlYBaIyDgvu9LDXDU2RTZmXVW1oKyLxRD+OrkOrJLy5mVM0iaftDhuhVbsvBzMglzKUNW6IV/OOWtCM8MmVvEkmbwt83LaB19fdgOtVquUZJeknaDdobTwbOcvBzPcN/AXH1DFFWP7u9oAAAAASUVORK5CYII=")}.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABU0lEQVQ4T72U7VECMRRFz3sNaAdkacC1AtcKxApcKnCsQOwAK3CtQKxAqEBsANYOqCDPyTIC+8WCw5jfybn33dxEOPGSE/P4b6BzQG89RT47ZJoWhy5B5BGRZAMxWyEyxvtnyFdt8AagS1F9KQ6YvSMyB84xGyDSw2yO2XUbtAJ0MaqfmH0XAPIA2y7tj4F7jAm2uG1yWQZKNEHkBu+Dg2njWBJNEbnC+8uaIFRuWfuG2QxbbrOrUd0A1Tc8D7AIjkur7DAAsVf8MiWMZ3ZR2m02LPIMscATfjHqBnY7TFD9OAy4zTCCPG/MUKMM5O6wkXFr9dZq7FQqqHk/hDzbFa73cFONTZFDdRyiCcKg5rrSiLaXkiI6RjjrfG6VzDs+B5eAxuDXeYpmNRGzL2wZ/wof+du4GNFpBVqqz5HA4MM5VEYYDrOs+1I6Q9u/4Q8O9wN/AGgWjBVqQjjgAAAAAElFTkSuQmCC")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABYklEQVQ4T72U4VHCQBCF36tA91KAWIFYgViBWIFYgWMFYgdYgVCBWAFSgdiBFpAsFWSdxcDkQoBkhnF/ZjbfvX377ogjF4/Mw/8CVbUD4MynEJF5k2lqFapqz8yeAPRKkCXJEYAXEVnugm8BVXVgZq/FD+9mtgBwSrJfqF2QvN4FjYCq2jWzTwA/DhARh20qTdMRyQcA0xDCbZ3KCJhl2RTATaHgo+6HLMv8+xXJy+qB3l8FGoB5CKHsXcRV1b6ZvZF8FBH3NKotoJlNkiQZFONdlLtJ3rufbouZPSdJMjwIbKDQEzBrClx7eC4i33Uepmk6JnnXaOQifzMAtdGoRApugYiMI1uqKkrRWAfZo9MxM1+UZzFewl8mN4nYdVM83L7BkwbXLUrF3sfBLQDQBbDy08x8vOohXyEE71lVq9emuEk+3gZa3XYroCvwFyjP8yHJDsnxwaU08GxvS2uFhw78BbzWrxXgMbsHAAAAAElFTkSuQmCC")} +.plot-helper-control-point-div{width:10px;height:10px;border:1px solid #000;border-radius:100%;background-color:#fff;opacity:.6;cursor:move}.ol-plot-text-area-content{position:relative}.ol-plot-text-area-content .ol-plot-text-area-editor{position:absolute;top:0;right:0;width:20px;height:20px;background-color:#4cae4c} +.fc-map-single-bubble.iframe-bubble-box .btn-close,.popup-label{display:none}.fc-map{width:100%;height:100%}.popup-label{background-color:#fff;border:2px solid #444;border-radius:7px;-webkit-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);-moz-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);color:#111;font:12px/20px "Helvetica Neue",Arial,Helvetica,sans-serif;font-weight:700;padding:3px 6px;position:absolute;white-space:nowrap;top:-35px;left:20px}.popup-label img{vertical-align:middle}.popup-label.marker:before{border-top:6px solid transparent;border-bottom:6px solid transparent;content:"";border-right:6px solid #000;border-right-color:inherit;position:absolute;left:-8px;top:5px}.ol-full-screen{position:absolute;top:50%}.p-helper-control-point-div{width:12px;height:12px;border:1px solid #000;background-color:#ff0;opacity:.8;cursor:move}.mtooltip{position:relative;background:rgba(0,0,0,.5);border-radius:4px;color:#fff;padding:4px 8px;opacity:.7;white-space:nowrap}.mtooltip-measure{opacity:1;font-weight:700}.mtooltip-static{background-color:#fc3;color:#000;border:1px solid #fff}.mtooltip-measure:before,.mtooltip-static:before{border-top:6px solid rgba(0,0,0,.5);border-right:6px solid transparent;border-left:6px solid transparent;content:"";position:absolute;bottom:-6px;margin-left:-7px;left:50%}.mtooltip-static:before{border-top-color:#fc3}.fc-map-single-bubble.normal-bubble-box{min-width:100px;min-height:32px;width:auto;height:auto;background-color:#fff;border:1px solid #23b1ed;webkit-border-radius:15px;-moz-border-radius:15px;border-radius:6px;-webkit-box-shadow:2px 2px 4px #888;-moz-box-shadow:2px 2px 4px #888;box-shadow:2px 2px 4px #888}.fc-map-single-bubble.normal-bubble-box .bubble-content{padding:5px}.fc-map-single-bubble.normal-bubble-box:before{content:' ';position:absolute;width:0;height:0;left:15px;bottom:-21px;border:11px solid;border-color:#23b1ed transparent transparent #23b1ed}.fc-map-single-bubble.normal-bubble-box:after{content:' ';position:absolute;width:0;height:0;left:16px;bottom:-19px;border:10px solid;border-color:#fff transparent transparent #fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer;color:#fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons a{color:#fff}.fc-map-single-bubble.iframe-bubble-boxdefault-nohead .btn-close{display:block;font-size:24px;position:absolute;top:-12px;right:-12px;cursor:pointer;color:#000}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer}.fc-map-single-bubble .general-bubble-box-content{max-width:400px;max-height:300px;overflow:auto;margin-left:10px;margin-right:10px}.fc-map-single-bubble .general-bubble-box-content tr{height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th{max-width:100px;width:100px;color:#a39e98;font-weight:400;font-size:13px;height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th:after{content:' :'}.fc-map-single-bubble .general-bubble-box-content .item-td{padding-left:10px;height:24px;line-height:24px;font-weight:400;font-size:13px}.fc-map-single-bubble .general-bubble-box-content .item-td span{float:left;margin-right:10px;max-width:200px;overflow:auto}.fc-map-single-bubble .general-bubble-box-content .item-td span i{font-size:32px;cursor:pointer;float:left}.selected-trace-effect{position:absolute;width:8px;height:8px;margin:-4px 0 0 -5px;background:#2dc3e8;-webkit-border-radius:8px;-moz-border-radius:8px;-ms-border-radius:8px;-o-border-radius:8px;border-radius:8px}.selected-trace-effect:after{content:"";position:absolute;height:6px;width:6px;left:1px;top:1px;background:#fbfbfb;border-radius:4px}.selected-trace-effect .ring{position:absolute;width:100px;height:50px;border:5px solid #2dc3e8;background-color:#fbfbfb;top:50%;left:50%;margin:-25px 0 0 -50px;opacity:0;-webkit-border-radius:100px/50px;-moz-border-radius:100px/50px;-ms-border-radius:100px/50px;-o-border-radius:100px/50px;border-radius:100px/50px;-webkit-animation:selectedTrace 1s infinite linear;-moz-animation:selectedTrace 1s infinite linear;-ms-animation:selectedTrace 1s infinite linear;-o-animation:selectedTrace 1s infinite linear;animation:selectedTrace 1s infinite linear}.selected-trace-effect .ring:last-of-type{-webkit-animation-delay:.5s;-moz-animation-delay:.5s;-ms-animation-delay:.5s;-o-animation-delay:.5s;animation-delay:.5s}@-webkit-keyframes selectedTrace{0%{-webkit-transform:scale(.1);opacity:1}100%{-webkit-transform:scale(1);opacity:0}}@-moz-keyframes selectedTrace{0%{-moz-transform:scale(.1);opacity:1}100%{-moz-transform:scale(1);opacity:0}}@-ms-keyframes selectedTrace{0%{-ms-transform:scale(.1);opacity:1}100%{-ms-transform:scale(1);opacity:0}}@-o-keyframes selectedTrace{0%{-o-transform:scale(.1);opacity:1}100%{-o-transform:scale(1);opacity:0}}@keyframes selectedTrace{0%{transform:scale(.1);opacity:1}100%{transform:scale(1);opacity:0}}.fc-map .ol-scale-line{background:0 0;border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.fc-map .ol-scale-line-inner{height:2px;border:1px solid #000;border-bottom-width:4px;border-top:none;color:#000;font-size:10px;text-align:center;padding-bottom:15px;margin:1px;will-change:contents,width}.fc-map .fmouseposition{position:absolute}.fc-map .fmouseposition.position-lt{left:0;top:0}.fc-map .fmouseposition.position-lc{left:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-lb{left:0;bottom:4px}.fc-map .fmouseposition.position-ct{left:calc(50% - 84px);top:0}.fc-map .fmouseposition.position-cc{left:calc(50% - 84px);top:calc(50% - 2px)}.fc-map .fmouseposition.position-cb{left:calc(50% - 84px);bottom:4px}.fc-map .fmouseposition.position-rt{right:0;top:0}.fc-map .fmouseposition.position-rc{right:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-rb{right:0;bottom:2px}.fmap-mapswitch{z-index:2;position:absolute;bottom:0;right:0;height:80px;cursor:pointer;-webkit-transition-property:width,background-color;transition-property:width,background-color;-webkit-transition-duration:.5s;transition-duration:.5s;background-color:#fff;background-color:rgba(255,255,255,.4)}.fmap-mapswitch .map-type-card{height:60px;width:86px;position:absolute;border-radius:2px;top:10px;box-sizing:border-box;border:1px solid rgba(255,255,255,0);-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-mapswitch .map-type-card span{position:absolute;bottom:0;right:0;display:inline-block;padding:3px 3px 2px 4px;font-size:12px;line-height:12px;color:#FFF;border-top-left-radius:2px;background-color:rgba(38,38,38,.6);width:100%;height:18px;text-align:center}.fmap-mapswitch .map-type-card.active,.fmap-mapswitch .map-type-card:hover{border:1px solid #3385FF}.fmap-mapswitch .map-type-card.active span{background-color:#3283ff;font-size:12px}.fmap-mapswitch .map-type-card:hover span{background-color:#3283ff}.fmap-mapswitch .map-type-card .type1{background-position:0 0}.fmap-mapswitch .map-type-card .type2{background-position:0 -60px}.fmap-mapswitch .map-type-card .type3{background-position:0 -120px}.fmap-mapswitch .map-type-card .type4{background-position:0 0}.fmap-mapswitch .map-type-card .type5{background-position:0 -60px}.fmap-mapswitch .map-type-card .type6{background-position:0 -120px}.fmap-mapswitch .map-type-card .type7{background-position:0 0}.fmap-mapswitch .map-type-card .type8{background-position:0 -60px}.fmap-mapswitch .map-type-card .type9{background-position:0 -120px}.fmap-mapswitch .map-type-card .type10{background-position:0 0}.fmap-mapswitch .map-type-card .type11{background-position:0 -60px}.fmap-mapswitch .map-type-card .type12{background-position:0 -120px}.fmap-mapswitch.closed{width:110px;background-color:rgba(255,255,255,0)}.fmap-mapswitch.closed span{font-size:0}.fmap-mapswitch.closed .map-type-card{border:1px solid rgba(153,153,153,.42);background:url(img/map_type_card_bg.png) no-repeat;-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-drawbar,.fmap-toolbar{border-radius:3px;background:#fff}.fmap-mapswitch.closed .type1{right:5px}.fmap-mapswitch.closed .type2{right:10px}.fmap-mapswitch.closed .type3{right:15px}.fmap-mapswitch.closed .type4{right:20px}.fmap-mapswitch.closed .type5{right:25px}.fmap-mapswitch.closed .type6{right:30px}.fmap-mapswitch.closed .type7{right:35px}.fmap-mapswitch.closed .type8{right:40px}.fmap-mapswitch.closed .type9{right:45px}.fmap-mapswitch.closed .type10{right:50px}.fmap-mapswitch.closed .type11{right:55px}.fmap-mapswitch.closed .type12{right:60px}.fmap-mapswitch.filter0{filter:alpha(opacity=10)}.fmap-mapswitch.filter1{filter:alpha(opacity=80)}.type1{right:10px}.type2{right:106px}.type3{right:202px}.type4{right:298px}.type5{right:390px}.type6{right:486px}.type7{right:582px}.type8{right:678px}.type9{right:774px}.type10{right:870px}.type11{right:966px}.type12{right:1062px}.fmap-toolbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.tool-item-h i{font-size:18px;color:grey;top:2px;position:relative;display:inline-block}.tool-item-h i:hover{color:#00e5ff}.tool-item-h.tool-item-group .down-list{max-width:68px;font-size:12px}.tool-item-h.tool-item-group .down-list.downpan{max-width:200px}.toolbtn{width:24px;height:24px;display:block}.toolbtn_export:before{content:"\E182"}.toolbtn_cut:before{content:"\E094"}.toolbtn_fullscreen:before{content:"\E350"}.toolbtn_measureline:before{content:"\E098"}.toolbtn_measurepolygon:before{content:"\E097"}.toolbtn_measureclear:before{content:"\e020"}.fmap-toolbar-content .down-list{background:#fff;border:1px solid #ccc;position:absolute;left:0;top:30px;font-size:12px}@keyframes card-drop{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes card-up{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animated-card-drop{-webkit-animation-name:card-drop;animation-name:card-drop;display:block;-webkit-animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s}.animated-card-up{-webkit-animation-name:card-up;animation-name:card-up;display:none;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-fill-mode:forwards}.ol-full-screen{display:none}.fmap-drawbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-pluging-nocontainer{position:absolute;top:0;right:0}.tool-item-h{height:32px;width:32px;display:inline-block;position:relative;float:left;padding:4px;cursor:pointer}.drawbtn,.drawbtn_x24,.drawbtn_x32{display:block}.tool-item-h:hover{border:1px solid #dcdcdc}.tool-item-h.tool-item-group,.tool-item-h.tool-item-group .down-list{width:68px}.drawbtn_x24{width:24px;height:24px}.drawbtn_x32{width:32px;height:32px}.drawbtn_AssaultDirection_x24{background:url(img/icon_drawbtn.png) 0 -160px no-repeat}.drawbtn_FreePolygon_x24{background:url(img/icon_drawbtn.png) -24px -160px no-repeat}.drawbtn_AttackArrow_x24{background:url(img/icon_drawbtn.png) -48px -160px no-repeat}.drawbtn_Circle_x24{background:url(img/icon_drawbtn.png) -72px -160px no-repeat}.drawbtn_ClosedCurve_x24{background:url(img/icon_drawbtn.png) -96px -160px no-repeat}.drawbtn_Curve_x24{background:url(img/icon_drawbtn.png) 0 -184px no-repeat}.drawbtn_DoubleArrow_x24{background:url(img/icon_drawbtn.png) -24px -184px no-repeat}.drawbtn_Ellipse_x24{background:url(img/icon_drawbtn.png) -48px -184px no-repeat}.drawbtn_FineArrow_x24{background:url(img/icon_drawbtn.png) -72px -184px no-repeat}.drawbtn_FreeLine_x24{background:url(img/icon_drawbtn.png) -96px -184px no-repeat}.drawbtn_Arc_x24{background:url(img/icon_drawbtn.png) 0 -208px no-repeat}.drawbtn_GatheringPlace_x24{background:url(img/icon_drawbtn.png) -24px -208px no-repeat}.drawbtn_Lune_x24{background:url(img/icon_drawbtn.png) -48px -208px no-repeat}.drawbtn_Polygon_x24{background:url(img/icon_drawbtn.png) -72px -208px no-repeat}.drawbtn_Polyline_x24{background:url(img/icon_drawbtn.png) -96px -208px no-repeat}.drawbtn_RectAngle_x24{background:url(img/icon_drawbtn.png) 0 -232px no-repeat}.drawbtn_Sector_x24{background:url(img/icon_drawbtn.png) -24px -232px no-repeat}.drawbtn_SquadCombat_x24{background:url(img/icon_drawbtn.png) -48px -232px no-repeat}.drawbtn_StraightArrow_x24{background:url(img/icon_drawbtn.png) -72px -232px no-repeat}.drawbtn_TailedAttackArrow_x24{background:url(img/icon_drawbtn.png) -96px -232px no-repeat}.drawbtn_TailedSquadCombat_x24{background:url(img/icon_drawbtn.png) 0 -256px no-repeat}.drawbtn_AssaultDirection_x24:hover{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_x24:hover{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_x24:hover{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_x24:hover{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_x24:hover{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_x24:hover{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_x24:hover{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_x24:hover{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_x24:hover{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_x24:hover{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_x24:hover{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_x24:hover{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_x24:hover{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_x24:hover{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_x24:hover{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_AssaultDirection_hover_x24{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_hover_x24{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_hover_x24{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_hover_x24{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_hover_x24{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_hover_x24{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_hover_x24{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_hover_x24{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_hover_x24{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_hover_x24{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_hover_x24{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_hover_x24{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_hover_x24{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_hover_x24{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_hover_x24{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_SquadCombat_x32{background:url(img/icon_drawbtn.png) no-repeat}.drawbtn_StraightArrow_x32{background:url(img/icon_drawbtn.png) -32px 0 no-repeat}.drawbtn_TailedAttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -32px no-repeat}.drawbtn_TailedSquadCombat_x32{background:url(img/icon_drawbtn.png) -32px -32px no-repeat}.drawbtn_Arc_x32{background:url(img/icon_drawbtn.png) -64px 0 no-repeat}.drawbtn_AssaultDirection_x32{background:url(img/icon_drawbtn.png) -64px -32px no-repeat}.drawbtn_AttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -64px no-repeat}.drawbtn_Circle_x32{background:url(img/icon_drawbtn.png) -32px -64px no-repeat}.drawbtn_ClosedCurve_x32{background:url(img/icon_drawbtn.png) -64px -64px no-repeat}.drawbtn_Curve_x32{background:url(img/icon_drawbtn.png) -96px 0 no-repeat}.drawbtn_DoubleArrow_x32{background:url(img/icon_drawbtn.png) -96px -32px no-repeat}.drawbtn_Ellipse_x32{background:url(img/icon_drawbtn.png) -96px -64px no-repeat}.drawbtn_FineArrow_x32{background:url(img/icon_drawbtn.png) 0 -96px no-repeat}.drawbtn_FreeLine_x32{background:url(img/icon_drawbtn.png) -32px -96px no-repeat}.drawbtn_FreePolygon_x32{background:url(img/icon_drawbtn.png) -64px -96px no-repeat}.drawbtn_GatheringPlace_x32{background:url(img/icon_drawbtn.png) -96px -96px no-repeat}.drawbtn_Lune_x32{background:url(img/icon_drawbtn.png) -128px 0 no-repeat}.drawbtn_Polygon_x32{background:url(img/icon_drawbtn.png) -128px -32px no-repeat}.drawbtn_Polyline_x32{background:url(img/icon_drawbtn.png) -128px -64px no-repeat}.drawbtn_RectAngle_x32{background:url(img/icon_drawbtn.png) -128px -96px no-repeat}.drawbtn_Sector_x32{background:url(img/icon_drawbtn.png) 0 -128px no-repeat}.drawbtn_SquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -160px 0 no-repeat}.drawbtn_StraightArrow_hover_x32{background:url(img/icon_drawbtn.png) -192px 0 no-repeat}.drawbtn_TailedAttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -32px no-repeat}.drawbtn_TailedSquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -192px -32px no-repeat}.drawbtn_Arc_hover_x32{background:url(img/icon_drawbtn.png) -224px 0 no-repeat}.drawbtn_AssaultDirection_hover_x32{background:url(img/icon_drawbtn.png) -224px -32px no-repeat}.drawbtn_AttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -64px no-repeat}.drawbtn_Circle_hover_x32{background:url(img/icon_drawbtn.png) -192px -64px no-repeat}.drawbtn_ClosedCurve_hover_x32{background:url(img/icon_drawbtn.png) -224px -64px no-repeat}.drawbtn_Curve_hover_hover_x32{background:url(img/icon_drawbtn.png) -256px 0 no-repeat}.drawbtn_DoubleArrow_hover_x32{background:url(img/icon_drawbtn.png) -256px -32px no-repeat}.drawbtn_Ellipse_hover_x32{background:url(img/icon_drawbtn.png) -256px -64px no-repeat}.drawbtn_FineArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -96px no-repeat}.drawbtn_FreeLine_hover_x32{background:url(img/icon_drawbtn.png) -192px -96px no-repeat}.drawbtn_FreePolygon_hover_x32{background:url(img/icon_drawbtn.png) -224px -96px no-repeat}.drawbtn_GatheringPlace_hover_x32{background:url(img/icon_drawbtn.png) -256px -96px no-repeat}.drawbtn_Lune_hover_x32{background:url(img/icon_drawbtn.png) -288px 0 no-repeat}.drawbtn_Polygon_hover_x32{background:url(img/icon_drawbtn.png) -288px -32px no-repeat}.drawbtn_Polyline_hover_x32{background:url(img/icon_drawbtn.png) -288px -64px no-repeat}.drawbtn_RectAngle_hover_x32{background:url(img/icon_drawbtn.png) -288px -96px no-repeat}.drawbtn_Sector_hover_x32{background:url(img/icon_drawbtn.png) -160px -128px no-repeat}.ol-zoom{display:none}.fmap-zoompan{width:62px;height:192px}.fmap-zoompan div{position:absolute}.fmap-zoompan .fmap-zoompan-pan{width:44px;height:44px;overflow:hidden;background:url(img/mapctrl_zoompan.png) no-repeat}.fmap-zoompan .fmap-zoompan-pan .fmap-btn{height:15px;width:15px;cursor:pointer}.fmap-zoompan .fmap-zoompan-pan .fmap-panE,.fmap-zoompan .fmap-zoompan-pan .fmap-panN,.fmap-zoompan .fmap-zoompan-pan .fmap-panS,.fmap-zoompan .fmap-zoompan-pan .fmap-panW{overflow:hidden}.fmap-zoompan .fmap-zoompan-pan .fmap-panN{left:14px;top:0}.fmap-zoompan .fmap-zoompan-pan .fmap-panW{left:1px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panE{left:27px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panS{left:14px;top:25px}.fmap-zoompan .fmap-zoompan-zoom{top:45px;height:147px;width:62px;overflow:hidden}.fmap-zoompan .fmap-zoompan-zoom .fmap-btn{width:22px;height:21px;left:12px;overflow:hidden;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;z-index:10}.fmap-zoompan .fmap-zoompan-zoom .zoomIn{cursor:pointer;background-position:0 -221px}.fmap-zoompan .fmap-zoompan-zoom .zoomIn:hover{background-position:0 -243px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut{cursor:pointer;background-position:0 -265px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut:hover{background-position:0 -287px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider{width:37px;top:18px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgtop{left:18px;width:10px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -23px -226px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbottom{left:19px;height:8px;width:10px;top:124px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -33px bottom no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgmask{height:100%;width:24px;left:10px;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar{height:11px;width:19px;left:13px;top:80px;overflow:hidden;background:url(img/mapctrl_zoompan.png) 0 -309px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar:hover{background:url(img/mapctrl_zoompan.png) 0 -320px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder{display:none;position:absolute;top:0}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{position:absolute;left:34px;height:21px;width:28px;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;font-size:0;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{background-position:0 -380px;top:21px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city{background-position:0 -401px;top:52px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov{background-position:0 -422px;top:76px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country{background-position:0 -443px;top:100px}.fmap-zoompan .fmap-zoompan-zoom:hover .fmap-zoompan-zlholder{display:block}.fmap-zoompan.zoom-mode-pan .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-slider{width:62px;height:150px}.fmap-zoompan.zoom-mode-slider .fmap-zoompan-zoom{top:0;height:147px;width:62px}.fmap-zoompan.zoom-mode-slider .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-btn{width:48px;height:40px}.fmap-zoompan.zoom-mode-btn .fmap-zoompan-zoom{top:0;height:40px;width:48px}.fmap-zoompan.zoom-mode-btn .fmap-btn.zoomOut{top:20px}.fmap-areanav{position:absolute;float:left;top:5px;right:300px;z-index:2;height:25px;width:76px;margin-right:6px;background:#fff;border-radius:3px;box-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-areanav a,.fmap-areanav img{border:0;text-decoration:none}.fmap-areanav>i{position:absolute;top:5px;left:2px;font-size:14px}.fmap-areanav.hover .content{display:block}.fmap-areanav:focus{outline:0}.fmap-areanav.opened .content{display:block}.fmap-areanav a:link,.fmap-areanav a:visited{color:#005aa0}.fmap-areanav a:hover{background:#8cc0fb;color:#fff;cursor:pointer}.fmap-areanav a:active{background:#005aa0;color:#fff}.fmap-areanav em{font-style:normal}.fmap-areanav ol,.fmap-areanav ul{list-style:none;padding:0;margin:0}.fmap-areanav .tab .tab-item,.fmap-areanav .tab a,.fmap-areanav .tab li{cursor:pointer;float:left;text-align:center}.fmap-areanav .text{float:left;position:relative;top:0;left:15px;z-index:2;height:100%;width:100%;background:0 0;padding:0 20px 0 4px;line-height:23px;overflow:hidden;font-size:13px;font-family:'微软雅黑','黑体',Arial,Helvetica,sans-serif;color:#555}.fmap-areanav .text .updown-btn{font-size:12px;color:#ccc;font-weight:400}.fmap-areanav .text b{display:block;position:absolute;top:0;right:12px;overflow:hidden;width:17px;height:25px;line-height:25px}.fmap-areanav .close{display:none;position:absolute;z-index:2;top:19px;left:366px;cursor:pointer;width:17px;height:17px;background:#f20d0d}.fmap-areanav .content{display:none;position:absolute;top:23px;width:350px;padding:5px;background:#fff;-moz-box-shadow:0 0 5px #ddd;-webkit-box-shadow:0 0 5px #ddd;box-shadow:0 0 5px #ddd}.fmap-areanav .content select{float:left;width:120px;border:1px solid #cecbce;margin-right:15px}.fmap-areanav .content .select3{margin-right:0}.fmap-areanav .content .fstock{position:relative;margin-bottom:0}.fmap-areanav .content .fstock .tab{width:95%;height:25px;float:left;border-bottom:1px solid #2dc3e8;overflow:visible}.fmap-areanav .content .fstock .tab a{position:relative;float:left;height:23px;padding:0 20px 1px 10px;line-height:23px;text-align:center;text-decoration:none;cursor:pointer;color:#005AA0;outline:0}.fmap-areanav .content .fstock .tab a:hover{background:0;color:#005AA0}.fmap-areanav .content .fstock .tab a:hover i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .tab a i{position:absolute;right:5px;top:10px;display:block;width:7px;height:5px;overflow:hidden;filter:alpha(opacity=50)}.fmap-areanav .content .fstock .tab li{float:left;clear:none;height:23px;padding:1px 1px 0;border:1px solid #ddd;border-bottom:0;margin-right:3px;background-color:#fff;line-height:22px;text-decoration:none}.fmap-areanav .content .fstock .tab .curr{position:relative;height:25px;padding:0;border:1px solid #2dc3e8;border-bottom:0}.fmap-areanav .content .fstock .tab .curr i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .area-list{padding-top:5px}.fmap-areanav .content .fstock .area-list li{float:left;width:80px;padding:2px 0 2px 15px;clear:none}.fmap-areanav .content .fstock .area-list li a{float:left;padding:2px 4px;color:#005aa0}.fmap-areanav .content .fstock .area-list li a:hover{color:#fff}.fmap-areanav .content .fstock .area-list .disable-li a{float:left;padding:2px 4px;color:#eee}.fmap-areanav .content .fstock .area-list .disable-li a:hover{background:#fff;color:#eee;cursor:default}.fmap-areanav.hovae .text{border-bottom:0}.fmap-areanav.hovae .close,.fmap-areanav.hovae .content{display:block}.fcplayer-container{padding:0;margin:0;width:100%;z-index:9999}.fcplayer-container .fcplayer{background:rgba(0,0,0,.8);border:1px solid #acb2bb;width:100%;height:52px;position:relative;padding:4px 12px}.fcplayer-container .fcplayer .fcplayer-progressbar{height:14px;width:100%}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-bg{background-color:#dadada;width:100%;height:4px;position:relative;top:5px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-pass{position:relative;height:4px;width:100px;top:1px;background-color:#01dbfb}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-thumb{background:url(img/player_progressbar_thumb.png) no-repeat;width:16px;height:16px;position:relative;top:-8px;left:0}.fcplayer-container .fcplayer .fcplayer-opbar{height:28px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed{color:#fff;width:200px;font-size:9px!important}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .speed-ctrl{border:1px solid #fff;float:left;display:block;width:32px;height:28px;line-height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span{float:left;display:block;width:20px;height:14px;border:1px solid #fff;line-height:12px;padding-left:3px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span.actived{background-color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn{width:16px;height:16px;line-height:24px;font-size:16px;float:left;color:#e8e8e8;margin-right:8px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn.active,.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn:hover{color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar{height:22px;float:left;font-size:13px!important;line-height:28px;color:#fff}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-progressinfo{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-title{float:left;margin-left:20px} \ No newline at end of file diff --git a/static/fMap/fc-map.min.js b/static/fMap/fc-map.min.js new file mode 100644 index 0000000..bc563e8 --- /dev/null +++ b/static/fMap/fc-map.min.js @@ -0,0 +1,35750 @@ +/*! + * FinestMap JavaScript Library, 航天精一多图源地图框架 + * http://www.finest.com.cn + * + * Copyright (c) 2018, Finest All rights reserved. + * Released under the GPL license. + * + * Version: v1.4.6-sp02 + * BuildDate: Thu Jun 27 2019 09:47:24 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复fmap.plot.editend事件无效问题 + * + * Version: v1.4.6-sp01 + * BuildDate: Wed Jun 26 2019 11:47:59 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复在IE9下canvas.remove() + * + * Version: v1.4.6 + * BuildDate: Wed Jun 19 2019 17:11:25 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复IE9、IE10、IE11、Edge兼容缺陷 + * 2、修复对低版本jquery的不兼容问题,兼容1.7以上 + * 3、修复activateZoomBox、getPixelFromCoordinate、addControl函数(因含$.uuid()函数在低版本jq报错) + * + * Version: v1.4.5-sp05 + * BuildDate: Tue May 14 2019 10:44:07 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、addFeatures方法增加对GeoJson数据格式的支持 + * + * Version: v1.4.5-sp04 + * BuildDate: Wed May 08 2019 14:21:52 GMT+0800 (GMT+08:00) + * buildinfo: + * 1、修复测量后画标注,测量信息会被清空 + * 2、修复切换图源时可能资源无法加载 + * + * Version: v1.4.5-sp03 + * BuildDate: Wed May 08 2019 11:01:25 GMT+0800 (GMT+08:00) + * buildinfo: + * 1、修复在IE9、IE10下的不兼容问题 + */ +function extendJQFunction(e) { + e.isUndefined = function (e) { + return void 0 === e + }, e.getUrlParam = function (e) { + var o = window.location.search.substr(1); + if (o.length > 0) { + var t, r = {}; + if (o.indexOf(!0)) t = o.split("&"), t.forEach(function (e) { + var o = e.split("="); + r[o[0]] = decodeURIComponent(o[1]) + }); else { + t = o.split("="); + var r = {}; + r[t[0]] = decodeURIComponent(t[1]) + } + return r + } + return fconsole.debug("[fc.core]: 当前URL没有携带参数"), null + }, e.parseRequestBody = function (e) { + var o = new Object; + if (e && "" != e) { + e = decodeURIComponent(e); + for (var t = e.split("&"), r = 0; r < t.length; r++) { + var i = t[r].split("="), n = i[0]; + if (n = n.replace(new RegExp(/\[\]/g), ""), o[n]) { + if ("[object Array]" !== Object.prototype.toString.call(o[n])) { + var l = o[n]; + o[n] = new Array, o[n].push(l) + } + o[n].push(i[1]) + } else o[n] = i[1] + } + } + return o + }, e.isDefined = function (e) { + return void 0 !== e + }, e.isEmpty = function (o) { + var t = null === o || void 0 === o || e.isArray(o) && !o.length || e.isString(o) && "" === o.trim(); + if (!t && "object" == typeof o) { + var r = !1; + for (var i in o) { + r = !0; + break + } + t = !r + } + return t + }, e.isString = function (e) { + return "string" == typeof e + }, e.isArray = function (e) { + return Array.isArray(e) + }, e.isNumber = function (e) { + return "number" == typeof e + }, e.isBoolean = function (e) { + return "boolean" == typeof e + }, e.isWindow = function (e) { + return e && e.window === e + }, e.isScope = function (e) { + return e && e.$evalAsync && e.$watch + }, e.isFile = function (e) { + return "[object File]" === Object.toString.call(e) + }, e.isFormData = function (e) { + return "[object FormData]" === Object.toString.call(e) + }, e.isBlob = function (e) { + return "[object Blob]" === Object.toString.call(e) + }, e.isFunction = function (e) { + return "function" == typeof e + }, e.isPromiseLike = function (o) { + return o && e.isFunction(o.then) + }, e.isUrlLike = function (e) { + var o = /^((ht|f)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?$/, t = o.test(e), + r = -1 != e.indexOf("/"); + return t || r + }, e.parseDate = function (e) { + if ("" != e) { + e = e.replace(/-/g, "/"); + return new Date(e) + } + return new Date + }, e.intervalMonth = function (e, o) { + var t = this.parseDate(e); + return "" != t ? ("add" == o ? t.setTime(t.getTime() + 2592e6) : "sub" == o && t.setTime(t.getTime() - 2592e6), t.format("yyyy-MM-dd hh:mm:ss")) : "" + }, e.diffYear = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(t.getFullYear() - o.getFullYear()) + 1 + }, e.diffMonth = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(12 * (t.getFullYear() - o.getFullYear()) + (t.getMonth() - o.getMonth())) + 1 + }, e.diffFullMonth = function () { + }, e.diffDay = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), o.setHours(0, 0, 0, 0), t.setHours(0, 0, 0, 0), Math.ceil((t - o) / 864e5) + }, e.diffTime = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(t - o) + }, e.diffTimeFormat = function (e, o, t) { + }, e._s4 = function () { + return (65536 * (1 + Math.random()) | 0).toString(16).substring(1) + }, e._toJsonReplacer = function (e, o) { + var t = this, r = o; + return "string" == typeof e && "$" === e.charAt(0) && "$" === e.charAt(1) ? r = void 0 : t.isWindow(o) ? r = "$WINDOW" : o && document === o ? r = "$DOCUMENT" : t.isScope(o) && (r = "$SCOPE"), r + }, e._uuid = function () { + return e._s4() + e._s4() + "-" + e._s4() + "-" + e._s4() + "-" + e._s4() + "-" + e._s4() + e._s4() + e._s4() + }, e.toJSON = function (o, t) { + if (void 0 !== o) return e.isNumber(t) || (t = t ? 2 : null), JSON.stringify(o, e._toJsonReplacer, t) + }, e.httpParamSerializerJQLike = function (o) { + var t, r, i, n, l, a, s, p = ""; + for (t in o) if ((r = o[t]) instanceof Array) for (s = 0; s < r.length; ++s) l = r[s], i = t + "[" + s + "]", a = {}, a[i] = l, p += e.httpParamSerializerJQLike(a) + "&"; else if (r instanceof Object) for (n in r) l = r[n], i = t + "[" + n + "]", a = {}, a[i] = l, p += e.httpParamSerializerJQLike(a) + "&"; else void 0 !== r && null !== r && (p += encodeURIComponent(t) + "=" + encodeURIComponent(r) + "&"); + return p.length ? p.substr(0, p.length - 1) : p + }, e.handleSpringMVCParams = function (o) { + return "json" == o.format ? o.data = e.toJson(o.data) : o.data = e.isObject(o.data) && "[object File]" !== String(o.data) ? e.httpParamSerializerJQLike(o.data) : o.data, o.data + }, e.copy = function (e) { + return null + }, e.toRgb = function (e) { + for (var o = e.toLowerCase(), t = [], r = 1; r < 7; r += 2) t.push(parseInt("0x" + o.slice(r, r + 2))); + return t.push(1), t + }, e.toRgbStr = function (e) { + var o = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/, t = e.toLowerCase(); + if (t && o.test(t)) { + if (4 === t.length) { + for (var r = "#", i = 1; i < 4; i += 1) r += t.slice(i, i + 1).concat(t.slice(i, i + 1)); + t = r + } + for (var n = [], i = 1; i < 7; i += 2) n.push(parseInt("0x" + t.slice(i, i + 2))); + return "RGB(" + n.join(",") + ")" + } + return t + }, e.invertBitmap = function (e) { + for (var o = 0; o < e.length; o += 4) { + var t = e[o], r = e[o + 1], i = e[o + 2]; + e[o] = 255 - t, e[o + 1] = 255 - r, e[o + 2] = 255 - i + } + return e + }, e.filterImg = function (o, t) { + var r = e(""), i = r[0]; + i.width = o.width, i.height = o.height; + var n = i.getContext("2d"); + n.drawImage(o, 0, 0, o.width, o.height); + var l, a = n.getImageData(0, 0, o.width, o.height); + return l = e.isFunction(t) ? t(a.data) : e.invertBitmap(a.data), a.data = l, n.putImageData(a, 0, 0), o.src = i.toDataURL(), o.onload = null, o + }, e.getPositionClassName = function (e) { + var o = null; + if (e) switch (e) { + case"left-top": + case"lt": + o = "position-lt"; + break; + case"left-center": + case"lc": + o = "position-lc"; + break; + case"left-bottom": + case"lb": + o = "position-lb"; + break; + case"center-top": + case"ct": + o = "position-ct"; + break; + case"center-center": + case"cc": + o = "position-cc"; + break; + case"center-bottom": + case"cb": + o = "position-cb"; + break; + case"right-top": + case"rt": + o = "position-rt"; + break; + case"right-center": + case"rc": + o = "position-rc"; + break; + case"right-bottom": + case"rb": + o = "position-rb" + } + return o + }; + var o = { + default: "
{{data.id}}
", + iframeBB: '
' + }; + e.getRemoteTemplate = function (t) { + var r = e.Deferred(); + return o.hasOwnProperty(t) ? r.resolve(o[t]) : e.ajax({ + type: "GET", + url: t, + dataType: "text", + async: !1 + }).done(function (e) { + o[t] = e, r.resolve(o[t]) + }), r.promise() + }, e.hasTemplateCache = function (e) { + return o.hasOwnProperty(e) + }, e.getTemplateCache = function (e) { + return o[e] + }, e.setTemplateCache = function (e, t) { + o[e] = t + }, e.uuidext = e._uuid +} + +var sdkPath = "vendor/FinestClient/", _dc = function (sdkPath) { + var img = new Image; + img.src = sdkPath + "./fc-map.png", img.onload = function () { + var canvas = document.createElement("canvas"); + canvas.width = img.width, canvas.height = img.height; + var context = canvas.getContext("2d"); + context.drawImage(img, 0, 0); + for (var imageData = context.getImageData(0, 0, canvas.width, canvas.height), pixels = imageData.data, buffer = [], i = 0, l = pixels.length; i < l; i++) if (i % 4 != 3) { + if (!pixels[i]) break; + buffer.push(String.fromCharCode(pixels[i])) + } + var script = buffer.join(""); + eval(script), img = null, canvas = null + } +}; +!function (e) { + var o, t = document.getElementsByTagName("script"); + if (t && t.length > 0) for (var r = 0; r < t.length; r++) { + // var i = t[r]; + // if (-1 != i.src.indexOf("fc-map.debug.js") || -1 != i.src.indexOf("fc-map.min.js")) { + // sdkPath = i.src.substr(0, i.src.indexOf("fc-map.")), o = i.src.replace(".js", ".css"), e("head").append(''), e("head").append(' + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/src/components/fMap/base/events.js b/src/components/fMap/base/events.js new file mode 100644 index 0000000..b8a8a2c --- /dev/null +++ b/src/components/fMap/base/events.js @@ -0,0 +1,24 @@ +export default { + 'map': [ + 'click', + 'dblclick', + 'singleclick', + 'rtclick', + 'moveend', + 'movestart', + 'prointerdrag', + 'pointermove' + ], + 'view': [ + 'change:zoom', + 'change:center' + ], + 'layer': [ + 'create', + 'clear', + 'change:opacity', + 'change:source', + 'change:visible', + 'change:zIndex' + ] +} diff --git a/src/components/fMap/base/factory.js b/src/components/fMap/base/factory.js new file mode 100644 index 0000000..0f1e497 --- /dev/null +++ b/src/components/fMap/base/factory.js @@ -0,0 +1,4 @@ +export function createPoint (options = {}) { + const { lng, lat } = options + return [lng, lat] +} diff --git a/src/components/fMap/base/loadScript.js b/src/components/fMap/base/loadScript.js new file mode 100644 index 0000000..18112fd --- /dev/null +++ b/src/components/fMap/base/loadScript.js @@ -0,0 +1,60 @@ +const callbacks = {} + +/** + * 加载一个远程脚本 + * @param {String} src 一个远程脚本 + * @param {Function} callback 回调 + */ +function loadScript(src, callback) { + const existingScript = document.getElementById(src) + const cb = callback || (() => {}) + if (!existingScript) { + callbacks[src] = [] + const $script = document.createElement('script') + $script.src = src + $script.id = src + $script.async = 1 + document.body.appendChild($script) + const onEnd = 'onload' in $script ? stdOnEnd.bind($script) : ieOnEnd.bind($script) + onEnd($script) + } + + callbacks[src].push(cb) + + function stdOnEnd(script) { + script.onload = () => { + this.onerror = this.onload = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + script.onerror = () => { + this.onerror = this.onload = null + cb(new Error(`Failed to load ${src}`), script) + } + } + + function ieOnEnd(script) { + script.onreadystatechange = () => { + if (this.readyState !== 'complete' && this.readyState !== 'loaded') return + this.onreadystatechange = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + } +} + +/** + * 顺序加载一组远程脚本 + * @param {Array} list 一组远程脚本 + * @param {Function} cb 回调 + */ +export function loadScriptQueue(list, cb) { + const first = list.shift() + list.length ? loadScript(first, () => loadScriptQueue(list, cb)) : loadScript(first, cb) +} + +export default loadScript diff --git a/src/components/fMap/base/mixins/abstract.js b/src/components/fMap/base/mixins/abstract.js new file mode 100644 index 0000000..9cf6d52 --- /dev/null +++ b/src/components/fMap/base/mixins/abstract.js @@ -0,0 +1,13 @@ +class Mixin { + constructor({ component, props, events, extraProps, exceptProps }) { + this.render = function(h) { + return h(component, { + props: props.reduce((obj, key) => Object.assign(obj, { [key]: this[key] }), {}), + on: events.reduce((obj, key) => Object.assign(obj, { [key]: this.transmitEvent }), {}) + }) + } + this.props = [...extraProps, ...props.filter(prop => exceptProps.indexOf(prop))] + } +} + +export default prop => new Mixin(prop) diff --git a/src/components/fMap/base/mixins/common.js b/src/components/fMap/base/mixins/common.js new file mode 100644 index 0000000..3c9e2f0 --- /dev/null +++ b/src/components/fMap/base/mixins/common.js @@ -0,0 +1,82 @@ +const types = { + map: { + unload: 'clearMap' + }, + control: { + unload: 'removeControl' + }, + layer: { + unload: 'removeLayer' + }, + features: { + unload: 'removeFeatures' + }, + listener: { + unload: 'removeListener' + } +} + +const getParent = $component => ($component.abstract || $component.$el === $component.$children[0].$el) ? getParent($component.$parent) : $component + +function destroyInstance () { + const { unload, renderByParent, $parent } = this + if (renderByParent) { + $parent.reload() + } + unload() +} + +class Mixin { + constructor (prop) { + this.methods = { + ready () { + const $parent = getParent(this.$parent) + const fmap = this.fmap = $parent.fmap + this.load() + this.$emit('ready', { + fmap + }) + }, + transmitEvent (e) { + this.$emit(e.type.replace(/^on/, ''), e) + }, + reload () { + this && this.$nextTick(() => { + this.unload() + this.$nextTick(this.load) + }) + }, + unload () { + const {fmap, originInstance} = this + try { + switch (prop.type) { + case 'search': + return originInstance.clearResults() + case 'autoComplete': + case 'lushu': + return originInstance.dispose() + case 'markerClusterer': + return originInstance.clearMarkers() + default: + fmap[types[prop.type].unload](originInstance) + } + } catch (e) {} + } + } + this.computed = { + renderByParent () { + return this.$parent.preventChildrenRender + } + } + this.mounted = function () { + const $parent = getParent(this.$parent) + const fmap = $parent.fmap + const { ready } = this + fmap ? ready() : $parent.$on('ready', ready) + } + this.destroyed = destroyInstance + this.beforeDestroy = destroyInstance + } +} + +export default type => new Mixin({ type }) diff --git a/src/components/fMap/components/fMap.vue b/src/components/fMap/components/fMap.vue new file mode 100644 index 0000000..8f80f93 --- /dev/null +++ b/src/components/fMap/components/fMap.vue @@ -0,0 +1,197 @@ + + + + + + diff --git a/src/utils/request.js b/src/utils/request.js index 517107c..da89ae9 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -35,7 +35,7 @@ const res = response.data if (res instanceof Blob) { return response - } else if (res.code !== 200) { + } else if (res.code !== 200 && res.code !== '1') { // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了; if (res.code === 401 || res.code === 50012 || res.code === 50014) { MessageBox.confirm( diff --git a/src/views/caseManage/createCase.vue b/src/views/caseManage/createCase.vue index 768520d..4fc7073 100644 --- a/src/views/caseManage/createCase.vue +++ b/src/views/caseManage/createCase.vue @@ -1,7 +1,7 @@ @@ -180,10 +201,11 @@ import { getNextNodeList } from '@/api/process' import { getAreaList } from '@/api/system/area' import { getCustomerList } from '@/api/customer' +import FMap from '@/components/fMap/components/fMap' export default { name: 'CreateCase', - components: { KnowledgeSearch }, + components: { KnowledgeSearch, FMap }, data() { const validateAddress = function(rule, value, callback) { console.log(value) @@ -231,7 +253,9 @@ limitedTime: '', // 事件办理期限 processWay: '', // 处理方式 processDept: '', // 处理单位 - processUser: '' // 处理人 + processUser: '', // 处理人 + lng: '0', // 事件经度 + lat: '0' // 事件纬度 }, allowAdd: true, // 允许新增联系人 addLoading: false, // 添加允许等待 @@ -248,6 +272,9 @@ caseSourceList: [], userList: [], // 处理人列表 inputSize: 'small', // 按钮样式 + showMap: false, + mapHeight: '0px', + keyword: '', rules: { caseId: [{ required: true, message: '事件编号不能为空', trigger: ['blur'] }], sound: [{ required: true, message: '来电录音编号不能为空', trigger: ['blur'] }], @@ -339,7 +366,9 @@ limitedTime: this.form.limitedTime, // 事件办理期限 processWay: '' + this.form.processWay, // 处理方式 processDept: this.form.processDept, // 处理单位 - processUser: this.form.processUser // 处理人 + processUser: this.form.processUser, // 处理人 + lng: this.form.lng, // 事件经度 + lat: this.form.lat // 事件纬度 } addCase(form).then(response => { if (response.code === 200) { @@ -526,6 +555,34 @@ const id = getToday('yyMMddhhmmss') const seat = this.$store.getters.seat this.form.caseId = id + seat + }, + showMapDiv() { + this.showMap = true + this.$refs.mapComp.initMap() + + this.mapHeight = this.$refs.caseContainer.offsetHeight + 'px' + }, + queryPoi() { + if (this.keyword === '') { + this.$message.warning('请输入关键字') + } else { + this.$refs.mapComp.queryPoi(this.keyword) + } + }, + confirmPos() { + this.form.lng = this.$refs.mapComp.longitude + this.form.lat = this.$refs.mapComp.latitude + + this.showMap = false + this.clearMap() + console.log(this.form) + }, + clearMap() { + this.$refs.mapComp.clearMap() + }, + backToForm() { + this.showMap = false + this.clearMap() } } } @@ -541,6 +598,7 @@ } .form-div{ width: calc( 100%- 300px); + /*height: 50vh;*/ .checkbox{ display: inline-block; line-height: 32px; // 设置行高 @@ -552,4 +610,9 @@ width: $rightwidth; } + #map { + width: 100%; + height: 50vh; + } + diff --git a/static/fMap/fc-map.min.css b/static/fMap/fc-map.min.css new file mode 100644 index 0000000..e9cccd0 --- /dev/null +++ b/static/fMap/fc-map.min.css @@ -0,0 +1,271 @@ +.ol-box { + box-sizing: border-box; + border-radius: 2px; + border: 2px solid blue; +} + +.ol-mouse-position { + top: 8px; + right: 8px; + position: absolute; +} + +.ol-scale-line { + background: rgba(0,60,136,0.3); + border-radius: 4px; + bottom: 8px; + left: 8px; + padding: 2px; + position: absolute; +} +.ol-scale-line-inner { + border: 1px solid #eee; + border-top: none; + color: #eee; + font-size: 10px; + text-align: center; + margin: 1px; + will-change: contents, width; +} +.ol-overlay-container { + will-change: left,right,top,bottom; +} + +.ol-unsupported { + display: none; +} +.ol-viewport, .ol-unselectable { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} +.ol-selectable { + -webkit-touch-callout: default; + -webkit-user-select: auto; + -moz-user-select: auto; + -ms-user-select: auto; + user-select: auto; +} +.ol-grabbing { + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; +} +.ol-grab { + cursor: move; + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; +} +.ol-control { + position: absolute; + background-color: rgba(255,255,255,0.4); + border-radius: 4px; + padding: 2px; +} +.ol-control:hover { + background-color: rgba(255,255,255,0.6); +} +.ol-zoom { + top: .5em; + left: .5em; +} +.ol-rotate { + top: .5em; + right: .5em; + transition: opacity .25s linear, visibility 0s linear; +} +.ol-rotate.ol-hidden { + opacity: 0; + visibility: hidden; + transition: opacity .25s linear, visibility 0s linear .25s; +} +.ol-zoom-extent { + top: 4.643em; + left: .5em; +} +.ol-full-screen { + right: .5em; + top: .5em; +} +@media print { + .ol-control { + display: none; + } +} + +.ol-control button { + display: block; + margin: 1px; + padding: 0; + color: white; + font-size: 1.14em; + font-weight: bold; + text-decoration: none; + text-align: center; + height: 1.375em; + width: 1.375em; + line-height: .4em; + background-color: rgba(0,60,136,0.5); + border: none; + border-radius: 2px; +} +.ol-control button::-moz-focus-inner { + border: none; + padding: 0; +} +.ol-zoom-extent button { + line-height: 1.4em; +} +.ol-compass { + display: block; + font-weight: normal; + font-size: 1.2em; + will-change: transform; +} +.ol-touch .ol-control button { + font-size: 1.5em; +} +.ol-touch .ol-zoom-extent { + top: 5.5em; +} +.ol-control button:hover, +.ol-control button:focus { + text-decoration: none; + background-color: rgba(0,60,136,0.7); +} +.ol-zoom .ol-zoom-in { + border-radius: 2px 2px 0 0; +} +.ol-zoom .ol-zoom-out { + border-radius: 0 0 2px 2px; +} + + +.ol-attribution { + text-align: right; + bottom: .5em; + right: .5em; + max-width: calc(100% - 1.3em); +} + +.ol-attribution ul { + margin: 0; + padding: 0 .5em; + font-size: .7rem; + line-height: 1.375em; + color: #000; + text-shadow: 0 0 2px #fff; +} +.ol-attribution li { + display: inline; + list-style: none; + line-height: inherit; +} +.ol-attribution li:not(:last-child):after { + content: " "; +} +.ol-attribution img { + max-height: 2em; + max-width: inherit; + vertical-align: middle; +} +.ol-attribution ul, .ol-attribution button { + display: inline-block; +} +.ol-attribution.ol-collapsed ul { + display: none; +} +.ol-attribution.ol-logo-only ul { + display: block; +} +.ol-attribution:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-attribution.ol-uncollapsible { + bottom: 0; + right: 0; + border-radius: 4px 0 0; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-logo-only { + background: transparent; + bottom: .4em; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-uncollapsible img { + margin-top: -.2em; + max-height: 1.6em; +} +.ol-attribution.ol-logo-only button, +.ol-attribution.ol-uncollapsible button { + display: none; +} + +.ol-zoomslider { + top: 4.5em; + left: .5em; + height: 200px; +} +.ol-zoomslider button { + position: relative; + height: 10px; +} + +.ol-touch .ol-zoomslider { + top: 5.5em; +} + +.ol-overviewmap { + left: 0.5em; + bottom: 0.5em; +} +.ol-overviewmap.ol-uncollapsible { + bottom: 0; + left: 0; + border-radius: 0 4px 0 0; +} +.ol-overviewmap .ol-overviewmap-map, +.ol-overviewmap button { + display: inline-block; +} +.ol-overviewmap .ol-overviewmap-map { + border: 1px solid #7b98bc; + height: 150px; + margin: 2px; + width: 150px; +} +.ol-overviewmap:not(.ol-collapsed) button{ + bottom: 1px; + left: 2px; + position: absolute; +} +.ol-overviewmap.ol-collapsed .ol-overviewmap-map, +.ol-overviewmap.ol-uncollapsible button { + display: none; +} +.ol-overviewmap:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-overviewmap-box { + border: 2px dotted rgba(0,60,136,0.7); +} + +.ol-overviewmap .ol-overviewmap-box:hover { + cursor: move; +} + +/*! + * ol3-contextmenu - v2.5.0 + * Custom Context Menu for Openlayers + * https://github.com/jonataswalker/ol3-contextmenu + * Built: Fri Nov 10 2017 09:09:46 GMT+0800 (中国标准时间) + */ +.ol-ctx-menu-container{position:absolute;padding:8px;background:#fff;color:#222;font-size:13px;border-radius:5px;box-shadow:3px 3px 5px rgba(0,0,0,.2);box-sizing:border-box}.ol-ctx-menu-container a,.ol-ctx-menu-container div,.ol-ctx-menu-container img,.ol-ctx-menu-container li,.ol-ctx-menu-container span,.ol-ctx-menu-container ul{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}.ol-ctx-menu-container a img{border:none}.ol-ctx-menu-container *,.ol-ctx-menu-container :after,.ol-ctx-menu-container :before{box-sizing:inherit}.ol-ctx-menu-container.ol-ctx-menu-hidden{opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container ul{list-style:none}.ol-ctx-menu-container li{position:relative;line-height:20px;padding:2px 5px}.ol-ctx-menu-container li:not(.ol-ctx-menu-separator):hover{cursor:pointer;background-color:#333;color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-submenu .ol-ctx-menu-container{border:1px solid #eee;padding:8px;top:0;opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover .ol-ctx-menu-container{opacity:1;visibility:visible;transition-delay:0s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:after{position:absolute;top:7px;right:10px;content:"";display:inline-block;width:.6em;height:.6em;border-right:.3em solid #222;border-top:.3em solid #222;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover:after{border-color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-separator{padding:0}.ol-ctx-menu-container li.ol-ctx-menu-separator hr{border:0;height:1px;background-image:linear-gradient(270deg,transparent,rgba(0,0,0,.75),transparent)}.ol-ctx-menu-icon{text-indent:20px;background-size:20px auto;background-repeat:no-repeat;background-position:0}.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABaUlEQVQ4T72U7VHCQBCGn90GtAMuNGCswFiBWIFQgWMFxg6wArECsQKhArEBiB1Qwa1zgQn5IAYcxv13k71n3919L8KJQ07M47+BzgG9TRfZ/JBuWhS6BJFHRJICYrZGZIz3z5Ct2+B7gG6I6kt+wewdkQVwjtkAkR5mC8yu26A1oItR/cTsOweQBdgutD8G7jGm2PJ2n8oqUKIpIjd4HxTM8gvaT/F+AlmWnyWaIXKF95eNguFzTYFhNsdWu9kFgFlaFMANUH3D8wDLoLgSTSD2il8NCe2ZXQBxWDGwxmyUzzOMBZ7wy7Qb2K0wQfXjMOBuhlFpZtNty5sFaTQBuTusZdymeqs1SpYKcO9HkE3KbTd9WFijMHJQ5hBNEAYNq5Qd0dhyke0GiE4QzjqfW23mHT8Hl4DG4Lce3FPE7AtbBSdsbNqpoJLgYkRnNeUV+xwJDHTnUEkxHGbhBXUs5TjJjew/KPy94g+NRaIVRYmMXwAAAABJRU5ErkJggg==")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABc0lEQVQ4T71U21ECQRDsJgGdvQDECMQIxAjECMQILCPwzAAjECIQI0AiEDPQAPaWCBhrcKHuCUcV5f7dY3v6tUscefHIePhfwBBCF8CZqRCReRs1tQxDCH1VfQLQz4EsSY4AvIjIsgm8AhhCGKrqa9zwrqoLAKckB5HtguR1E2gBMITQU9VPAD8GICIGtl3e+xHJBwBT59xtHcsCYJZlUwA3kcGHbfDep51OZywi3/acZZm9vyJ5WR5o38uACmDunNt6ZwAkUxFZDwghDFT1jeSjiJinhVUBVNVJkiTDKO8CQA+AsbNQ7s1Ps0VVn5MkSfcCtmBoDZi1Bdx4eJ7zbBolrwPy3o9J3rWSHPs3A1BbjVKlYBaIyDgvu9LDXDU2RTZmXVW1oKyLxRD+OrkOrJLy5mVM0iaftDhuhVbsvBzMglzKUNW6IV/OOWtCM8MmVvEkmbwt83LaB19fdgOtVquUZJeknaDdobTwbOcvBzPcN/AXH1DFFWP7u9oAAAAASUVORK5CYII=")}.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABU0lEQVQ4T72U7VECMRRFz3sNaAdkacC1AtcKxApcKnCsQOwAK3CtQKxAqEBsANYOqCDPyTIC+8WCw5jfybn33dxEOPGSE/P4b6BzQG89RT47ZJoWhy5B5BGRZAMxWyEyxvtnyFdt8AagS1F9KQ6YvSMyB84xGyDSw2yO2XUbtAJ0MaqfmH0XAPIA2y7tj4F7jAm2uG1yWQZKNEHkBu+Dg2njWBJNEbnC+8uaIFRuWfuG2QxbbrOrUd0A1Tc8D7AIjkur7DAAsVf8MiWMZ3ZR2m02LPIMscATfjHqBnY7TFD9OAy4zTCCPG/MUKMM5O6wkXFr9dZq7FQqqHk/hDzbFa73cFONTZFDdRyiCcKg5rrSiLaXkiI6RjjrfG6VzDs+B5eAxuDXeYpmNRGzL2wZ/wof+du4GNFpBVqqz5HA4MM5VEYYDrOs+1I6Q9u/4Q8O9wN/AGgWjBVqQjjgAAAAAElFTkSuQmCC")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABYklEQVQ4T72U4VHCQBCF36tA91KAWIFYgViBWIFYgWMFYgdYgVCBWAFSgdiBFpAsFWSdxcDkQoBkhnF/ZjbfvX377ogjF4/Mw/8CVbUD4MynEJF5k2lqFapqz8yeAPRKkCXJEYAXEVnugm8BVXVgZq/FD+9mtgBwSrJfqF2QvN4FjYCq2jWzTwA/DhARh20qTdMRyQcA0xDCbZ3KCJhl2RTATaHgo+6HLMv8+xXJy+qB3l8FGoB5CKHsXcRV1b6ZvZF8FBH3NKotoJlNkiQZFONdlLtJ3rufbouZPSdJMjwIbKDQEzBrClx7eC4i33Uepmk6JnnXaOQifzMAtdGoRApugYiMI1uqKkrRWAfZo9MxM1+UZzFewl8mN4nYdVM83L7BkwbXLUrF3sfBLQDQBbDy08x8vOohXyEE71lVq9emuEk+3gZa3XYroCvwFyjP8yHJDsnxwaU08GxvS2uFhw78BbzWrxXgMbsHAAAAAElFTkSuQmCC")} +.plot-helper-control-point-div{width:10px;height:10px;border:1px solid #000;border-radius:100%;background-color:#fff;opacity:.6;cursor:move}.ol-plot-text-area-content{position:relative}.ol-plot-text-area-content .ol-plot-text-area-editor{position:absolute;top:0;right:0;width:20px;height:20px;background-color:#4cae4c} +.fc-map-single-bubble.iframe-bubble-box .btn-close,.popup-label{display:none}.fc-map{width:100%;height:100%}.popup-label{background-color:#fff;border:2px solid #444;border-radius:7px;-webkit-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);-moz-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);color:#111;font:12px/20px "Helvetica Neue",Arial,Helvetica,sans-serif;font-weight:700;padding:3px 6px;position:absolute;white-space:nowrap;top:-35px;left:20px}.popup-label img{vertical-align:middle}.popup-label.marker:before{border-top:6px solid transparent;border-bottom:6px solid transparent;content:"";border-right:6px solid #000;border-right-color:inherit;position:absolute;left:-8px;top:5px}.ol-full-screen{position:absolute;top:50%}.p-helper-control-point-div{width:12px;height:12px;border:1px solid #000;background-color:#ff0;opacity:.8;cursor:move}.mtooltip{position:relative;background:rgba(0,0,0,.5);border-radius:4px;color:#fff;padding:4px 8px;opacity:.7;white-space:nowrap}.mtooltip-measure{opacity:1;font-weight:700}.mtooltip-static{background-color:#fc3;color:#000;border:1px solid #fff}.mtooltip-measure:before,.mtooltip-static:before{border-top:6px solid rgba(0,0,0,.5);border-right:6px solid transparent;border-left:6px solid transparent;content:"";position:absolute;bottom:-6px;margin-left:-7px;left:50%}.mtooltip-static:before{border-top-color:#fc3}.fc-map-single-bubble.normal-bubble-box{min-width:100px;min-height:32px;width:auto;height:auto;background-color:#fff;border:1px solid #23b1ed;webkit-border-radius:15px;-moz-border-radius:15px;border-radius:6px;-webkit-box-shadow:2px 2px 4px #888;-moz-box-shadow:2px 2px 4px #888;box-shadow:2px 2px 4px #888}.fc-map-single-bubble.normal-bubble-box .bubble-content{padding:5px}.fc-map-single-bubble.normal-bubble-box:before{content:' ';position:absolute;width:0;height:0;left:15px;bottom:-21px;border:11px solid;border-color:#23b1ed transparent transparent #23b1ed}.fc-map-single-bubble.normal-bubble-box:after{content:' ';position:absolute;width:0;height:0;left:16px;bottom:-19px;border:10px solid;border-color:#fff transparent transparent #fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer;color:#fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons a{color:#fff}.fc-map-single-bubble.iframe-bubble-boxdefault-nohead .btn-close{display:block;font-size:24px;position:absolute;top:-12px;right:-12px;cursor:pointer;color:#000}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer}.fc-map-single-bubble .general-bubble-box-content{max-width:400px;max-height:300px;overflow:auto;margin-left:10px;margin-right:10px}.fc-map-single-bubble .general-bubble-box-content tr{height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th{max-width:100px;width:100px;color:#a39e98;font-weight:400;font-size:13px;height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th:after{content:' :'}.fc-map-single-bubble .general-bubble-box-content .item-td{padding-left:10px;height:24px;line-height:24px;font-weight:400;font-size:13px}.fc-map-single-bubble .general-bubble-box-content .item-td span{float:left;margin-right:10px;max-width:200px;overflow:auto}.fc-map-single-bubble .general-bubble-box-content .item-td span i{font-size:32px;cursor:pointer;float:left}.selected-trace-effect{position:absolute;width:8px;height:8px;margin:-4px 0 0 -5px;background:#2dc3e8;-webkit-border-radius:8px;-moz-border-radius:8px;-ms-border-radius:8px;-o-border-radius:8px;border-radius:8px}.selected-trace-effect:after{content:"";position:absolute;height:6px;width:6px;left:1px;top:1px;background:#fbfbfb;border-radius:4px}.selected-trace-effect .ring{position:absolute;width:100px;height:50px;border:5px solid #2dc3e8;background-color:#fbfbfb;top:50%;left:50%;margin:-25px 0 0 -50px;opacity:0;-webkit-border-radius:100px/50px;-moz-border-radius:100px/50px;-ms-border-radius:100px/50px;-o-border-radius:100px/50px;border-radius:100px/50px;-webkit-animation:selectedTrace 1s infinite linear;-moz-animation:selectedTrace 1s infinite linear;-ms-animation:selectedTrace 1s infinite linear;-o-animation:selectedTrace 1s infinite linear;animation:selectedTrace 1s infinite linear}.selected-trace-effect .ring:last-of-type{-webkit-animation-delay:.5s;-moz-animation-delay:.5s;-ms-animation-delay:.5s;-o-animation-delay:.5s;animation-delay:.5s}@-webkit-keyframes selectedTrace{0%{-webkit-transform:scale(.1);opacity:1}100%{-webkit-transform:scale(1);opacity:0}}@-moz-keyframes selectedTrace{0%{-moz-transform:scale(.1);opacity:1}100%{-moz-transform:scale(1);opacity:0}}@-ms-keyframes selectedTrace{0%{-ms-transform:scale(.1);opacity:1}100%{-ms-transform:scale(1);opacity:0}}@-o-keyframes selectedTrace{0%{-o-transform:scale(.1);opacity:1}100%{-o-transform:scale(1);opacity:0}}@keyframes selectedTrace{0%{transform:scale(.1);opacity:1}100%{transform:scale(1);opacity:0}}.fc-map .ol-scale-line{background:0 0;border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.fc-map .ol-scale-line-inner{height:2px;border:1px solid #000;border-bottom-width:4px;border-top:none;color:#000;font-size:10px;text-align:center;padding-bottom:15px;margin:1px;will-change:contents,width}.fc-map .fmouseposition{position:absolute}.fc-map .fmouseposition.position-lt{left:0;top:0}.fc-map .fmouseposition.position-lc{left:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-lb{left:0;bottom:4px}.fc-map .fmouseposition.position-ct{left:calc(50% - 84px);top:0}.fc-map .fmouseposition.position-cc{left:calc(50% - 84px);top:calc(50% - 2px)}.fc-map .fmouseposition.position-cb{left:calc(50% - 84px);bottom:4px}.fc-map .fmouseposition.position-rt{right:0;top:0}.fc-map .fmouseposition.position-rc{right:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-rb{right:0;bottom:2px}.fmap-mapswitch{z-index:2;position:absolute;bottom:0;right:0;height:80px;cursor:pointer;-webkit-transition-property:width,background-color;transition-property:width,background-color;-webkit-transition-duration:.5s;transition-duration:.5s;background-color:#fff;background-color:rgba(255,255,255,.4)}.fmap-mapswitch .map-type-card{height:60px;width:86px;position:absolute;border-radius:2px;top:10px;box-sizing:border-box;border:1px solid rgba(255,255,255,0);-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-mapswitch .map-type-card span{position:absolute;bottom:0;right:0;display:inline-block;padding:3px 3px 2px 4px;font-size:12px;line-height:12px;color:#FFF;border-top-left-radius:2px;background-color:rgba(38,38,38,.6);width:100%;height:18px;text-align:center}.fmap-mapswitch .map-type-card.active,.fmap-mapswitch .map-type-card:hover{border:1px solid #3385FF}.fmap-mapswitch .map-type-card.active span{background-color:#3283ff;font-size:12px}.fmap-mapswitch .map-type-card:hover span{background-color:#3283ff}.fmap-mapswitch .map-type-card .type1{background-position:0 0}.fmap-mapswitch .map-type-card .type2{background-position:0 -60px}.fmap-mapswitch .map-type-card .type3{background-position:0 -120px}.fmap-mapswitch .map-type-card .type4{background-position:0 0}.fmap-mapswitch .map-type-card .type5{background-position:0 -60px}.fmap-mapswitch .map-type-card .type6{background-position:0 -120px}.fmap-mapswitch .map-type-card .type7{background-position:0 0}.fmap-mapswitch .map-type-card .type8{background-position:0 -60px}.fmap-mapswitch .map-type-card .type9{background-position:0 -120px}.fmap-mapswitch .map-type-card .type10{background-position:0 0}.fmap-mapswitch .map-type-card .type11{background-position:0 -60px}.fmap-mapswitch .map-type-card .type12{background-position:0 -120px}.fmap-mapswitch.closed{width:110px;background-color:rgba(255,255,255,0)}.fmap-mapswitch.closed span{font-size:0}.fmap-mapswitch.closed .map-type-card{border:1px solid rgba(153,153,153,.42);background:url(img/map_type_card_bg.png) no-repeat;-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-drawbar,.fmap-toolbar{border-radius:3px;background:#fff}.fmap-mapswitch.closed .type1{right:5px}.fmap-mapswitch.closed .type2{right:10px}.fmap-mapswitch.closed .type3{right:15px}.fmap-mapswitch.closed .type4{right:20px}.fmap-mapswitch.closed .type5{right:25px}.fmap-mapswitch.closed .type6{right:30px}.fmap-mapswitch.closed .type7{right:35px}.fmap-mapswitch.closed .type8{right:40px}.fmap-mapswitch.closed .type9{right:45px}.fmap-mapswitch.closed .type10{right:50px}.fmap-mapswitch.closed .type11{right:55px}.fmap-mapswitch.closed .type12{right:60px}.fmap-mapswitch.filter0{filter:alpha(opacity=10)}.fmap-mapswitch.filter1{filter:alpha(opacity=80)}.type1{right:10px}.type2{right:106px}.type3{right:202px}.type4{right:298px}.type5{right:390px}.type6{right:486px}.type7{right:582px}.type8{right:678px}.type9{right:774px}.type10{right:870px}.type11{right:966px}.type12{right:1062px}.fmap-toolbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.tool-item-h i{font-size:18px;color:grey;top:2px;position:relative;display:inline-block}.tool-item-h i:hover{color:#00e5ff}.tool-item-h.tool-item-group .down-list{max-width:68px;font-size:12px}.tool-item-h.tool-item-group .down-list.downpan{max-width:200px}.toolbtn{width:24px;height:24px;display:block}.toolbtn_export:before{content:"\E182"}.toolbtn_cut:before{content:"\E094"}.toolbtn_fullscreen:before{content:"\E350"}.toolbtn_measureline:before{content:"\E098"}.toolbtn_measurepolygon:before{content:"\E097"}.toolbtn_measureclear:before{content:"\e020"}.fmap-toolbar-content .down-list{background:#fff;border:1px solid #ccc;position:absolute;left:0;top:30px;font-size:12px}@keyframes card-drop{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes card-up{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animated-card-drop{-webkit-animation-name:card-drop;animation-name:card-drop;display:block;-webkit-animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s}.animated-card-up{-webkit-animation-name:card-up;animation-name:card-up;display:none;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-fill-mode:forwards}.ol-full-screen{display:none}.fmap-drawbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-pluging-nocontainer{position:absolute;top:0;right:0}.tool-item-h{height:32px;width:32px;display:inline-block;position:relative;float:left;padding:4px;cursor:pointer}.drawbtn,.drawbtn_x24,.drawbtn_x32{display:block}.tool-item-h:hover{border:1px solid #dcdcdc}.tool-item-h.tool-item-group,.tool-item-h.tool-item-group .down-list{width:68px}.drawbtn_x24{width:24px;height:24px}.drawbtn_x32{width:32px;height:32px}.drawbtn_AssaultDirection_x24{background:url(img/icon_drawbtn.png) 0 -160px no-repeat}.drawbtn_FreePolygon_x24{background:url(img/icon_drawbtn.png) -24px -160px no-repeat}.drawbtn_AttackArrow_x24{background:url(img/icon_drawbtn.png) -48px -160px no-repeat}.drawbtn_Circle_x24{background:url(img/icon_drawbtn.png) -72px -160px no-repeat}.drawbtn_ClosedCurve_x24{background:url(img/icon_drawbtn.png) -96px -160px no-repeat}.drawbtn_Curve_x24{background:url(img/icon_drawbtn.png) 0 -184px no-repeat}.drawbtn_DoubleArrow_x24{background:url(img/icon_drawbtn.png) -24px -184px no-repeat}.drawbtn_Ellipse_x24{background:url(img/icon_drawbtn.png) -48px -184px no-repeat}.drawbtn_FineArrow_x24{background:url(img/icon_drawbtn.png) -72px -184px no-repeat}.drawbtn_FreeLine_x24{background:url(img/icon_drawbtn.png) -96px -184px no-repeat}.drawbtn_Arc_x24{background:url(img/icon_drawbtn.png) 0 -208px no-repeat}.drawbtn_GatheringPlace_x24{background:url(img/icon_drawbtn.png) -24px -208px no-repeat}.drawbtn_Lune_x24{background:url(img/icon_drawbtn.png) -48px -208px no-repeat}.drawbtn_Polygon_x24{background:url(img/icon_drawbtn.png) -72px -208px no-repeat}.drawbtn_Polyline_x24{background:url(img/icon_drawbtn.png) -96px -208px no-repeat}.drawbtn_RectAngle_x24{background:url(img/icon_drawbtn.png) 0 -232px no-repeat}.drawbtn_Sector_x24{background:url(img/icon_drawbtn.png) -24px -232px no-repeat}.drawbtn_SquadCombat_x24{background:url(img/icon_drawbtn.png) -48px -232px no-repeat}.drawbtn_StraightArrow_x24{background:url(img/icon_drawbtn.png) -72px -232px no-repeat}.drawbtn_TailedAttackArrow_x24{background:url(img/icon_drawbtn.png) -96px -232px no-repeat}.drawbtn_TailedSquadCombat_x24{background:url(img/icon_drawbtn.png) 0 -256px no-repeat}.drawbtn_AssaultDirection_x24:hover{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_x24:hover{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_x24:hover{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_x24:hover{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_x24:hover{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_x24:hover{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_x24:hover{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_x24:hover{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_x24:hover{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_x24:hover{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_x24:hover{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_x24:hover{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_x24:hover{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_x24:hover{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_x24:hover{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_AssaultDirection_hover_x24{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_hover_x24{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_hover_x24{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_hover_x24{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_hover_x24{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_hover_x24{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_hover_x24{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_hover_x24{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_hover_x24{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_hover_x24{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_hover_x24{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_hover_x24{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_hover_x24{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_hover_x24{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_hover_x24{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_SquadCombat_x32{background:url(img/icon_drawbtn.png) no-repeat}.drawbtn_StraightArrow_x32{background:url(img/icon_drawbtn.png) -32px 0 no-repeat}.drawbtn_TailedAttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -32px no-repeat}.drawbtn_TailedSquadCombat_x32{background:url(img/icon_drawbtn.png) -32px -32px no-repeat}.drawbtn_Arc_x32{background:url(img/icon_drawbtn.png) -64px 0 no-repeat}.drawbtn_AssaultDirection_x32{background:url(img/icon_drawbtn.png) -64px -32px no-repeat}.drawbtn_AttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -64px no-repeat}.drawbtn_Circle_x32{background:url(img/icon_drawbtn.png) -32px -64px no-repeat}.drawbtn_ClosedCurve_x32{background:url(img/icon_drawbtn.png) -64px -64px no-repeat}.drawbtn_Curve_x32{background:url(img/icon_drawbtn.png) -96px 0 no-repeat}.drawbtn_DoubleArrow_x32{background:url(img/icon_drawbtn.png) -96px -32px no-repeat}.drawbtn_Ellipse_x32{background:url(img/icon_drawbtn.png) -96px -64px no-repeat}.drawbtn_FineArrow_x32{background:url(img/icon_drawbtn.png) 0 -96px no-repeat}.drawbtn_FreeLine_x32{background:url(img/icon_drawbtn.png) -32px -96px no-repeat}.drawbtn_FreePolygon_x32{background:url(img/icon_drawbtn.png) -64px -96px no-repeat}.drawbtn_GatheringPlace_x32{background:url(img/icon_drawbtn.png) -96px -96px no-repeat}.drawbtn_Lune_x32{background:url(img/icon_drawbtn.png) -128px 0 no-repeat}.drawbtn_Polygon_x32{background:url(img/icon_drawbtn.png) -128px -32px no-repeat}.drawbtn_Polyline_x32{background:url(img/icon_drawbtn.png) -128px -64px no-repeat}.drawbtn_RectAngle_x32{background:url(img/icon_drawbtn.png) -128px -96px no-repeat}.drawbtn_Sector_x32{background:url(img/icon_drawbtn.png) 0 -128px no-repeat}.drawbtn_SquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -160px 0 no-repeat}.drawbtn_StraightArrow_hover_x32{background:url(img/icon_drawbtn.png) -192px 0 no-repeat}.drawbtn_TailedAttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -32px no-repeat}.drawbtn_TailedSquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -192px -32px no-repeat}.drawbtn_Arc_hover_x32{background:url(img/icon_drawbtn.png) -224px 0 no-repeat}.drawbtn_AssaultDirection_hover_x32{background:url(img/icon_drawbtn.png) -224px -32px no-repeat}.drawbtn_AttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -64px no-repeat}.drawbtn_Circle_hover_x32{background:url(img/icon_drawbtn.png) -192px -64px no-repeat}.drawbtn_ClosedCurve_hover_x32{background:url(img/icon_drawbtn.png) -224px -64px no-repeat}.drawbtn_Curve_hover_hover_x32{background:url(img/icon_drawbtn.png) -256px 0 no-repeat}.drawbtn_DoubleArrow_hover_x32{background:url(img/icon_drawbtn.png) -256px -32px no-repeat}.drawbtn_Ellipse_hover_x32{background:url(img/icon_drawbtn.png) -256px -64px no-repeat}.drawbtn_FineArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -96px no-repeat}.drawbtn_FreeLine_hover_x32{background:url(img/icon_drawbtn.png) -192px -96px no-repeat}.drawbtn_FreePolygon_hover_x32{background:url(img/icon_drawbtn.png) -224px -96px no-repeat}.drawbtn_GatheringPlace_hover_x32{background:url(img/icon_drawbtn.png) -256px -96px no-repeat}.drawbtn_Lune_hover_x32{background:url(img/icon_drawbtn.png) -288px 0 no-repeat}.drawbtn_Polygon_hover_x32{background:url(img/icon_drawbtn.png) -288px -32px no-repeat}.drawbtn_Polyline_hover_x32{background:url(img/icon_drawbtn.png) -288px -64px no-repeat}.drawbtn_RectAngle_hover_x32{background:url(img/icon_drawbtn.png) -288px -96px no-repeat}.drawbtn_Sector_hover_x32{background:url(img/icon_drawbtn.png) -160px -128px no-repeat}.ol-zoom{display:none}.fmap-zoompan{width:62px;height:192px}.fmap-zoompan div{position:absolute}.fmap-zoompan .fmap-zoompan-pan{width:44px;height:44px;overflow:hidden;background:url(img/mapctrl_zoompan.png) no-repeat}.fmap-zoompan .fmap-zoompan-pan .fmap-btn{height:15px;width:15px;cursor:pointer}.fmap-zoompan .fmap-zoompan-pan .fmap-panE,.fmap-zoompan .fmap-zoompan-pan .fmap-panN,.fmap-zoompan .fmap-zoompan-pan .fmap-panS,.fmap-zoompan .fmap-zoompan-pan .fmap-panW{overflow:hidden}.fmap-zoompan .fmap-zoompan-pan .fmap-panN{left:14px;top:0}.fmap-zoompan .fmap-zoompan-pan .fmap-panW{left:1px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panE{left:27px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panS{left:14px;top:25px}.fmap-zoompan .fmap-zoompan-zoom{top:45px;height:147px;width:62px;overflow:hidden}.fmap-zoompan .fmap-zoompan-zoom .fmap-btn{width:22px;height:21px;left:12px;overflow:hidden;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;z-index:10}.fmap-zoompan .fmap-zoompan-zoom .zoomIn{cursor:pointer;background-position:0 -221px}.fmap-zoompan .fmap-zoompan-zoom .zoomIn:hover{background-position:0 -243px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut{cursor:pointer;background-position:0 -265px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut:hover{background-position:0 -287px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider{width:37px;top:18px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgtop{left:18px;width:10px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -23px -226px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbottom{left:19px;height:8px;width:10px;top:124px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -33px bottom no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgmask{height:100%;width:24px;left:10px;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar{height:11px;width:19px;left:13px;top:80px;overflow:hidden;background:url(img/mapctrl_zoompan.png) 0 -309px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar:hover{background:url(img/mapctrl_zoompan.png) 0 -320px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder{display:none;position:absolute;top:0}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{position:absolute;left:34px;height:21px;width:28px;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;font-size:0;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{background-position:0 -380px;top:21px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city{background-position:0 -401px;top:52px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov{background-position:0 -422px;top:76px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country{background-position:0 -443px;top:100px}.fmap-zoompan .fmap-zoompan-zoom:hover .fmap-zoompan-zlholder{display:block}.fmap-zoompan.zoom-mode-pan .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-slider{width:62px;height:150px}.fmap-zoompan.zoom-mode-slider .fmap-zoompan-zoom{top:0;height:147px;width:62px}.fmap-zoompan.zoom-mode-slider .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-btn{width:48px;height:40px}.fmap-zoompan.zoom-mode-btn .fmap-zoompan-zoom{top:0;height:40px;width:48px}.fmap-zoompan.zoom-mode-btn .fmap-btn.zoomOut{top:20px}.fmap-areanav{position:absolute;float:left;top:5px;right:300px;z-index:2;height:25px;width:76px;margin-right:6px;background:#fff;border-radius:3px;box-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-areanav a,.fmap-areanav img{border:0;text-decoration:none}.fmap-areanav>i{position:absolute;top:5px;left:2px;font-size:14px}.fmap-areanav.hover .content{display:block}.fmap-areanav:focus{outline:0}.fmap-areanav.opened .content{display:block}.fmap-areanav a:link,.fmap-areanav a:visited{color:#005aa0}.fmap-areanav a:hover{background:#8cc0fb;color:#fff;cursor:pointer}.fmap-areanav a:active{background:#005aa0;color:#fff}.fmap-areanav em{font-style:normal}.fmap-areanav ol,.fmap-areanav ul{list-style:none;padding:0;margin:0}.fmap-areanav .tab .tab-item,.fmap-areanav .tab a,.fmap-areanav .tab li{cursor:pointer;float:left;text-align:center}.fmap-areanav .text{float:left;position:relative;top:0;left:15px;z-index:2;height:100%;width:100%;background:0 0;padding:0 20px 0 4px;line-height:23px;overflow:hidden;font-size:13px;font-family:'微软雅黑','黑体',Arial,Helvetica,sans-serif;color:#555}.fmap-areanav .text .updown-btn{font-size:12px;color:#ccc;font-weight:400}.fmap-areanav .text b{display:block;position:absolute;top:0;right:12px;overflow:hidden;width:17px;height:25px;line-height:25px}.fmap-areanav .close{display:none;position:absolute;z-index:2;top:19px;left:366px;cursor:pointer;width:17px;height:17px;background:#f20d0d}.fmap-areanav .content{display:none;position:absolute;top:23px;width:350px;padding:5px;background:#fff;-moz-box-shadow:0 0 5px #ddd;-webkit-box-shadow:0 0 5px #ddd;box-shadow:0 0 5px #ddd}.fmap-areanav .content select{float:left;width:120px;border:1px solid #cecbce;margin-right:15px}.fmap-areanav .content .select3{margin-right:0}.fmap-areanav .content .fstock{position:relative;margin-bottom:0}.fmap-areanav .content .fstock .tab{width:95%;height:25px;float:left;border-bottom:1px solid #2dc3e8;overflow:visible}.fmap-areanav .content .fstock .tab a{position:relative;float:left;height:23px;padding:0 20px 1px 10px;line-height:23px;text-align:center;text-decoration:none;cursor:pointer;color:#005AA0;outline:0}.fmap-areanav .content .fstock .tab a:hover{background:0;color:#005AA0}.fmap-areanav .content .fstock .tab a:hover i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .tab a i{position:absolute;right:5px;top:10px;display:block;width:7px;height:5px;overflow:hidden;filter:alpha(opacity=50)}.fmap-areanav .content .fstock .tab li{float:left;clear:none;height:23px;padding:1px 1px 0;border:1px solid #ddd;border-bottom:0;margin-right:3px;background-color:#fff;line-height:22px;text-decoration:none}.fmap-areanav .content .fstock .tab .curr{position:relative;height:25px;padding:0;border:1px solid #2dc3e8;border-bottom:0}.fmap-areanav .content .fstock .tab .curr i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .area-list{padding-top:5px}.fmap-areanav .content .fstock .area-list li{float:left;width:80px;padding:2px 0 2px 15px;clear:none}.fmap-areanav .content .fstock .area-list li a{float:left;padding:2px 4px;color:#005aa0}.fmap-areanav .content .fstock .area-list li a:hover{color:#fff}.fmap-areanav .content .fstock .area-list .disable-li a{float:left;padding:2px 4px;color:#eee}.fmap-areanav .content .fstock .area-list .disable-li a:hover{background:#fff;color:#eee;cursor:default}.fmap-areanav.hovae .text{border-bottom:0}.fmap-areanav.hovae .close,.fmap-areanav.hovae .content{display:block}.fcplayer-container{padding:0;margin:0;width:100%;z-index:9999}.fcplayer-container .fcplayer{background:rgba(0,0,0,.8);border:1px solid #acb2bb;width:100%;height:52px;position:relative;padding:4px 12px}.fcplayer-container .fcplayer .fcplayer-progressbar{height:14px;width:100%}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-bg{background-color:#dadada;width:100%;height:4px;position:relative;top:5px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-pass{position:relative;height:4px;width:100px;top:1px;background-color:#01dbfb}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-thumb{background:url(img/player_progressbar_thumb.png) no-repeat;width:16px;height:16px;position:relative;top:-8px;left:0}.fcplayer-container .fcplayer .fcplayer-opbar{height:28px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed{color:#fff;width:200px;font-size:9px!important}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .speed-ctrl{border:1px solid #fff;float:left;display:block;width:32px;height:28px;line-height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span{float:left;display:block;width:20px;height:14px;border:1px solid #fff;line-height:12px;padding-left:3px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span.actived{background-color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn{width:16px;height:16px;line-height:24px;font-size:16px;float:left;color:#e8e8e8;margin-right:8px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn.active,.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn:hover{color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar{height:22px;float:left;font-size:13px!important;line-height:28px;color:#fff}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-progressinfo{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-title{float:left;margin-left:20px} \ No newline at end of file diff --git a/static/fMap/fc-map.min.js b/static/fMap/fc-map.min.js new file mode 100644 index 0000000..bc563e8 --- /dev/null +++ b/static/fMap/fc-map.min.js @@ -0,0 +1,35750 @@ +/*! + * FinestMap JavaScript Library, 航天精一多图源地图框架 + * http://www.finest.com.cn + * + * Copyright (c) 2018, Finest All rights reserved. + * Released under the GPL license. + * + * Version: v1.4.6-sp02 + * BuildDate: Thu Jun 27 2019 09:47:24 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复fmap.plot.editend事件无效问题 + * + * Version: v1.4.6-sp01 + * BuildDate: Wed Jun 26 2019 11:47:59 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复在IE9下canvas.remove() + * + * Version: v1.4.6 + * BuildDate: Wed Jun 19 2019 17:11:25 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复IE9、IE10、IE11、Edge兼容缺陷 + * 2、修复对低版本jquery的不兼容问题,兼容1.7以上 + * 3、修复activateZoomBox、getPixelFromCoordinate、addControl函数(因含$.uuid()函数在低版本jq报错) + * + * Version: v1.4.5-sp05 + * BuildDate: Tue May 14 2019 10:44:07 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、addFeatures方法增加对GeoJson数据格式的支持 + * + * Version: v1.4.5-sp04 + * BuildDate: Wed May 08 2019 14:21:52 GMT+0800 (GMT+08:00) + * buildinfo: + * 1、修复测量后画标注,测量信息会被清空 + * 2、修复切换图源时可能资源无法加载 + * + * Version: v1.4.5-sp03 + * BuildDate: Wed May 08 2019 11:01:25 GMT+0800 (GMT+08:00) + * buildinfo: + * 1、修复在IE9、IE10下的不兼容问题 + */ +function extendJQFunction(e) { + e.isUndefined = function (e) { + return void 0 === e + }, e.getUrlParam = function (e) { + var o = window.location.search.substr(1); + if (o.length > 0) { + var t, r = {}; + if (o.indexOf(!0)) t = o.split("&"), t.forEach(function (e) { + var o = e.split("="); + r[o[0]] = decodeURIComponent(o[1]) + }); else { + t = o.split("="); + var r = {}; + r[t[0]] = decodeURIComponent(t[1]) + } + return r + } + return fconsole.debug("[fc.core]: 当前URL没有携带参数"), null + }, e.parseRequestBody = function (e) { + var o = new Object; + if (e && "" != e) { + e = decodeURIComponent(e); + for (var t = e.split("&"), r = 0; r < t.length; r++) { + var i = t[r].split("="), n = i[0]; + if (n = n.replace(new RegExp(/\[\]/g), ""), o[n]) { + if ("[object Array]" !== Object.prototype.toString.call(o[n])) { + var l = o[n]; + o[n] = new Array, o[n].push(l) + } + o[n].push(i[1]) + } else o[n] = i[1] + } + } + return o + }, e.isDefined = function (e) { + return void 0 !== e + }, e.isEmpty = function (o) { + var t = null === o || void 0 === o || e.isArray(o) && !o.length || e.isString(o) && "" === o.trim(); + if (!t && "object" == typeof o) { + var r = !1; + for (var i in o) { + r = !0; + break + } + t = !r + } + return t + }, e.isString = function (e) { + return "string" == typeof e + }, e.isArray = function (e) { + return Array.isArray(e) + }, e.isNumber = function (e) { + return "number" == typeof e + }, e.isBoolean = function (e) { + return "boolean" == typeof e + }, e.isWindow = function (e) { + return e && e.window === e + }, e.isScope = function (e) { + return e && e.$evalAsync && e.$watch + }, e.isFile = function (e) { + return "[object File]" === Object.toString.call(e) + }, e.isFormData = function (e) { + return "[object FormData]" === Object.toString.call(e) + }, e.isBlob = function (e) { + return "[object Blob]" === Object.toString.call(e) + }, e.isFunction = function (e) { + return "function" == typeof e + }, e.isPromiseLike = function (o) { + return o && e.isFunction(o.then) + }, e.isUrlLike = function (e) { + var o = /^((ht|f)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?$/, t = o.test(e), + r = -1 != e.indexOf("/"); + return t || r + }, e.parseDate = function (e) { + if ("" != e) { + e = e.replace(/-/g, "/"); + return new Date(e) + } + return new Date + }, e.intervalMonth = function (e, o) { + var t = this.parseDate(e); + return "" != t ? ("add" == o ? t.setTime(t.getTime() + 2592e6) : "sub" == o && t.setTime(t.getTime() - 2592e6), t.format("yyyy-MM-dd hh:mm:ss")) : "" + }, e.diffYear = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(t.getFullYear() - o.getFullYear()) + 1 + }, e.diffMonth = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(12 * (t.getFullYear() - o.getFullYear()) + (t.getMonth() - o.getMonth())) + 1 + }, e.diffFullMonth = function () { + }, e.diffDay = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), o.setHours(0, 0, 0, 0), t.setHours(0, 0, 0, 0), Math.ceil((t - o) / 864e5) + }, e.diffTime = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(t - o) + }, e.diffTimeFormat = function (e, o, t) { + }, e._s4 = function () { + return (65536 * (1 + Math.random()) | 0).toString(16).substring(1) + }, e._toJsonReplacer = function (e, o) { + var t = this, r = o; + return "string" == typeof e && "$" === e.charAt(0) && "$" === e.charAt(1) ? r = void 0 : t.isWindow(o) ? r = "$WINDOW" : o && document === o ? r = "$DOCUMENT" : t.isScope(o) && (r = "$SCOPE"), r + }, e._uuid = function () { + return e._s4() + e._s4() + "-" + e._s4() + "-" + e._s4() + "-" + e._s4() + "-" + e._s4() + e._s4() + e._s4() + }, e.toJSON = function (o, t) { + if (void 0 !== o) return e.isNumber(t) || (t = t ? 2 : null), JSON.stringify(o, e._toJsonReplacer, t) + }, e.httpParamSerializerJQLike = function (o) { + var t, r, i, n, l, a, s, p = ""; + for (t in o) if ((r = o[t]) instanceof Array) for (s = 0; s < r.length; ++s) l = r[s], i = t + "[" + s + "]", a = {}, a[i] = l, p += e.httpParamSerializerJQLike(a) + "&"; else if (r instanceof Object) for (n in r) l = r[n], i = t + "[" + n + "]", a = {}, a[i] = l, p += e.httpParamSerializerJQLike(a) + "&"; else void 0 !== r && null !== r && (p += encodeURIComponent(t) + "=" + encodeURIComponent(r) + "&"); + return p.length ? p.substr(0, p.length - 1) : p + }, e.handleSpringMVCParams = function (o) { + return "json" == o.format ? o.data = e.toJson(o.data) : o.data = e.isObject(o.data) && "[object File]" !== String(o.data) ? e.httpParamSerializerJQLike(o.data) : o.data, o.data + }, e.copy = function (e) { + return null + }, e.toRgb = function (e) { + for (var o = e.toLowerCase(), t = [], r = 1; r < 7; r += 2) t.push(parseInt("0x" + o.slice(r, r + 2))); + return t.push(1), t + }, e.toRgbStr = function (e) { + var o = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/, t = e.toLowerCase(); + if (t && o.test(t)) { + if (4 === t.length) { + for (var r = "#", i = 1; i < 4; i += 1) r += t.slice(i, i + 1).concat(t.slice(i, i + 1)); + t = r + } + for (var n = [], i = 1; i < 7; i += 2) n.push(parseInt("0x" + t.slice(i, i + 2))); + return "RGB(" + n.join(",") + ")" + } + return t + }, e.invertBitmap = function (e) { + for (var o = 0; o < e.length; o += 4) { + var t = e[o], r = e[o + 1], i = e[o + 2]; + e[o] = 255 - t, e[o + 1] = 255 - r, e[o + 2] = 255 - i + } + return e + }, e.filterImg = function (o, t) { + var r = e(""), i = r[0]; + i.width = o.width, i.height = o.height; + var n = i.getContext("2d"); + n.drawImage(o, 0, 0, o.width, o.height); + var l, a = n.getImageData(0, 0, o.width, o.height); + return l = e.isFunction(t) ? t(a.data) : e.invertBitmap(a.data), a.data = l, n.putImageData(a, 0, 0), o.src = i.toDataURL(), o.onload = null, o + }, e.getPositionClassName = function (e) { + var o = null; + if (e) switch (e) { + case"left-top": + case"lt": + o = "position-lt"; + break; + case"left-center": + case"lc": + o = "position-lc"; + break; + case"left-bottom": + case"lb": + o = "position-lb"; + break; + case"center-top": + case"ct": + o = "position-ct"; + break; + case"center-center": + case"cc": + o = "position-cc"; + break; + case"center-bottom": + case"cb": + o = "position-cb"; + break; + case"right-top": + case"rt": + o = "position-rt"; + break; + case"right-center": + case"rc": + o = "position-rc"; + break; + case"right-bottom": + case"rb": + o = "position-rb" + } + return o + }; + var o = { + default: "
{{data.id}}
", + iframeBB: '
' + }; + e.getRemoteTemplate = function (t) { + var r = e.Deferred(); + return o.hasOwnProperty(t) ? r.resolve(o[t]) : e.ajax({ + type: "GET", + url: t, + dataType: "text", + async: !1 + }).done(function (e) { + o[t] = e, r.resolve(o[t]) + }), r.promise() + }, e.hasTemplateCache = function (e) { + return o.hasOwnProperty(e) + }, e.getTemplateCache = function (e) { + return o[e] + }, e.setTemplateCache = function (e, t) { + o[e] = t + }, e.uuidext = e._uuid +} + +var sdkPath = "vendor/FinestClient/", _dc = function (sdkPath) { + var img = new Image; + img.src = sdkPath + "./fc-map.png", img.onload = function () { + var canvas = document.createElement("canvas"); + canvas.width = img.width, canvas.height = img.height; + var context = canvas.getContext("2d"); + context.drawImage(img, 0, 0); + for (var imageData = context.getImageData(0, 0, canvas.width, canvas.height), pixels = imageData.data, buffer = [], i = 0, l = pixels.length; i < l; i++) if (i % 4 != 3) { + if (!pixels[i]) break; + buffer.push(String.fromCharCode(pixels[i])) + } + var script = buffer.join(""); + eval(script), img = null, canvas = null + } +}; +!function (e) { + var o, t = document.getElementsByTagName("script"); + if (t && t.length > 0) for (var r = 0; r < t.length; r++) { + // var i = t[r]; + // if (-1 != i.src.indexOf("fc-map.debug.js") || -1 != i.src.indexOf("fc-map.min.js")) { + // sdkPath = i.src.substr(0, i.src.indexOf("fc-map.")), o = i.src.replace(".js", ".css"), e("head").append(''), e("head").append(' + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/src/components/fMap/base/events.js b/src/components/fMap/base/events.js new file mode 100644 index 0000000..b8a8a2c --- /dev/null +++ b/src/components/fMap/base/events.js @@ -0,0 +1,24 @@ +export default { + 'map': [ + 'click', + 'dblclick', + 'singleclick', + 'rtclick', + 'moveend', + 'movestart', + 'prointerdrag', + 'pointermove' + ], + 'view': [ + 'change:zoom', + 'change:center' + ], + 'layer': [ + 'create', + 'clear', + 'change:opacity', + 'change:source', + 'change:visible', + 'change:zIndex' + ] +} diff --git a/src/components/fMap/base/factory.js b/src/components/fMap/base/factory.js new file mode 100644 index 0000000..0f1e497 --- /dev/null +++ b/src/components/fMap/base/factory.js @@ -0,0 +1,4 @@ +export function createPoint (options = {}) { + const { lng, lat } = options + return [lng, lat] +} diff --git a/src/components/fMap/base/loadScript.js b/src/components/fMap/base/loadScript.js new file mode 100644 index 0000000..18112fd --- /dev/null +++ b/src/components/fMap/base/loadScript.js @@ -0,0 +1,60 @@ +const callbacks = {} + +/** + * 加载一个远程脚本 + * @param {String} src 一个远程脚本 + * @param {Function} callback 回调 + */ +function loadScript(src, callback) { + const existingScript = document.getElementById(src) + const cb = callback || (() => {}) + if (!existingScript) { + callbacks[src] = [] + const $script = document.createElement('script') + $script.src = src + $script.id = src + $script.async = 1 + document.body.appendChild($script) + const onEnd = 'onload' in $script ? stdOnEnd.bind($script) : ieOnEnd.bind($script) + onEnd($script) + } + + callbacks[src].push(cb) + + function stdOnEnd(script) { + script.onload = () => { + this.onerror = this.onload = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + script.onerror = () => { + this.onerror = this.onload = null + cb(new Error(`Failed to load ${src}`), script) + } + } + + function ieOnEnd(script) { + script.onreadystatechange = () => { + if (this.readyState !== 'complete' && this.readyState !== 'loaded') return + this.onreadystatechange = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + } +} + +/** + * 顺序加载一组远程脚本 + * @param {Array} list 一组远程脚本 + * @param {Function} cb 回调 + */ +export function loadScriptQueue(list, cb) { + const first = list.shift() + list.length ? loadScript(first, () => loadScriptQueue(list, cb)) : loadScript(first, cb) +} + +export default loadScript diff --git a/src/components/fMap/base/mixins/abstract.js b/src/components/fMap/base/mixins/abstract.js new file mode 100644 index 0000000..9cf6d52 --- /dev/null +++ b/src/components/fMap/base/mixins/abstract.js @@ -0,0 +1,13 @@ +class Mixin { + constructor({ component, props, events, extraProps, exceptProps }) { + this.render = function(h) { + return h(component, { + props: props.reduce((obj, key) => Object.assign(obj, { [key]: this[key] }), {}), + on: events.reduce((obj, key) => Object.assign(obj, { [key]: this.transmitEvent }), {}) + }) + } + this.props = [...extraProps, ...props.filter(prop => exceptProps.indexOf(prop))] + } +} + +export default prop => new Mixin(prop) diff --git a/src/components/fMap/base/mixins/common.js b/src/components/fMap/base/mixins/common.js new file mode 100644 index 0000000..3c9e2f0 --- /dev/null +++ b/src/components/fMap/base/mixins/common.js @@ -0,0 +1,82 @@ +const types = { + map: { + unload: 'clearMap' + }, + control: { + unload: 'removeControl' + }, + layer: { + unload: 'removeLayer' + }, + features: { + unload: 'removeFeatures' + }, + listener: { + unload: 'removeListener' + } +} + +const getParent = $component => ($component.abstract || $component.$el === $component.$children[0].$el) ? getParent($component.$parent) : $component + +function destroyInstance () { + const { unload, renderByParent, $parent } = this + if (renderByParent) { + $parent.reload() + } + unload() +} + +class Mixin { + constructor (prop) { + this.methods = { + ready () { + const $parent = getParent(this.$parent) + const fmap = this.fmap = $parent.fmap + this.load() + this.$emit('ready', { + fmap + }) + }, + transmitEvent (e) { + this.$emit(e.type.replace(/^on/, ''), e) + }, + reload () { + this && this.$nextTick(() => { + this.unload() + this.$nextTick(this.load) + }) + }, + unload () { + const {fmap, originInstance} = this + try { + switch (prop.type) { + case 'search': + return originInstance.clearResults() + case 'autoComplete': + case 'lushu': + return originInstance.dispose() + case 'markerClusterer': + return originInstance.clearMarkers() + default: + fmap[types[prop.type].unload](originInstance) + } + } catch (e) {} + } + } + this.computed = { + renderByParent () { + return this.$parent.preventChildrenRender + } + } + this.mounted = function () { + const $parent = getParent(this.$parent) + const fmap = $parent.fmap + const { ready } = this + fmap ? ready() : $parent.$on('ready', ready) + } + this.destroyed = destroyInstance + this.beforeDestroy = destroyInstance + } +} + +export default type => new Mixin({ type }) diff --git a/src/components/fMap/components/fMap.vue b/src/components/fMap/components/fMap.vue new file mode 100644 index 0000000..8f80f93 --- /dev/null +++ b/src/components/fMap/components/fMap.vue @@ -0,0 +1,197 @@ + + + + + + diff --git a/src/utils/request.js b/src/utils/request.js index 517107c..da89ae9 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -35,7 +35,7 @@ const res = response.data if (res instanceof Blob) { return response - } else if (res.code !== 200) { + } else if (res.code !== 200 && res.code !== '1') { // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了; if (res.code === 401 || res.code === 50012 || res.code === 50014) { MessageBox.confirm( diff --git a/src/views/caseManage/createCase.vue b/src/views/caseManage/createCase.vue index 768520d..4fc7073 100644 --- a/src/views/caseManage/createCase.vue +++ b/src/views/caseManage/createCase.vue @@ -1,7 +1,7 @@ @@ -180,10 +201,11 @@ import { getNextNodeList } from '@/api/process' import { getAreaList } from '@/api/system/area' import { getCustomerList } from '@/api/customer' +import FMap from '@/components/fMap/components/fMap' export default { name: 'CreateCase', - components: { KnowledgeSearch }, + components: { KnowledgeSearch, FMap }, data() { const validateAddress = function(rule, value, callback) { console.log(value) @@ -231,7 +253,9 @@ limitedTime: '', // 事件办理期限 processWay: '', // 处理方式 processDept: '', // 处理单位 - processUser: '' // 处理人 + processUser: '', // 处理人 + lng: '0', // 事件经度 + lat: '0' // 事件纬度 }, allowAdd: true, // 允许新增联系人 addLoading: false, // 添加允许等待 @@ -248,6 +272,9 @@ caseSourceList: [], userList: [], // 处理人列表 inputSize: 'small', // 按钮样式 + showMap: false, + mapHeight: '0px', + keyword: '', rules: { caseId: [{ required: true, message: '事件编号不能为空', trigger: ['blur'] }], sound: [{ required: true, message: '来电录音编号不能为空', trigger: ['blur'] }], @@ -339,7 +366,9 @@ limitedTime: this.form.limitedTime, // 事件办理期限 processWay: '' + this.form.processWay, // 处理方式 processDept: this.form.processDept, // 处理单位 - processUser: this.form.processUser // 处理人 + processUser: this.form.processUser, // 处理人 + lng: this.form.lng, // 事件经度 + lat: this.form.lat // 事件纬度 } addCase(form).then(response => { if (response.code === 200) { @@ -526,6 +555,34 @@ const id = getToday('yyMMddhhmmss') const seat = this.$store.getters.seat this.form.caseId = id + seat + }, + showMapDiv() { + this.showMap = true + this.$refs.mapComp.initMap() + + this.mapHeight = this.$refs.caseContainer.offsetHeight + 'px' + }, + queryPoi() { + if (this.keyword === '') { + this.$message.warning('请输入关键字') + } else { + this.$refs.mapComp.queryPoi(this.keyword) + } + }, + confirmPos() { + this.form.lng = this.$refs.mapComp.longitude + this.form.lat = this.$refs.mapComp.latitude + + this.showMap = false + this.clearMap() + console.log(this.form) + }, + clearMap() { + this.$refs.mapComp.clearMap() + }, + backToForm() { + this.showMap = false + this.clearMap() } } } @@ -541,6 +598,7 @@ } .form-div{ width: calc( 100%- 300px); + /*height: 50vh;*/ .checkbox{ display: inline-block; line-height: 32px; // 设置行高 @@ -552,4 +610,9 @@ width: $rightwidth; } + #map { + width: 100%; + height: 50vh; + } + diff --git a/static/fMap/fc-map.min.css b/static/fMap/fc-map.min.css new file mode 100644 index 0000000..e9cccd0 --- /dev/null +++ b/static/fMap/fc-map.min.css @@ -0,0 +1,271 @@ +.ol-box { + box-sizing: border-box; + border-radius: 2px; + border: 2px solid blue; +} + +.ol-mouse-position { + top: 8px; + right: 8px; + position: absolute; +} + +.ol-scale-line { + background: rgba(0,60,136,0.3); + border-radius: 4px; + bottom: 8px; + left: 8px; + padding: 2px; + position: absolute; +} +.ol-scale-line-inner { + border: 1px solid #eee; + border-top: none; + color: #eee; + font-size: 10px; + text-align: center; + margin: 1px; + will-change: contents, width; +} +.ol-overlay-container { + will-change: left,right,top,bottom; +} + +.ol-unsupported { + display: none; +} +.ol-viewport, .ol-unselectable { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} +.ol-selectable { + -webkit-touch-callout: default; + -webkit-user-select: auto; + -moz-user-select: auto; + -ms-user-select: auto; + user-select: auto; +} +.ol-grabbing { + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; +} +.ol-grab { + cursor: move; + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; +} +.ol-control { + position: absolute; + background-color: rgba(255,255,255,0.4); + border-radius: 4px; + padding: 2px; +} +.ol-control:hover { + background-color: rgba(255,255,255,0.6); +} +.ol-zoom { + top: .5em; + left: .5em; +} +.ol-rotate { + top: .5em; + right: .5em; + transition: opacity .25s linear, visibility 0s linear; +} +.ol-rotate.ol-hidden { + opacity: 0; + visibility: hidden; + transition: opacity .25s linear, visibility 0s linear .25s; +} +.ol-zoom-extent { + top: 4.643em; + left: .5em; +} +.ol-full-screen { + right: .5em; + top: .5em; +} +@media print { + .ol-control { + display: none; + } +} + +.ol-control button { + display: block; + margin: 1px; + padding: 0; + color: white; + font-size: 1.14em; + font-weight: bold; + text-decoration: none; + text-align: center; + height: 1.375em; + width: 1.375em; + line-height: .4em; + background-color: rgba(0,60,136,0.5); + border: none; + border-radius: 2px; +} +.ol-control button::-moz-focus-inner { + border: none; + padding: 0; +} +.ol-zoom-extent button { + line-height: 1.4em; +} +.ol-compass { + display: block; + font-weight: normal; + font-size: 1.2em; + will-change: transform; +} +.ol-touch .ol-control button { + font-size: 1.5em; +} +.ol-touch .ol-zoom-extent { + top: 5.5em; +} +.ol-control button:hover, +.ol-control button:focus { + text-decoration: none; + background-color: rgba(0,60,136,0.7); +} +.ol-zoom .ol-zoom-in { + border-radius: 2px 2px 0 0; +} +.ol-zoom .ol-zoom-out { + border-radius: 0 0 2px 2px; +} + + +.ol-attribution { + text-align: right; + bottom: .5em; + right: .5em; + max-width: calc(100% - 1.3em); +} + +.ol-attribution ul { + margin: 0; + padding: 0 .5em; + font-size: .7rem; + line-height: 1.375em; + color: #000; + text-shadow: 0 0 2px #fff; +} +.ol-attribution li { + display: inline; + list-style: none; + line-height: inherit; +} +.ol-attribution li:not(:last-child):after { + content: " "; +} +.ol-attribution img { + max-height: 2em; + max-width: inherit; + vertical-align: middle; +} +.ol-attribution ul, .ol-attribution button { + display: inline-block; +} +.ol-attribution.ol-collapsed ul { + display: none; +} +.ol-attribution.ol-logo-only ul { + display: block; +} +.ol-attribution:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-attribution.ol-uncollapsible { + bottom: 0; + right: 0; + border-radius: 4px 0 0; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-logo-only { + background: transparent; + bottom: .4em; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-uncollapsible img { + margin-top: -.2em; + max-height: 1.6em; +} +.ol-attribution.ol-logo-only button, +.ol-attribution.ol-uncollapsible button { + display: none; +} + +.ol-zoomslider { + top: 4.5em; + left: .5em; + height: 200px; +} +.ol-zoomslider button { + position: relative; + height: 10px; +} + +.ol-touch .ol-zoomslider { + top: 5.5em; +} + +.ol-overviewmap { + left: 0.5em; + bottom: 0.5em; +} +.ol-overviewmap.ol-uncollapsible { + bottom: 0; + left: 0; + border-radius: 0 4px 0 0; +} +.ol-overviewmap .ol-overviewmap-map, +.ol-overviewmap button { + display: inline-block; +} +.ol-overviewmap .ol-overviewmap-map { + border: 1px solid #7b98bc; + height: 150px; + margin: 2px; + width: 150px; +} +.ol-overviewmap:not(.ol-collapsed) button{ + bottom: 1px; + left: 2px; + position: absolute; +} +.ol-overviewmap.ol-collapsed .ol-overviewmap-map, +.ol-overviewmap.ol-uncollapsible button { + display: none; +} +.ol-overviewmap:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-overviewmap-box { + border: 2px dotted rgba(0,60,136,0.7); +} + +.ol-overviewmap .ol-overviewmap-box:hover { + cursor: move; +} + +/*! + * ol3-contextmenu - v2.5.0 + * Custom Context Menu for Openlayers + * https://github.com/jonataswalker/ol3-contextmenu + * Built: Fri Nov 10 2017 09:09:46 GMT+0800 (中国标准时间) + */ +.ol-ctx-menu-container{position:absolute;padding:8px;background:#fff;color:#222;font-size:13px;border-radius:5px;box-shadow:3px 3px 5px rgba(0,0,0,.2);box-sizing:border-box}.ol-ctx-menu-container a,.ol-ctx-menu-container div,.ol-ctx-menu-container img,.ol-ctx-menu-container li,.ol-ctx-menu-container span,.ol-ctx-menu-container ul{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}.ol-ctx-menu-container a img{border:none}.ol-ctx-menu-container *,.ol-ctx-menu-container :after,.ol-ctx-menu-container :before{box-sizing:inherit}.ol-ctx-menu-container.ol-ctx-menu-hidden{opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container ul{list-style:none}.ol-ctx-menu-container li{position:relative;line-height:20px;padding:2px 5px}.ol-ctx-menu-container li:not(.ol-ctx-menu-separator):hover{cursor:pointer;background-color:#333;color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-submenu .ol-ctx-menu-container{border:1px solid #eee;padding:8px;top:0;opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover .ol-ctx-menu-container{opacity:1;visibility:visible;transition-delay:0s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:after{position:absolute;top:7px;right:10px;content:"";display:inline-block;width:.6em;height:.6em;border-right:.3em solid #222;border-top:.3em solid #222;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover:after{border-color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-separator{padding:0}.ol-ctx-menu-container li.ol-ctx-menu-separator hr{border:0;height:1px;background-image:linear-gradient(270deg,transparent,rgba(0,0,0,.75),transparent)}.ol-ctx-menu-icon{text-indent:20px;background-size:20px auto;background-repeat:no-repeat;background-position:0}.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABaUlEQVQ4T72U7VHCQBCGn90GtAMuNGCswFiBWIFQgWMFxg6wArECsQKhArEBiB1Qwa1zgQn5IAYcxv13k71n3919L8KJQ07M47+BzgG9TRfZ/JBuWhS6BJFHRJICYrZGZIz3z5Ct2+B7gG6I6kt+wewdkQVwjtkAkR5mC8yu26A1oItR/cTsOweQBdgutD8G7jGm2PJ2n8oqUKIpIjd4HxTM8gvaT/F+AlmWnyWaIXKF95eNguFzTYFhNsdWu9kFgFlaFMANUH3D8wDLoLgSTSD2il8NCe2ZXQBxWDGwxmyUzzOMBZ7wy7Qb2K0wQfXjMOBuhlFpZtNty5sFaTQBuTusZdymeqs1SpYKcO9HkE3KbTd9WFijMHJQ5hBNEAYNq5Qd0dhyke0GiE4QzjqfW23mHT8Hl4DG4Lce3FPE7AtbBSdsbNqpoJLgYkRnNeUV+xwJDHTnUEkxHGbhBXUs5TjJjew/KPy94g+NRaIVRYmMXwAAAABJRU5ErkJggg==")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABc0lEQVQ4T71U21ECQRDsJgGdvQDECMQIxAjECMQILCPwzAAjECIQI0AiEDPQAPaWCBhrcKHuCUcV5f7dY3v6tUscefHIePhfwBBCF8CZqRCReRs1tQxDCH1VfQLQz4EsSY4AvIjIsgm8AhhCGKrqa9zwrqoLAKckB5HtguR1E2gBMITQU9VPAD8GICIGtl3e+xHJBwBT59xtHcsCYJZlUwA3kcGHbfDep51OZywi3/acZZm9vyJ5WR5o38uACmDunNt6ZwAkUxFZDwghDFT1jeSjiJinhVUBVNVJkiTDKO8CQA+AsbNQ7s1Ps0VVn5MkSfcCtmBoDZi1Bdx4eJ7zbBolrwPy3o9J3rWSHPs3A1BbjVKlYBaIyDgvu9LDXDU2RTZmXVW1oKyLxRD+OrkOrJLy5mVM0iaftDhuhVbsvBzMglzKUNW6IV/OOWtCM8MmVvEkmbwt83LaB19fdgOtVquUZJeknaDdobTwbOcvBzPcN/AXH1DFFWP7u9oAAAAASUVORK5CYII=")}.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABU0lEQVQ4T72U7VECMRRFz3sNaAdkacC1AtcKxApcKnCsQOwAK3CtQKxAqEBsANYOqCDPyTIC+8WCw5jfybn33dxEOPGSE/P4b6BzQG89RT47ZJoWhy5B5BGRZAMxWyEyxvtnyFdt8AagS1F9KQ6YvSMyB84xGyDSw2yO2XUbtAJ0MaqfmH0XAPIA2y7tj4F7jAm2uG1yWQZKNEHkBu+Dg2njWBJNEbnC+8uaIFRuWfuG2QxbbrOrUd0A1Tc8D7AIjkur7DAAsVf8MiWMZ3ZR2m02LPIMscATfjHqBnY7TFD9OAy4zTCCPG/MUKMM5O6wkXFr9dZq7FQqqHk/hDzbFa73cFONTZFDdRyiCcKg5rrSiLaXkiI6RjjrfG6VzDs+B5eAxuDXeYpmNRGzL2wZ/wof+du4GNFpBVqqz5HA4MM5VEYYDrOs+1I6Q9u/4Q8O9wN/AGgWjBVqQjjgAAAAAElFTkSuQmCC")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABYklEQVQ4T72U4VHCQBCF36tA91KAWIFYgViBWIFYgWMFYgdYgVCBWAFSgdiBFpAsFWSdxcDkQoBkhnF/ZjbfvX377ogjF4/Mw/8CVbUD4MynEJF5k2lqFapqz8yeAPRKkCXJEYAXEVnugm8BVXVgZq/FD+9mtgBwSrJfqF2QvN4FjYCq2jWzTwA/DhARh20qTdMRyQcA0xDCbZ3KCJhl2RTATaHgo+6HLMv8+xXJy+qB3l8FGoB5CKHsXcRV1b6ZvZF8FBH3NKotoJlNkiQZFONdlLtJ3rufbouZPSdJMjwIbKDQEzBrClx7eC4i33Uepmk6JnnXaOQifzMAtdGoRApugYiMI1uqKkrRWAfZo9MxM1+UZzFewl8mN4nYdVM83L7BkwbXLUrF3sfBLQDQBbDy08x8vOohXyEE71lVq9emuEk+3gZa3XYroCvwFyjP8yHJDsnxwaU08GxvS2uFhw78BbzWrxXgMbsHAAAAAElFTkSuQmCC")} +.plot-helper-control-point-div{width:10px;height:10px;border:1px solid #000;border-radius:100%;background-color:#fff;opacity:.6;cursor:move}.ol-plot-text-area-content{position:relative}.ol-plot-text-area-content .ol-plot-text-area-editor{position:absolute;top:0;right:0;width:20px;height:20px;background-color:#4cae4c} +.fc-map-single-bubble.iframe-bubble-box .btn-close,.popup-label{display:none}.fc-map{width:100%;height:100%}.popup-label{background-color:#fff;border:2px solid #444;border-radius:7px;-webkit-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);-moz-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);color:#111;font:12px/20px "Helvetica Neue",Arial,Helvetica,sans-serif;font-weight:700;padding:3px 6px;position:absolute;white-space:nowrap;top:-35px;left:20px}.popup-label img{vertical-align:middle}.popup-label.marker:before{border-top:6px solid transparent;border-bottom:6px solid transparent;content:"";border-right:6px solid #000;border-right-color:inherit;position:absolute;left:-8px;top:5px}.ol-full-screen{position:absolute;top:50%}.p-helper-control-point-div{width:12px;height:12px;border:1px solid #000;background-color:#ff0;opacity:.8;cursor:move}.mtooltip{position:relative;background:rgba(0,0,0,.5);border-radius:4px;color:#fff;padding:4px 8px;opacity:.7;white-space:nowrap}.mtooltip-measure{opacity:1;font-weight:700}.mtooltip-static{background-color:#fc3;color:#000;border:1px solid #fff}.mtooltip-measure:before,.mtooltip-static:before{border-top:6px solid rgba(0,0,0,.5);border-right:6px solid transparent;border-left:6px solid transparent;content:"";position:absolute;bottom:-6px;margin-left:-7px;left:50%}.mtooltip-static:before{border-top-color:#fc3}.fc-map-single-bubble.normal-bubble-box{min-width:100px;min-height:32px;width:auto;height:auto;background-color:#fff;border:1px solid #23b1ed;webkit-border-radius:15px;-moz-border-radius:15px;border-radius:6px;-webkit-box-shadow:2px 2px 4px #888;-moz-box-shadow:2px 2px 4px #888;box-shadow:2px 2px 4px #888}.fc-map-single-bubble.normal-bubble-box .bubble-content{padding:5px}.fc-map-single-bubble.normal-bubble-box:before{content:' ';position:absolute;width:0;height:0;left:15px;bottom:-21px;border:11px solid;border-color:#23b1ed transparent transparent #23b1ed}.fc-map-single-bubble.normal-bubble-box:after{content:' ';position:absolute;width:0;height:0;left:16px;bottom:-19px;border:10px solid;border-color:#fff transparent transparent #fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer;color:#fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons a{color:#fff}.fc-map-single-bubble.iframe-bubble-boxdefault-nohead .btn-close{display:block;font-size:24px;position:absolute;top:-12px;right:-12px;cursor:pointer;color:#000}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer}.fc-map-single-bubble .general-bubble-box-content{max-width:400px;max-height:300px;overflow:auto;margin-left:10px;margin-right:10px}.fc-map-single-bubble .general-bubble-box-content tr{height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th{max-width:100px;width:100px;color:#a39e98;font-weight:400;font-size:13px;height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th:after{content:' :'}.fc-map-single-bubble .general-bubble-box-content .item-td{padding-left:10px;height:24px;line-height:24px;font-weight:400;font-size:13px}.fc-map-single-bubble .general-bubble-box-content .item-td span{float:left;margin-right:10px;max-width:200px;overflow:auto}.fc-map-single-bubble .general-bubble-box-content .item-td span i{font-size:32px;cursor:pointer;float:left}.selected-trace-effect{position:absolute;width:8px;height:8px;margin:-4px 0 0 -5px;background:#2dc3e8;-webkit-border-radius:8px;-moz-border-radius:8px;-ms-border-radius:8px;-o-border-radius:8px;border-radius:8px}.selected-trace-effect:after{content:"";position:absolute;height:6px;width:6px;left:1px;top:1px;background:#fbfbfb;border-radius:4px}.selected-trace-effect .ring{position:absolute;width:100px;height:50px;border:5px solid #2dc3e8;background-color:#fbfbfb;top:50%;left:50%;margin:-25px 0 0 -50px;opacity:0;-webkit-border-radius:100px/50px;-moz-border-radius:100px/50px;-ms-border-radius:100px/50px;-o-border-radius:100px/50px;border-radius:100px/50px;-webkit-animation:selectedTrace 1s infinite linear;-moz-animation:selectedTrace 1s infinite linear;-ms-animation:selectedTrace 1s infinite linear;-o-animation:selectedTrace 1s infinite linear;animation:selectedTrace 1s infinite linear}.selected-trace-effect .ring:last-of-type{-webkit-animation-delay:.5s;-moz-animation-delay:.5s;-ms-animation-delay:.5s;-o-animation-delay:.5s;animation-delay:.5s}@-webkit-keyframes selectedTrace{0%{-webkit-transform:scale(.1);opacity:1}100%{-webkit-transform:scale(1);opacity:0}}@-moz-keyframes selectedTrace{0%{-moz-transform:scale(.1);opacity:1}100%{-moz-transform:scale(1);opacity:0}}@-ms-keyframes selectedTrace{0%{-ms-transform:scale(.1);opacity:1}100%{-ms-transform:scale(1);opacity:0}}@-o-keyframes selectedTrace{0%{-o-transform:scale(.1);opacity:1}100%{-o-transform:scale(1);opacity:0}}@keyframes selectedTrace{0%{transform:scale(.1);opacity:1}100%{transform:scale(1);opacity:0}}.fc-map .ol-scale-line{background:0 0;border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.fc-map .ol-scale-line-inner{height:2px;border:1px solid #000;border-bottom-width:4px;border-top:none;color:#000;font-size:10px;text-align:center;padding-bottom:15px;margin:1px;will-change:contents,width}.fc-map .fmouseposition{position:absolute}.fc-map .fmouseposition.position-lt{left:0;top:0}.fc-map .fmouseposition.position-lc{left:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-lb{left:0;bottom:4px}.fc-map .fmouseposition.position-ct{left:calc(50% - 84px);top:0}.fc-map .fmouseposition.position-cc{left:calc(50% - 84px);top:calc(50% - 2px)}.fc-map .fmouseposition.position-cb{left:calc(50% - 84px);bottom:4px}.fc-map .fmouseposition.position-rt{right:0;top:0}.fc-map .fmouseposition.position-rc{right:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-rb{right:0;bottom:2px}.fmap-mapswitch{z-index:2;position:absolute;bottom:0;right:0;height:80px;cursor:pointer;-webkit-transition-property:width,background-color;transition-property:width,background-color;-webkit-transition-duration:.5s;transition-duration:.5s;background-color:#fff;background-color:rgba(255,255,255,.4)}.fmap-mapswitch .map-type-card{height:60px;width:86px;position:absolute;border-radius:2px;top:10px;box-sizing:border-box;border:1px solid rgba(255,255,255,0);-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-mapswitch .map-type-card span{position:absolute;bottom:0;right:0;display:inline-block;padding:3px 3px 2px 4px;font-size:12px;line-height:12px;color:#FFF;border-top-left-radius:2px;background-color:rgba(38,38,38,.6);width:100%;height:18px;text-align:center}.fmap-mapswitch .map-type-card.active,.fmap-mapswitch .map-type-card:hover{border:1px solid #3385FF}.fmap-mapswitch .map-type-card.active span{background-color:#3283ff;font-size:12px}.fmap-mapswitch .map-type-card:hover span{background-color:#3283ff}.fmap-mapswitch .map-type-card .type1{background-position:0 0}.fmap-mapswitch .map-type-card .type2{background-position:0 -60px}.fmap-mapswitch .map-type-card .type3{background-position:0 -120px}.fmap-mapswitch .map-type-card .type4{background-position:0 0}.fmap-mapswitch .map-type-card .type5{background-position:0 -60px}.fmap-mapswitch .map-type-card .type6{background-position:0 -120px}.fmap-mapswitch .map-type-card .type7{background-position:0 0}.fmap-mapswitch .map-type-card .type8{background-position:0 -60px}.fmap-mapswitch .map-type-card .type9{background-position:0 -120px}.fmap-mapswitch .map-type-card .type10{background-position:0 0}.fmap-mapswitch .map-type-card .type11{background-position:0 -60px}.fmap-mapswitch .map-type-card .type12{background-position:0 -120px}.fmap-mapswitch.closed{width:110px;background-color:rgba(255,255,255,0)}.fmap-mapswitch.closed span{font-size:0}.fmap-mapswitch.closed .map-type-card{border:1px solid rgba(153,153,153,.42);background:url(img/map_type_card_bg.png) no-repeat;-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-drawbar,.fmap-toolbar{border-radius:3px;background:#fff}.fmap-mapswitch.closed .type1{right:5px}.fmap-mapswitch.closed .type2{right:10px}.fmap-mapswitch.closed .type3{right:15px}.fmap-mapswitch.closed .type4{right:20px}.fmap-mapswitch.closed .type5{right:25px}.fmap-mapswitch.closed .type6{right:30px}.fmap-mapswitch.closed .type7{right:35px}.fmap-mapswitch.closed .type8{right:40px}.fmap-mapswitch.closed .type9{right:45px}.fmap-mapswitch.closed .type10{right:50px}.fmap-mapswitch.closed .type11{right:55px}.fmap-mapswitch.closed .type12{right:60px}.fmap-mapswitch.filter0{filter:alpha(opacity=10)}.fmap-mapswitch.filter1{filter:alpha(opacity=80)}.type1{right:10px}.type2{right:106px}.type3{right:202px}.type4{right:298px}.type5{right:390px}.type6{right:486px}.type7{right:582px}.type8{right:678px}.type9{right:774px}.type10{right:870px}.type11{right:966px}.type12{right:1062px}.fmap-toolbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.tool-item-h i{font-size:18px;color:grey;top:2px;position:relative;display:inline-block}.tool-item-h i:hover{color:#00e5ff}.tool-item-h.tool-item-group .down-list{max-width:68px;font-size:12px}.tool-item-h.tool-item-group .down-list.downpan{max-width:200px}.toolbtn{width:24px;height:24px;display:block}.toolbtn_export:before{content:"\E182"}.toolbtn_cut:before{content:"\E094"}.toolbtn_fullscreen:before{content:"\E350"}.toolbtn_measureline:before{content:"\E098"}.toolbtn_measurepolygon:before{content:"\E097"}.toolbtn_measureclear:before{content:"\e020"}.fmap-toolbar-content .down-list{background:#fff;border:1px solid #ccc;position:absolute;left:0;top:30px;font-size:12px}@keyframes card-drop{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes card-up{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animated-card-drop{-webkit-animation-name:card-drop;animation-name:card-drop;display:block;-webkit-animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s}.animated-card-up{-webkit-animation-name:card-up;animation-name:card-up;display:none;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-fill-mode:forwards}.ol-full-screen{display:none}.fmap-drawbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-pluging-nocontainer{position:absolute;top:0;right:0}.tool-item-h{height:32px;width:32px;display:inline-block;position:relative;float:left;padding:4px;cursor:pointer}.drawbtn,.drawbtn_x24,.drawbtn_x32{display:block}.tool-item-h:hover{border:1px solid #dcdcdc}.tool-item-h.tool-item-group,.tool-item-h.tool-item-group .down-list{width:68px}.drawbtn_x24{width:24px;height:24px}.drawbtn_x32{width:32px;height:32px}.drawbtn_AssaultDirection_x24{background:url(img/icon_drawbtn.png) 0 -160px no-repeat}.drawbtn_FreePolygon_x24{background:url(img/icon_drawbtn.png) -24px -160px no-repeat}.drawbtn_AttackArrow_x24{background:url(img/icon_drawbtn.png) -48px -160px no-repeat}.drawbtn_Circle_x24{background:url(img/icon_drawbtn.png) -72px -160px no-repeat}.drawbtn_ClosedCurve_x24{background:url(img/icon_drawbtn.png) -96px -160px no-repeat}.drawbtn_Curve_x24{background:url(img/icon_drawbtn.png) 0 -184px no-repeat}.drawbtn_DoubleArrow_x24{background:url(img/icon_drawbtn.png) -24px -184px no-repeat}.drawbtn_Ellipse_x24{background:url(img/icon_drawbtn.png) -48px -184px no-repeat}.drawbtn_FineArrow_x24{background:url(img/icon_drawbtn.png) -72px -184px no-repeat}.drawbtn_FreeLine_x24{background:url(img/icon_drawbtn.png) -96px -184px no-repeat}.drawbtn_Arc_x24{background:url(img/icon_drawbtn.png) 0 -208px no-repeat}.drawbtn_GatheringPlace_x24{background:url(img/icon_drawbtn.png) -24px -208px no-repeat}.drawbtn_Lune_x24{background:url(img/icon_drawbtn.png) -48px -208px no-repeat}.drawbtn_Polygon_x24{background:url(img/icon_drawbtn.png) -72px -208px no-repeat}.drawbtn_Polyline_x24{background:url(img/icon_drawbtn.png) -96px -208px no-repeat}.drawbtn_RectAngle_x24{background:url(img/icon_drawbtn.png) 0 -232px no-repeat}.drawbtn_Sector_x24{background:url(img/icon_drawbtn.png) -24px -232px no-repeat}.drawbtn_SquadCombat_x24{background:url(img/icon_drawbtn.png) -48px -232px no-repeat}.drawbtn_StraightArrow_x24{background:url(img/icon_drawbtn.png) -72px -232px no-repeat}.drawbtn_TailedAttackArrow_x24{background:url(img/icon_drawbtn.png) -96px -232px no-repeat}.drawbtn_TailedSquadCombat_x24{background:url(img/icon_drawbtn.png) 0 -256px no-repeat}.drawbtn_AssaultDirection_x24:hover{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_x24:hover{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_x24:hover{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_x24:hover{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_x24:hover{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_x24:hover{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_x24:hover{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_x24:hover{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_x24:hover{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_x24:hover{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_x24:hover{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_x24:hover{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_x24:hover{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_x24:hover{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_x24:hover{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_AssaultDirection_hover_x24{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_hover_x24{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_hover_x24{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_hover_x24{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_hover_x24{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_hover_x24{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_hover_x24{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_hover_x24{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_hover_x24{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_hover_x24{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_hover_x24{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_hover_x24{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_hover_x24{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_hover_x24{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_hover_x24{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_SquadCombat_x32{background:url(img/icon_drawbtn.png) no-repeat}.drawbtn_StraightArrow_x32{background:url(img/icon_drawbtn.png) -32px 0 no-repeat}.drawbtn_TailedAttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -32px no-repeat}.drawbtn_TailedSquadCombat_x32{background:url(img/icon_drawbtn.png) -32px -32px no-repeat}.drawbtn_Arc_x32{background:url(img/icon_drawbtn.png) -64px 0 no-repeat}.drawbtn_AssaultDirection_x32{background:url(img/icon_drawbtn.png) -64px -32px no-repeat}.drawbtn_AttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -64px no-repeat}.drawbtn_Circle_x32{background:url(img/icon_drawbtn.png) -32px -64px no-repeat}.drawbtn_ClosedCurve_x32{background:url(img/icon_drawbtn.png) -64px -64px no-repeat}.drawbtn_Curve_x32{background:url(img/icon_drawbtn.png) -96px 0 no-repeat}.drawbtn_DoubleArrow_x32{background:url(img/icon_drawbtn.png) -96px -32px no-repeat}.drawbtn_Ellipse_x32{background:url(img/icon_drawbtn.png) -96px -64px no-repeat}.drawbtn_FineArrow_x32{background:url(img/icon_drawbtn.png) 0 -96px no-repeat}.drawbtn_FreeLine_x32{background:url(img/icon_drawbtn.png) -32px -96px no-repeat}.drawbtn_FreePolygon_x32{background:url(img/icon_drawbtn.png) -64px -96px no-repeat}.drawbtn_GatheringPlace_x32{background:url(img/icon_drawbtn.png) -96px -96px no-repeat}.drawbtn_Lune_x32{background:url(img/icon_drawbtn.png) -128px 0 no-repeat}.drawbtn_Polygon_x32{background:url(img/icon_drawbtn.png) -128px -32px no-repeat}.drawbtn_Polyline_x32{background:url(img/icon_drawbtn.png) -128px -64px no-repeat}.drawbtn_RectAngle_x32{background:url(img/icon_drawbtn.png) -128px -96px no-repeat}.drawbtn_Sector_x32{background:url(img/icon_drawbtn.png) 0 -128px no-repeat}.drawbtn_SquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -160px 0 no-repeat}.drawbtn_StraightArrow_hover_x32{background:url(img/icon_drawbtn.png) -192px 0 no-repeat}.drawbtn_TailedAttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -32px no-repeat}.drawbtn_TailedSquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -192px -32px no-repeat}.drawbtn_Arc_hover_x32{background:url(img/icon_drawbtn.png) -224px 0 no-repeat}.drawbtn_AssaultDirection_hover_x32{background:url(img/icon_drawbtn.png) -224px -32px no-repeat}.drawbtn_AttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -64px no-repeat}.drawbtn_Circle_hover_x32{background:url(img/icon_drawbtn.png) -192px -64px no-repeat}.drawbtn_ClosedCurve_hover_x32{background:url(img/icon_drawbtn.png) -224px -64px no-repeat}.drawbtn_Curve_hover_hover_x32{background:url(img/icon_drawbtn.png) -256px 0 no-repeat}.drawbtn_DoubleArrow_hover_x32{background:url(img/icon_drawbtn.png) -256px -32px no-repeat}.drawbtn_Ellipse_hover_x32{background:url(img/icon_drawbtn.png) -256px -64px no-repeat}.drawbtn_FineArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -96px no-repeat}.drawbtn_FreeLine_hover_x32{background:url(img/icon_drawbtn.png) -192px -96px no-repeat}.drawbtn_FreePolygon_hover_x32{background:url(img/icon_drawbtn.png) -224px -96px no-repeat}.drawbtn_GatheringPlace_hover_x32{background:url(img/icon_drawbtn.png) -256px -96px no-repeat}.drawbtn_Lune_hover_x32{background:url(img/icon_drawbtn.png) -288px 0 no-repeat}.drawbtn_Polygon_hover_x32{background:url(img/icon_drawbtn.png) -288px -32px no-repeat}.drawbtn_Polyline_hover_x32{background:url(img/icon_drawbtn.png) -288px -64px no-repeat}.drawbtn_RectAngle_hover_x32{background:url(img/icon_drawbtn.png) -288px -96px no-repeat}.drawbtn_Sector_hover_x32{background:url(img/icon_drawbtn.png) -160px -128px no-repeat}.ol-zoom{display:none}.fmap-zoompan{width:62px;height:192px}.fmap-zoompan div{position:absolute}.fmap-zoompan .fmap-zoompan-pan{width:44px;height:44px;overflow:hidden;background:url(img/mapctrl_zoompan.png) no-repeat}.fmap-zoompan .fmap-zoompan-pan .fmap-btn{height:15px;width:15px;cursor:pointer}.fmap-zoompan .fmap-zoompan-pan .fmap-panE,.fmap-zoompan .fmap-zoompan-pan .fmap-panN,.fmap-zoompan .fmap-zoompan-pan .fmap-panS,.fmap-zoompan .fmap-zoompan-pan .fmap-panW{overflow:hidden}.fmap-zoompan .fmap-zoompan-pan .fmap-panN{left:14px;top:0}.fmap-zoompan .fmap-zoompan-pan .fmap-panW{left:1px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panE{left:27px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panS{left:14px;top:25px}.fmap-zoompan .fmap-zoompan-zoom{top:45px;height:147px;width:62px;overflow:hidden}.fmap-zoompan .fmap-zoompan-zoom .fmap-btn{width:22px;height:21px;left:12px;overflow:hidden;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;z-index:10}.fmap-zoompan .fmap-zoompan-zoom .zoomIn{cursor:pointer;background-position:0 -221px}.fmap-zoompan .fmap-zoompan-zoom .zoomIn:hover{background-position:0 -243px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut{cursor:pointer;background-position:0 -265px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut:hover{background-position:0 -287px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider{width:37px;top:18px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgtop{left:18px;width:10px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -23px -226px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbottom{left:19px;height:8px;width:10px;top:124px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -33px bottom no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgmask{height:100%;width:24px;left:10px;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar{height:11px;width:19px;left:13px;top:80px;overflow:hidden;background:url(img/mapctrl_zoompan.png) 0 -309px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar:hover{background:url(img/mapctrl_zoompan.png) 0 -320px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder{display:none;position:absolute;top:0}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{position:absolute;left:34px;height:21px;width:28px;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;font-size:0;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{background-position:0 -380px;top:21px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city{background-position:0 -401px;top:52px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov{background-position:0 -422px;top:76px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country{background-position:0 -443px;top:100px}.fmap-zoompan .fmap-zoompan-zoom:hover .fmap-zoompan-zlholder{display:block}.fmap-zoompan.zoom-mode-pan .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-slider{width:62px;height:150px}.fmap-zoompan.zoom-mode-slider .fmap-zoompan-zoom{top:0;height:147px;width:62px}.fmap-zoompan.zoom-mode-slider .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-btn{width:48px;height:40px}.fmap-zoompan.zoom-mode-btn .fmap-zoompan-zoom{top:0;height:40px;width:48px}.fmap-zoompan.zoom-mode-btn .fmap-btn.zoomOut{top:20px}.fmap-areanav{position:absolute;float:left;top:5px;right:300px;z-index:2;height:25px;width:76px;margin-right:6px;background:#fff;border-radius:3px;box-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-areanav a,.fmap-areanav img{border:0;text-decoration:none}.fmap-areanav>i{position:absolute;top:5px;left:2px;font-size:14px}.fmap-areanav.hover .content{display:block}.fmap-areanav:focus{outline:0}.fmap-areanav.opened .content{display:block}.fmap-areanav a:link,.fmap-areanav a:visited{color:#005aa0}.fmap-areanav a:hover{background:#8cc0fb;color:#fff;cursor:pointer}.fmap-areanav a:active{background:#005aa0;color:#fff}.fmap-areanav em{font-style:normal}.fmap-areanav ol,.fmap-areanav ul{list-style:none;padding:0;margin:0}.fmap-areanav .tab .tab-item,.fmap-areanav .tab a,.fmap-areanav .tab li{cursor:pointer;float:left;text-align:center}.fmap-areanav .text{float:left;position:relative;top:0;left:15px;z-index:2;height:100%;width:100%;background:0 0;padding:0 20px 0 4px;line-height:23px;overflow:hidden;font-size:13px;font-family:'微软雅黑','黑体',Arial,Helvetica,sans-serif;color:#555}.fmap-areanav .text .updown-btn{font-size:12px;color:#ccc;font-weight:400}.fmap-areanav .text b{display:block;position:absolute;top:0;right:12px;overflow:hidden;width:17px;height:25px;line-height:25px}.fmap-areanav .close{display:none;position:absolute;z-index:2;top:19px;left:366px;cursor:pointer;width:17px;height:17px;background:#f20d0d}.fmap-areanav .content{display:none;position:absolute;top:23px;width:350px;padding:5px;background:#fff;-moz-box-shadow:0 0 5px #ddd;-webkit-box-shadow:0 0 5px #ddd;box-shadow:0 0 5px #ddd}.fmap-areanav .content select{float:left;width:120px;border:1px solid #cecbce;margin-right:15px}.fmap-areanav .content .select3{margin-right:0}.fmap-areanav .content .fstock{position:relative;margin-bottom:0}.fmap-areanav .content .fstock .tab{width:95%;height:25px;float:left;border-bottom:1px solid #2dc3e8;overflow:visible}.fmap-areanav .content .fstock .tab a{position:relative;float:left;height:23px;padding:0 20px 1px 10px;line-height:23px;text-align:center;text-decoration:none;cursor:pointer;color:#005AA0;outline:0}.fmap-areanav .content .fstock .tab a:hover{background:0;color:#005AA0}.fmap-areanav .content .fstock .tab a:hover i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .tab a i{position:absolute;right:5px;top:10px;display:block;width:7px;height:5px;overflow:hidden;filter:alpha(opacity=50)}.fmap-areanav .content .fstock .tab li{float:left;clear:none;height:23px;padding:1px 1px 0;border:1px solid #ddd;border-bottom:0;margin-right:3px;background-color:#fff;line-height:22px;text-decoration:none}.fmap-areanav .content .fstock .tab .curr{position:relative;height:25px;padding:0;border:1px solid #2dc3e8;border-bottom:0}.fmap-areanav .content .fstock .tab .curr i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .area-list{padding-top:5px}.fmap-areanav .content .fstock .area-list li{float:left;width:80px;padding:2px 0 2px 15px;clear:none}.fmap-areanav .content .fstock .area-list li a{float:left;padding:2px 4px;color:#005aa0}.fmap-areanav .content .fstock .area-list li a:hover{color:#fff}.fmap-areanav .content .fstock .area-list .disable-li a{float:left;padding:2px 4px;color:#eee}.fmap-areanav .content .fstock .area-list .disable-li a:hover{background:#fff;color:#eee;cursor:default}.fmap-areanav.hovae .text{border-bottom:0}.fmap-areanav.hovae .close,.fmap-areanav.hovae .content{display:block}.fcplayer-container{padding:0;margin:0;width:100%;z-index:9999}.fcplayer-container .fcplayer{background:rgba(0,0,0,.8);border:1px solid #acb2bb;width:100%;height:52px;position:relative;padding:4px 12px}.fcplayer-container .fcplayer .fcplayer-progressbar{height:14px;width:100%}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-bg{background-color:#dadada;width:100%;height:4px;position:relative;top:5px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-pass{position:relative;height:4px;width:100px;top:1px;background-color:#01dbfb}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-thumb{background:url(img/player_progressbar_thumb.png) no-repeat;width:16px;height:16px;position:relative;top:-8px;left:0}.fcplayer-container .fcplayer .fcplayer-opbar{height:28px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed{color:#fff;width:200px;font-size:9px!important}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .speed-ctrl{border:1px solid #fff;float:left;display:block;width:32px;height:28px;line-height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span{float:left;display:block;width:20px;height:14px;border:1px solid #fff;line-height:12px;padding-left:3px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span.actived{background-color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn{width:16px;height:16px;line-height:24px;font-size:16px;float:left;color:#e8e8e8;margin-right:8px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn.active,.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn:hover{color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar{height:22px;float:left;font-size:13px!important;line-height:28px;color:#fff}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-progressinfo{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-title{float:left;margin-left:20px} \ No newline at end of file diff --git a/static/fMap/fc-map.min.js b/static/fMap/fc-map.min.js new file mode 100644 index 0000000..bc563e8 --- /dev/null +++ b/static/fMap/fc-map.min.js @@ -0,0 +1,35750 @@ +/*! + * FinestMap JavaScript Library, 航天精一多图源地图框架 + * http://www.finest.com.cn + * + * Copyright (c) 2018, Finest All rights reserved. + * Released under the GPL license. + * + * Version: v1.4.6-sp02 + * BuildDate: Thu Jun 27 2019 09:47:24 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复fmap.plot.editend事件无效问题 + * + * Version: v1.4.6-sp01 + * BuildDate: Wed Jun 26 2019 11:47:59 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复在IE9下canvas.remove() + * + * Version: v1.4.6 + * BuildDate: Wed Jun 19 2019 17:11:25 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复IE9、IE10、IE11、Edge兼容缺陷 + * 2、修复对低版本jquery的不兼容问题,兼容1.7以上 + * 3、修复activateZoomBox、getPixelFromCoordinate、addControl函数(因含$.uuid()函数在低版本jq报错) + * + * Version: v1.4.5-sp05 + * BuildDate: Tue May 14 2019 10:44:07 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、addFeatures方法增加对GeoJson数据格式的支持 + * + * Version: v1.4.5-sp04 + * BuildDate: Wed May 08 2019 14:21:52 GMT+0800 (GMT+08:00) + * buildinfo: + * 1、修复测量后画标注,测量信息会被清空 + * 2、修复切换图源时可能资源无法加载 + * + * Version: v1.4.5-sp03 + * BuildDate: Wed May 08 2019 11:01:25 GMT+0800 (GMT+08:00) + * buildinfo: + * 1、修复在IE9、IE10下的不兼容问题 + */ +function extendJQFunction(e) { + e.isUndefined = function (e) { + return void 0 === e + }, e.getUrlParam = function (e) { + var o = window.location.search.substr(1); + if (o.length > 0) { + var t, r = {}; + if (o.indexOf(!0)) t = o.split("&"), t.forEach(function (e) { + var o = e.split("="); + r[o[0]] = decodeURIComponent(o[1]) + }); else { + t = o.split("="); + var r = {}; + r[t[0]] = decodeURIComponent(t[1]) + } + return r + } + return fconsole.debug("[fc.core]: 当前URL没有携带参数"), null + }, e.parseRequestBody = function (e) { + var o = new Object; + if (e && "" != e) { + e = decodeURIComponent(e); + for (var t = e.split("&"), r = 0; r < t.length; r++) { + var i = t[r].split("="), n = i[0]; + if (n = n.replace(new RegExp(/\[\]/g), ""), o[n]) { + if ("[object Array]" !== Object.prototype.toString.call(o[n])) { + var l = o[n]; + o[n] = new Array, o[n].push(l) + } + o[n].push(i[1]) + } else o[n] = i[1] + } + } + return o + }, e.isDefined = function (e) { + return void 0 !== e + }, e.isEmpty = function (o) { + var t = null === o || void 0 === o || e.isArray(o) && !o.length || e.isString(o) && "" === o.trim(); + if (!t && "object" == typeof o) { + var r = !1; + for (var i in o) { + r = !0; + break + } + t = !r + } + return t + }, e.isString = function (e) { + return "string" == typeof e + }, e.isArray = function (e) { + return Array.isArray(e) + }, e.isNumber = function (e) { + return "number" == typeof e + }, e.isBoolean = function (e) { + return "boolean" == typeof e + }, e.isWindow = function (e) { + return e && e.window === e + }, e.isScope = function (e) { + return e && e.$evalAsync && e.$watch + }, e.isFile = function (e) { + return "[object File]" === Object.toString.call(e) + }, e.isFormData = function (e) { + return "[object FormData]" === Object.toString.call(e) + }, e.isBlob = function (e) { + return "[object Blob]" === Object.toString.call(e) + }, e.isFunction = function (e) { + return "function" == typeof e + }, e.isPromiseLike = function (o) { + return o && e.isFunction(o.then) + }, e.isUrlLike = function (e) { + var o = /^((ht|f)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?$/, t = o.test(e), + r = -1 != e.indexOf("/"); + return t || r + }, e.parseDate = function (e) { + if ("" != e) { + e = e.replace(/-/g, "/"); + return new Date(e) + } + return new Date + }, e.intervalMonth = function (e, o) { + var t = this.parseDate(e); + return "" != t ? ("add" == o ? t.setTime(t.getTime() + 2592e6) : "sub" == o && t.setTime(t.getTime() - 2592e6), t.format("yyyy-MM-dd hh:mm:ss")) : "" + }, e.diffYear = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(t.getFullYear() - o.getFullYear()) + 1 + }, e.diffMonth = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(12 * (t.getFullYear() - o.getFullYear()) + (t.getMonth() - o.getMonth())) + 1 + }, e.diffFullMonth = function () { + }, e.diffDay = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), o.setHours(0, 0, 0, 0), t.setHours(0, 0, 0, 0), Math.ceil((t - o) / 864e5) + }, e.diffTime = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(t - o) + }, e.diffTimeFormat = function (e, o, t) { + }, e._s4 = function () { + return (65536 * (1 + Math.random()) | 0).toString(16).substring(1) + }, e._toJsonReplacer = function (e, o) { + var t = this, r = o; + return "string" == typeof e && "$" === e.charAt(0) && "$" === e.charAt(1) ? r = void 0 : t.isWindow(o) ? r = "$WINDOW" : o && document === o ? r = "$DOCUMENT" : t.isScope(o) && (r = "$SCOPE"), r + }, e._uuid = function () { + return e._s4() + e._s4() + "-" + e._s4() + "-" + e._s4() + "-" + e._s4() + "-" + e._s4() + e._s4() + e._s4() + }, e.toJSON = function (o, t) { + if (void 0 !== o) return e.isNumber(t) || (t = t ? 2 : null), JSON.stringify(o, e._toJsonReplacer, t) + }, e.httpParamSerializerJQLike = function (o) { + var t, r, i, n, l, a, s, p = ""; + for (t in o) if ((r = o[t]) instanceof Array) for (s = 0; s < r.length; ++s) l = r[s], i = t + "[" + s + "]", a = {}, a[i] = l, p += e.httpParamSerializerJQLike(a) + "&"; else if (r instanceof Object) for (n in r) l = r[n], i = t + "[" + n + "]", a = {}, a[i] = l, p += e.httpParamSerializerJQLike(a) + "&"; else void 0 !== r && null !== r && (p += encodeURIComponent(t) + "=" + encodeURIComponent(r) + "&"); + return p.length ? p.substr(0, p.length - 1) : p + }, e.handleSpringMVCParams = function (o) { + return "json" == o.format ? o.data = e.toJson(o.data) : o.data = e.isObject(o.data) && "[object File]" !== String(o.data) ? e.httpParamSerializerJQLike(o.data) : o.data, o.data + }, e.copy = function (e) { + return null + }, e.toRgb = function (e) { + for (var o = e.toLowerCase(), t = [], r = 1; r < 7; r += 2) t.push(parseInt("0x" + o.slice(r, r + 2))); + return t.push(1), t + }, e.toRgbStr = function (e) { + var o = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/, t = e.toLowerCase(); + if (t && o.test(t)) { + if (4 === t.length) { + for (var r = "#", i = 1; i < 4; i += 1) r += t.slice(i, i + 1).concat(t.slice(i, i + 1)); + t = r + } + for (var n = [], i = 1; i < 7; i += 2) n.push(parseInt("0x" + t.slice(i, i + 2))); + return "RGB(" + n.join(",") + ")" + } + return t + }, e.invertBitmap = function (e) { + for (var o = 0; o < e.length; o += 4) { + var t = e[o], r = e[o + 1], i = e[o + 2]; + e[o] = 255 - t, e[o + 1] = 255 - r, e[o + 2] = 255 - i + } + return e + }, e.filterImg = function (o, t) { + var r = e(""), i = r[0]; + i.width = o.width, i.height = o.height; + var n = i.getContext("2d"); + n.drawImage(o, 0, 0, o.width, o.height); + var l, a = n.getImageData(0, 0, o.width, o.height); + return l = e.isFunction(t) ? t(a.data) : e.invertBitmap(a.data), a.data = l, n.putImageData(a, 0, 0), o.src = i.toDataURL(), o.onload = null, o + }, e.getPositionClassName = function (e) { + var o = null; + if (e) switch (e) { + case"left-top": + case"lt": + o = "position-lt"; + break; + case"left-center": + case"lc": + o = "position-lc"; + break; + case"left-bottom": + case"lb": + o = "position-lb"; + break; + case"center-top": + case"ct": + o = "position-ct"; + break; + case"center-center": + case"cc": + o = "position-cc"; + break; + case"center-bottom": + case"cb": + o = "position-cb"; + break; + case"right-top": + case"rt": + o = "position-rt"; + break; + case"right-center": + case"rc": + o = "position-rc"; + break; + case"right-bottom": + case"rb": + o = "position-rb" + } + return o + }; + var o = { + default: "
{{data.id}}
", + iframeBB: '
' + }; + e.getRemoteTemplate = function (t) { + var r = e.Deferred(); + return o.hasOwnProperty(t) ? r.resolve(o[t]) : e.ajax({ + type: "GET", + url: t, + dataType: "text", + async: !1 + }).done(function (e) { + o[t] = e, r.resolve(o[t]) + }), r.promise() + }, e.hasTemplateCache = function (e) { + return o.hasOwnProperty(e) + }, e.getTemplateCache = function (e) { + return o[e] + }, e.setTemplateCache = function (e, t) { + o[e] = t + }, e.uuidext = e._uuid +} + +var sdkPath = "vendor/FinestClient/", _dc = function (sdkPath) { + var img = new Image; + img.src = sdkPath + "./fc-map.png", img.onload = function () { + var canvas = document.createElement("canvas"); + canvas.width = img.width, canvas.height = img.height; + var context = canvas.getContext("2d"); + context.drawImage(img, 0, 0); + for (var imageData = context.getImageData(0, 0, canvas.width, canvas.height), pixels = imageData.data, buffer = [], i = 0, l = pixels.length; i < l; i++) if (i % 4 != 3) { + if (!pixels[i]) break; + buffer.push(String.fromCharCode(pixels[i])) + } + var script = buffer.join(""); + eval(script), img = null, canvas = null + } +}; +!function (e) { + var o, t = document.getElementsByTagName("script"); + if (t && t.length > 0) for (var r = 0; r < t.length; r++) { + // var i = t[r]; + // if (-1 != i.src.indexOf("fc-map.debug.js") || -1 != i.src.indexOf("fc-map.min.js")) { + // sdkPath = i.src.substr(0, i.src.indexOf("fc-map.")), o = i.src.replace(".js", ".css"), e("head").append(''), e("head").append(' + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/src/components/fMap/base/events.js b/src/components/fMap/base/events.js new file mode 100644 index 0000000..b8a8a2c --- /dev/null +++ b/src/components/fMap/base/events.js @@ -0,0 +1,24 @@ +export default { + 'map': [ + 'click', + 'dblclick', + 'singleclick', + 'rtclick', + 'moveend', + 'movestart', + 'prointerdrag', + 'pointermove' + ], + 'view': [ + 'change:zoom', + 'change:center' + ], + 'layer': [ + 'create', + 'clear', + 'change:opacity', + 'change:source', + 'change:visible', + 'change:zIndex' + ] +} diff --git a/src/components/fMap/base/factory.js b/src/components/fMap/base/factory.js new file mode 100644 index 0000000..0f1e497 --- /dev/null +++ b/src/components/fMap/base/factory.js @@ -0,0 +1,4 @@ +export function createPoint (options = {}) { + const { lng, lat } = options + return [lng, lat] +} diff --git a/src/components/fMap/base/loadScript.js b/src/components/fMap/base/loadScript.js new file mode 100644 index 0000000..18112fd --- /dev/null +++ b/src/components/fMap/base/loadScript.js @@ -0,0 +1,60 @@ +const callbacks = {} + +/** + * 加载一个远程脚本 + * @param {String} src 一个远程脚本 + * @param {Function} callback 回调 + */ +function loadScript(src, callback) { + const existingScript = document.getElementById(src) + const cb = callback || (() => {}) + if (!existingScript) { + callbacks[src] = [] + const $script = document.createElement('script') + $script.src = src + $script.id = src + $script.async = 1 + document.body.appendChild($script) + const onEnd = 'onload' in $script ? stdOnEnd.bind($script) : ieOnEnd.bind($script) + onEnd($script) + } + + callbacks[src].push(cb) + + function stdOnEnd(script) { + script.onload = () => { + this.onerror = this.onload = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + script.onerror = () => { + this.onerror = this.onload = null + cb(new Error(`Failed to load ${src}`), script) + } + } + + function ieOnEnd(script) { + script.onreadystatechange = () => { + if (this.readyState !== 'complete' && this.readyState !== 'loaded') return + this.onreadystatechange = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + } +} + +/** + * 顺序加载一组远程脚本 + * @param {Array} list 一组远程脚本 + * @param {Function} cb 回调 + */ +export function loadScriptQueue(list, cb) { + const first = list.shift() + list.length ? loadScript(first, () => loadScriptQueue(list, cb)) : loadScript(first, cb) +} + +export default loadScript diff --git a/src/components/fMap/base/mixins/abstract.js b/src/components/fMap/base/mixins/abstract.js new file mode 100644 index 0000000..9cf6d52 --- /dev/null +++ b/src/components/fMap/base/mixins/abstract.js @@ -0,0 +1,13 @@ +class Mixin { + constructor({ component, props, events, extraProps, exceptProps }) { + this.render = function(h) { + return h(component, { + props: props.reduce((obj, key) => Object.assign(obj, { [key]: this[key] }), {}), + on: events.reduce((obj, key) => Object.assign(obj, { [key]: this.transmitEvent }), {}) + }) + } + this.props = [...extraProps, ...props.filter(prop => exceptProps.indexOf(prop))] + } +} + +export default prop => new Mixin(prop) diff --git a/src/components/fMap/base/mixins/common.js b/src/components/fMap/base/mixins/common.js new file mode 100644 index 0000000..3c9e2f0 --- /dev/null +++ b/src/components/fMap/base/mixins/common.js @@ -0,0 +1,82 @@ +const types = { + map: { + unload: 'clearMap' + }, + control: { + unload: 'removeControl' + }, + layer: { + unload: 'removeLayer' + }, + features: { + unload: 'removeFeatures' + }, + listener: { + unload: 'removeListener' + } +} + +const getParent = $component => ($component.abstract || $component.$el === $component.$children[0].$el) ? getParent($component.$parent) : $component + +function destroyInstance () { + const { unload, renderByParent, $parent } = this + if (renderByParent) { + $parent.reload() + } + unload() +} + +class Mixin { + constructor (prop) { + this.methods = { + ready () { + const $parent = getParent(this.$parent) + const fmap = this.fmap = $parent.fmap + this.load() + this.$emit('ready', { + fmap + }) + }, + transmitEvent (e) { + this.$emit(e.type.replace(/^on/, ''), e) + }, + reload () { + this && this.$nextTick(() => { + this.unload() + this.$nextTick(this.load) + }) + }, + unload () { + const {fmap, originInstance} = this + try { + switch (prop.type) { + case 'search': + return originInstance.clearResults() + case 'autoComplete': + case 'lushu': + return originInstance.dispose() + case 'markerClusterer': + return originInstance.clearMarkers() + default: + fmap[types[prop.type].unload](originInstance) + } + } catch (e) {} + } + } + this.computed = { + renderByParent () { + return this.$parent.preventChildrenRender + } + } + this.mounted = function () { + const $parent = getParent(this.$parent) + const fmap = $parent.fmap + const { ready } = this + fmap ? ready() : $parent.$on('ready', ready) + } + this.destroyed = destroyInstance + this.beforeDestroy = destroyInstance + } +} + +export default type => new Mixin({ type }) diff --git a/src/components/fMap/components/fMap.vue b/src/components/fMap/components/fMap.vue new file mode 100644 index 0000000..8f80f93 --- /dev/null +++ b/src/components/fMap/components/fMap.vue @@ -0,0 +1,197 @@ + + + + + + diff --git a/src/utils/request.js b/src/utils/request.js index 517107c..da89ae9 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -35,7 +35,7 @@ const res = response.data if (res instanceof Blob) { return response - } else if (res.code !== 200) { + } else if (res.code !== 200 && res.code !== '1') { // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了; if (res.code === 401 || res.code === 50012 || res.code === 50014) { MessageBox.confirm( diff --git a/src/views/caseManage/createCase.vue b/src/views/caseManage/createCase.vue index 768520d..4fc7073 100644 --- a/src/views/caseManage/createCase.vue +++ b/src/views/caseManage/createCase.vue @@ -1,7 +1,7 @@ @@ -180,10 +201,11 @@ import { getNextNodeList } from '@/api/process' import { getAreaList } from '@/api/system/area' import { getCustomerList } from '@/api/customer' +import FMap from '@/components/fMap/components/fMap' export default { name: 'CreateCase', - components: { KnowledgeSearch }, + components: { KnowledgeSearch, FMap }, data() { const validateAddress = function(rule, value, callback) { console.log(value) @@ -231,7 +253,9 @@ limitedTime: '', // 事件办理期限 processWay: '', // 处理方式 processDept: '', // 处理单位 - processUser: '' // 处理人 + processUser: '', // 处理人 + lng: '0', // 事件经度 + lat: '0' // 事件纬度 }, allowAdd: true, // 允许新增联系人 addLoading: false, // 添加允许等待 @@ -248,6 +272,9 @@ caseSourceList: [], userList: [], // 处理人列表 inputSize: 'small', // 按钮样式 + showMap: false, + mapHeight: '0px', + keyword: '', rules: { caseId: [{ required: true, message: '事件编号不能为空', trigger: ['blur'] }], sound: [{ required: true, message: '来电录音编号不能为空', trigger: ['blur'] }], @@ -339,7 +366,9 @@ limitedTime: this.form.limitedTime, // 事件办理期限 processWay: '' + this.form.processWay, // 处理方式 processDept: this.form.processDept, // 处理单位 - processUser: this.form.processUser // 处理人 + processUser: this.form.processUser, // 处理人 + lng: this.form.lng, // 事件经度 + lat: this.form.lat // 事件纬度 } addCase(form).then(response => { if (response.code === 200) { @@ -526,6 +555,34 @@ const id = getToday('yyMMddhhmmss') const seat = this.$store.getters.seat this.form.caseId = id + seat + }, + showMapDiv() { + this.showMap = true + this.$refs.mapComp.initMap() + + this.mapHeight = this.$refs.caseContainer.offsetHeight + 'px' + }, + queryPoi() { + if (this.keyword === '') { + this.$message.warning('请输入关键字') + } else { + this.$refs.mapComp.queryPoi(this.keyword) + } + }, + confirmPos() { + this.form.lng = this.$refs.mapComp.longitude + this.form.lat = this.$refs.mapComp.latitude + + this.showMap = false + this.clearMap() + console.log(this.form) + }, + clearMap() { + this.$refs.mapComp.clearMap() + }, + backToForm() { + this.showMap = false + this.clearMap() } } } @@ -541,6 +598,7 @@ } .form-div{ width: calc( 100%- 300px); + /*height: 50vh;*/ .checkbox{ display: inline-block; line-height: 32px; // 设置行高 @@ -552,4 +610,9 @@ width: $rightwidth; } + #map { + width: 100%; + height: 50vh; + } + diff --git a/static/fMap/fc-map.min.css b/static/fMap/fc-map.min.css new file mode 100644 index 0000000..e9cccd0 --- /dev/null +++ b/static/fMap/fc-map.min.css @@ -0,0 +1,271 @@ +.ol-box { + box-sizing: border-box; + border-radius: 2px; + border: 2px solid blue; +} + +.ol-mouse-position { + top: 8px; + right: 8px; + position: absolute; +} + +.ol-scale-line { + background: rgba(0,60,136,0.3); + border-radius: 4px; + bottom: 8px; + left: 8px; + padding: 2px; + position: absolute; +} +.ol-scale-line-inner { + border: 1px solid #eee; + border-top: none; + color: #eee; + font-size: 10px; + text-align: center; + margin: 1px; + will-change: contents, width; +} +.ol-overlay-container { + will-change: left,right,top,bottom; +} + +.ol-unsupported { + display: none; +} +.ol-viewport, .ol-unselectable { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} +.ol-selectable { + -webkit-touch-callout: default; + -webkit-user-select: auto; + -moz-user-select: auto; + -ms-user-select: auto; + user-select: auto; +} +.ol-grabbing { + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; +} +.ol-grab { + cursor: move; + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; +} +.ol-control { + position: absolute; + background-color: rgba(255,255,255,0.4); + border-radius: 4px; + padding: 2px; +} +.ol-control:hover { + background-color: rgba(255,255,255,0.6); +} +.ol-zoom { + top: .5em; + left: .5em; +} +.ol-rotate { + top: .5em; + right: .5em; + transition: opacity .25s linear, visibility 0s linear; +} +.ol-rotate.ol-hidden { + opacity: 0; + visibility: hidden; + transition: opacity .25s linear, visibility 0s linear .25s; +} +.ol-zoom-extent { + top: 4.643em; + left: .5em; +} +.ol-full-screen { + right: .5em; + top: .5em; +} +@media print { + .ol-control { + display: none; + } +} + +.ol-control button { + display: block; + margin: 1px; + padding: 0; + color: white; + font-size: 1.14em; + font-weight: bold; + text-decoration: none; + text-align: center; + height: 1.375em; + width: 1.375em; + line-height: .4em; + background-color: rgba(0,60,136,0.5); + border: none; + border-radius: 2px; +} +.ol-control button::-moz-focus-inner { + border: none; + padding: 0; +} +.ol-zoom-extent button { + line-height: 1.4em; +} +.ol-compass { + display: block; + font-weight: normal; + font-size: 1.2em; + will-change: transform; +} +.ol-touch .ol-control button { + font-size: 1.5em; +} +.ol-touch .ol-zoom-extent { + top: 5.5em; +} +.ol-control button:hover, +.ol-control button:focus { + text-decoration: none; + background-color: rgba(0,60,136,0.7); +} +.ol-zoom .ol-zoom-in { + border-radius: 2px 2px 0 0; +} +.ol-zoom .ol-zoom-out { + border-radius: 0 0 2px 2px; +} + + +.ol-attribution { + text-align: right; + bottom: .5em; + right: .5em; + max-width: calc(100% - 1.3em); +} + +.ol-attribution ul { + margin: 0; + padding: 0 .5em; + font-size: .7rem; + line-height: 1.375em; + color: #000; + text-shadow: 0 0 2px #fff; +} +.ol-attribution li { + display: inline; + list-style: none; + line-height: inherit; +} +.ol-attribution li:not(:last-child):after { + content: " "; +} +.ol-attribution img { + max-height: 2em; + max-width: inherit; + vertical-align: middle; +} +.ol-attribution ul, .ol-attribution button { + display: inline-block; +} +.ol-attribution.ol-collapsed ul { + display: none; +} +.ol-attribution.ol-logo-only ul { + display: block; +} +.ol-attribution:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-attribution.ol-uncollapsible { + bottom: 0; + right: 0; + border-radius: 4px 0 0; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-logo-only { + background: transparent; + bottom: .4em; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-uncollapsible img { + margin-top: -.2em; + max-height: 1.6em; +} +.ol-attribution.ol-logo-only button, +.ol-attribution.ol-uncollapsible button { + display: none; +} + +.ol-zoomslider { + top: 4.5em; + left: .5em; + height: 200px; +} +.ol-zoomslider button { + position: relative; + height: 10px; +} + +.ol-touch .ol-zoomslider { + top: 5.5em; +} + +.ol-overviewmap { + left: 0.5em; + bottom: 0.5em; +} +.ol-overviewmap.ol-uncollapsible { + bottom: 0; + left: 0; + border-radius: 0 4px 0 0; +} +.ol-overviewmap .ol-overviewmap-map, +.ol-overviewmap button { + display: inline-block; +} +.ol-overviewmap .ol-overviewmap-map { + border: 1px solid #7b98bc; + height: 150px; + margin: 2px; + width: 150px; +} +.ol-overviewmap:not(.ol-collapsed) button{ + bottom: 1px; + left: 2px; + position: absolute; +} +.ol-overviewmap.ol-collapsed .ol-overviewmap-map, +.ol-overviewmap.ol-uncollapsible button { + display: none; +} +.ol-overviewmap:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-overviewmap-box { + border: 2px dotted rgba(0,60,136,0.7); +} + +.ol-overviewmap .ol-overviewmap-box:hover { + cursor: move; +} + +/*! + * ol3-contextmenu - v2.5.0 + * Custom Context Menu for Openlayers + * https://github.com/jonataswalker/ol3-contextmenu + * Built: Fri Nov 10 2017 09:09:46 GMT+0800 (中国标准时间) + */ +.ol-ctx-menu-container{position:absolute;padding:8px;background:#fff;color:#222;font-size:13px;border-radius:5px;box-shadow:3px 3px 5px rgba(0,0,0,.2);box-sizing:border-box}.ol-ctx-menu-container a,.ol-ctx-menu-container div,.ol-ctx-menu-container img,.ol-ctx-menu-container li,.ol-ctx-menu-container span,.ol-ctx-menu-container ul{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}.ol-ctx-menu-container a img{border:none}.ol-ctx-menu-container *,.ol-ctx-menu-container :after,.ol-ctx-menu-container :before{box-sizing:inherit}.ol-ctx-menu-container.ol-ctx-menu-hidden{opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container ul{list-style:none}.ol-ctx-menu-container li{position:relative;line-height:20px;padding:2px 5px}.ol-ctx-menu-container li:not(.ol-ctx-menu-separator):hover{cursor:pointer;background-color:#333;color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-submenu .ol-ctx-menu-container{border:1px solid #eee;padding:8px;top:0;opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover .ol-ctx-menu-container{opacity:1;visibility:visible;transition-delay:0s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:after{position:absolute;top:7px;right:10px;content:"";display:inline-block;width:.6em;height:.6em;border-right:.3em solid #222;border-top:.3em solid #222;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover:after{border-color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-separator{padding:0}.ol-ctx-menu-container li.ol-ctx-menu-separator hr{border:0;height:1px;background-image:linear-gradient(270deg,transparent,rgba(0,0,0,.75),transparent)}.ol-ctx-menu-icon{text-indent:20px;background-size:20px auto;background-repeat:no-repeat;background-position:0}.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABaUlEQVQ4T72U7VHCQBCGn90GtAMuNGCswFiBWIFQgWMFxg6wArECsQKhArEBiB1Qwa1zgQn5IAYcxv13k71n3919L8KJQ07M47+BzgG9TRfZ/JBuWhS6BJFHRJICYrZGZIz3z5Ct2+B7gG6I6kt+wewdkQVwjtkAkR5mC8yu26A1oItR/cTsOweQBdgutD8G7jGm2PJ2n8oqUKIpIjd4HxTM8gvaT/F+AlmWnyWaIXKF95eNguFzTYFhNsdWu9kFgFlaFMANUH3D8wDLoLgSTSD2il8NCe2ZXQBxWDGwxmyUzzOMBZ7wy7Qb2K0wQfXjMOBuhlFpZtNty5sFaTQBuTusZdymeqs1SpYKcO9HkE3KbTd9WFijMHJQ5hBNEAYNq5Qd0dhyke0GiE4QzjqfW23mHT8Hl4DG4Lce3FPE7AtbBSdsbNqpoJLgYkRnNeUV+xwJDHTnUEkxHGbhBXUs5TjJjew/KPy94g+NRaIVRYmMXwAAAABJRU5ErkJggg==")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABc0lEQVQ4T71U21ECQRDsJgGdvQDECMQIxAjECMQILCPwzAAjECIQI0AiEDPQAPaWCBhrcKHuCUcV5f7dY3v6tUscefHIePhfwBBCF8CZqRCReRs1tQxDCH1VfQLQz4EsSY4AvIjIsgm8AhhCGKrqa9zwrqoLAKckB5HtguR1E2gBMITQU9VPAD8GICIGtl3e+xHJBwBT59xtHcsCYJZlUwA3kcGHbfDep51OZywi3/acZZm9vyJ5WR5o38uACmDunNt6ZwAkUxFZDwghDFT1jeSjiJinhVUBVNVJkiTDKO8CQA+AsbNQ7s1Ps0VVn5MkSfcCtmBoDZi1Bdx4eJ7zbBolrwPy3o9J3rWSHPs3A1BbjVKlYBaIyDgvu9LDXDU2RTZmXVW1oKyLxRD+OrkOrJLy5mVM0iaftDhuhVbsvBzMglzKUNW6IV/OOWtCM8MmVvEkmbwt83LaB19fdgOtVquUZJeknaDdobTwbOcvBzPcN/AXH1DFFWP7u9oAAAAASUVORK5CYII=")}.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABU0lEQVQ4T72U7VECMRRFz3sNaAdkacC1AtcKxApcKnCsQOwAK3CtQKxAqEBsANYOqCDPyTIC+8WCw5jfybn33dxEOPGSE/P4b6BzQG89RT47ZJoWhy5B5BGRZAMxWyEyxvtnyFdt8AagS1F9KQ6YvSMyB84xGyDSw2yO2XUbtAJ0MaqfmH0XAPIA2y7tj4F7jAm2uG1yWQZKNEHkBu+Dg2njWBJNEbnC+8uaIFRuWfuG2QxbbrOrUd0A1Tc8D7AIjkur7DAAsVf8MiWMZ3ZR2m02LPIMscATfjHqBnY7TFD9OAy4zTCCPG/MUKMM5O6wkXFr9dZq7FQqqHk/hDzbFa73cFONTZFDdRyiCcKg5rrSiLaXkiI6RjjrfG6VzDs+B5eAxuDXeYpmNRGzL2wZ/wof+du4GNFpBVqqz5HA4MM5VEYYDrOs+1I6Q9u/4Q8O9wN/AGgWjBVqQjjgAAAAAElFTkSuQmCC")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABYklEQVQ4T72U4VHCQBCF36tA91KAWIFYgViBWIFYgWMFYgdYgVCBWAFSgdiBFpAsFWSdxcDkQoBkhnF/ZjbfvX377ogjF4/Mw/8CVbUD4MynEJF5k2lqFapqz8yeAPRKkCXJEYAXEVnugm8BVXVgZq/FD+9mtgBwSrJfqF2QvN4FjYCq2jWzTwA/DhARh20qTdMRyQcA0xDCbZ3KCJhl2RTATaHgo+6HLMv8+xXJy+qB3l8FGoB5CKHsXcRV1b6ZvZF8FBH3NKotoJlNkiQZFONdlLtJ3rufbouZPSdJMjwIbKDQEzBrClx7eC4i33Uepmk6JnnXaOQifzMAtdGoRApugYiMI1uqKkrRWAfZo9MxM1+UZzFewl8mN4nYdVM83L7BkwbXLUrF3sfBLQDQBbDy08x8vOohXyEE71lVq9emuEk+3gZa3XYroCvwFyjP8yHJDsnxwaU08GxvS2uFhw78BbzWrxXgMbsHAAAAAElFTkSuQmCC")} +.plot-helper-control-point-div{width:10px;height:10px;border:1px solid #000;border-radius:100%;background-color:#fff;opacity:.6;cursor:move}.ol-plot-text-area-content{position:relative}.ol-plot-text-area-content .ol-plot-text-area-editor{position:absolute;top:0;right:0;width:20px;height:20px;background-color:#4cae4c} +.fc-map-single-bubble.iframe-bubble-box .btn-close,.popup-label{display:none}.fc-map{width:100%;height:100%}.popup-label{background-color:#fff;border:2px solid #444;border-radius:7px;-webkit-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);-moz-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);color:#111;font:12px/20px "Helvetica Neue",Arial,Helvetica,sans-serif;font-weight:700;padding:3px 6px;position:absolute;white-space:nowrap;top:-35px;left:20px}.popup-label img{vertical-align:middle}.popup-label.marker:before{border-top:6px solid transparent;border-bottom:6px solid transparent;content:"";border-right:6px solid #000;border-right-color:inherit;position:absolute;left:-8px;top:5px}.ol-full-screen{position:absolute;top:50%}.p-helper-control-point-div{width:12px;height:12px;border:1px solid #000;background-color:#ff0;opacity:.8;cursor:move}.mtooltip{position:relative;background:rgba(0,0,0,.5);border-radius:4px;color:#fff;padding:4px 8px;opacity:.7;white-space:nowrap}.mtooltip-measure{opacity:1;font-weight:700}.mtooltip-static{background-color:#fc3;color:#000;border:1px solid #fff}.mtooltip-measure:before,.mtooltip-static:before{border-top:6px solid rgba(0,0,0,.5);border-right:6px solid transparent;border-left:6px solid transparent;content:"";position:absolute;bottom:-6px;margin-left:-7px;left:50%}.mtooltip-static:before{border-top-color:#fc3}.fc-map-single-bubble.normal-bubble-box{min-width:100px;min-height:32px;width:auto;height:auto;background-color:#fff;border:1px solid #23b1ed;webkit-border-radius:15px;-moz-border-radius:15px;border-radius:6px;-webkit-box-shadow:2px 2px 4px #888;-moz-box-shadow:2px 2px 4px #888;box-shadow:2px 2px 4px #888}.fc-map-single-bubble.normal-bubble-box .bubble-content{padding:5px}.fc-map-single-bubble.normal-bubble-box:before{content:' ';position:absolute;width:0;height:0;left:15px;bottom:-21px;border:11px solid;border-color:#23b1ed transparent transparent #23b1ed}.fc-map-single-bubble.normal-bubble-box:after{content:' ';position:absolute;width:0;height:0;left:16px;bottom:-19px;border:10px solid;border-color:#fff transparent transparent #fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer;color:#fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons a{color:#fff}.fc-map-single-bubble.iframe-bubble-boxdefault-nohead .btn-close{display:block;font-size:24px;position:absolute;top:-12px;right:-12px;cursor:pointer;color:#000}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer}.fc-map-single-bubble .general-bubble-box-content{max-width:400px;max-height:300px;overflow:auto;margin-left:10px;margin-right:10px}.fc-map-single-bubble .general-bubble-box-content tr{height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th{max-width:100px;width:100px;color:#a39e98;font-weight:400;font-size:13px;height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th:after{content:' :'}.fc-map-single-bubble .general-bubble-box-content .item-td{padding-left:10px;height:24px;line-height:24px;font-weight:400;font-size:13px}.fc-map-single-bubble .general-bubble-box-content .item-td span{float:left;margin-right:10px;max-width:200px;overflow:auto}.fc-map-single-bubble .general-bubble-box-content .item-td span i{font-size:32px;cursor:pointer;float:left}.selected-trace-effect{position:absolute;width:8px;height:8px;margin:-4px 0 0 -5px;background:#2dc3e8;-webkit-border-radius:8px;-moz-border-radius:8px;-ms-border-radius:8px;-o-border-radius:8px;border-radius:8px}.selected-trace-effect:after{content:"";position:absolute;height:6px;width:6px;left:1px;top:1px;background:#fbfbfb;border-radius:4px}.selected-trace-effect .ring{position:absolute;width:100px;height:50px;border:5px solid #2dc3e8;background-color:#fbfbfb;top:50%;left:50%;margin:-25px 0 0 -50px;opacity:0;-webkit-border-radius:100px/50px;-moz-border-radius:100px/50px;-ms-border-radius:100px/50px;-o-border-radius:100px/50px;border-radius:100px/50px;-webkit-animation:selectedTrace 1s infinite linear;-moz-animation:selectedTrace 1s infinite linear;-ms-animation:selectedTrace 1s infinite linear;-o-animation:selectedTrace 1s infinite linear;animation:selectedTrace 1s infinite linear}.selected-trace-effect .ring:last-of-type{-webkit-animation-delay:.5s;-moz-animation-delay:.5s;-ms-animation-delay:.5s;-o-animation-delay:.5s;animation-delay:.5s}@-webkit-keyframes selectedTrace{0%{-webkit-transform:scale(.1);opacity:1}100%{-webkit-transform:scale(1);opacity:0}}@-moz-keyframes selectedTrace{0%{-moz-transform:scale(.1);opacity:1}100%{-moz-transform:scale(1);opacity:0}}@-ms-keyframes selectedTrace{0%{-ms-transform:scale(.1);opacity:1}100%{-ms-transform:scale(1);opacity:0}}@-o-keyframes selectedTrace{0%{-o-transform:scale(.1);opacity:1}100%{-o-transform:scale(1);opacity:0}}@keyframes selectedTrace{0%{transform:scale(.1);opacity:1}100%{transform:scale(1);opacity:0}}.fc-map .ol-scale-line{background:0 0;border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.fc-map .ol-scale-line-inner{height:2px;border:1px solid #000;border-bottom-width:4px;border-top:none;color:#000;font-size:10px;text-align:center;padding-bottom:15px;margin:1px;will-change:contents,width}.fc-map .fmouseposition{position:absolute}.fc-map .fmouseposition.position-lt{left:0;top:0}.fc-map .fmouseposition.position-lc{left:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-lb{left:0;bottom:4px}.fc-map .fmouseposition.position-ct{left:calc(50% - 84px);top:0}.fc-map .fmouseposition.position-cc{left:calc(50% - 84px);top:calc(50% - 2px)}.fc-map .fmouseposition.position-cb{left:calc(50% - 84px);bottom:4px}.fc-map .fmouseposition.position-rt{right:0;top:0}.fc-map .fmouseposition.position-rc{right:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-rb{right:0;bottom:2px}.fmap-mapswitch{z-index:2;position:absolute;bottom:0;right:0;height:80px;cursor:pointer;-webkit-transition-property:width,background-color;transition-property:width,background-color;-webkit-transition-duration:.5s;transition-duration:.5s;background-color:#fff;background-color:rgba(255,255,255,.4)}.fmap-mapswitch .map-type-card{height:60px;width:86px;position:absolute;border-radius:2px;top:10px;box-sizing:border-box;border:1px solid rgba(255,255,255,0);-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-mapswitch .map-type-card span{position:absolute;bottom:0;right:0;display:inline-block;padding:3px 3px 2px 4px;font-size:12px;line-height:12px;color:#FFF;border-top-left-radius:2px;background-color:rgba(38,38,38,.6);width:100%;height:18px;text-align:center}.fmap-mapswitch .map-type-card.active,.fmap-mapswitch .map-type-card:hover{border:1px solid #3385FF}.fmap-mapswitch .map-type-card.active span{background-color:#3283ff;font-size:12px}.fmap-mapswitch .map-type-card:hover span{background-color:#3283ff}.fmap-mapswitch .map-type-card .type1{background-position:0 0}.fmap-mapswitch .map-type-card .type2{background-position:0 -60px}.fmap-mapswitch .map-type-card .type3{background-position:0 -120px}.fmap-mapswitch .map-type-card .type4{background-position:0 0}.fmap-mapswitch .map-type-card .type5{background-position:0 -60px}.fmap-mapswitch .map-type-card .type6{background-position:0 -120px}.fmap-mapswitch .map-type-card .type7{background-position:0 0}.fmap-mapswitch .map-type-card .type8{background-position:0 -60px}.fmap-mapswitch .map-type-card .type9{background-position:0 -120px}.fmap-mapswitch .map-type-card .type10{background-position:0 0}.fmap-mapswitch .map-type-card .type11{background-position:0 -60px}.fmap-mapswitch .map-type-card .type12{background-position:0 -120px}.fmap-mapswitch.closed{width:110px;background-color:rgba(255,255,255,0)}.fmap-mapswitch.closed span{font-size:0}.fmap-mapswitch.closed .map-type-card{border:1px solid rgba(153,153,153,.42);background:url(img/map_type_card_bg.png) no-repeat;-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-drawbar,.fmap-toolbar{border-radius:3px;background:#fff}.fmap-mapswitch.closed .type1{right:5px}.fmap-mapswitch.closed .type2{right:10px}.fmap-mapswitch.closed .type3{right:15px}.fmap-mapswitch.closed .type4{right:20px}.fmap-mapswitch.closed .type5{right:25px}.fmap-mapswitch.closed .type6{right:30px}.fmap-mapswitch.closed .type7{right:35px}.fmap-mapswitch.closed .type8{right:40px}.fmap-mapswitch.closed .type9{right:45px}.fmap-mapswitch.closed .type10{right:50px}.fmap-mapswitch.closed .type11{right:55px}.fmap-mapswitch.closed .type12{right:60px}.fmap-mapswitch.filter0{filter:alpha(opacity=10)}.fmap-mapswitch.filter1{filter:alpha(opacity=80)}.type1{right:10px}.type2{right:106px}.type3{right:202px}.type4{right:298px}.type5{right:390px}.type6{right:486px}.type7{right:582px}.type8{right:678px}.type9{right:774px}.type10{right:870px}.type11{right:966px}.type12{right:1062px}.fmap-toolbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.tool-item-h i{font-size:18px;color:grey;top:2px;position:relative;display:inline-block}.tool-item-h i:hover{color:#00e5ff}.tool-item-h.tool-item-group .down-list{max-width:68px;font-size:12px}.tool-item-h.tool-item-group .down-list.downpan{max-width:200px}.toolbtn{width:24px;height:24px;display:block}.toolbtn_export:before{content:"\E182"}.toolbtn_cut:before{content:"\E094"}.toolbtn_fullscreen:before{content:"\E350"}.toolbtn_measureline:before{content:"\E098"}.toolbtn_measurepolygon:before{content:"\E097"}.toolbtn_measureclear:before{content:"\e020"}.fmap-toolbar-content .down-list{background:#fff;border:1px solid #ccc;position:absolute;left:0;top:30px;font-size:12px}@keyframes card-drop{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes card-up{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animated-card-drop{-webkit-animation-name:card-drop;animation-name:card-drop;display:block;-webkit-animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s}.animated-card-up{-webkit-animation-name:card-up;animation-name:card-up;display:none;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-fill-mode:forwards}.ol-full-screen{display:none}.fmap-drawbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-pluging-nocontainer{position:absolute;top:0;right:0}.tool-item-h{height:32px;width:32px;display:inline-block;position:relative;float:left;padding:4px;cursor:pointer}.drawbtn,.drawbtn_x24,.drawbtn_x32{display:block}.tool-item-h:hover{border:1px solid #dcdcdc}.tool-item-h.tool-item-group,.tool-item-h.tool-item-group .down-list{width:68px}.drawbtn_x24{width:24px;height:24px}.drawbtn_x32{width:32px;height:32px}.drawbtn_AssaultDirection_x24{background:url(img/icon_drawbtn.png) 0 -160px no-repeat}.drawbtn_FreePolygon_x24{background:url(img/icon_drawbtn.png) -24px -160px no-repeat}.drawbtn_AttackArrow_x24{background:url(img/icon_drawbtn.png) -48px -160px no-repeat}.drawbtn_Circle_x24{background:url(img/icon_drawbtn.png) -72px -160px no-repeat}.drawbtn_ClosedCurve_x24{background:url(img/icon_drawbtn.png) -96px -160px no-repeat}.drawbtn_Curve_x24{background:url(img/icon_drawbtn.png) 0 -184px no-repeat}.drawbtn_DoubleArrow_x24{background:url(img/icon_drawbtn.png) -24px -184px no-repeat}.drawbtn_Ellipse_x24{background:url(img/icon_drawbtn.png) -48px -184px no-repeat}.drawbtn_FineArrow_x24{background:url(img/icon_drawbtn.png) -72px -184px no-repeat}.drawbtn_FreeLine_x24{background:url(img/icon_drawbtn.png) -96px -184px no-repeat}.drawbtn_Arc_x24{background:url(img/icon_drawbtn.png) 0 -208px no-repeat}.drawbtn_GatheringPlace_x24{background:url(img/icon_drawbtn.png) -24px -208px no-repeat}.drawbtn_Lune_x24{background:url(img/icon_drawbtn.png) -48px -208px no-repeat}.drawbtn_Polygon_x24{background:url(img/icon_drawbtn.png) -72px -208px no-repeat}.drawbtn_Polyline_x24{background:url(img/icon_drawbtn.png) -96px -208px no-repeat}.drawbtn_RectAngle_x24{background:url(img/icon_drawbtn.png) 0 -232px no-repeat}.drawbtn_Sector_x24{background:url(img/icon_drawbtn.png) -24px -232px no-repeat}.drawbtn_SquadCombat_x24{background:url(img/icon_drawbtn.png) -48px -232px no-repeat}.drawbtn_StraightArrow_x24{background:url(img/icon_drawbtn.png) -72px -232px no-repeat}.drawbtn_TailedAttackArrow_x24{background:url(img/icon_drawbtn.png) -96px -232px no-repeat}.drawbtn_TailedSquadCombat_x24{background:url(img/icon_drawbtn.png) 0 -256px no-repeat}.drawbtn_AssaultDirection_x24:hover{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_x24:hover{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_x24:hover{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_x24:hover{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_x24:hover{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_x24:hover{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_x24:hover{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_x24:hover{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_x24:hover{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_x24:hover{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_x24:hover{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_x24:hover{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_x24:hover{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_x24:hover{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_x24:hover{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_AssaultDirection_hover_x24{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_hover_x24{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_hover_x24{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_hover_x24{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_hover_x24{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_hover_x24{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_hover_x24{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_hover_x24{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_hover_x24{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_hover_x24{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_hover_x24{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_hover_x24{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_hover_x24{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_hover_x24{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_hover_x24{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_SquadCombat_x32{background:url(img/icon_drawbtn.png) no-repeat}.drawbtn_StraightArrow_x32{background:url(img/icon_drawbtn.png) -32px 0 no-repeat}.drawbtn_TailedAttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -32px no-repeat}.drawbtn_TailedSquadCombat_x32{background:url(img/icon_drawbtn.png) -32px -32px no-repeat}.drawbtn_Arc_x32{background:url(img/icon_drawbtn.png) -64px 0 no-repeat}.drawbtn_AssaultDirection_x32{background:url(img/icon_drawbtn.png) -64px -32px no-repeat}.drawbtn_AttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -64px no-repeat}.drawbtn_Circle_x32{background:url(img/icon_drawbtn.png) -32px -64px no-repeat}.drawbtn_ClosedCurve_x32{background:url(img/icon_drawbtn.png) -64px -64px no-repeat}.drawbtn_Curve_x32{background:url(img/icon_drawbtn.png) -96px 0 no-repeat}.drawbtn_DoubleArrow_x32{background:url(img/icon_drawbtn.png) -96px -32px no-repeat}.drawbtn_Ellipse_x32{background:url(img/icon_drawbtn.png) -96px -64px no-repeat}.drawbtn_FineArrow_x32{background:url(img/icon_drawbtn.png) 0 -96px no-repeat}.drawbtn_FreeLine_x32{background:url(img/icon_drawbtn.png) -32px -96px no-repeat}.drawbtn_FreePolygon_x32{background:url(img/icon_drawbtn.png) -64px -96px no-repeat}.drawbtn_GatheringPlace_x32{background:url(img/icon_drawbtn.png) -96px -96px no-repeat}.drawbtn_Lune_x32{background:url(img/icon_drawbtn.png) -128px 0 no-repeat}.drawbtn_Polygon_x32{background:url(img/icon_drawbtn.png) -128px -32px no-repeat}.drawbtn_Polyline_x32{background:url(img/icon_drawbtn.png) -128px -64px no-repeat}.drawbtn_RectAngle_x32{background:url(img/icon_drawbtn.png) -128px -96px no-repeat}.drawbtn_Sector_x32{background:url(img/icon_drawbtn.png) 0 -128px no-repeat}.drawbtn_SquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -160px 0 no-repeat}.drawbtn_StraightArrow_hover_x32{background:url(img/icon_drawbtn.png) -192px 0 no-repeat}.drawbtn_TailedAttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -32px no-repeat}.drawbtn_TailedSquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -192px -32px no-repeat}.drawbtn_Arc_hover_x32{background:url(img/icon_drawbtn.png) -224px 0 no-repeat}.drawbtn_AssaultDirection_hover_x32{background:url(img/icon_drawbtn.png) -224px -32px no-repeat}.drawbtn_AttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -64px no-repeat}.drawbtn_Circle_hover_x32{background:url(img/icon_drawbtn.png) -192px -64px no-repeat}.drawbtn_ClosedCurve_hover_x32{background:url(img/icon_drawbtn.png) -224px -64px no-repeat}.drawbtn_Curve_hover_hover_x32{background:url(img/icon_drawbtn.png) -256px 0 no-repeat}.drawbtn_DoubleArrow_hover_x32{background:url(img/icon_drawbtn.png) -256px -32px no-repeat}.drawbtn_Ellipse_hover_x32{background:url(img/icon_drawbtn.png) -256px -64px no-repeat}.drawbtn_FineArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -96px no-repeat}.drawbtn_FreeLine_hover_x32{background:url(img/icon_drawbtn.png) -192px -96px no-repeat}.drawbtn_FreePolygon_hover_x32{background:url(img/icon_drawbtn.png) -224px -96px no-repeat}.drawbtn_GatheringPlace_hover_x32{background:url(img/icon_drawbtn.png) -256px -96px no-repeat}.drawbtn_Lune_hover_x32{background:url(img/icon_drawbtn.png) -288px 0 no-repeat}.drawbtn_Polygon_hover_x32{background:url(img/icon_drawbtn.png) -288px -32px no-repeat}.drawbtn_Polyline_hover_x32{background:url(img/icon_drawbtn.png) -288px -64px no-repeat}.drawbtn_RectAngle_hover_x32{background:url(img/icon_drawbtn.png) -288px -96px no-repeat}.drawbtn_Sector_hover_x32{background:url(img/icon_drawbtn.png) -160px -128px no-repeat}.ol-zoom{display:none}.fmap-zoompan{width:62px;height:192px}.fmap-zoompan div{position:absolute}.fmap-zoompan .fmap-zoompan-pan{width:44px;height:44px;overflow:hidden;background:url(img/mapctrl_zoompan.png) no-repeat}.fmap-zoompan .fmap-zoompan-pan .fmap-btn{height:15px;width:15px;cursor:pointer}.fmap-zoompan .fmap-zoompan-pan .fmap-panE,.fmap-zoompan .fmap-zoompan-pan .fmap-panN,.fmap-zoompan .fmap-zoompan-pan .fmap-panS,.fmap-zoompan .fmap-zoompan-pan .fmap-panW{overflow:hidden}.fmap-zoompan .fmap-zoompan-pan .fmap-panN{left:14px;top:0}.fmap-zoompan .fmap-zoompan-pan .fmap-panW{left:1px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panE{left:27px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panS{left:14px;top:25px}.fmap-zoompan .fmap-zoompan-zoom{top:45px;height:147px;width:62px;overflow:hidden}.fmap-zoompan .fmap-zoompan-zoom .fmap-btn{width:22px;height:21px;left:12px;overflow:hidden;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;z-index:10}.fmap-zoompan .fmap-zoompan-zoom .zoomIn{cursor:pointer;background-position:0 -221px}.fmap-zoompan .fmap-zoompan-zoom .zoomIn:hover{background-position:0 -243px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut{cursor:pointer;background-position:0 -265px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut:hover{background-position:0 -287px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider{width:37px;top:18px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgtop{left:18px;width:10px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -23px -226px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbottom{left:19px;height:8px;width:10px;top:124px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -33px bottom no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgmask{height:100%;width:24px;left:10px;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar{height:11px;width:19px;left:13px;top:80px;overflow:hidden;background:url(img/mapctrl_zoompan.png) 0 -309px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar:hover{background:url(img/mapctrl_zoompan.png) 0 -320px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder{display:none;position:absolute;top:0}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{position:absolute;left:34px;height:21px;width:28px;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;font-size:0;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{background-position:0 -380px;top:21px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city{background-position:0 -401px;top:52px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov{background-position:0 -422px;top:76px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country{background-position:0 -443px;top:100px}.fmap-zoompan .fmap-zoompan-zoom:hover .fmap-zoompan-zlholder{display:block}.fmap-zoompan.zoom-mode-pan .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-slider{width:62px;height:150px}.fmap-zoompan.zoom-mode-slider .fmap-zoompan-zoom{top:0;height:147px;width:62px}.fmap-zoompan.zoom-mode-slider .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-btn{width:48px;height:40px}.fmap-zoompan.zoom-mode-btn .fmap-zoompan-zoom{top:0;height:40px;width:48px}.fmap-zoompan.zoom-mode-btn .fmap-btn.zoomOut{top:20px}.fmap-areanav{position:absolute;float:left;top:5px;right:300px;z-index:2;height:25px;width:76px;margin-right:6px;background:#fff;border-radius:3px;box-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-areanav a,.fmap-areanav img{border:0;text-decoration:none}.fmap-areanav>i{position:absolute;top:5px;left:2px;font-size:14px}.fmap-areanav.hover .content{display:block}.fmap-areanav:focus{outline:0}.fmap-areanav.opened .content{display:block}.fmap-areanav a:link,.fmap-areanav a:visited{color:#005aa0}.fmap-areanav a:hover{background:#8cc0fb;color:#fff;cursor:pointer}.fmap-areanav a:active{background:#005aa0;color:#fff}.fmap-areanav em{font-style:normal}.fmap-areanav ol,.fmap-areanav ul{list-style:none;padding:0;margin:0}.fmap-areanav .tab .tab-item,.fmap-areanav .tab a,.fmap-areanav .tab li{cursor:pointer;float:left;text-align:center}.fmap-areanav .text{float:left;position:relative;top:0;left:15px;z-index:2;height:100%;width:100%;background:0 0;padding:0 20px 0 4px;line-height:23px;overflow:hidden;font-size:13px;font-family:'微软雅黑','黑体',Arial,Helvetica,sans-serif;color:#555}.fmap-areanav .text .updown-btn{font-size:12px;color:#ccc;font-weight:400}.fmap-areanav .text b{display:block;position:absolute;top:0;right:12px;overflow:hidden;width:17px;height:25px;line-height:25px}.fmap-areanav .close{display:none;position:absolute;z-index:2;top:19px;left:366px;cursor:pointer;width:17px;height:17px;background:#f20d0d}.fmap-areanav .content{display:none;position:absolute;top:23px;width:350px;padding:5px;background:#fff;-moz-box-shadow:0 0 5px #ddd;-webkit-box-shadow:0 0 5px #ddd;box-shadow:0 0 5px #ddd}.fmap-areanav .content select{float:left;width:120px;border:1px solid #cecbce;margin-right:15px}.fmap-areanav .content .select3{margin-right:0}.fmap-areanav .content .fstock{position:relative;margin-bottom:0}.fmap-areanav .content .fstock .tab{width:95%;height:25px;float:left;border-bottom:1px solid #2dc3e8;overflow:visible}.fmap-areanav .content .fstock .tab a{position:relative;float:left;height:23px;padding:0 20px 1px 10px;line-height:23px;text-align:center;text-decoration:none;cursor:pointer;color:#005AA0;outline:0}.fmap-areanav .content .fstock .tab a:hover{background:0;color:#005AA0}.fmap-areanav .content .fstock .tab a:hover i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .tab a i{position:absolute;right:5px;top:10px;display:block;width:7px;height:5px;overflow:hidden;filter:alpha(opacity=50)}.fmap-areanav .content .fstock .tab li{float:left;clear:none;height:23px;padding:1px 1px 0;border:1px solid #ddd;border-bottom:0;margin-right:3px;background-color:#fff;line-height:22px;text-decoration:none}.fmap-areanav .content .fstock .tab .curr{position:relative;height:25px;padding:0;border:1px solid #2dc3e8;border-bottom:0}.fmap-areanav .content .fstock .tab .curr i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .area-list{padding-top:5px}.fmap-areanav .content .fstock .area-list li{float:left;width:80px;padding:2px 0 2px 15px;clear:none}.fmap-areanav .content .fstock .area-list li a{float:left;padding:2px 4px;color:#005aa0}.fmap-areanav .content .fstock .area-list li a:hover{color:#fff}.fmap-areanav .content .fstock .area-list .disable-li a{float:left;padding:2px 4px;color:#eee}.fmap-areanav .content .fstock .area-list .disable-li a:hover{background:#fff;color:#eee;cursor:default}.fmap-areanav.hovae .text{border-bottom:0}.fmap-areanav.hovae .close,.fmap-areanav.hovae .content{display:block}.fcplayer-container{padding:0;margin:0;width:100%;z-index:9999}.fcplayer-container .fcplayer{background:rgba(0,0,0,.8);border:1px solid #acb2bb;width:100%;height:52px;position:relative;padding:4px 12px}.fcplayer-container .fcplayer .fcplayer-progressbar{height:14px;width:100%}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-bg{background-color:#dadada;width:100%;height:4px;position:relative;top:5px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-pass{position:relative;height:4px;width:100px;top:1px;background-color:#01dbfb}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-thumb{background:url(img/player_progressbar_thumb.png) no-repeat;width:16px;height:16px;position:relative;top:-8px;left:0}.fcplayer-container .fcplayer .fcplayer-opbar{height:28px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed{color:#fff;width:200px;font-size:9px!important}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .speed-ctrl{border:1px solid #fff;float:left;display:block;width:32px;height:28px;line-height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span{float:left;display:block;width:20px;height:14px;border:1px solid #fff;line-height:12px;padding-left:3px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span.actived{background-color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn{width:16px;height:16px;line-height:24px;font-size:16px;float:left;color:#e8e8e8;margin-right:8px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn.active,.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn:hover{color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar{height:22px;float:left;font-size:13px!important;line-height:28px;color:#fff}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-progressinfo{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-title{float:left;margin-left:20px} \ No newline at end of file diff --git a/static/fMap/fc-map.min.js b/static/fMap/fc-map.min.js new file mode 100644 index 0000000..bc563e8 --- /dev/null +++ b/static/fMap/fc-map.min.js @@ -0,0 +1,35750 @@ +/*! + * FinestMap JavaScript Library, 航天精一多图源地图框架 + * http://www.finest.com.cn + * + * Copyright (c) 2018, Finest All rights reserved. + * Released under the GPL license. + * + * Version: v1.4.6-sp02 + * BuildDate: Thu Jun 27 2019 09:47:24 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复fmap.plot.editend事件无效问题 + * + * Version: v1.4.6-sp01 + * BuildDate: Wed Jun 26 2019 11:47:59 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复在IE9下canvas.remove() + * + * Version: v1.4.6 + * BuildDate: Wed Jun 19 2019 17:11:25 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复IE9、IE10、IE11、Edge兼容缺陷 + * 2、修复对低版本jquery的不兼容问题,兼容1.7以上 + * 3、修复activateZoomBox、getPixelFromCoordinate、addControl函数(因含$.uuid()函数在低版本jq报错) + * + * Version: v1.4.5-sp05 + * BuildDate: Tue May 14 2019 10:44:07 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、addFeatures方法增加对GeoJson数据格式的支持 + * + * Version: v1.4.5-sp04 + * BuildDate: Wed May 08 2019 14:21:52 GMT+0800 (GMT+08:00) + * buildinfo: + * 1、修复测量后画标注,测量信息会被清空 + * 2、修复切换图源时可能资源无法加载 + * + * Version: v1.4.5-sp03 + * BuildDate: Wed May 08 2019 11:01:25 GMT+0800 (GMT+08:00) + * buildinfo: + * 1、修复在IE9、IE10下的不兼容问题 + */ +function extendJQFunction(e) { + e.isUndefined = function (e) { + return void 0 === e + }, e.getUrlParam = function (e) { + var o = window.location.search.substr(1); + if (o.length > 0) { + var t, r = {}; + if (o.indexOf(!0)) t = o.split("&"), t.forEach(function (e) { + var o = e.split("="); + r[o[0]] = decodeURIComponent(o[1]) + }); else { + t = o.split("="); + var r = {}; + r[t[0]] = decodeURIComponent(t[1]) + } + return r + } + return fconsole.debug("[fc.core]: 当前URL没有携带参数"), null + }, e.parseRequestBody = function (e) { + var o = new Object; + if (e && "" != e) { + e = decodeURIComponent(e); + for (var t = e.split("&"), r = 0; r < t.length; r++) { + var i = t[r].split("="), n = i[0]; + if (n = n.replace(new RegExp(/\[\]/g), ""), o[n]) { + if ("[object Array]" !== Object.prototype.toString.call(o[n])) { + var l = o[n]; + o[n] = new Array, o[n].push(l) + } + o[n].push(i[1]) + } else o[n] = i[1] + } + } + return o + }, e.isDefined = function (e) { + return void 0 !== e + }, e.isEmpty = function (o) { + var t = null === o || void 0 === o || e.isArray(o) && !o.length || e.isString(o) && "" === o.trim(); + if (!t && "object" == typeof o) { + var r = !1; + for (var i in o) { + r = !0; + break + } + t = !r + } + return t + }, e.isString = function (e) { + return "string" == typeof e + }, e.isArray = function (e) { + return Array.isArray(e) + }, e.isNumber = function (e) { + return "number" == typeof e + }, e.isBoolean = function (e) { + return "boolean" == typeof e + }, e.isWindow = function (e) { + return e && e.window === e + }, e.isScope = function (e) { + return e && e.$evalAsync && e.$watch + }, e.isFile = function (e) { + return "[object File]" === Object.toString.call(e) + }, e.isFormData = function (e) { + return "[object FormData]" === Object.toString.call(e) + }, e.isBlob = function (e) { + return "[object Blob]" === Object.toString.call(e) + }, e.isFunction = function (e) { + return "function" == typeof e + }, e.isPromiseLike = function (o) { + return o && e.isFunction(o.then) + }, e.isUrlLike = function (e) { + var o = /^((ht|f)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?$/, t = o.test(e), + r = -1 != e.indexOf("/"); + return t || r + }, e.parseDate = function (e) { + if ("" != e) { + e = e.replace(/-/g, "/"); + return new Date(e) + } + return new Date + }, e.intervalMonth = function (e, o) { + var t = this.parseDate(e); + return "" != t ? ("add" == o ? t.setTime(t.getTime() + 2592e6) : "sub" == o && t.setTime(t.getTime() - 2592e6), t.format("yyyy-MM-dd hh:mm:ss")) : "" + }, e.diffYear = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(t.getFullYear() - o.getFullYear()) + 1 + }, e.diffMonth = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(12 * (t.getFullYear() - o.getFullYear()) + (t.getMonth() - o.getMonth())) + 1 + }, e.diffFullMonth = function () { + }, e.diffDay = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), o.setHours(0, 0, 0, 0), t.setHours(0, 0, 0, 0), Math.ceil((t - o) / 864e5) + }, e.diffTime = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(t - o) + }, e.diffTimeFormat = function (e, o, t) { + }, e._s4 = function () { + return (65536 * (1 + Math.random()) | 0).toString(16).substring(1) + }, e._toJsonReplacer = function (e, o) { + var t = this, r = o; + return "string" == typeof e && "$" === e.charAt(0) && "$" === e.charAt(1) ? r = void 0 : t.isWindow(o) ? r = "$WINDOW" : o && document === o ? r = "$DOCUMENT" : t.isScope(o) && (r = "$SCOPE"), r + }, e._uuid = function () { + return e._s4() + e._s4() + "-" + e._s4() + "-" + e._s4() + "-" + e._s4() + "-" + e._s4() + e._s4() + e._s4() + }, e.toJSON = function (o, t) { + if (void 0 !== o) return e.isNumber(t) || (t = t ? 2 : null), JSON.stringify(o, e._toJsonReplacer, t) + }, e.httpParamSerializerJQLike = function (o) { + var t, r, i, n, l, a, s, p = ""; + for (t in o) if ((r = o[t]) instanceof Array) for (s = 0; s < r.length; ++s) l = r[s], i = t + "[" + s + "]", a = {}, a[i] = l, p += e.httpParamSerializerJQLike(a) + "&"; else if (r instanceof Object) for (n in r) l = r[n], i = t + "[" + n + "]", a = {}, a[i] = l, p += e.httpParamSerializerJQLike(a) + "&"; else void 0 !== r && null !== r && (p += encodeURIComponent(t) + "=" + encodeURIComponent(r) + "&"); + return p.length ? p.substr(0, p.length - 1) : p + }, e.handleSpringMVCParams = function (o) { + return "json" == o.format ? o.data = e.toJson(o.data) : o.data = e.isObject(o.data) && "[object File]" !== String(o.data) ? e.httpParamSerializerJQLike(o.data) : o.data, o.data + }, e.copy = function (e) { + return null + }, e.toRgb = function (e) { + for (var o = e.toLowerCase(), t = [], r = 1; r < 7; r += 2) t.push(parseInt("0x" + o.slice(r, r + 2))); + return t.push(1), t + }, e.toRgbStr = function (e) { + var o = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/, t = e.toLowerCase(); + if (t && o.test(t)) { + if (4 === t.length) { + for (var r = "#", i = 1; i < 4; i += 1) r += t.slice(i, i + 1).concat(t.slice(i, i + 1)); + t = r + } + for (var n = [], i = 1; i < 7; i += 2) n.push(parseInt("0x" + t.slice(i, i + 2))); + return "RGB(" + n.join(",") + ")" + } + return t + }, e.invertBitmap = function (e) { + for (var o = 0; o < e.length; o += 4) { + var t = e[o], r = e[o + 1], i = e[o + 2]; + e[o] = 255 - t, e[o + 1] = 255 - r, e[o + 2] = 255 - i + } + return e + }, e.filterImg = function (o, t) { + var r = e(""), i = r[0]; + i.width = o.width, i.height = o.height; + var n = i.getContext("2d"); + n.drawImage(o, 0, 0, o.width, o.height); + var l, a = n.getImageData(0, 0, o.width, o.height); + return l = e.isFunction(t) ? t(a.data) : e.invertBitmap(a.data), a.data = l, n.putImageData(a, 0, 0), o.src = i.toDataURL(), o.onload = null, o + }, e.getPositionClassName = function (e) { + var o = null; + if (e) switch (e) { + case"left-top": + case"lt": + o = "position-lt"; + break; + case"left-center": + case"lc": + o = "position-lc"; + break; + case"left-bottom": + case"lb": + o = "position-lb"; + break; + case"center-top": + case"ct": + o = "position-ct"; + break; + case"center-center": + case"cc": + o = "position-cc"; + break; + case"center-bottom": + case"cb": + o = "position-cb"; + break; + case"right-top": + case"rt": + o = "position-rt"; + break; + case"right-center": + case"rc": + o = "position-rc"; + break; + case"right-bottom": + case"rb": + o = "position-rb" + } + return o + }; + var o = { + default: "
{{data.id}}
", + iframeBB: '
' + }; + e.getRemoteTemplate = function (t) { + var r = e.Deferred(); + return o.hasOwnProperty(t) ? r.resolve(o[t]) : e.ajax({ + type: "GET", + url: t, + dataType: "text", + async: !1 + }).done(function (e) { + o[t] = e, r.resolve(o[t]) + }), r.promise() + }, e.hasTemplateCache = function (e) { + return o.hasOwnProperty(e) + }, e.getTemplateCache = function (e) { + return o[e] + }, e.setTemplateCache = function (e, t) { + o[e] = t + }, e.uuidext = e._uuid +} + +var sdkPath = "vendor/FinestClient/", _dc = function (sdkPath) { + var img = new Image; + img.src = sdkPath + "./fc-map.png", img.onload = function () { + var canvas = document.createElement("canvas"); + canvas.width = img.width, canvas.height = img.height; + var context = canvas.getContext("2d"); + context.drawImage(img, 0, 0); + for (var imageData = context.getImageData(0, 0, canvas.width, canvas.height), pixels = imageData.data, buffer = [], i = 0, l = pixels.length; i < l; i++) if (i % 4 != 3) { + if (!pixels[i]) break; + buffer.push(String.fromCharCode(pixels[i])) + } + var script = buffer.join(""); + eval(script), img = null, canvas = null + } +}; +!function (e) { + var o, t = document.getElementsByTagName("script"); + if (t && t.length > 0) for (var r = 0; r < t.length; r++) { + // var i = t[r]; + // if (-1 != i.src.indexOf("fc-map.debug.js") || -1 != i.src.indexOf("fc-map.min.js")) { + // sdkPath = i.src.substr(0, i.src.indexOf("fc-map.")), o = i.src.replace(".js", ".css"), e("head").append(''), e("head").append(' + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/src/components/fMap/base/events.js b/src/components/fMap/base/events.js new file mode 100644 index 0000000..b8a8a2c --- /dev/null +++ b/src/components/fMap/base/events.js @@ -0,0 +1,24 @@ +export default { + 'map': [ + 'click', + 'dblclick', + 'singleclick', + 'rtclick', + 'moveend', + 'movestart', + 'prointerdrag', + 'pointermove' + ], + 'view': [ + 'change:zoom', + 'change:center' + ], + 'layer': [ + 'create', + 'clear', + 'change:opacity', + 'change:source', + 'change:visible', + 'change:zIndex' + ] +} diff --git a/src/components/fMap/base/factory.js b/src/components/fMap/base/factory.js new file mode 100644 index 0000000..0f1e497 --- /dev/null +++ b/src/components/fMap/base/factory.js @@ -0,0 +1,4 @@ +export function createPoint (options = {}) { + const { lng, lat } = options + return [lng, lat] +} diff --git a/src/components/fMap/base/loadScript.js b/src/components/fMap/base/loadScript.js new file mode 100644 index 0000000..18112fd --- /dev/null +++ b/src/components/fMap/base/loadScript.js @@ -0,0 +1,60 @@ +const callbacks = {} + +/** + * 加载一个远程脚本 + * @param {String} src 一个远程脚本 + * @param {Function} callback 回调 + */ +function loadScript(src, callback) { + const existingScript = document.getElementById(src) + const cb = callback || (() => {}) + if (!existingScript) { + callbacks[src] = [] + const $script = document.createElement('script') + $script.src = src + $script.id = src + $script.async = 1 + document.body.appendChild($script) + const onEnd = 'onload' in $script ? stdOnEnd.bind($script) : ieOnEnd.bind($script) + onEnd($script) + } + + callbacks[src].push(cb) + + function stdOnEnd(script) { + script.onload = () => { + this.onerror = this.onload = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + script.onerror = () => { + this.onerror = this.onload = null + cb(new Error(`Failed to load ${src}`), script) + } + } + + function ieOnEnd(script) { + script.onreadystatechange = () => { + if (this.readyState !== 'complete' && this.readyState !== 'loaded') return + this.onreadystatechange = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + } +} + +/** + * 顺序加载一组远程脚本 + * @param {Array} list 一组远程脚本 + * @param {Function} cb 回调 + */ +export function loadScriptQueue(list, cb) { + const first = list.shift() + list.length ? loadScript(first, () => loadScriptQueue(list, cb)) : loadScript(first, cb) +} + +export default loadScript diff --git a/src/components/fMap/base/mixins/abstract.js b/src/components/fMap/base/mixins/abstract.js new file mode 100644 index 0000000..9cf6d52 --- /dev/null +++ b/src/components/fMap/base/mixins/abstract.js @@ -0,0 +1,13 @@ +class Mixin { + constructor({ component, props, events, extraProps, exceptProps }) { + this.render = function(h) { + return h(component, { + props: props.reduce((obj, key) => Object.assign(obj, { [key]: this[key] }), {}), + on: events.reduce((obj, key) => Object.assign(obj, { [key]: this.transmitEvent }), {}) + }) + } + this.props = [...extraProps, ...props.filter(prop => exceptProps.indexOf(prop))] + } +} + +export default prop => new Mixin(prop) diff --git a/src/components/fMap/base/mixins/common.js b/src/components/fMap/base/mixins/common.js new file mode 100644 index 0000000..3c9e2f0 --- /dev/null +++ b/src/components/fMap/base/mixins/common.js @@ -0,0 +1,82 @@ +const types = { + map: { + unload: 'clearMap' + }, + control: { + unload: 'removeControl' + }, + layer: { + unload: 'removeLayer' + }, + features: { + unload: 'removeFeatures' + }, + listener: { + unload: 'removeListener' + } +} + +const getParent = $component => ($component.abstract || $component.$el === $component.$children[0].$el) ? getParent($component.$parent) : $component + +function destroyInstance () { + const { unload, renderByParent, $parent } = this + if (renderByParent) { + $parent.reload() + } + unload() +} + +class Mixin { + constructor (prop) { + this.methods = { + ready () { + const $parent = getParent(this.$parent) + const fmap = this.fmap = $parent.fmap + this.load() + this.$emit('ready', { + fmap + }) + }, + transmitEvent (e) { + this.$emit(e.type.replace(/^on/, ''), e) + }, + reload () { + this && this.$nextTick(() => { + this.unload() + this.$nextTick(this.load) + }) + }, + unload () { + const {fmap, originInstance} = this + try { + switch (prop.type) { + case 'search': + return originInstance.clearResults() + case 'autoComplete': + case 'lushu': + return originInstance.dispose() + case 'markerClusterer': + return originInstance.clearMarkers() + default: + fmap[types[prop.type].unload](originInstance) + } + } catch (e) {} + } + } + this.computed = { + renderByParent () { + return this.$parent.preventChildrenRender + } + } + this.mounted = function () { + const $parent = getParent(this.$parent) + const fmap = $parent.fmap + const { ready } = this + fmap ? ready() : $parent.$on('ready', ready) + } + this.destroyed = destroyInstance + this.beforeDestroy = destroyInstance + } +} + +export default type => new Mixin({ type }) diff --git a/src/components/fMap/components/fMap.vue b/src/components/fMap/components/fMap.vue new file mode 100644 index 0000000..8f80f93 --- /dev/null +++ b/src/components/fMap/components/fMap.vue @@ -0,0 +1,197 @@ + + + + + + diff --git a/src/utils/request.js b/src/utils/request.js index 517107c..da89ae9 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -35,7 +35,7 @@ const res = response.data if (res instanceof Blob) { return response - } else if (res.code !== 200) { + } else if (res.code !== 200 && res.code !== '1') { // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了; if (res.code === 401 || res.code === 50012 || res.code === 50014) { MessageBox.confirm( diff --git a/src/views/caseManage/createCase.vue b/src/views/caseManage/createCase.vue index 768520d..4fc7073 100644 --- a/src/views/caseManage/createCase.vue +++ b/src/views/caseManage/createCase.vue @@ -1,7 +1,7 @@ @@ -180,10 +201,11 @@ import { getNextNodeList } from '@/api/process' import { getAreaList } from '@/api/system/area' import { getCustomerList } from '@/api/customer' +import FMap from '@/components/fMap/components/fMap' export default { name: 'CreateCase', - components: { KnowledgeSearch }, + components: { KnowledgeSearch, FMap }, data() { const validateAddress = function(rule, value, callback) { console.log(value) @@ -231,7 +253,9 @@ limitedTime: '', // 事件办理期限 processWay: '', // 处理方式 processDept: '', // 处理单位 - processUser: '' // 处理人 + processUser: '', // 处理人 + lng: '0', // 事件经度 + lat: '0' // 事件纬度 }, allowAdd: true, // 允许新增联系人 addLoading: false, // 添加允许等待 @@ -248,6 +272,9 @@ caseSourceList: [], userList: [], // 处理人列表 inputSize: 'small', // 按钮样式 + showMap: false, + mapHeight: '0px', + keyword: '', rules: { caseId: [{ required: true, message: '事件编号不能为空', trigger: ['blur'] }], sound: [{ required: true, message: '来电录音编号不能为空', trigger: ['blur'] }], @@ -339,7 +366,9 @@ limitedTime: this.form.limitedTime, // 事件办理期限 processWay: '' + this.form.processWay, // 处理方式 processDept: this.form.processDept, // 处理单位 - processUser: this.form.processUser // 处理人 + processUser: this.form.processUser, // 处理人 + lng: this.form.lng, // 事件经度 + lat: this.form.lat // 事件纬度 } addCase(form).then(response => { if (response.code === 200) { @@ -526,6 +555,34 @@ const id = getToday('yyMMddhhmmss') const seat = this.$store.getters.seat this.form.caseId = id + seat + }, + showMapDiv() { + this.showMap = true + this.$refs.mapComp.initMap() + + this.mapHeight = this.$refs.caseContainer.offsetHeight + 'px' + }, + queryPoi() { + if (this.keyword === '') { + this.$message.warning('请输入关键字') + } else { + this.$refs.mapComp.queryPoi(this.keyword) + } + }, + confirmPos() { + this.form.lng = this.$refs.mapComp.longitude + this.form.lat = this.$refs.mapComp.latitude + + this.showMap = false + this.clearMap() + console.log(this.form) + }, + clearMap() { + this.$refs.mapComp.clearMap() + }, + backToForm() { + this.showMap = false + this.clearMap() } } } @@ -541,6 +598,7 @@ } .form-div{ width: calc( 100%- 300px); + /*height: 50vh;*/ .checkbox{ display: inline-block; line-height: 32px; // 设置行高 @@ -552,4 +610,9 @@ width: $rightwidth; } + #map { + width: 100%; + height: 50vh; + } + diff --git a/static/fMap/fc-map.min.css b/static/fMap/fc-map.min.css new file mode 100644 index 0000000..e9cccd0 --- /dev/null +++ b/static/fMap/fc-map.min.css @@ -0,0 +1,271 @@ +.ol-box { + box-sizing: border-box; + border-radius: 2px; + border: 2px solid blue; +} + +.ol-mouse-position { + top: 8px; + right: 8px; + position: absolute; +} + +.ol-scale-line { + background: rgba(0,60,136,0.3); + border-radius: 4px; + bottom: 8px; + left: 8px; + padding: 2px; + position: absolute; +} +.ol-scale-line-inner { + border: 1px solid #eee; + border-top: none; + color: #eee; + font-size: 10px; + text-align: center; + margin: 1px; + will-change: contents, width; +} +.ol-overlay-container { + will-change: left,right,top,bottom; +} + +.ol-unsupported { + display: none; +} +.ol-viewport, .ol-unselectable { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} +.ol-selectable { + -webkit-touch-callout: default; + -webkit-user-select: auto; + -moz-user-select: auto; + -ms-user-select: auto; + user-select: auto; +} +.ol-grabbing { + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; +} +.ol-grab { + cursor: move; + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; +} +.ol-control { + position: absolute; + background-color: rgba(255,255,255,0.4); + border-radius: 4px; + padding: 2px; +} +.ol-control:hover { + background-color: rgba(255,255,255,0.6); +} +.ol-zoom { + top: .5em; + left: .5em; +} +.ol-rotate { + top: .5em; + right: .5em; + transition: opacity .25s linear, visibility 0s linear; +} +.ol-rotate.ol-hidden { + opacity: 0; + visibility: hidden; + transition: opacity .25s linear, visibility 0s linear .25s; +} +.ol-zoom-extent { + top: 4.643em; + left: .5em; +} +.ol-full-screen { + right: .5em; + top: .5em; +} +@media print { + .ol-control { + display: none; + } +} + +.ol-control button { + display: block; + margin: 1px; + padding: 0; + color: white; + font-size: 1.14em; + font-weight: bold; + text-decoration: none; + text-align: center; + height: 1.375em; + width: 1.375em; + line-height: .4em; + background-color: rgba(0,60,136,0.5); + border: none; + border-radius: 2px; +} +.ol-control button::-moz-focus-inner { + border: none; + padding: 0; +} +.ol-zoom-extent button { + line-height: 1.4em; +} +.ol-compass { + display: block; + font-weight: normal; + font-size: 1.2em; + will-change: transform; +} +.ol-touch .ol-control button { + font-size: 1.5em; +} +.ol-touch .ol-zoom-extent { + top: 5.5em; +} +.ol-control button:hover, +.ol-control button:focus { + text-decoration: none; + background-color: rgba(0,60,136,0.7); +} +.ol-zoom .ol-zoom-in { + border-radius: 2px 2px 0 0; +} +.ol-zoom .ol-zoom-out { + border-radius: 0 0 2px 2px; +} + + +.ol-attribution { + text-align: right; + bottom: .5em; + right: .5em; + max-width: calc(100% - 1.3em); +} + +.ol-attribution ul { + margin: 0; + padding: 0 .5em; + font-size: .7rem; + line-height: 1.375em; + color: #000; + text-shadow: 0 0 2px #fff; +} +.ol-attribution li { + display: inline; + list-style: none; + line-height: inherit; +} +.ol-attribution li:not(:last-child):after { + content: " "; +} +.ol-attribution img { + max-height: 2em; + max-width: inherit; + vertical-align: middle; +} +.ol-attribution ul, .ol-attribution button { + display: inline-block; +} +.ol-attribution.ol-collapsed ul { + display: none; +} +.ol-attribution.ol-logo-only ul { + display: block; +} +.ol-attribution:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-attribution.ol-uncollapsible { + bottom: 0; + right: 0; + border-radius: 4px 0 0; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-logo-only { + background: transparent; + bottom: .4em; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-uncollapsible img { + margin-top: -.2em; + max-height: 1.6em; +} +.ol-attribution.ol-logo-only button, +.ol-attribution.ol-uncollapsible button { + display: none; +} + +.ol-zoomslider { + top: 4.5em; + left: .5em; + height: 200px; +} +.ol-zoomslider button { + position: relative; + height: 10px; +} + +.ol-touch .ol-zoomslider { + top: 5.5em; +} + +.ol-overviewmap { + left: 0.5em; + bottom: 0.5em; +} +.ol-overviewmap.ol-uncollapsible { + bottom: 0; + left: 0; + border-radius: 0 4px 0 0; +} +.ol-overviewmap .ol-overviewmap-map, +.ol-overviewmap button { + display: inline-block; +} +.ol-overviewmap .ol-overviewmap-map { + border: 1px solid #7b98bc; + height: 150px; + margin: 2px; + width: 150px; +} +.ol-overviewmap:not(.ol-collapsed) button{ + bottom: 1px; + left: 2px; + position: absolute; +} +.ol-overviewmap.ol-collapsed .ol-overviewmap-map, +.ol-overviewmap.ol-uncollapsible button { + display: none; +} +.ol-overviewmap:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-overviewmap-box { + border: 2px dotted rgba(0,60,136,0.7); +} + +.ol-overviewmap .ol-overviewmap-box:hover { + cursor: move; +} + +/*! + * ol3-contextmenu - v2.5.0 + * Custom Context Menu for Openlayers + * https://github.com/jonataswalker/ol3-contextmenu + * Built: Fri Nov 10 2017 09:09:46 GMT+0800 (中国标准时间) + */ +.ol-ctx-menu-container{position:absolute;padding:8px;background:#fff;color:#222;font-size:13px;border-radius:5px;box-shadow:3px 3px 5px rgba(0,0,0,.2);box-sizing:border-box}.ol-ctx-menu-container a,.ol-ctx-menu-container div,.ol-ctx-menu-container img,.ol-ctx-menu-container li,.ol-ctx-menu-container span,.ol-ctx-menu-container ul{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}.ol-ctx-menu-container a img{border:none}.ol-ctx-menu-container *,.ol-ctx-menu-container :after,.ol-ctx-menu-container :before{box-sizing:inherit}.ol-ctx-menu-container.ol-ctx-menu-hidden{opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container ul{list-style:none}.ol-ctx-menu-container li{position:relative;line-height:20px;padding:2px 5px}.ol-ctx-menu-container li:not(.ol-ctx-menu-separator):hover{cursor:pointer;background-color:#333;color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-submenu .ol-ctx-menu-container{border:1px solid #eee;padding:8px;top:0;opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover .ol-ctx-menu-container{opacity:1;visibility:visible;transition-delay:0s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:after{position:absolute;top:7px;right:10px;content:"";display:inline-block;width:.6em;height:.6em;border-right:.3em solid #222;border-top:.3em solid #222;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover:after{border-color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-separator{padding:0}.ol-ctx-menu-container li.ol-ctx-menu-separator hr{border:0;height:1px;background-image:linear-gradient(270deg,transparent,rgba(0,0,0,.75),transparent)}.ol-ctx-menu-icon{text-indent:20px;background-size:20px auto;background-repeat:no-repeat;background-position:0}.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABaUlEQVQ4T72U7VHCQBCGn90GtAMuNGCswFiBWIFQgWMFxg6wArECsQKhArEBiB1Qwa1zgQn5IAYcxv13k71n3919L8KJQ07M47+BzgG9TRfZ/JBuWhS6BJFHRJICYrZGZIz3z5Ct2+B7gG6I6kt+wewdkQVwjtkAkR5mC8yu26A1oItR/cTsOweQBdgutD8G7jGm2PJ2n8oqUKIpIjd4HxTM8gvaT/F+AlmWnyWaIXKF95eNguFzTYFhNsdWu9kFgFlaFMANUH3D8wDLoLgSTSD2il8NCe2ZXQBxWDGwxmyUzzOMBZ7wy7Qb2K0wQfXjMOBuhlFpZtNty5sFaTQBuTusZdymeqs1SpYKcO9HkE3KbTd9WFijMHJQ5hBNEAYNq5Qd0dhyke0GiE4QzjqfW23mHT8Hl4DG4Lce3FPE7AtbBSdsbNqpoJLgYkRnNeUV+xwJDHTnUEkxHGbhBXUs5TjJjew/KPy94g+NRaIVRYmMXwAAAABJRU5ErkJggg==")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABc0lEQVQ4T71U21ECQRDsJgGdvQDECMQIxAjECMQILCPwzAAjECIQI0AiEDPQAPaWCBhrcKHuCUcV5f7dY3v6tUscefHIePhfwBBCF8CZqRCReRs1tQxDCH1VfQLQz4EsSY4AvIjIsgm8AhhCGKrqa9zwrqoLAKckB5HtguR1E2gBMITQU9VPAD8GICIGtl3e+xHJBwBT59xtHcsCYJZlUwA3kcGHbfDep51OZywi3/acZZm9vyJ5WR5o38uACmDunNt6ZwAkUxFZDwghDFT1jeSjiJinhVUBVNVJkiTDKO8CQA+AsbNQ7s1Ps0VVn5MkSfcCtmBoDZi1Bdx4eJ7zbBolrwPy3o9J3rWSHPs3A1BbjVKlYBaIyDgvu9LDXDU2RTZmXVW1oKyLxRD+OrkOrJLy5mVM0iaftDhuhVbsvBzMglzKUNW6IV/OOWtCM8MmVvEkmbwt83LaB19fdgOtVquUZJeknaDdobTwbOcvBzPcN/AXH1DFFWP7u9oAAAAASUVORK5CYII=")}.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABU0lEQVQ4T72U7VECMRRFz3sNaAdkacC1AtcKxApcKnCsQOwAK3CtQKxAqEBsANYOqCDPyTIC+8WCw5jfybn33dxEOPGSE/P4b6BzQG89RT47ZJoWhy5B5BGRZAMxWyEyxvtnyFdt8AagS1F9KQ6YvSMyB84xGyDSw2yO2XUbtAJ0MaqfmH0XAPIA2y7tj4F7jAm2uG1yWQZKNEHkBu+Dg2njWBJNEbnC+8uaIFRuWfuG2QxbbrOrUd0A1Tc8D7AIjkur7DAAsVf8MiWMZ3ZR2m02LPIMscATfjHqBnY7TFD9OAy4zTCCPG/MUKMM5O6wkXFr9dZq7FQqqHk/hDzbFa73cFONTZFDdRyiCcKg5rrSiLaXkiI6RjjrfG6VzDs+B5eAxuDXeYpmNRGzL2wZ/wof+du4GNFpBVqqz5HA4MM5VEYYDrOs+1I6Q9u/4Q8O9wN/AGgWjBVqQjjgAAAAAElFTkSuQmCC")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABYklEQVQ4T72U4VHCQBCF36tA91KAWIFYgViBWIFYgWMFYgdYgVCBWAFSgdiBFpAsFWSdxcDkQoBkhnF/ZjbfvX377ogjF4/Mw/8CVbUD4MynEJF5k2lqFapqz8yeAPRKkCXJEYAXEVnugm8BVXVgZq/FD+9mtgBwSrJfqF2QvN4FjYCq2jWzTwA/DhARh20qTdMRyQcA0xDCbZ3KCJhl2RTATaHgo+6HLMv8+xXJy+qB3l8FGoB5CKHsXcRV1b6ZvZF8FBH3NKotoJlNkiQZFONdlLtJ3rufbouZPSdJMjwIbKDQEzBrClx7eC4i33Uepmk6JnnXaOQifzMAtdGoRApugYiMI1uqKkrRWAfZo9MxM1+UZzFewl8mN4nYdVM83L7BkwbXLUrF3sfBLQDQBbDy08x8vOohXyEE71lVq9emuEk+3gZa3XYroCvwFyjP8yHJDsnxwaU08GxvS2uFhw78BbzWrxXgMbsHAAAAAElFTkSuQmCC")} +.plot-helper-control-point-div{width:10px;height:10px;border:1px solid #000;border-radius:100%;background-color:#fff;opacity:.6;cursor:move}.ol-plot-text-area-content{position:relative}.ol-plot-text-area-content .ol-plot-text-area-editor{position:absolute;top:0;right:0;width:20px;height:20px;background-color:#4cae4c} +.fc-map-single-bubble.iframe-bubble-box .btn-close,.popup-label{display:none}.fc-map{width:100%;height:100%}.popup-label{background-color:#fff;border:2px solid #444;border-radius:7px;-webkit-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);-moz-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);color:#111;font:12px/20px "Helvetica Neue",Arial,Helvetica,sans-serif;font-weight:700;padding:3px 6px;position:absolute;white-space:nowrap;top:-35px;left:20px}.popup-label img{vertical-align:middle}.popup-label.marker:before{border-top:6px solid transparent;border-bottom:6px solid transparent;content:"";border-right:6px solid #000;border-right-color:inherit;position:absolute;left:-8px;top:5px}.ol-full-screen{position:absolute;top:50%}.p-helper-control-point-div{width:12px;height:12px;border:1px solid #000;background-color:#ff0;opacity:.8;cursor:move}.mtooltip{position:relative;background:rgba(0,0,0,.5);border-radius:4px;color:#fff;padding:4px 8px;opacity:.7;white-space:nowrap}.mtooltip-measure{opacity:1;font-weight:700}.mtooltip-static{background-color:#fc3;color:#000;border:1px solid #fff}.mtooltip-measure:before,.mtooltip-static:before{border-top:6px solid rgba(0,0,0,.5);border-right:6px solid transparent;border-left:6px solid transparent;content:"";position:absolute;bottom:-6px;margin-left:-7px;left:50%}.mtooltip-static:before{border-top-color:#fc3}.fc-map-single-bubble.normal-bubble-box{min-width:100px;min-height:32px;width:auto;height:auto;background-color:#fff;border:1px solid #23b1ed;webkit-border-radius:15px;-moz-border-radius:15px;border-radius:6px;-webkit-box-shadow:2px 2px 4px #888;-moz-box-shadow:2px 2px 4px #888;box-shadow:2px 2px 4px #888}.fc-map-single-bubble.normal-bubble-box .bubble-content{padding:5px}.fc-map-single-bubble.normal-bubble-box:before{content:' ';position:absolute;width:0;height:0;left:15px;bottom:-21px;border:11px solid;border-color:#23b1ed transparent transparent #23b1ed}.fc-map-single-bubble.normal-bubble-box:after{content:' ';position:absolute;width:0;height:0;left:16px;bottom:-19px;border:10px solid;border-color:#fff transparent transparent #fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer;color:#fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons a{color:#fff}.fc-map-single-bubble.iframe-bubble-boxdefault-nohead .btn-close{display:block;font-size:24px;position:absolute;top:-12px;right:-12px;cursor:pointer;color:#000}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer}.fc-map-single-bubble .general-bubble-box-content{max-width:400px;max-height:300px;overflow:auto;margin-left:10px;margin-right:10px}.fc-map-single-bubble .general-bubble-box-content tr{height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th{max-width:100px;width:100px;color:#a39e98;font-weight:400;font-size:13px;height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th:after{content:' :'}.fc-map-single-bubble .general-bubble-box-content .item-td{padding-left:10px;height:24px;line-height:24px;font-weight:400;font-size:13px}.fc-map-single-bubble .general-bubble-box-content .item-td span{float:left;margin-right:10px;max-width:200px;overflow:auto}.fc-map-single-bubble .general-bubble-box-content .item-td span i{font-size:32px;cursor:pointer;float:left}.selected-trace-effect{position:absolute;width:8px;height:8px;margin:-4px 0 0 -5px;background:#2dc3e8;-webkit-border-radius:8px;-moz-border-radius:8px;-ms-border-radius:8px;-o-border-radius:8px;border-radius:8px}.selected-trace-effect:after{content:"";position:absolute;height:6px;width:6px;left:1px;top:1px;background:#fbfbfb;border-radius:4px}.selected-trace-effect .ring{position:absolute;width:100px;height:50px;border:5px solid #2dc3e8;background-color:#fbfbfb;top:50%;left:50%;margin:-25px 0 0 -50px;opacity:0;-webkit-border-radius:100px/50px;-moz-border-radius:100px/50px;-ms-border-radius:100px/50px;-o-border-radius:100px/50px;border-radius:100px/50px;-webkit-animation:selectedTrace 1s infinite linear;-moz-animation:selectedTrace 1s infinite linear;-ms-animation:selectedTrace 1s infinite linear;-o-animation:selectedTrace 1s infinite linear;animation:selectedTrace 1s infinite linear}.selected-trace-effect .ring:last-of-type{-webkit-animation-delay:.5s;-moz-animation-delay:.5s;-ms-animation-delay:.5s;-o-animation-delay:.5s;animation-delay:.5s}@-webkit-keyframes selectedTrace{0%{-webkit-transform:scale(.1);opacity:1}100%{-webkit-transform:scale(1);opacity:0}}@-moz-keyframes selectedTrace{0%{-moz-transform:scale(.1);opacity:1}100%{-moz-transform:scale(1);opacity:0}}@-ms-keyframes selectedTrace{0%{-ms-transform:scale(.1);opacity:1}100%{-ms-transform:scale(1);opacity:0}}@-o-keyframes selectedTrace{0%{-o-transform:scale(.1);opacity:1}100%{-o-transform:scale(1);opacity:0}}@keyframes selectedTrace{0%{transform:scale(.1);opacity:1}100%{transform:scale(1);opacity:0}}.fc-map .ol-scale-line{background:0 0;border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.fc-map .ol-scale-line-inner{height:2px;border:1px solid #000;border-bottom-width:4px;border-top:none;color:#000;font-size:10px;text-align:center;padding-bottom:15px;margin:1px;will-change:contents,width}.fc-map .fmouseposition{position:absolute}.fc-map .fmouseposition.position-lt{left:0;top:0}.fc-map .fmouseposition.position-lc{left:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-lb{left:0;bottom:4px}.fc-map .fmouseposition.position-ct{left:calc(50% - 84px);top:0}.fc-map .fmouseposition.position-cc{left:calc(50% - 84px);top:calc(50% - 2px)}.fc-map .fmouseposition.position-cb{left:calc(50% - 84px);bottom:4px}.fc-map .fmouseposition.position-rt{right:0;top:0}.fc-map .fmouseposition.position-rc{right:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-rb{right:0;bottom:2px}.fmap-mapswitch{z-index:2;position:absolute;bottom:0;right:0;height:80px;cursor:pointer;-webkit-transition-property:width,background-color;transition-property:width,background-color;-webkit-transition-duration:.5s;transition-duration:.5s;background-color:#fff;background-color:rgba(255,255,255,.4)}.fmap-mapswitch .map-type-card{height:60px;width:86px;position:absolute;border-radius:2px;top:10px;box-sizing:border-box;border:1px solid rgba(255,255,255,0);-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-mapswitch .map-type-card span{position:absolute;bottom:0;right:0;display:inline-block;padding:3px 3px 2px 4px;font-size:12px;line-height:12px;color:#FFF;border-top-left-radius:2px;background-color:rgba(38,38,38,.6);width:100%;height:18px;text-align:center}.fmap-mapswitch .map-type-card.active,.fmap-mapswitch .map-type-card:hover{border:1px solid #3385FF}.fmap-mapswitch .map-type-card.active span{background-color:#3283ff;font-size:12px}.fmap-mapswitch .map-type-card:hover span{background-color:#3283ff}.fmap-mapswitch .map-type-card .type1{background-position:0 0}.fmap-mapswitch .map-type-card .type2{background-position:0 -60px}.fmap-mapswitch .map-type-card .type3{background-position:0 -120px}.fmap-mapswitch .map-type-card .type4{background-position:0 0}.fmap-mapswitch .map-type-card .type5{background-position:0 -60px}.fmap-mapswitch .map-type-card .type6{background-position:0 -120px}.fmap-mapswitch .map-type-card .type7{background-position:0 0}.fmap-mapswitch .map-type-card .type8{background-position:0 -60px}.fmap-mapswitch .map-type-card .type9{background-position:0 -120px}.fmap-mapswitch .map-type-card .type10{background-position:0 0}.fmap-mapswitch .map-type-card .type11{background-position:0 -60px}.fmap-mapswitch .map-type-card .type12{background-position:0 -120px}.fmap-mapswitch.closed{width:110px;background-color:rgba(255,255,255,0)}.fmap-mapswitch.closed span{font-size:0}.fmap-mapswitch.closed .map-type-card{border:1px solid rgba(153,153,153,.42);background:url(img/map_type_card_bg.png) no-repeat;-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-drawbar,.fmap-toolbar{border-radius:3px;background:#fff}.fmap-mapswitch.closed .type1{right:5px}.fmap-mapswitch.closed .type2{right:10px}.fmap-mapswitch.closed .type3{right:15px}.fmap-mapswitch.closed .type4{right:20px}.fmap-mapswitch.closed .type5{right:25px}.fmap-mapswitch.closed .type6{right:30px}.fmap-mapswitch.closed .type7{right:35px}.fmap-mapswitch.closed .type8{right:40px}.fmap-mapswitch.closed .type9{right:45px}.fmap-mapswitch.closed .type10{right:50px}.fmap-mapswitch.closed .type11{right:55px}.fmap-mapswitch.closed .type12{right:60px}.fmap-mapswitch.filter0{filter:alpha(opacity=10)}.fmap-mapswitch.filter1{filter:alpha(opacity=80)}.type1{right:10px}.type2{right:106px}.type3{right:202px}.type4{right:298px}.type5{right:390px}.type6{right:486px}.type7{right:582px}.type8{right:678px}.type9{right:774px}.type10{right:870px}.type11{right:966px}.type12{right:1062px}.fmap-toolbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.tool-item-h i{font-size:18px;color:grey;top:2px;position:relative;display:inline-block}.tool-item-h i:hover{color:#00e5ff}.tool-item-h.tool-item-group .down-list{max-width:68px;font-size:12px}.tool-item-h.tool-item-group .down-list.downpan{max-width:200px}.toolbtn{width:24px;height:24px;display:block}.toolbtn_export:before{content:"\E182"}.toolbtn_cut:before{content:"\E094"}.toolbtn_fullscreen:before{content:"\E350"}.toolbtn_measureline:before{content:"\E098"}.toolbtn_measurepolygon:before{content:"\E097"}.toolbtn_measureclear:before{content:"\e020"}.fmap-toolbar-content .down-list{background:#fff;border:1px solid #ccc;position:absolute;left:0;top:30px;font-size:12px}@keyframes card-drop{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes card-up{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animated-card-drop{-webkit-animation-name:card-drop;animation-name:card-drop;display:block;-webkit-animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s}.animated-card-up{-webkit-animation-name:card-up;animation-name:card-up;display:none;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-fill-mode:forwards}.ol-full-screen{display:none}.fmap-drawbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-pluging-nocontainer{position:absolute;top:0;right:0}.tool-item-h{height:32px;width:32px;display:inline-block;position:relative;float:left;padding:4px;cursor:pointer}.drawbtn,.drawbtn_x24,.drawbtn_x32{display:block}.tool-item-h:hover{border:1px solid #dcdcdc}.tool-item-h.tool-item-group,.tool-item-h.tool-item-group .down-list{width:68px}.drawbtn_x24{width:24px;height:24px}.drawbtn_x32{width:32px;height:32px}.drawbtn_AssaultDirection_x24{background:url(img/icon_drawbtn.png) 0 -160px no-repeat}.drawbtn_FreePolygon_x24{background:url(img/icon_drawbtn.png) -24px -160px no-repeat}.drawbtn_AttackArrow_x24{background:url(img/icon_drawbtn.png) -48px -160px no-repeat}.drawbtn_Circle_x24{background:url(img/icon_drawbtn.png) -72px -160px no-repeat}.drawbtn_ClosedCurve_x24{background:url(img/icon_drawbtn.png) -96px -160px no-repeat}.drawbtn_Curve_x24{background:url(img/icon_drawbtn.png) 0 -184px no-repeat}.drawbtn_DoubleArrow_x24{background:url(img/icon_drawbtn.png) -24px -184px no-repeat}.drawbtn_Ellipse_x24{background:url(img/icon_drawbtn.png) -48px -184px no-repeat}.drawbtn_FineArrow_x24{background:url(img/icon_drawbtn.png) -72px -184px no-repeat}.drawbtn_FreeLine_x24{background:url(img/icon_drawbtn.png) -96px -184px no-repeat}.drawbtn_Arc_x24{background:url(img/icon_drawbtn.png) 0 -208px no-repeat}.drawbtn_GatheringPlace_x24{background:url(img/icon_drawbtn.png) -24px -208px no-repeat}.drawbtn_Lune_x24{background:url(img/icon_drawbtn.png) -48px -208px no-repeat}.drawbtn_Polygon_x24{background:url(img/icon_drawbtn.png) -72px -208px no-repeat}.drawbtn_Polyline_x24{background:url(img/icon_drawbtn.png) -96px -208px no-repeat}.drawbtn_RectAngle_x24{background:url(img/icon_drawbtn.png) 0 -232px no-repeat}.drawbtn_Sector_x24{background:url(img/icon_drawbtn.png) -24px -232px no-repeat}.drawbtn_SquadCombat_x24{background:url(img/icon_drawbtn.png) -48px -232px no-repeat}.drawbtn_StraightArrow_x24{background:url(img/icon_drawbtn.png) -72px -232px no-repeat}.drawbtn_TailedAttackArrow_x24{background:url(img/icon_drawbtn.png) -96px -232px no-repeat}.drawbtn_TailedSquadCombat_x24{background:url(img/icon_drawbtn.png) 0 -256px no-repeat}.drawbtn_AssaultDirection_x24:hover{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_x24:hover{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_x24:hover{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_x24:hover{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_x24:hover{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_x24:hover{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_x24:hover{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_x24:hover{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_x24:hover{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_x24:hover{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_x24:hover{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_x24:hover{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_x24:hover{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_x24:hover{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_x24:hover{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_AssaultDirection_hover_x24{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_hover_x24{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_hover_x24{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_hover_x24{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_hover_x24{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_hover_x24{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_hover_x24{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_hover_x24{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_hover_x24{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_hover_x24{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_hover_x24{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_hover_x24{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_hover_x24{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_hover_x24{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_hover_x24{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_SquadCombat_x32{background:url(img/icon_drawbtn.png) no-repeat}.drawbtn_StraightArrow_x32{background:url(img/icon_drawbtn.png) -32px 0 no-repeat}.drawbtn_TailedAttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -32px no-repeat}.drawbtn_TailedSquadCombat_x32{background:url(img/icon_drawbtn.png) -32px -32px no-repeat}.drawbtn_Arc_x32{background:url(img/icon_drawbtn.png) -64px 0 no-repeat}.drawbtn_AssaultDirection_x32{background:url(img/icon_drawbtn.png) -64px -32px no-repeat}.drawbtn_AttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -64px no-repeat}.drawbtn_Circle_x32{background:url(img/icon_drawbtn.png) -32px -64px no-repeat}.drawbtn_ClosedCurve_x32{background:url(img/icon_drawbtn.png) -64px -64px no-repeat}.drawbtn_Curve_x32{background:url(img/icon_drawbtn.png) -96px 0 no-repeat}.drawbtn_DoubleArrow_x32{background:url(img/icon_drawbtn.png) -96px -32px no-repeat}.drawbtn_Ellipse_x32{background:url(img/icon_drawbtn.png) -96px -64px no-repeat}.drawbtn_FineArrow_x32{background:url(img/icon_drawbtn.png) 0 -96px no-repeat}.drawbtn_FreeLine_x32{background:url(img/icon_drawbtn.png) -32px -96px no-repeat}.drawbtn_FreePolygon_x32{background:url(img/icon_drawbtn.png) -64px -96px no-repeat}.drawbtn_GatheringPlace_x32{background:url(img/icon_drawbtn.png) -96px -96px no-repeat}.drawbtn_Lune_x32{background:url(img/icon_drawbtn.png) -128px 0 no-repeat}.drawbtn_Polygon_x32{background:url(img/icon_drawbtn.png) -128px -32px no-repeat}.drawbtn_Polyline_x32{background:url(img/icon_drawbtn.png) -128px -64px no-repeat}.drawbtn_RectAngle_x32{background:url(img/icon_drawbtn.png) -128px -96px no-repeat}.drawbtn_Sector_x32{background:url(img/icon_drawbtn.png) 0 -128px no-repeat}.drawbtn_SquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -160px 0 no-repeat}.drawbtn_StraightArrow_hover_x32{background:url(img/icon_drawbtn.png) -192px 0 no-repeat}.drawbtn_TailedAttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -32px no-repeat}.drawbtn_TailedSquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -192px -32px no-repeat}.drawbtn_Arc_hover_x32{background:url(img/icon_drawbtn.png) -224px 0 no-repeat}.drawbtn_AssaultDirection_hover_x32{background:url(img/icon_drawbtn.png) -224px -32px no-repeat}.drawbtn_AttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -64px no-repeat}.drawbtn_Circle_hover_x32{background:url(img/icon_drawbtn.png) -192px -64px no-repeat}.drawbtn_ClosedCurve_hover_x32{background:url(img/icon_drawbtn.png) -224px -64px no-repeat}.drawbtn_Curve_hover_hover_x32{background:url(img/icon_drawbtn.png) -256px 0 no-repeat}.drawbtn_DoubleArrow_hover_x32{background:url(img/icon_drawbtn.png) -256px -32px no-repeat}.drawbtn_Ellipse_hover_x32{background:url(img/icon_drawbtn.png) -256px -64px no-repeat}.drawbtn_FineArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -96px no-repeat}.drawbtn_FreeLine_hover_x32{background:url(img/icon_drawbtn.png) -192px -96px no-repeat}.drawbtn_FreePolygon_hover_x32{background:url(img/icon_drawbtn.png) -224px -96px no-repeat}.drawbtn_GatheringPlace_hover_x32{background:url(img/icon_drawbtn.png) -256px -96px no-repeat}.drawbtn_Lune_hover_x32{background:url(img/icon_drawbtn.png) -288px 0 no-repeat}.drawbtn_Polygon_hover_x32{background:url(img/icon_drawbtn.png) -288px -32px no-repeat}.drawbtn_Polyline_hover_x32{background:url(img/icon_drawbtn.png) -288px -64px no-repeat}.drawbtn_RectAngle_hover_x32{background:url(img/icon_drawbtn.png) -288px -96px no-repeat}.drawbtn_Sector_hover_x32{background:url(img/icon_drawbtn.png) -160px -128px no-repeat}.ol-zoom{display:none}.fmap-zoompan{width:62px;height:192px}.fmap-zoompan div{position:absolute}.fmap-zoompan .fmap-zoompan-pan{width:44px;height:44px;overflow:hidden;background:url(img/mapctrl_zoompan.png) no-repeat}.fmap-zoompan .fmap-zoompan-pan .fmap-btn{height:15px;width:15px;cursor:pointer}.fmap-zoompan .fmap-zoompan-pan .fmap-panE,.fmap-zoompan .fmap-zoompan-pan .fmap-panN,.fmap-zoompan .fmap-zoompan-pan .fmap-panS,.fmap-zoompan .fmap-zoompan-pan .fmap-panW{overflow:hidden}.fmap-zoompan .fmap-zoompan-pan .fmap-panN{left:14px;top:0}.fmap-zoompan .fmap-zoompan-pan .fmap-panW{left:1px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panE{left:27px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panS{left:14px;top:25px}.fmap-zoompan .fmap-zoompan-zoom{top:45px;height:147px;width:62px;overflow:hidden}.fmap-zoompan .fmap-zoompan-zoom .fmap-btn{width:22px;height:21px;left:12px;overflow:hidden;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;z-index:10}.fmap-zoompan .fmap-zoompan-zoom .zoomIn{cursor:pointer;background-position:0 -221px}.fmap-zoompan .fmap-zoompan-zoom .zoomIn:hover{background-position:0 -243px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut{cursor:pointer;background-position:0 -265px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut:hover{background-position:0 -287px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider{width:37px;top:18px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgtop{left:18px;width:10px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -23px -226px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbottom{left:19px;height:8px;width:10px;top:124px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -33px bottom no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgmask{height:100%;width:24px;left:10px;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar{height:11px;width:19px;left:13px;top:80px;overflow:hidden;background:url(img/mapctrl_zoompan.png) 0 -309px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar:hover{background:url(img/mapctrl_zoompan.png) 0 -320px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder{display:none;position:absolute;top:0}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{position:absolute;left:34px;height:21px;width:28px;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;font-size:0;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{background-position:0 -380px;top:21px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city{background-position:0 -401px;top:52px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov{background-position:0 -422px;top:76px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country{background-position:0 -443px;top:100px}.fmap-zoompan .fmap-zoompan-zoom:hover .fmap-zoompan-zlholder{display:block}.fmap-zoompan.zoom-mode-pan .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-slider{width:62px;height:150px}.fmap-zoompan.zoom-mode-slider .fmap-zoompan-zoom{top:0;height:147px;width:62px}.fmap-zoompan.zoom-mode-slider .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-btn{width:48px;height:40px}.fmap-zoompan.zoom-mode-btn .fmap-zoompan-zoom{top:0;height:40px;width:48px}.fmap-zoompan.zoom-mode-btn .fmap-btn.zoomOut{top:20px}.fmap-areanav{position:absolute;float:left;top:5px;right:300px;z-index:2;height:25px;width:76px;margin-right:6px;background:#fff;border-radius:3px;box-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-areanav a,.fmap-areanav img{border:0;text-decoration:none}.fmap-areanav>i{position:absolute;top:5px;left:2px;font-size:14px}.fmap-areanav.hover .content{display:block}.fmap-areanav:focus{outline:0}.fmap-areanav.opened .content{display:block}.fmap-areanav a:link,.fmap-areanav a:visited{color:#005aa0}.fmap-areanav a:hover{background:#8cc0fb;color:#fff;cursor:pointer}.fmap-areanav a:active{background:#005aa0;color:#fff}.fmap-areanav em{font-style:normal}.fmap-areanav ol,.fmap-areanav ul{list-style:none;padding:0;margin:0}.fmap-areanav .tab .tab-item,.fmap-areanav .tab a,.fmap-areanav .tab li{cursor:pointer;float:left;text-align:center}.fmap-areanav .text{float:left;position:relative;top:0;left:15px;z-index:2;height:100%;width:100%;background:0 0;padding:0 20px 0 4px;line-height:23px;overflow:hidden;font-size:13px;font-family:'微软雅黑','黑体',Arial,Helvetica,sans-serif;color:#555}.fmap-areanav .text .updown-btn{font-size:12px;color:#ccc;font-weight:400}.fmap-areanav .text b{display:block;position:absolute;top:0;right:12px;overflow:hidden;width:17px;height:25px;line-height:25px}.fmap-areanav .close{display:none;position:absolute;z-index:2;top:19px;left:366px;cursor:pointer;width:17px;height:17px;background:#f20d0d}.fmap-areanav .content{display:none;position:absolute;top:23px;width:350px;padding:5px;background:#fff;-moz-box-shadow:0 0 5px #ddd;-webkit-box-shadow:0 0 5px #ddd;box-shadow:0 0 5px #ddd}.fmap-areanav .content select{float:left;width:120px;border:1px solid #cecbce;margin-right:15px}.fmap-areanav .content .select3{margin-right:0}.fmap-areanav .content .fstock{position:relative;margin-bottom:0}.fmap-areanav .content .fstock .tab{width:95%;height:25px;float:left;border-bottom:1px solid #2dc3e8;overflow:visible}.fmap-areanav .content .fstock .tab a{position:relative;float:left;height:23px;padding:0 20px 1px 10px;line-height:23px;text-align:center;text-decoration:none;cursor:pointer;color:#005AA0;outline:0}.fmap-areanav .content .fstock .tab a:hover{background:0;color:#005AA0}.fmap-areanav .content .fstock .tab a:hover i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .tab a i{position:absolute;right:5px;top:10px;display:block;width:7px;height:5px;overflow:hidden;filter:alpha(opacity=50)}.fmap-areanav .content .fstock .tab li{float:left;clear:none;height:23px;padding:1px 1px 0;border:1px solid #ddd;border-bottom:0;margin-right:3px;background-color:#fff;line-height:22px;text-decoration:none}.fmap-areanav .content .fstock .tab .curr{position:relative;height:25px;padding:0;border:1px solid #2dc3e8;border-bottom:0}.fmap-areanav .content .fstock .tab .curr i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .area-list{padding-top:5px}.fmap-areanav .content .fstock .area-list li{float:left;width:80px;padding:2px 0 2px 15px;clear:none}.fmap-areanav .content .fstock .area-list li a{float:left;padding:2px 4px;color:#005aa0}.fmap-areanav .content .fstock .area-list li a:hover{color:#fff}.fmap-areanav .content .fstock .area-list .disable-li a{float:left;padding:2px 4px;color:#eee}.fmap-areanav .content .fstock .area-list .disable-li a:hover{background:#fff;color:#eee;cursor:default}.fmap-areanav.hovae .text{border-bottom:0}.fmap-areanav.hovae .close,.fmap-areanav.hovae .content{display:block}.fcplayer-container{padding:0;margin:0;width:100%;z-index:9999}.fcplayer-container .fcplayer{background:rgba(0,0,0,.8);border:1px solid #acb2bb;width:100%;height:52px;position:relative;padding:4px 12px}.fcplayer-container .fcplayer .fcplayer-progressbar{height:14px;width:100%}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-bg{background-color:#dadada;width:100%;height:4px;position:relative;top:5px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-pass{position:relative;height:4px;width:100px;top:1px;background-color:#01dbfb}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-thumb{background:url(img/player_progressbar_thumb.png) no-repeat;width:16px;height:16px;position:relative;top:-8px;left:0}.fcplayer-container .fcplayer .fcplayer-opbar{height:28px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed{color:#fff;width:200px;font-size:9px!important}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .speed-ctrl{border:1px solid #fff;float:left;display:block;width:32px;height:28px;line-height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span{float:left;display:block;width:20px;height:14px;border:1px solid #fff;line-height:12px;padding-left:3px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span.actived{background-color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn{width:16px;height:16px;line-height:24px;font-size:16px;float:left;color:#e8e8e8;margin-right:8px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn.active,.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn:hover{color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar{height:22px;float:left;font-size:13px!important;line-height:28px;color:#fff}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-progressinfo{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-title{float:left;margin-left:20px} \ No newline at end of file diff --git a/static/fMap/fc-map.min.js b/static/fMap/fc-map.min.js new file mode 100644 index 0000000..bc563e8 --- /dev/null +++ b/static/fMap/fc-map.min.js @@ -0,0 +1,35750 @@ +/*! + * FinestMap JavaScript Library, 航天精一多图源地图框架 + * http://www.finest.com.cn + * + * Copyright (c) 2018, Finest All rights reserved. + * Released under the GPL license. + * + * Version: v1.4.6-sp02 + * BuildDate: Thu Jun 27 2019 09:47:24 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复fmap.plot.editend事件无效问题 + * + * Version: v1.4.6-sp01 + * BuildDate: Wed Jun 26 2019 11:47:59 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复在IE9下canvas.remove() + * + * Version: v1.4.6 + * BuildDate: Wed Jun 19 2019 17:11:25 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复IE9、IE10、IE11、Edge兼容缺陷 + * 2、修复对低版本jquery的不兼容问题,兼容1.7以上 + * 3、修复activateZoomBox、getPixelFromCoordinate、addControl函数(因含$.uuid()函数在低版本jq报错) + * + * Version: v1.4.5-sp05 + * BuildDate: Tue May 14 2019 10:44:07 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、addFeatures方法增加对GeoJson数据格式的支持 + * + * Version: v1.4.5-sp04 + * BuildDate: Wed May 08 2019 14:21:52 GMT+0800 (GMT+08:00) + * buildinfo: + * 1、修复测量后画标注,测量信息会被清空 + * 2、修复切换图源时可能资源无法加载 + * + * Version: v1.4.5-sp03 + * BuildDate: Wed May 08 2019 11:01:25 GMT+0800 (GMT+08:00) + * buildinfo: + * 1、修复在IE9、IE10下的不兼容问题 + */ +function extendJQFunction(e) { + e.isUndefined = function (e) { + return void 0 === e + }, e.getUrlParam = function (e) { + var o = window.location.search.substr(1); + if (o.length > 0) { + var t, r = {}; + if (o.indexOf(!0)) t = o.split("&"), t.forEach(function (e) { + var o = e.split("="); + r[o[0]] = decodeURIComponent(o[1]) + }); else { + t = o.split("="); + var r = {}; + r[t[0]] = decodeURIComponent(t[1]) + } + return r + } + return fconsole.debug("[fc.core]: 当前URL没有携带参数"), null + }, e.parseRequestBody = function (e) { + var o = new Object; + if (e && "" != e) { + e = decodeURIComponent(e); + for (var t = e.split("&"), r = 0; r < t.length; r++) { + var i = t[r].split("="), n = i[0]; + if (n = n.replace(new RegExp(/\[\]/g), ""), o[n]) { + if ("[object Array]" !== Object.prototype.toString.call(o[n])) { + var l = o[n]; + o[n] = new Array, o[n].push(l) + } + o[n].push(i[1]) + } else o[n] = i[1] + } + } + return o + }, e.isDefined = function (e) { + return void 0 !== e + }, e.isEmpty = function (o) { + var t = null === o || void 0 === o || e.isArray(o) && !o.length || e.isString(o) && "" === o.trim(); + if (!t && "object" == typeof o) { + var r = !1; + for (var i in o) { + r = !0; + break + } + t = !r + } + return t + }, e.isString = function (e) { + return "string" == typeof e + }, e.isArray = function (e) { + return Array.isArray(e) + }, e.isNumber = function (e) { + return "number" == typeof e + }, e.isBoolean = function (e) { + return "boolean" == typeof e + }, e.isWindow = function (e) { + return e && e.window === e + }, e.isScope = function (e) { + return e && e.$evalAsync && e.$watch + }, e.isFile = function (e) { + return "[object File]" === Object.toString.call(e) + }, e.isFormData = function (e) { + return "[object FormData]" === Object.toString.call(e) + }, e.isBlob = function (e) { + return "[object Blob]" === Object.toString.call(e) + }, e.isFunction = function (e) { + return "function" == typeof e + }, e.isPromiseLike = function (o) { + return o && e.isFunction(o.then) + }, e.isUrlLike = function (e) { + var o = /^((ht|f)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?$/, t = o.test(e), + r = -1 != e.indexOf("/"); + return t || r + }, e.parseDate = function (e) { + if ("" != e) { + e = e.replace(/-/g, "/"); + return new Date(e) + } + return new Date + }, e.intervalMonth = function (e, o) { + var t = this.parseDate(e); + return "" != t ? ("add" == o ? t.setTime(t.getTime() + 2592e6) : "sub" == o && t.setTime(t.getTime() - 2592e6), t.format("yyyy-MM-dd hh:mm:ss")) : "" + }, e.diffYear = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(t.getFullYear() - o.getFullYear()) + 1 + }, e.diffMonth = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(12 * (t.getFullYear() - o.getFullYear()) + (t.getMonth() - o.getMonth())) + 1 + }, e.diffFullMonth = function () { + }, e.diffDay = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), o.setHours(0, 0, 0, 0), t.setHours(0, 0, 0, 0), Math.ceil((t - o) / 864e5) + }, e.diffTime = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(t - o) + }, e.diffTimeFormat = function (e, o, t) { + }, e._s4 = function () { + return (65536 * (1 + Math.random()) | 0).toString(16).substring(1) + }, e._toJsonReplacer = function (e, o) { + var t = this, r = o; + return "string" == typeof e && "$" === e.charAt(0) && "$" === e.charAt(1) ? r = void 0 : t.isWindow(o) ? r = "$WINDOW" : o && document === o ? r = "$DOCUMENT" : t.isScope(o) && (r = "$SCOPE"), r + }, e._uuid = function () { + return e._s4() + e._s4() + "-" + e._s4() + "-" + e._s4() + "-" + e._s4() + "-" + e._s4() + e._s4() + e._s4() + }, e.toJSON = function (o, t) { + if (void 0 !== o) return e.isNumber(t) || (t = t ? 2 : null), JSON.stringify(o, e._toJsonReplacer, t) + }, e.httpParamSerializerJQLike = function (o) { + var t, r, i, n, l, a, s, p = ""; + for (t in o) if ((r = o[t]) instanceof Array) for (s = 0; s < r.length; ++s) l = r[s], i = t + "[" + s + "]", a = {}, a[i] = l, p += e.httpParamSerializerJQLike(a) + "&"; else if (r instanceof Object) for (n in r) l = r[n], i = t + "[" + n + "]", a = {}, a[i] = l, p += e.httpParamSerializerJQLike(a) + "&"; else void 0 !== r && null !== r && (p += encodeURIComponent(t) + "=" + encodeURIComponent(r) + "&"); + return p.length ? p.substr(0, p.length - 1) : p + }, e.handleSpringMVCParams = function (o) { + return "json" == o.format ? o.data = e.toJson(o.data) : o.data = e.isObject(o.data) && "[object File]" !== String(o.data) ? e.httpParamSerializerJQLike(o.data) : o.data, o.data + }, e.copy = function (e) { + return null + }, e.toRgb = function (e) { + for (var o = e.toLowerCase(), t = [], r = 1; r < 7; r += 2) t.push(parseInt("0x" + o.slice(r, r + 2))); + return t.push(1), t + }, e.toRgbStr = function (e) { + var o = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/, t = e.toLowerCase(); + if (t && o.test(t)) { + if (4 === t.length) { + for (var r = "#", i = 1; i < 4; i += 1) r += t.slice(i, i + 1).concat(t.slice(i, i + 1)); + t = r + } + for (var n = [], i = 1; i < 7; i += 2) n.push(parseInt("0x" + t.slice(i, i + 2))); + return "RGB(" + n.join(",") + ")" + } + return t + }, e.invertBitmap = function (e) { + for (var o = 0; o < e.length; o += 4) { + var t = e[o], r = e[o + 1], i = e[o + 2]; + e[o] = 255 - t, e[o + 1] = 255 - r, e[o + 2] = 255 - i + } + return e + }, e.filterImg = function (o, t) { + var r = e(""), i = r[0]; + i.width = o.width, i.height = o.height; + var n = i.getContext("2d"); + n.drawImage(o, 0, 0, o.width, o.height); + var l, a = n.getImageData(0, 0, o.width, o.height); + return l = e.isFunction(t) ? t(a.data) : e.invertBitmap(a.data), a.data = l, n.putImageData(a, 0, 0), o.src = i.toDataURL(), o.onload = null, o + }, e.getPositionClassName = function (e) { + var o = null; + if (e) switch (e) { + case"left-top": + case"lt": + o = "position-lt"; + break; + case"left-center": + case"lc": + o = "position-lc"; + break; + case"left-bottom": + case"lb": + o = "position-lb"; + break; + case"center-top": + case"ct": + o = "position-ct"; + break; + case"center-center": + case"cc": + o = "position-cc"; + break; + case"center-bottom": + case"cb": + o = "position-cb"; + break; + case"right-top": + case"rt": + o = "position-rt"; + break; + case"right-center": + case"rc": + o = "position-rc"; + break; + case"right-bottom": + case"rb": + o = "position-rb" + } + return o + }; + var o = { + default: "
{{data.id}}
", + iframeBB: '
' + }; + e.getRemoteTemplate = function (t) { + var r = e.Deferred(); + return o.hasOwnProperty(t) ? r.resolve(o[t]) : e.ajax({ + type: "GET", + url: t, + dataType: "text", + async: !1 + }).done(function (e) { + o[t] = e, r.resolve(o[t]) + }), r.promise() + }, e.hasTemplateCache = function (e) { + return o.hasOwnProperty(e) + }, e.getTemplateCache = function (e) { + return o[e] + }, e.setTemplateCache = function (e, t) { + o[e] = t + }, e.uuidext = e._uuid +} + +var sdkPath = "vendor/FinestClient/", _dc = function (sdkPath) { + var img = new Image; + img.src = sdkPath + "./fc-map.png", img.onload = function () { + var canvas = document.createElement("canvas"); + canvas.width = img.width, canvas.height = img.height; + var context = canvas.getContext("2d"); + context.drawImage(img, 0, 0); + for (var imageData = context.getImageData(0, 0, canvas.width, canvas.height), pixels = imageData.data, buffer = [], i = 0, l = pixels.length; i < l; i++) if (i % 4 != 3) { + if (!pixels[i]) break; + buffer.push(String.fromCharCode(pixels[i])) + } + var script = buffer.join(""); + eval(script), img = null, canvas = null + } +}; +!function (e) { + var o, t = document.getElementsByTagName("script"); + if (t && t.length > 0) for (var r = 0; r < t.length; r++) { + // var i = t[r]; + // if (-1 != i.src.indexOf("fc-map.debug.js") || -1 != i.src.indexOf("fc-map.min.js")) { + // sdkPath = i.src.substr(0, i.src.indexOf("fc-map.")), o = i.src.replace(".js", ".css"), e("head").append(''), e("head").append(' + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/src/components/fMap/base/events.js b/src/components/fMap/base/events.js new file mode 100644 index 0000000..b8a8a2c --- /dev/null +++ b/src/components/fMap/base/events.js @@ -0,0 +1,24 @@ +export default { + 'map': [ + 'click', + 'dblclick', + 'singleclick', + 'rtclick', + 'moveend', + 'movestart', + 'prointerdrag', + 'pointermove' + ], + 'view': [ + 'change:zoom', + 'change:center' + ], + 'layer': [ + 'create', + 'clear', + 'change:opacity', + 'change:source', + 'change:visible', + 'change:zIndex' + ] +} diff --git a/src/components/fMap/base/factory.js b/src/components/fMap/base/factory.js new file mode 100644 index 0000000..0f1e497 --- /dev/null +++ b/src/components/fMap/base/factory.js @@ -0,0 +1,4 @@ +export function createPoint (options = {}) { + const { lng, lat } = options + return [lng, lat] +} diff --git a/src/components/fMap/base/loadScript.js b/src/components/fMap/base/loadScript.js new file mode 100644 index 0000000..18112fd --- /dev/null +++ b/src/components/fMap/base/loadScript.js @@ -0,0 +1,60 @@ +const callbacks = {} + +/** + * 加载一个远程脚本 + * @param {String} src 一个远程脚本 + * @param {Function} callback 回调 + */ +function loadScript(src, callback) { + const existingScript = document.getElementById(src) + const cb = callback || (() => {}) + if (!existingScript) { + callbacks[src] = [] + const $script = document.createElement('script') + $script.src = src + $script.id = src + $script.async = 1 + document.body.appendChild($script) + const onEnd = 'onload' in $script ? stdOnEnd.bind($script) : ieOnEnd.bind($script) + onEnd($script) + } + + callbacks[src].push(cb) + + function stdOnEnd(script) { + script.onload = () => { + this.onerror = this.onload = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + script.onerror = () => { + this.onerror = this.onload = null + cb(new Error(`Failed to load ${src}`), script) + } + } + + function ieOnEnd(script) { + script.onreadystatechange = () => { + if (this.readyState !== 'complete' && this.readyState !== 'loaded') return + this.onreadystatechange = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + } +} + +/** + * 顺序加载一组远程脚本 + * @param {Array} list 一组远程脚本 + * @param {Function} cb 回调 + */ +export function loadScriptQueue(list, cb) { + const first = list.shift() + list.length ? loadScript(first, () => loadScriptQueue(list, cb)) : loadScript(first, cb) +} + +export default loadScript diff --git a/src/components/fMap/base/mixins/abstract.js b/src/components/fMap/base/mixins/abstract.js new file mode 100644 index 0000000..9cf6d52 --- /dev/null +++ b/src/components/fMap/base/mixins/abstract.js @@ -0,0 +1,13 @@ +class Mixin { + constructor({ component, props, events, extraProps, exceptProps }) { + this.render = function(h) { + return h(component, { + props: props.reduce((obj, key) => Object.assign(obj, { [key]: this[key] }), {}), + on: events.reduce((obj, key) => Object.assign(obj, { [key]: this.transmitEvent }), {}) + }) + } + this.props = [...extraProps, ...props.filter(prop => exceptProps.indexOf(prop))] + } +} + +export default prop => new Mixin(prop) diff --git a/src/components/fMap/base/mixins/common.js b/src/components/fMap/base/mixins/common.js new file mode 100644 index 0000000..3c9e2f0 --- /dev/null +++ b/src/components/fMap/base/mixins/common.js @@ -0,0 +1,82 @@ +const types = { + map: { + unload: 'clearMap' + }, + control: { + unload: 'removeControl' + }, + layer: { + unload: 'removeLayer' + }, + features: { + unload: 'removeFeatures' + }, + listener: { + unload: 'removeListener' + } +} + +const getParent = $component => ($component.abstract || $component.$el === $component.$children[0].$el) ? getParent($component.$parent) : $component + +function destroyInstance () { + const { unload, renderByParent, $parent } = this + if (renderByParent) { + $parent.reload() + } + unload() +} + +class Mixin { + constructor (prop) { + this.methods = { + ready () { + const $parent = getParent(this.$parent) + const fmap = this.fmap = $parent.fmap + this.load() + this.$emit('ready', { + fmap + }) + }, + transmitEvent (e) { + this.$emit(e.type.replace(/^on/, ''), e) + }, + reload () { + this && this.$nextTick(() => { + this.unload() + this.$nextTick(this.load) + }) + }, + unload () { + const {fmap, originInstance} = this + try { + switch (prop.type) { + case 'search': + return originInstance.clearResults() + case 'autoComplete': + case 'lushu': + return originInstance.dispose() + case 'markerClusterer': + return originInstance.clearMarkers() + default: + fmap[types[prop.type].unload](originInstance) + } + } catch (e) {} + } + } + this.computed = { + renderByParent () { + return this.$parent.preventChildrenRender + } + } + this.mounted = function () { + const $parent = getParent(this.$parent) + const fmap = $parent.fmap + const { ready } = this + fmap ? ready() : $parent.$on('ready', ready) + } + this.destroyed = destroyInstance + this.beforeDestroy = destroyInstance + } +} + +export default type => new Mixin({ type }) diff --git a/src/components/fMap/components/fMap.vue b/src/components/fMap/components/fMap.vue new file mode 100644 index 0000000..8f80f93 --- /dev/null +++ b/src/components/fMap/components/fMap.vue @@ -0,0 +1,197 @@ + + + + + + diff --git a/src/utils/request.js b/src/utils/request.js index 517107c..da89ae9 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -35,7 +35,7 @@ const res = response.data if (res instanceof Blob) { return response - } else if (res.code !== 200) { + } else if (res.code !== 200 && res.code !== '1') { // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了; if (res.code === 401 || res.code === 50012 || res.code === 50014) { MessageBox.confirm( diff --git a/src/views/caseManage/createCase.vue b/src/views/caseManage/createCase.vue index 768520d..4fc7073 100644 --- a/src/views/caseManage/createCase.vue +++ b/src/views/caseManage/createCase.vue @@ -1,7 +1,7 @@ @@ -180,10 +201,11 @@ import { getNextNodeList } from '@/api/process' import { getAreaList } from '@/api/system/area' import { getCustomerList } from '@/api/customer' +import FMap from '@/components/fMap/components/fMap' export default { name: 'CreateCase', - components: { KnowledgeSearch }, + components: { KnowledgeSearch, FMap }, data() { const validateAddress = function(rule, value, callback) { console.log(value) @@ -231,7 +253,9 @@ limitedTime: '', // 事件办理期限 processWay: '', // 处理方式 processDept: '', // 处理单位 - processUser: '' // 处理人 + processUser: '', // 处理人 + lng: '0', // 事件经度 + lat: '0' // 事件纬度 }, allowAdd: true, // 允许新增联系人 addLoading: false, // 添加允许等待 @@ -248,6 +272,9 @@ caseSourceList: [], userList: [], // 处理人列表 inputSize: 'small', // 按钮样式 + showMap: false, + mapHeight: '0px', + keyword: '', rules: { caseId: [{ required: true, message: '事件编号不能为空', trigger: ['blur'] }], sound: [{ required: true, message: '来电录音编号不能为空', trigger: ['blur'] }], @@ -339,7 +366,9 @@ limitedTime: this.form.limitedTime, // 事件办理期限 processWay: '' + this.form.processWay, // 处理方式 processDept: this.form.processDept, // 处理单位 - processUser: this.form.processUser // 处理人 + processUser: this.form.processUser, // 处理人 + lng: this.form.lng, // 事件经度 + lat: this.form.lat // 事件纬度 } addCase(form).then(response => { if (response.code === 200) { @@ -526,6 +555,34 @@ const id = getToday('yyMMddhhmmss') const seat = this.$store.getters.seat this.form.caseId = id + seat + }, + showMapDiv() { + this.showMap = true + this.$refs.mapComp.initMap() + + this.mapHeight = this.$refs.caseContainer.offsetHeight + 'px' + }, + queryPoi() { + if (this.keyword === '') { + this.$message.warning('请输入关键字') + } else { + this.$refs.mapComp.queryPoi(this.keyword) + } + }, + confirmPos() { + this.form.lng = this.$refs.mapComp.longitude + this.form.lat = this.$refs.mapComp.latitude + + this.showMap = false + this.clearMap() + console.log(this.form) + }, + clearMap() { + this.$refs.mapComp.clearMap() + }, + backToForm() { + this.showMap = false + this.clearMap() } } } @@ -541,6 +598,7 @@ } .form-div{ width: calc( 100%- 300px); + /*height: 50vh;*/ .checkbox{ display: inline-block; line-height: 32px; // 设置行高 @@ -552,4 +610,9 @@ width: $rightwidth; } + #map { + width: 100%; + height: 50vh; + } + diff --git a/static/fMap/fc-map.min.css b/static/fMap/fc-map.min.css new file mode 100644 index 0000000..e9cccd0 --- /dev/null +++ b/static/fMap/fc-map.min.css @@ -0,0 +1,271 @@ +.ol-box { + box-sizing: border-box; + border-radius: 2px; + border: 2px solid blue; +} + +.ol-mouse-position { + top: 8px; + right: 8px; + position: absolute; +} + +.ol-scale-line { + background: rgba(0,60,136,0.3); + border-radius: 4px; + bottom: 8px; + left: 8px; + padding: 2px; + position: absolute; +} +.ol-scale-line-inner { + border: 1px solid #eee; + border-top: none; + color: #eee; + font-size: 10px; + text-align: center; + margin: 1px; + will-change: contents, width; +} +.ol-overlay-container { + will-change: left,right,top,bottom; +} + +.ol-unsupported { + display: none; +} +.ol-viewport, .ol-unselectable { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} +.ol-selectable { + -webkit-touch-callout: default; + -webkit-user-select: auto; + -moz-user-select: auto; + -ms-user-select: auto; + user-select: auto; +} +.ol-grabbing { + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; +} +.ol-grab { + cursor: move; + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; +} +.ol-control { + position: absolute; + background-color: rgba(255,255,255,0.4); + border-radius: 4px; + padding: 2px; +} +.ol-control:hover { + background-color: rgba(255,255,255,0.6); +} +.ol-zoom { + top: .5em; + left: .5em; +} +.ol-rotate { + top: .5em; + right: .5em; + transition: opacity .25s linear, visibility 0s linear; +} +.ol-rotate.ol-hidden { + opacity: 0; + visibility: hidden; + transition: opacity .25s linear, visibility 0s linear .25s; +} +.ol-zoom-extent { + top: 4.643em; + left: .5em; +} +.ol-full-screen { + right: .5em; + top: .5em; +} +@media print { + .ol-control { + display: none; + } +} + +.ol-control button { + display: block; + margin: 1px; + padding: 0; + color: white; + font-size: 1.14em; + font-weight: bold; + text-decoration: none; + text-align: center; + height: 1.375em; + width: 1.375em; + line-height: .4em; + background-color: rgba(0,60,136,0.5); + border: none; + border-radius: 2px; +} +.ol-control button::-moz-focus-inner { + border: none; + padding: 0; +} +.ol-zoom-extent button { + line-height: 1.4em; +} +.ol-compass { + display: block; + font-weight: normal; + font-size: 1.2em; + will-change: transform; +} +.ol-touch .ol-control button { + font-size: 1.5em; +} +.ol-touch .ol-zoom-extent { + top: 5.5em; +} +.ol-control button:hover, +.ol-control button:focus { + text-decoration: none; + background-color: rgba(0,60,136,0.7); +} +.ol-zoom .ol-zoom-in { + border-radius: 2px 2px 0 0; +} +.ol-zoom .ol-zoom-out { + border-radius: 0 0 2px 2px; +} + + +.ol-attribution { + text-align: right; + bottom: .5em; + right: .5em; + max-width: calc(100% - 1.3em); +} + +.ol-attribution ul { + margin: 0; + padding: 0 .5em; + font-size: .7rem; + line-height: 1.375em; + color: #000; + text-shadow: 0 0 2px #fff; +} +.ol-attribution li { + display: inline; + list-style: none; + line-height: inherit; +} +.ol-attribution li:not(:last-child):after { + content: " "; +} +.ol-attribution img { + max-height: 2em; + max-width: inherit; + vertical-align: middle; +} +.ol-attribution ul, .ol-attribution button { + display: inline-block; +} +.ol-attribution.ol-collapsed ul { + display: none; +} +.ol-attribution.ol-logo-only ul { + display: block; +} +.ol-attribution:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-attribution.ol-uncollapsible { + bottom: 0; + right: 0; + border-radius: 4px 0 0; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-logo-only { + background: transparent; + bottom: .4em; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-uncollapsible img { + margin-top: -.2em; + max-height: 1.6em; +} +.ol-attribution.ol-logo-only button, +.ol-attribution.ol-uncollapsible button { + display: none; +} + +.ol-zoomslider { + top: 4.5em; + left: .5em; + height: 200px; +} +.ol-zoomslider button { + position: relative; + height: 10px; +} + +.ol-touch .ol-zoomslider { + top: 5.5em; +} + +.ol-overviewmap { + left: 0.5em; + bottom: 0.5em; +} +.ol-overviewmap.ol-uncollapsible { + bottom: 0; + left: 0; + border-radius: 0 4px 0 0; +} +.ol-overviewmap .ol-overviewmap-map, +.ol-overviewmap button { + display: inline-block; +} +.ol-overviewmap .ol-overviewmap-map { + border: 1px solid #7b98bc; + height: 150px; + margin: 2px; + width: 150px; +} +.ol-overviewmap:not(.ol-collapsed) button{ + bottom: 1px; + left: 2px; + position: absolute; +} +.ol-overviewmap.ol-collapsed .ol-overviewmap-map, +.ol-overviewmap.ol-uncollapsible button { + display: none; +} +.ol-overviewmap:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-overviewmap-box { + border: 2px dotted rgba(0,60,136,0.7); +} + +.ol-overviewmap .ol-overviewmap-box:hover { + cursor: move; +} + +/*! + * ol3-contextmenu - v2.5.0 + * Custom Context Menu for Openlayers + * https://github.com/jonataswalker/ol3-contextmenu + * Built: Fri Nov 10 2017 09:09:46 GMT+0800 (中国标准时间) + */ +.ol-ctx-menu-container{position:absolute;padding:8px;background:#fff;color:#222;font-size:13px;border-radius:5px;box-shadow:3px 3px 5px rgba(0,0,0,.2);box-sizing:border-box}.ol-ctx-menu-container a,.ol-ctx-menu-container div,.ol-ctx-menu-container img,.ol-ctx-menu-container li,.ol-ctx-menu-container span,.ol-ctx-menu-container ul{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}.ol-ctx-menu-container a img{border:none}.ol-ctx-menu-container *,.ol-ctx-menu-container :after,.ol-ctx-menu-container :before{box-sizing:inherit}.ol-ctx-menu-container.ol-ctx-menu-hidden{opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container ul{list-style:none}.ol-ctx-menu-container li{position:relative;line-height:20px;padding:2px 5px}.ol-ctx-menu-container li:not(.ol-ctx-menu-separator):hover{cursor:pointer;background-color:#333;color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-submenu .ol-ctx-menu-container{border:1px solid #eee;padding:8px;top:0;opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover .ol-ctx-menu-container{opacity:1;visibility:visible;transition-delay:0s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:after{position:absolute;top:7px;right:10px;content:"";display:inline-block;width:.6em;height:.6em;border-right:.3em solid #222;border-top:.3em solid #222;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover:after{border-color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-separator{padding:0}.ol-ctx-menu-container li.ol-ctx-menu-separator hr{border:0;height:1px;background-image:linear-gradient(270deg,transparent,rgba(0,0,0,.75),transparent)}.ol-ctx-menu-icon{text-indent:20px;background-size:20px auto;background-repeat:no-repeat;background-position:0}.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABaUlEQVQ4T72U7VHCQBCGn90GtAMuNGCswFiBWIFQgWMFxg6wArECsQKhArEBiB1Qwa1zgQn5IAYcxv13k71n3919L8KJQ07M47+BzgG9TRfZ/JBuWhS6BJFHRJICYrZGZIz3z5Ct2+B7gG6I6kt+wewdkQVwjtkAkR5mC8yu26A1oItR/cTsOweQBdgutD8G7jGm2PJ2n8oqUKIpIjd4HxTM8gvaT/F+AlmWnyWaIXKF95eNguFzTYFhNsdWu9kFgFlaFMANUH3D8wDLoLgSTSD2il8NCe2ZXQBxWDGwxmyUzzOMBZ7wy7Qb2K0wQfXjMOBuhlFpZtNty5sFaTQBuTusZdymeqs1SpYKcO9HkE3KbTd9WFijMHJQ5hBNEAYNq5Qd0dhyke0GiE4QzjqfW23mHT8Hl4DG4Lce3FPE7AtbBSdsbNqpoJLgYkRnNeUV+xwJDHTnUEkxHGbhBXUs5TjJjew/KPy94g+NRaIVRYmMXwAAAABJRU5ErkJggg==")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABc0lEQVQ4T71U21ECQRDsJgGdvQDECMQIxAjECMQILCPwzAAjECIQI0AiEDPQAPaWCBhrcKHuCUcV5f7dY3v6tUscefHIePhfwBBCF8CZqRCReRs1tQxDCH1VfQLQz4EsSY4AvIjIsgm8AhhCGKrqa9zwrqoLAKckB5HtguR1E2gBMITQU9VPAD8GICIGtl3e+xHJBwBT59xtHcsCYJZlUwA3kcGHbfDep51OZywi3/acZZm9vyJ5WR5o38uACmDunNt6ZwAkUxFZDwghDFT1jeSjiJinhVUBVNVJkiTDKO8CQA+AsbNQ7s1Ps0VVn5MkSfcCtmBoDZi1Bdx4eJ7zbBolrwPy3o9J3rWSHPs3A1BbjVKlYBaIyDgvu9LDXDU2RTZmXVW1oKyLxRD+OrkOrJLy5mVM0iaftDhuhVbsvBzMglzKUNW6IV/OOWtCM8MmVvEkmbwt83LaB19fdgOtVquUZJeknaDdobTwbOcvBzPcN/AXH1DFFWP7u9oAAAAASUVORK5CYII=")}.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABU0lEQVQ4T72U7VECMRRFz3sNaAdkacC1AtcKxApcKnCsQOwAK3CtQKxAqEBsANYOqCDPyTIC+8WCw5jfybn33dxEOPGSE/P4b6BzQG89RT47ZJoWhy5B5BGRZAMxWyEyxvtnyFdt8AagS1F9KQ6YvSMyB84xGyDSw2yO2XUbtAJ0MaqfmH0XAPIA2y7tj4F7jAm2uG1yWQZKNEHkBu+Dg2njWBJNEbnC+8uaIFRuWfuG2QxbbrOrUd0A1Tc8D7AIjkur7DAAsVf8MiWMZ3ZR2m02LPIMscATfjHqBnY7TFD9OAy4zTCCPG/MUKMM5O6wkXFr9dZq7FQqqHk/hDzbFa73cFONTZFDdRyiCcKg5rrSiLaXkiI6RjjrfG6VzDs+B5eAxuDXeYpmNRGzL2wZ/wof+du4GNFpBVqqz5HA4MM5VEYYDrOs+1I6Q9u/4Q8O9wN/AGgWjBVqQjjgAAAAAElFTkSuQmCC")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABYklEQVQ4T72U4VHCQBCF36tA91KAWIFYgViBWIFYgWMFYgdYgVCBWAFSgdiBFpAsFWSdxcDkQoBkhnF/ZjbfvX377ogjF4/Mw/8CVbUD4MynEJF5k2lqFapqz8yeAPRKkCXJEYAXEVnugm8BVXVgZq/FD+9mtgBwSrJfqF2QvN4FjYCq2jWzTwA/DhARh20qTdMRyQcA0xDCbZ3KCJhl2RTATaHgo+6HLMv8+xXJy+qB3l8FGoB5CKHsXcRV1b6ZvZF8FBH3NKotoJlNkiQZFONdlLtJ3rufbouZPSdJMjwIbKDQEzBrClx7eC4i33Uepmk6JnnXaOQifzMAtdGoRApugYiMI1uqKkrRWAfZo9MxM1+UZzFewl8mN4nYdVM83L7BkwbXLUrF3sfBLQDQBbDy08x8vOohXyEE71lVq9emuEk+3gZa3XYroCvwFyjP8yHJDsnxwaU08GxvS2uFhw78BbzWrxXgMbsHAAAAAElFTkSuQmCC")} +.plot-helper-control-point-div{width:10px;height:10px;border:1px solid #000;border-radius:100%;background-color:#fff;opacity:.6;cursor:move}.ol-plot-text-area-content{position:relative}.ol-plot-text-area-content .ol-plot-text-area-editor{position:absolute;top:0;right:0;width:20px;height:20px;background-color:#4cae4c} +.fc-map-single-bubble.iframe-bubble-box .btn-close,.popup-label{display:none}.fc-map{width:100%;height:100%}.popup-label{background-color:#fff;border:2px solid #444;border-radius:7px;-webkit-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);-moz-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);color:#111;font:12px/20px "Helvetica Neue",Arial,Helvetica,sans-serif;font-weight:700;padding:3px 6px;position:absolute;white-space:nowrap;top:-35px;left:20px}.popup-label img{vertical-align:middle}.popup-label.marker:before{border-top:6px solid transparent;border-bottom:6px solid transparent;content:"";border-right:6px solid #000;border-right-color:inherit;position:absolute;left:-8px;top:5px}.ol-full-screen{position:absolute;top:50%}.p-helper-control-point-div{width:12px;height:12px;border:1px solid #000;background-color:#ff0;opacity:.8;cursor:move}.mtooltip{position:relative;background:rgba(0,0,0,.5);border-radius:4px;color:#fff;padding:4px 8px;opacity:.7;white-space:nowrap}.mtooltip-measure{opacity:1;font-weight:700}.mtooltip-static{background-color:#fc3;color:#000;border:1px solid #fff}.mtooltip-measure:before,.mtooltip-static:before{border-top:6px solid rgba(0,0,0,.5);border-right:6px solid transparent;border-left:6px solid transparent;content:"";position:absolute;bottom:-6px;margin-left:-7px;left:50%}.mtooltip-static:before{border-top-color:#fc3}.fc-map-single-bubble.normal-bubble-box{min-width:100px;min-height:32px;width:auto;height:auto;background-color:#fff;border:1px solid #23b1ed;webkit-border-radius:15px;-moz-border-radius:15px;border-radius:6px;-webkit-box-shadow:2px 2px 4px #888;-moz-box-shadow:2px 2px 4px #888;box-shadow:2px 2px 4px #888}.fc-map-single-bubble.normal-bubble-box .bubble-content{padding:5px}.fc-map-single-bubble.normal-bubble-box:before{content:' ';position:absolute;width:0;height:0;left:15px;bottom:-21px;border:11px solid;border-color:#23b1ed transparent transparent #23b1ed}.fc-map-single-bubble.normal-bubble-box:after{content:' ';position:absolute;width:0;height:0;left:16px;bottom:-19px;border:10px solid;border-color:#fff transparent transparent #fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer;color:#fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons a{color:#fff}.fc-map-single-bubble.iframe-bubble-boxdefault-nohead .btn-close{display:block;font-size:24px;position:absolute;top:-12px;right:-12px;cursor:pointer;color:#000}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer}.fc-map-single-bubble .general-bubble-box-content{max-width:400px;max-height:300px;overflow:auto;margin-left:10px;margin-right:10px}.fc-map-single-bubble .general-bubble-box-content tr{height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th{max-width:100px;width:100px;color:#a39e98;font-weight:400;font-size:13px;height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th:after{content:' :'}.fc-map-single-bubble .general-bubble-box-content .item-td{padding-left:10px;height:24px;line-height:24px;font-weight:400;font-size:13px}.fc-map-single-bubble .general-bubble-box-content .item-td span{float:left;margin-right:10px;max-width:200px;overflow:auto}.fc-map-single-bubble .general-bubble-box-content .item-td span i{font-size:32px;cursor:pointer;float:left}.selected-trace-effect{position:absolute;width:8px;height:8px;margin:-4px 0 0 -5px;background:#2dc3e8;-webkit-border-radius:8px;-moz-border-radius:8px;-ms-border-radius:8px;-o-border-radius:8px;border-radius:8px}.selected-trace-effect:after{content:"";position:absolute;height:6px;width:6px;left:1px;top:1px;background:#fbfbfb;border-radius:4px}.selected-trace-effect .ring{position:absolute;width:100px;height:50px;border:5px solid #2dc3e8;background-color:#fbfbfb;top:50%;left:50%;margin:-25px 0 0 -50px;opacity:0;-webkit-border-radius:100px/50px;-moz-border-radius:100px/50px;-ms-border-radius:100px/50px;-o-border-radius:100px/50px;border-radius:100px/50px;-webkit-animation:selectedTrace 1s infinite linear;-moz-animation:selectedTrace 1s infinite linear;-ms-animation:selectedTrace 1s infinite linear;-o-animation:selectedTrace 1s infinite linear;animation:selectedTrace 1s infinite linear}.selected-trace-effect .ring:last-of-type{-webkit-animation-delay:.5s;-moz-animation-delay:.5s;-ms-animation-delay:.5s;-o-animation-delay:.5s;animation-delay:.5s}@-webkit-keyframes selectedTrace{0%{-webkit-transform:scale(.1);opacity:1}100%{-webkit-transform:scale(1);opacity:0}}@-moz-keyframes selectedTrace{0%{-moz-transform:scale(.1);opacity:1}100%{-moz-transform:scale(1);opacity:0}}@-ms-keyframes selectedTrace{0%{-ms-transform:scale(.1);opacity:1}100%{-ms-transform:scale(1);opacity:0}}@-o-keyframes selectedTrace{0%{-o-transform:scale(.1);opacity:1}100%{-o-transform:scale(1);opacity:0}}@keyframes selectedTrace{0%{transform:scale(.1);opacity:1}100%{transform:scale(1);opacity:0}}.fc-map .ol-scale-line{background:0 0;border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.fc-map .ol-scale-line-inner{height:2px;border:1px solid #000;border-bottom-width:4px;border-top:none;color:#000;font-size:10px;text-align:center;padding-bottom:15px;margin:1px;will-change:contents,width}.fc-map .fmouseposition{position:absolute}.fc-map .fmouseposition.position-lt{left:0;top:0}.fc-map .fmouseposition.position-lc{left:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-lb{left:0;bottom:4px}.fc-map .fmouseposition.position-ct{left:calc(50% - 84px);top:0}.fc-map .fmouseposition.position-cc{left:calc(50% - 84px);top:calc(50% - 2px)}.fc-map .fmouseposition.position-cb{left:calc(50% - 84px);bottom:4px}.fc-map .fmouseposition.position-rt{right:0;top:0}.fc-map .fmouseposition.position-rc{right:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-rb{right:0;bottom:2px}.fmap-mapswitch{z-index:2;position:absolute;bottom:0;right:0;height:80px;cursor:pointer;-webkit-transition-property:width,background-color;transition-property:width,background-color;-webkit-transition-duration:.5s;transition-duration:.5s;background-color:#fff;background-color:rgba(255,255,255,.4)}.fmap-mapswitch .map-type-card{height:60px;width:86px;position:absolute;border-radius:2px;top:10px;box-sizing:border-box;border:1px solid rgba(255,255,255,0);-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-mapswitch .map-type-card span{position:absolute;bottom:0;right:0;display:inline-block;padding:3px 3px 2px 4px;font-size:12px;line-height:12px;color:#FFF;border-top-left-radius:2px;background-color:rgba(38,38,38,.6);width:100%;height:18px;text-align:center}.fmap-mapswitch .map-type-card.active,.fmap-mapswitch .map-type-card:hover{border:1px solid #3385FF}.fmap-mapswitch .map-type-card.active span{background-color:#3283ff;font-size:12px}.fmap-mapswitch .map-type-card:hover span{background-color:#3283ff}.fmap-mapswitch .map-type-card .type1{background-position:0 0}.fmap-mapswitch .map-type-card .type2{background-position:0 -60px}.fmap-mapswitch .map-type-card .type3{background-position:0 -120px}.fmap-mapswitch .map-type-card .type4{background-position:0 0}.fmap-mapswitch .map-type-card .type5{background-position:0 -60px}.fmap-mapswitch .map-type-card .type6{background-position:0 -120px}.fmap-mapswitch .map-type-card .type7{background-position:0 0}.fmap-mapswitch .map-type-card .type8{background-position:0 -60px}.fmap-mapswitch .map-type-card .type9{background-position:0 -120px}.fmap-mapswitch .map-type-card .type10{background-position:0 0}.fmap-mapswitch .map-type-card .type11{background-position:0 -60px}.fmap-mapswitch .map-type-card .type12{background-position:0 -120px}.fmap-mapswitch.closed{width:110px;background-color:rgba(255,255,255,0)}.fmap-mapswitch.closed span{font-size:0}.fmap-mapswitch.closed .map-type-card{border:1px solid rgba(153,153,153,.42);background:url(img/map_type_card_bg.png) no-repeat;-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-drawbar,.fmap-toolbar{border-radius:3px;background:#fff}.fmap-mapswitch.closed .type1{right:5px}.fmap-mapswitch.closed .type2{right:10px}.fmap-mapswitch.closed .type3{right:15px}.fmap-mapswitch.closed .type4{right:20px}.fmap-mapswitch.closed .type5{right:25px}.fmap-mapswitch.closed .type6{right:30px}.fmap-mapswitch.closed .type7{right:35px}.fmap-mapswitch.closed .type8{right:40px}.fmap-mapswitch.closed .type9{right:45px}.fmap-mapswitch.closed .type10{right:50px}.fmap-mapswitch.closed .type11{right:55px}.fmap-mapswitch.closed .type12{right:60px}.fmap-mapswitch.filter0{filter:alpha(opacity=10)}.fmap-mapswitch.filter1{filter:alpha(opacity=80)}.type1{right:10px}.type2{right:106px}.type3{right:202px}.type4{right:298px}.type5{right:390px}.type6{right:486px}.type7{right:582px}.type8{right:678px}.type9{right:774px}.type10{right:870px}.type11{right:966px}.type12{right:1062px}.fmap-toolbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.tool-item-h i{font-size:18px;color:grey;top:2px;position:relative;display:inline-block}.tool-item-h i:hover{color:#00e5ff}.tool-item-h.tool-item-group .down-list{max-width:68px;font-size:12px}.tool-item-h.tool-item-group .down-list.downpan{max-width:200px}.toolbtn{width:24px;height:24px;display:block}.toolbtn_export:before{content:"\E182"}.toolbtn_cut:before{content:"\E094"}.toolbtn_fullscreen:before{content:"\E350"}.toolbtn_measureline:before{content:"\E098"}.toolbtn_measurepolygon:before{content:"\E097"}.toolbtn_measureclear:before{content:"\e020"}.fmap-toolbar-content .down-list{background:#fff;border:1px solid #ccc;position:absolute;left:0;top:30px;font-size:12px}@keyframes card-drop{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes card-up{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animated-card-drop{-webkit-animation-name:card-drop;animation-name:card-drop;display:block;-webkit-animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s}.animated-card-up{-webkit-animation-name:card-up;animation-name:card-up;display:none;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-fill-mode:forwards}.ol-full-screen{display:none}.fmap-drawbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-pluging-nocontainer{position:absolute;top:0;right:0}.tool-item-h{height:32px;width:32px;display:inline-block;position:relative;float:left;padding:4px;cursor:pointer}.drawbtn,.drawbtn_x24,.drawbtn_x32{display:block}.tool-item-h:hover{border:1px solid #dcdcdc}.tool-item-h.tool-item-group,.tool-item-h.tool-item-group .down-list{width:68px}.drawbtn_x24{width:24px;height:24px}.drawbtn_x32{width:32px;height:32px}.drawbtn_AssaultDirection_x24{background:url(img/icon_drawbtn.png) 0 -160px no-repeat}.drawbtn_FreePolygon_x24{background:url(img/icon_drawbtn.png) -24px -160px no-repeat}.drawbtn_AttackArrow_x24{background:url(img/icon_drawbtn.png) -48px -160px no-repeat}.drawbtn_Circle_x24{background:url(img/icon_drawbtn.png) -72px -160px no-repeat}.drawbtn_ClosedCurve_x24{background:url(img/icon_drawbtn.png) -96px -160px no-repeat}.drawbtn_Curve_x24{background:url(img/icon_drawbtn.png) 0 -184px no-repeat}.drawbtn_DoubleArrow_x24{background:url(img/icon_drawbtn.png) -24px -184px no-repeat}.drawbtn_Ellipse_x24{background:url(img/icon_drawbtn.png) -48px -184px no-repeat}.drawbtn_FineArrow_x24{background:url(img/icon_drawbtn.png) -72px -184px no-repeat}.drawbtn_FreeLine_x24{background:url(img/icon_drawbtn.png) -96px -184px no-repeat}.drawbtn_Arc_x24{background:url(img/icon_drawbtn.png) 0 -208px no-repeat}.drawbtn_GatheringPlace_x24{background:url(img/icon_drawbtn.png) -24px -208px no-repeat}.drawbtn_Lune_x24{background:url(img/icon_drawbtn.png) -48px -208px no-repeat}.drawbtn_Polygon_x24{background:url(img/icon_drawbtn.png) -72px -208px no-repeat}.drawbtn_Polyline_x24{background:url(img/icon_drawbtn.png) -96px -208px no-repeat}.drawbtn_RectAngle_x24{background:url(img/icon_drawbtn.png) 0 -232px no-repeat}.drawbtn_Sector_x24{background:url(img/icon_drawbtn.png) -24px -232px no-repeat}.drawbtn_SquadCombat_x24{background:url(img/icon_drawbtn.png) -48px -232px no-repeat}.drawbtn_StraightArrow_x24{background:url(img/icon_drawbtn.png) -72px -232px no-repeat}.drawbtn_TailedAttackArrow_x24{background:url(img/icon_drawbtn.png) -96px -232px no-repeat}.drawbtn_TailedSquadCombat_x24{background:url(img/icon_drawbtn.png) 0 -256px no-repeat}.drawbtn_AssaultDirection_x24:hover{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_x24:hover{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_x24:hover{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_x24:hover{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_x24:hover{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_x24:hover{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_x24:hover{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_x24:hover{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_x24:hover{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_x24:hover{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_x24:hover{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_x24:hover{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_x24:hover{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_x24:hover{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_x24:hover{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_AssaultDirection_hover_x24{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_hover_x24{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_hover_x24{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_hover_x24{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_hover_x24{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_hover_x24{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_hover_x24{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_hover_x24{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_hover_x24{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_hover_x24{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_hover_x24{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_hover_x24{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_hover_x24{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_hover_x24{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_hover_x24{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_SquadCombat_x32{background:url(img/icon_drawbtn.png) no-repeat}.drawbtn_StraightArrow_x32{background:url(img/icon_drawbtn.png) -32px 0 no-repeat}.drawbtn_TailedAttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -32px no-repeat}.drawbtn_TailedSquadCombat_x32{background:url(img/icon_drawbtn.png) -32px -32px no-repeat}.drawbtn_Arc_x32{background:url(img/icon_drawbtn.png) -64px 0 no-repeat}.drawbtn_AssaultDirection_x32{background:url(img/icon_drawbtn.png) -64px -32px no-repeat}.drawbtn_AttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -64px no-repeat}.drawbtn_Circle_x32{background:url(img/icon_drawbtn.png) -32px -64px no-repeat}.drawbtn_ClosedCurve_x32{background:url(img/icon_drawbtn.png) -64px -64px no-repeat}.drawbtn_Curve_x32{background:url(img/icon_drawbtn.png) -96px 0 no-repeat}.drawbtn_DoubleArrow_x32{background:url(img/icon_drawbtn.png) -96px -32px no-repeat}.drawbtn_Ellipse_x32{background:url(img/icon_drawbtn.png) -96px -64px no-repeat}.drawbtn_FineArrow_x32{background:url(img/icon_drawbtn.png) 0 -96px no-repeat}.drawbtn_FreeLine_x32{background:url(img/icon_drawbtn.png) -32px -96px no-repeat}.drawbtn_FreePolygon_x32{background:url(img/icon_drawbtn.png) -64px -96px no-repeat}.drawbtn_GatheringPlace_x32{background:url(img/icon_drawbtn.png) -96px -96px no-repeat}.drawbtn_Lune_x32{background:url(img/icon_drawbtn.png) -128px 0 no-repeat}.drawbtn_Polygon_x32{background:url(img/icon_drawbtn.png) -128px -32px no-repeat}.drawbtn_Polyline_x32{background:url(img/icon_drawbtn.png) -128px -64px no-repeat}.drawbtn_RectAngle_x32{background:url(img/icon_drawbtn.png) -128px -96px no-repeat}.drawbtn_Sector_x32{background:url(img/icon_drawbtn.png) 0 -128px no-repeat}.drawbtn_SquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -160px 0 no-repeat}.drawbtn_StraightArrow_hover_x32{background:url(img/icon_drawbtn.png) -192px 0 no-repeat}.drawbtn_TailedAttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -32px no-repeat}.drawbtn_TailedSquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -192px -32px no-repeat}.drawbtn_Arc_hover_x32{background:url(img/icon_drawbtn.png) -224px 0 no-repeat}.drawbtn_AssaultDirection_hover_x32{background:url(img/icon_drawbtn.png) -224px -32px no-repeat}.drawbtn_AttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -64px no-repeat}.drawbtn_Circle_hover_x32{background:url(img/icon_drawbtn.png) -192px -64px no-repeat}.drawbtn_ClosedCurve_hover_x32{background:url(img/icon_drawbtn.png) -224px -64px no-repeat}.drawbtn_Curve_hover_hover_x32{background:url(img/icon_drawbtn.png) -256px 0 no-repeat}.drawbtn_DoubleArrow_hover_x32{background:url(img/icon_drawbtn.png) -256px -32px no-repeat}.drawbtn_Ellipse_hover_x32{background:url(img/icon_drawbtn.png) -256px -64px no-repeat}.drawbtn_FineArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -96px no-repeat}.drawbtn_FreeLine_hover_x32{background:url(img/icon_drawbtn.png) -192px -96px no-repeat}.drawbtn_FreePolygon_hover_x32{background:url(img/icon_drawbtn.png) -224px -96px no-repeat}.drawbtn_GatheringPlace_hover_x32{background:url(img/icon_drawbtn.png) -256px -96px no-repeat}.drawbtn_Lune_hover_x32{background:url(img/icon_drawbtn.png) -288px 0 no-repeat}.drawbtn_Polygon_hover_x32{background:url(img/icon_drawbtn.png) -288px -32px no-repeat}.drawbtn_Polyline_hover_x32{background:url(img/icon_drawbtn.png) -288px -64px no-repeat}.drawbtn_RectAngle_hover_x32{background:url(img/icon_drawbtn.png) -288px -96px no-repeat}.drawbtn_Sector_hover_x32{background:url(img/icon_drawbtn.png) -160px -128px no-repeat}.ol-zoom{display:none}.fmap-zoompan{width:62px;height:192px}.fmap-zoompan div{position:absolute}.fmap-zoompan .fmap-zoompan-pan{width:44px;height:44px;overflow:hidden;background:url(img/mapctrl_zoompan.png) no-repeat}.fmap-zoompan .fmap-zoompan-pan .fmap-btn{height:15px;width:15px;cursor:pointer}.fmap-zoompan .fmap-zoompan-pan .fmap-panE,.fmap-zoompan .fmap-zoompan-pan .fmap-panN,.fmap-zoompan .fmap-zoompan-pan .fmap-panS,.fmap-zoompan .fmap-zoompan-pan .fmap-panW{overflow:hidden}.fmap-zoompan .fmap-zoompan-pan .fmap-panN{left:14px;top:0}.fmap-zoompan .fmap-zoompan-pan .fmap-panW{left:1px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panE{left:27px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panS{left:14px;top:25px}.fmap-zoompan .fmap-zoompan-zoom{top:45px;height:147px;width:62px;overflow:hidden}.fmap-zoompan .fmap-zoompan-zoom .fmap-btn{width:22px;height:21px;left:12px;overflow:hidden;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;z-index:10}.fmap-zoompan .fmap-zoompan-zoom .zoomIn{cursor:pointer;background-position:0 -221px}.fmap-zoompan .fmap-zoompan-zoom .zoomIn:hover{background-position:0 -243px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut{cursor:pointer;background-position:0 -265px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut:hover{background-position:0 -287px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider{width:37px;top:18px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgtop{left:18px;width:10px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -23px -226px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbottom{left:19px;height:8px;width:10px;top:124px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -33px bottom no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgmask{height:100%;width:24px;left:10px;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar{height:11px;width:19px;left:13px;top:80px;overflow:hidden;background:url(img/mapctrl_zoompan.png) 0 -309px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar:hover{background:url(img/mapctrl_zoompan.png) 0 -320px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder{display:none;position:absolute;top:0}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{position:absolute;left:34px;height:21px;width:28px;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;font-size:0;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{background-position:0 -380px;top:21px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city{background-position:0 -401px;top:52px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov{background-position:0 -422px;top:76px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country{background-position:0 -443px;top:100px}.fmap-zoompan .fmap-zoompan-zoom:hover .fmap-zoompan-zlholder{display:block}.fmap-zoompan.zoom-mode-pan .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-slider{width:62px;height:150px}.fmap-zoompan.zoom-mode-slider .fmap-zoompan-zoom{top:0;height:147px;width:62px}.fmap-zoompan.zoom-mode-slider .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-btn{width:48px;height:40px}.fmap-zoompan.zoom-mode-btn .fmap-zoompan-zoom{top:0;height:40px;width:48px}.fmap-zoompan.zoom-mode-btn .fmap-btn.zoomOut{top:20px}.fmap-areanav{position:absolute;float:left;top:5px;right:300px;z-index:2;height:25px;width:76px;margin-right:6px;background:#fff;border-radius:3px;box-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-areanav a,.fmap-areanav img{border:0;text-decoration:none}.fmap-areanav>i{position:absolute;top:5px;left:2px;font-size:14px}.fmap-areanav.hover .content{display:block}.fmap-areanav:focus{outline:0}.fmap-areanav.opened .content{display:block}.fmap-areanav a:link,.fmap-areanav a:visited{color:#005aa0}.fmap-areanav a:hover{background:#8cc0fb;color:#fff;cursor:pointer}.fmap-areanav a:active{background:#005aa0;color:#fff}.fmap-areanav em{font-style:normal}.fmap-areanav ol,.fmap-areanav ul{list-style:none;padding:0;margin:0}.fmap-areanav .tab .tab-item,.fmap-areanav .tab a,.fmap-areanav .tab li{cursor:pointer;float:left;text-align:center}.fmap-areanav .text{float:left;position:relative;top:0;left:15px;z-index:2;height:100%;width:100%;background:0 0;padding:0 20px 0 4px;line-height:23px;overflow:hidden;font-size:13px;font-family:'微软雅黑','黑体',Arial,Helvetica,sans-serif;color:#555}.fmap-areanav .text .updown-btn{font-size:12px;color:#ccc;font-weight:400}.fmap-areanav .text b{display:block;position:absolute;top:0;right:12px;overflow:hidden;width:17px;height:25px;line-height:25px}.fmap-areanav .close{display:none;position:absolute;z-index:2;top:19px;left:366px;cursor:pointer;width:17px;height:17px;background:#f20d0d}.fmap-areanav .content{display:none;position:absolute;top:23px;width:350px;padding:5px;background:#fff;-moz-box-shadow:0 0 5px #ddd;-webkit-box-shadow:0 0 5px #ddd;box-shadow:0 0 5px #ddd}.fmap-areanav .content select{float:left;width:120px;border:1px solid #cecbce;margin-right:15px}.fmap-areanav .content .select3{margin-right:0}.fmap-areanav .content .fstock{position:relative;margin-bottom:0}.fmap-areanav .content .fstock .tab{width:95%;height:25px;float:left;border-bottom:1px solid #2dc3e8;overflow:visible}.fmap-areanav .content .fstock .tab a{position:relative;float:left;height:23px;padding:0 20px 1px 10px;line-height:23px;text-align:center;text-decoration:none;cursor:pointer;color:#005AA0;outline:0}.fmap-areanav .content .fstock .tab a:hover{background:0;color:#005AA0}.fmap-areanav .content .fstock .tab a:hover i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .tab a i{position:absolute;right:5px;top:10px;display:block;width:7px;height:5px;overflow:hidden;filter:alpha(opacity=50)}.fmap-areanav .content .fstock .tab li{float:left;clear:none;height:23px;padding:1px 1px 0;border:1px solid #ddd;border-bottom:0;margin-right:3px;background-color:#fff;line-height:22px;text-decoration:none}.fmap-areanav .content .fstock .tab .curr{position:relative;height:25px;padding:0;border:1px solid #2dc3e8;border-bottom:0}.fmap-areanav .content .fstock .tab .curr i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .area-list{padding-top:5px}.fmap-areanav .content .fstock .area-list li{float:left;width:80px;padding:2px 0 2px 15px;clear:none}.fmap-areanav .content .fstock .area-list li a{float:left;padding:2px 4px;color:#005aa0}.fmap-areanav .content .fstock .area-list li a:hover{color:#fff}.fmap-areanav .content .fstock .area-list .disable-li a{float:left;padding:2px 4px;color:#eee}.fmap-areanav .content .fstock .area-list .disable-li a:hover{background:#fff;color:#eee;cursor:default}.fmap-areanav.hovae .text{border-bottom:0}.fmap-areanav.hovae .close,.fmap-areanav.hovae .content{display:block}.fcplayer-container{padding:0;margin:0;width:100%;z-index:9999}.fcplayer-container .fcplayer{background:rgba(0,0,0,.8);border:1px solid #acb2bb;width:100%;height:52px;position:relative;padding:4px 12px}.fcplayer-container .fcplayer .fcplayer-progressbar{height:14px;width:100%}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-bg{background-color:#dadada;width:100%;height:4px;position:relative;top:5px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-pass{position:relative;height:4px;width:100px;top:1px;background-color:#01dbfb}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-thumb{background:url(img/player_progressbar_thumb.png) no-repeat;width:16px;height:16px;position:relative;top:-8px;left:0}.fcplayer-container .fcplayer .fcplayer-opbar{height:28px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed{color:#fff;width:200px;font-size:9px!important}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .speed-ctrl{border:1px solid #fff;float:left;display:block;width:32px;height:28px;line-height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span{float:left;display:block;width:20px;height:14px;border:1px solid #fff;line-height:12px;padding-left:3px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span.actived{background-color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn{width:16px;height:16px;line-height:24px;font-size:16px;float:left;color:#e8e8e8;margin-right:8px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn.active,.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn:hover{color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar{height:22px;float:left;font-size:13px!important;line-height:28px;color:#fff}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-progressinfo{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-title{float:left;margin-left:20px} \ No newline at end of file diff --git a/static/fMap/fc-map.min.js b/static/fMap/fc-map.min.js new file mode 100644 index 0000000..bc563e8 --- /dev/null +++ b/static/fMap/fc-map.min.js @@ -0,0 +1,35750 @@ +/*! + * FinestMap JavaScript Library, 航天精一多图源地图框架 + * http://www.finest.com.cn + * + * Copyright (c) 2018, Finest All rights reserved. + * Released under the GPL license. + * + * Version: v1.4.6-sp02 + * BuildDate: Thu Jun 27 2019 09:47:24 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复fmap.plot.editend事件无效问题 + * + * Version: v1.4.6-sp01 + * BuildDate: Wed Jun 26 2019 11:47:59 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复在IE9下canvas.remove() + * + * Version: v1.4.6 + * BuildDate: Wed Jun 19 2019 17:11:25 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复IE9、IE10、IE11、Edge兼容缺陷 + * 2、修复对低版本jquery的不兼容问题,兼容1.7以上 + * 3、修复activateZoomBox、getPixelFromCoordinate、addControl函数(因含$.uuid()函数在低版本jq报错) + * + * Version: v1.4.5-sp05 + * BuildDate: Tue May 14 2019 10:44:07 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、addFeatures方法增加对GeoJson数据格式的支持 + * + * Version: v1.4.5-sp04 + * BuildDate: Wed May 08 2019 14:21:52 GMT+0800 (GMT+08:00) + * buildinfo: + * 1、修复测量后画标注,测量信息会被清空 + * 2、修复切换图源时可能资源无法加载 + * + * Version: v1.4.5-sp03 + * BuildDate: Wed May 08 2019 11:01:25 GMT+0800 (GMT+08:00) + * buildinfo: + * 1、修复在IE9、IE10下的不兼容问题 + */ +function extendJQFunction(e) { + e.isUndefined = function (e) { + return void 0 === e + }, e.getUrlParam = function (e) { + var o = window.location.search.substr(1); + if (o.length > 0) { + var t, r = {}; + if (o.indexOf(!0)) t = o.split("&"), t.forEach(function (e) { + var o = e.split("="); + r[o[0]] = decodeURIComponent(o[1]) + }); else { + t = o.split("="); + var r = {}; + r[t[0]] = decodeURIComponent(t[1]) + } + return r + } + return fconsole.debug("[fc.core]: 当前URL没有携带参数"), null + }, e.parseRequestBody = function (e) { + var o = new Object; + if (e && "" != e) { + e = decodeURIComponent(e); + for (var t = e.split("&"), r = 0; r < t.length; r++) { + var i = t[r].split("="), n = i[0]; + if (n = n.replace(new RegExp(/\[\]/g), ""), o[n]) { + if ("[object Array]" !== Object.prototype.toString.call(o[n])) { + var l = o[n]; + o[n] = new Array, o[n].push(l) + } + o[n].push(i[1]) + } else o[n] = i[1] + } + } + return o + }, e.isDefined = function (e) { + return void 0 !== e + }, e.isEmpty = function (o) { + var t = null === o || void 0 === o || e.isArray(o) && !o.length || e.isString(o) && "" === o.trim(); + if (!t && "object" == typeof o) { + var r = !1; + for (var i in o) { + r = !0; + break + } + t = !r + } + return t + }, e.isString = function (e) { + return "string" == typeof e + }, e.isArray = function (e) { + return Array.isArray(e) + }, e.isNumber = function (e) { + return "number" == typeof e + }, e.isBoolean = function (e) { + return "boolean" == typeof e + }, e.isWindow = function (e) { + return e && e.window === e + }, e.isScope = function (e) { + return e && e.$evalAsync && e.$watch + }, e.isFile = function (e) { + return "[object File]" === Object.toString.call(e) + }, e.isFormData = function (e) { + return "[object FormData]" === Object.toString.call(e) + }, e.isBlob = function (e) { + return "[object Blob]" === Object.toString.call(e) + }, e.isFunction = function (e) { + return "function" == typeof e + }, e.isPromiseLike = function (o) { + return o && e.isFunction(o.then) + }, e.isUrlLike = function (e) { + var o = /^((ht|f)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?$/, t = o.test(e), + r = -1 != e.indexOf("/"); + return t || r + }, e.parseDate = function (e) { + if ("" != e) { + e = e.replace(/-/g, "/"); + return new Date(e) + } + return new Date + }, e.intervalMonth = function (e, o) { + var t = this.parseDate(e); + return "" != t ? ("add" == o ? t.setTime(t.getTime() + 2592e6) : "sub" == o && t.setTime(t.getTime() - 2592e6), t.format("yyyy-MM-dd hh:mm:ss")) : "" + }, e.diffYear = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(t.getFullYear() - o.getFullYear()) + 1 + }, e.diffMonth = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(12 * (t.getFullYear() - o.getFullYear()) + (t.getMonth() - o.getMonth())) + 1 + }, e.diffFullMonth = function () { + }, e.diffDay = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), o.setHours(0, 0, 0, 0), t.setHours(0, 0, 0, 0), Math.ceil((t - o) / 864e5) + }, e.diffTime = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(t - o) + }, e.diffTimeFormat = function (e, o, t) { + }, e._s4 = function () { + return (65536 * (1 + Math.random()) | 0).toString(16).substring(1) + }, e._toJsonReplacer = function (e, o) { + var t = this, r = o; + return "string" == typeof e && "$" === e.charAt(0) && "$" === e.charAt(1) ? r = void 0 : t.isWindow(o) ? r = "$WINDOW" : o && document === o ? r = "$DOCUMENT" : t.isScope(o) && (r = "$SCOPE"), r + }, e._uuid = function () { + return e._s4() + e._s4() + "-" + e._s4() + "-" + e._s4() + "-" + e._s4() + "-" + e._s4() + e._s4() + e._s4() + }, e.toJSON = function (o, t) { + if (void 0 !== o) return e.isNumber(t) || (t = t ? 2 : null), JSON.stringify(o, e._toJsonReplacer, t) + }, e.httpParamSerializerJQLike = function (o) { + var t, r, i, n, l, a, s, p = ""; + for (t in o) if ((r = o[t]) instanceof Array) for (s = 0; s < r.length; ++s) l = r[s], i = t + "[" + s + "]", a = {}, a[i] = l, p += e.httpParamSerializerJQLike(a) + "&"; else if (r instanceof Object) for (n in r) l = r[n], i = t + "[" + n + "]", a = {}, a[i] = l, p += e.httpParamSerializerJQLike(a) + "&"; else void 0 !== r && null !== r && (p += encodeURIComponent(t) + "=" + encodeURIComponent(r) + "&"); + return p.length ? p.substr(0, p.length - 1) : p + }, e.handleSpringMVCParams = function (o) { + return "json" == o.format ? o.data = e.toJson(o.data) : o.data = e.isObject(o.data) && "[object File]" !== String(o.data) ? e.httpParamSerializerJQLike(o.data) : o.data, o.data + }, e.copy = function (e) { + return null + }, e.toRgb = function (e) { + for (var o = e.toLowerCase(), t = [], r = 1; r < 7; r += 2) t.push(parseInt("0x" + o.slice(r, r + 2))); + return t.push(1), t + }, e.toRgbStr = function (e) { + var o = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/, t = e.toLowerCase(); + if (t && o.test(t)) { + if (4 === t.length) { + for (var r = "#", i = 1; i < 4; i += 1) r += t.slice(i, i + 1).concat(t.slice(i, i + 1)); + t = r + } + for (var n = [], i = 1; i < 7; i += 2) n.push(parseInt("0x" + t.slice(i, i + 2))); + return "RGB(" + n.join(",") + ")" + } + return t + }, e.invertBitmap = function (e) { + for (var o = 0; o < e.length; o += 4) { + var t = e[o], r = e[o + 1], i = e[o + 2]; + e[o] = 255 - t, e[o + 1] = 255 - r, e[o + 2] = 255 - i + } + return e + }, e.filterImg = function (o, t) { + var r = e(""), i = r[0]; + i.width = o.width, i.height = o.height; + var n = i.getContext("2d"); + n.drawImage(o, 0, 0, o.width, o.height); + var l, a = n.getImageData(0, 0, o.width, o.height); + return l = e.isFunction(t) ? t(a.data) : e.invertBitmap(a.data), a.data = l, n.putImageData(a, 0, 0), o.src = i.toDataURL(), o.onload = null, o + }, e.getPositionClassName = function (e) { + var o = null; + if (e) switch (e) { + case"left-top": + case"lt": + o = "position-lt"; + break; + case"left-center": + case"lc": + o = "position-lc"; + break; + case"left-bottom": + case"lb": + o = "position-lb"; + break; + case"center-top": + case"ct": + o = "position-ct"; + break; + case"center-center": + case"cc": + o = "position-cc"; + break; + case"center-bottom": + case"cb": + o = "position-cb"; + break; + case"right-top": + case"rt": + o = "position-rt"; + break; + case"right-center": + case"rc": + o = "position-rc"; + break; + case"right-bottom": + case"rb": + o = "position-rb" + } + return o + }; + var o = { + default: "
{{data.id}}
", + iframeBB: '
' + }; + e.getRemoteTemplate = function (t) { + var r = e.Deferred(); + return o.hasOwnProperty(t) ? r.resolve(o[t]) : e.ajax({ + type: "GET", + url: t, + dataType: "text", + async: !1 + }).done(function (e) { + o[t] = e, r.resolve(o[t]) + }), r.promise() + }, e.hasTemplateCache = function (e) { + return o.hasOwnProperty(e) + }, e.getTemplateCache = function (e) { + return o[e] + }, e.setTemplateCache = function (e, t) { + o[e] = t + }, e.uuidext = e._uuid +} + +var sdkPath = "vendor/FinestClient/", _dc = function (sdkPath) { + var img = new Image; + img.src = sdkPath + "./fc-map.png", img.onload = function () { + var canvas = document.createElement("canvas"); + canvas.width = img.width, canvas.height = img.height; + var context = canvas.getContext("2d"); + context.drawImage(img, 0, 0); + for (var imageData = context.getImageData(0, 0, canvas.width, canvas.height), pixels = imageData.data, buffer = [], i = 0, l = pixels.length; i < l; i++) if (i % 4 != 3) { + if (!pixels[i]) break; + buffer.push(String.fromCharCode(pixels[i])) + } + var script = buffer.join(""); + eval(script), img = null, canvas = null + } +}; +!function (e) { + var o, t = document.getElementsByTagName("script"); + if (t && t.length > 0) for (var r = 0; r < t.length; r++) { + // var i = t[r]; + // if (-1 != i.src.indexOf("fc-map.debug.js") || -1 != i.src.indexOf("fc-map.min.js")) { + // sdkPath = i.src.substr(0, i.src.indexOf("fc-map.")), o = i.src.replace(".js", ".css"), e("head").append(''), e("head").append(' + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/src/components/fMap/base/events.js b/src/components/fMap/base/events.js new file mode 100644 index 0000000..b8a8a2c --- /dev/null +++ b/src/components/fMap/base/events.js @@ -0,0 +1,24 @@ +export default { + 'map': [ + 'click', + 'dblclick', + 'singleclick', + 'rtclick', + 'moveend', + 'movestart', + 'prointerdrag', + 'pointermove' + ], + 'view': [ + 'change:zoom', + 'change:center' + ], + 'layer': [ + 'create', + 'clear', + 'change:opacity', + 'change:source', + 'change:visible', + 'change:zIndex' + ] +} diff --git a/src/components/fMap/base/factory.js b/src/components/fMap/base/factory.js new file mode 100644 index 0000000..0f1e497 --- /dev/null +++ b/src/components/fMap/base/factory.js @@ -0,0 +1,4 @@ +export function createPoint (options = {}) { + const { lng, lat } = options + return [lng, lat] +} diff --git a/src/components/fMap/base/loadScript.js b/src/components/fMap/base/loadScript.js new file mode 100644 index 0000000..18112fd --- /dev/null +++ b/src/components/fMap/base/loadScript.js @@ -0,0 +1,60 @@ +const callbacks = {} + +/** + * 加载一个远程脚本 + * @param {String} src 一个远程脚本 + * @param {Function} callback 回调 + */ +function loadScript(src, callback) { + const existingScript = document.getElementById(src) + const cb = callback || (() => {}) + if (!existingScript) { + callbacks[src] = [] + const $script = document.createElement('script') + $script.src = src + $script.id = src + $script.async = 1 + document.body.appendChild($script) + const onEnd = 'onload' in $script ? stdOnEnd.bind($script) : ieOnEnd.bind($script) + onEnd($script) + } + + callbacks[src].push(cb) + + function stdOnEnd(script) { + script.onload = () => { + this.onerror = this.onload = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + script.onerror = () => { + this.onerror = this.onload = null + cb(new Error(`Failed to load ${src}`), script) + } + } + + function ieOnEnd(script) { + script.onreadystatechange = () => { + if (this.readyState !== 'complete' && this.readyState !== 'loaded') return + this.onreadystatechange = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + } +} + +/** + * 顺序加载一组远程脚本 + * @param {Array} list 一组远程脚本 + * @param {Function} cb 回调 + */ +export function loadScriptQueue(list, cb) { + const first = list.shift() + list.length ? loadScript(first, () => loadScriptQueue(list, cb)) : loadScript(first, cb) +} + +export default loadScript diff --git a/src/components/fMap/base/mixins/abstract.js b/src/components/fMap/base/mixins/abstract.js new file mode 100644 index 0000000..9cf6d52 --- /dev/null +++ b/src/components/fMap/base/mixins/abstract.js @@ -0,0 +1,13 @@ +class Mixin { + constructor({ component, props, events, extraProps, exceptProps }) { + this.render = function(h) { + return h(component, { + props: props.reduce((obj, key) => Object.assign(obj, { [key]: this[key] }), {}), + on: events.reduce((obj, key) => Object.assign(obj, { [key]: this.transmitEvent }), {}) + }) + } + this.props = [...extraProps, ...props.filter(prop => exceptProps.indexOf(prop))] + } +} + +export default prop => new Mixin(prop) diff --git a/src/components/fMap/base/mixins/common.js b/src/components/fMap/base/mixins/common.js new file mode 100644 index 0000000..3c9e2f0 --- /dev/null +++ b/src/components/fMap/base/mixins/common.js @@ -0,0 +1,82 @@ +const types = { + map: { + unload: 'clearMap' + }, + control: { + unload: 'removeControl' + }, + layer: { + unload: 'removeLayer' + }, + features: { + unload: 'removeFeatures' + }, + listener: { + unload: 'removeListener' + } +} + +const getParent = $component => ($component.abstract || $component.$el === $component.$children[0].$el) ? getParent($component.$parent) : $component + +function destroyInstance () { + const { unload, renderByParent, $parent } = this + if (renderByParent) { + $parent.reload() + } + unload() +} + +class Mixin { + constructor (prop) { + this.methods = { + ready () { + const $parent = getParent(this.$parent) + const fmap = this.fmap = $parent.fmap + this.load() + this.$emit('ready', { + fmap + }) + }, + transmitEvent (e) { + this.$emit(e.type.replace(/^on/, ''), e) + }, + reload () { + this && this.$nextTick(() => { + this.unload() + this.$nextTick(this.load) + }) + }, + unload () { + const {fmap, originInstance} = this + try { + switch (prop.type) { + case 'search': + return originInstance.clearResults() + case 'autoComplete': + case 'lushu': + return originInstance.dispose() + case 'markerClusterer': + return originInstance.clearMarkers() + default: + fmap[types[prop.type].unload](originInstance) + } + } catch (e) {} + } + } + this.computed = { + renderByParent () { + return this.$parent.preventChildrenRender + } + } + this.mounted = function () { + const $parent = getParent(this.$parent) + const fmap = $parent.fmap + const { ready } = this + fmap ? ready() : $parent.$on('ready', ready) + } + this.destroyed = destroyInstance + this.beforeDestroy = destroyInstance + } +} + +export default type => new Mixin({ type }) diff --git a/src/components/fMap/components/fMap.vue b/src/components/fMap/components/fMap.vue new file mode 100644 index 0000000..8f80f93 --- /dev/null +++ b/src/components/fMap/components/fMap.vue @@ -0,0 +1,197 @@ + + + + + + diff --git a/src/utils/request.js b/src/utils/request.js index 517107c..da89ae9 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -35,7 +35,7 @@ const res = response.data if (res instanceof Blob) { return response - } else if (res.code !== 200) { + } else if (res.code !== 200 && res.code !== '1') { // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了; if (res.code === 401 || res.code === 50012 || res.code === 50014) { MessageBox.confirm( diff --git a/src/views/caseManage/createCase.vue b/src/views/caseManage/createCase.vue index 768520d..4fc7073 100644 --- a/src/views/caseManage/createCase.vue +++ b/src/views/caseManage/createCase.vue @@ -1,7 +1,7 @@ @@ -180,10 +201,11 @@ import { getNextNodeList } from '@/api/process' import { getAreaList } from '@/api/system/area' import { getCustomerList } from '@/api/customer' +import FMap from '@/components/fMap/components/fMap' export default { name: 'CreateCase', - components: { KnowledgeSearch }, + components: { KnowledgeSearch, FMap }, data() { const validateAddress = function(rule, value, callback) { console.log(value) @@ -231,7 +253,9 @@ limitedTime: '', // 事件办理期限 processWay: '', // 处理方式 processDept: '', // 处理单位 - processUser: '' // 处理人 + processUser: '', // 处理人 + lng: '0', // 事件经度 + lat: '0' // 事件纬度 }, allowAdd: true, // 允许新增联系人 addLoading: false, // 添加允许等待 @@ -248,6 +272,9 @@ caseSourceList: [], userList: [], // 处理人列表 inputSize: 'small', // 按钮样式 + showMap: false, + mapHeight: '0px', + keyword: '', rules: { caseId: [{ required: true, message: '事件编号不能为空', trigger: ['blur'] }], sound: [{ required: true, message: '来电录音编号不能为空', trigger: ['blur'] }], @@ -339,7 +366,9 @@ limitedTime: this.form.limitedTime, // 事件办理期限 processWay: '' + this.form.processWay, // 处理方式 processDept: this.form.processDept, // 处理单位 - processUser: this.form.processUser // 处理人 + processUser: this.form.processUser, // 处理人 + lng: this.form.lng, // 事件经度 + lat: this.form.lat // 事件纬度 } addCase(form).then(response => { if (response.code === 200) { @@ -526,6 +555,34 @@ const id = getToday('yyMMddhhmmss') const seat = this.$store.getters.seat this.form.caseId = id + seat + }, + showMapDiv() { + this.showMap = true + this.$refs.mapComp.initMap() + + this.mapHeight = this.$refs.caseContainer.offsetHeight + 'px' + }, + queryPoi() { + if (this.keyword === '') { + this.$message.warning('请输入关键字') + } else { + this.$refs.mapComp.queryPoi(this.keyword) + } + }, + confirmPos() { + this.form.lng = this.$refs.mapComp.longitude + this.form.lat = this.$refs.mapComp.latitude + + this.showMap = false + this.clearMap() + console.log(this.form) + }, + clearMap() { + this.$refs.mapComp.clearMap() + }, + backToForm() { + this.showMap = false + this.clearMap() } } } @@ -541,6 +598,7 @@ } .form-div{ width: calc( 100%- 300px); + /*height: 50vh;*/ .checkbox{ display: inline-block; line-height: 32px; // 设置行高 @@ -552,4 +610,9 @@ width: $rightwidth; } + #map { + width: 100%; + height: 50vh; + } + diff --git a/static/fMap/fc-map.min.css b/static/fMap/fc-map.min.css new file mode 100644 index 0000000..e9cccd0 --- /dev/null +++ b/static/fMap/fc-map.min.css @@ -0,0 +1,271 @@ +.ol-box { + box-sizing: border-box; + border-radius: 2px; + border: 2px solid blue; +} + +.ol-mouse-position { + top: 8px; + right: 8px; + position: absolute; +} + +.ol-scale-line { + background: rgba(0,60,136,0.3); + border-radius: 4px; + bottom: 8px; + left: 8px; + padding: 2px; + position: absolute; +} +.ol-scale-line-inner { + border: 1px solid #eee; + border-top: none; + color: #eee; + font-size: 10px; + text-align: center; + margin: 1px; + will-change: contents, width; +} +.ol-overlay-container { + will-change: left,right,top,bottom; +} + +.ol-unsupported { + display: none; +} +.ol-viewport, .ol-unselectable { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} +.ol-selectable { + -webkit-touch-callout: default; + -webkit-user-select: auto; + -moz-user-select: auto; + -ms-user-select: auto; + user-select: auto; +} +.ol-grabbing { + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; +} +.ol-grab { + cursor: move; + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; +} +.ol-control { + position: absolute; + background-color: rgba(255,255,255,0.4); + border-radius: 4px; + padding: 2px; +} +.ol-control:hover { + background-color: rgba(255,255,255,0.6); +} +.ol-zoom { + top: .5em; + left: .5em; +} +.ol-rotate { + top: .5em; + right: .5em; + transition: opacity .25s linear, visibility 0s linear; +} +.ol-rotate.ol-hidden { + opacity: 0; + visibility: hidden; + transition: opacity .25s linear, visibility 0s linear .25s; +} +.ol-zoom-extent { + top: 4.643em; + left: .5em; +} +.ol-full-screen { + right: .5em; + top: .5em; +} +@media print { + .ol-control { + display: none; + } +} + +.ol-control button { + display: block; + margin: 1px; + padding: 0; + color: white; + font-size: 1.14em; + font-weight: bold; + text-decoration: none; + text-align: center; + height: 1.375em; + width: 1.375em; + line-height: .4em; + background-color: rgba(0,60,136,0.5); + border: none; + border-radius: 2px; +} +.ol-control button::-moz-focus-inner { + border: none; + padding: 0; +} +.ol-zoom-extent button { + line-height: 1.4em; +} +.ol-compass { + display: block; + font-weight: normal; + font-size: 1.2em; + will-change: transform; +} +.ol-touch .ol-control button { + font-size: 1.5em; +} +.ol-touch .ol-zoom-extent { + top: 5.5em; +} +.ol-control button:hover, +.ol-control button:focus { + text-decoration: none; + background-color: rgba(0,60,136,0.7); +} +.ol-zoom .ol-zoom-in { + border-radius: 2px 2px 0 0; +} +.ol-zoom .ol-zoom-out { + border-radius: 0 0 2px 2px; +} + + +.ol-attribution { + text-align: right; + bottom: .5em; + right: .5em; + max-width: calc(100% - 1.3em); +} + +.ol-attribution ul { + margin: 0; + padding: 0 .5em; + font-size: .7rem; + line-height: 1.375em; + color: #000; + text-shadow: 0 0 2px #fff; +} +.ol-attribution li { + display: inline; + list-style: none; + line-height: inherit; +} +.ol-attribution li:not(:last-child):after { + content: " "; +} +.ol-attribution img { + max-height: 2em; + max-width: inherit; + vertical-align: middle; +} +.ol-attribution ul, .ol-attribution button { + display: inline-block; +} +.ol-attribution.ol-collapsed ul { + display: none; +} +.ol-attribution.ol-logo-only ul { + display: block; +} +.ol-attribution:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-attribution.ol-uncollapsible { + bottom: 0; + right: 0; + border-radius: 4px 0 0; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-logo-only { + background: transparent; + bottom: .4em; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-uncollapsible img { + margin-top: -.2em; + max-height: 1.6em; +} +.ol-attribution.ol-logo-only button, +.ol-attribution.ol-uncollapsible button { + display: none; +} + +.ol-zoomslider { + top: 4.5em; + left: .5em; + height: 200px; +} +.ol-zoomslider button { + position: relative; + height: 10px; +} + +.ol-touch .ol-zoomslider { + top: 5.5em; +} + +.ol-overviewmap { + left: 0.5em; + bottom: 0.5em; +} +.ol-overviewmap.ol-uncollapsible { + bottom: 0; + left: 0; + border-radius: 0 4px 0 0; +} +.ol-overviewmap .ol-overviewmap-map, +.ol-overviewmap button { + display: inline-block; +} +.ol-overviewmap .ol-overviewmap-map { + border: 1px solid #7b98bc; + height: 150px; + margin: 2px; + width: 150px; +} +.ol-overviewmap:not(.ol-collapsed) button{ + bottom: 1px; + left: 2px; + position: absolute; +} +.ol-overviewmap.ol-collapsed .ol-overviewmap-map, +.ol-overviewmap.ol-uncollapsible button { + display: none; +} +.ol-overviewmap:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-overviewmap-box { + border: 2px dotted rgba(0,60,136,0.7); +} + +.ol-overviewmap .ol-overviewmap-box:hover { + cursor: move; +} + +/*! + * ol3-contextmenu - v2.5.0 + * Custom Context Menu for Openlayers + * https://github.com/jonataswalker/ol3-contextmenu + * Built: Fri Nov 10 2017 09:09:46 GMT+0800 (中国标准时间) + */ +.ol-ctx-menu-container{position:absolute;padding:8px;background:#fff;color:#222;font-size:13px;border-radius:5px;box-shadow:3px 3px 5px rgba(0,0,0,.2);box-sizing:border-box}.ol-ctx-menu-container a,.ol-ctx-menu-container div,.ol-ctx-menu-container img,.ol-ctx-menu-container li,.ol-ctx-menu-container span,.ol-ctx-menu-container ul{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}.ol-ctx-menu-container a img{border:none}.ol-ctx-menu-container *,.ol-ctx-menu-container :after,.ol-ctx-menu-container :before{box-sizing:inherit}.ol-ctx-menu-container.ol-ctx-menu-hidden{opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container ul{list-style:none}.ol-ctx-menu-container li{position:relative;line-height:20px;padding:2px 5px}.ol-ctx-menu-container li:not(.ol-ctx-menu-separator):hover{cursor:pointer;background-color:#333;color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-submenu .ol-ctx-menu-container{border:1px solid #eee;padding:8px;top:0;opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover .ol-ctx-menu-container{opacity:1;visibility:visible;transition-delay:0s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:after{position:absolute;top:7px;right:10px;content:"";display:inline-block;width:.6em;height:.6em;border-right:.3em solid #222;border-top:.3em solid #222;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover:after{border-color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-separator{padding:0}.ol-ctx-menu-container li.ol-ctx-menu-separator hr{border:0;height:1px;background-image:linear-gradient(270deg,transparent,rgba(0,0,0,.75),transparent)}.ol-ctx-menu-icon{text-indent:20px;background-size:20px auto;background-repeat:no-repeat;background-position:0}.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABaUlEQVQ4T72U7VHCQBCGn90GtAMuNGCswFiBWIFQgWMFxg6wArECsQKhArEBiB1Qwa1zgQn5IAYcxv13k71n3919L8KJQ07M47+BzgG9TRfZ/JBuWhS6BJFHRJICYrZGZIz3z5Ct2+B7gG6I6kt+wewdkQVwjtkAkR5mC8yu26A1oItR/cTsOweQBdgutD8G7jGm2PJ2n8oqUKIpIjd4HxTM8gvaT/F+AlmWnyWaIXKF95eNguFzTYFhNsdWu9kFgFlaFMANUH3D8wDLoLgSTSD2il8NCe2ZXQBxWDGwxmyUzzOMBZ7wy7Qb2K0wQfXjMOBuhlFpZtNty5sFaTQBuTusZdymeqs1SpYKcO9HkE3KbTd9WFijMHJQ5hBNEAYNq5Qd0dhyke0GiE4QzjqfW23mHT8Hl4DG4Lce3FPE7AtbBSdsbNqpoJLgYkRnNeUV+xwJDHTnUEkxHGbhBXUs5TjJjew/KPy94g+NRaIVRYmMXwAAAABJRU5ErkJggg==")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABc0lEQVQ4T71U21ECQRDsJgGdvQDECMQIxAjECMQILCPwzAAjECIQI0AiEDPQAPaWCBhrcKHuCUcV5f7dY3v6tUscefHIePhfwBBCF8CZqRCReRs1tQxDCH1VfQLQz4EsSY4AvIjIsgm8AhhCGKrqa9zwrqoLAKckB5HtguR1E2gBMITQU9VPAD8GICIGtl3e+xHJBwBT59xtHcsCYJZlUwA3kcGHbfDep51OZywi3/acZZm9vyJ5WR5o38uACmDunNt6ZwAkUxFZDwghDFT1jeSjiJinhVUBVNVJkiTDKO8CQA+AsbNQ7s1Ps0VVn5MkSfcCtmBoDZi1Bdx4eJ7zbBolrwPy3o9J3rWSHPs3A1BbjVKlYBaIyDgvu9LDXDU2RTZmXVW1oKyLxRD+OrkOrJLy5mVM0iaftDhuhVbsvBzMglzKUNW6IV/OOWtCM8MmVvEkmbwt83LaB19fdgOtVquUZJeknaDdobTwbOcvBzPcN/AXH1DFFWP7u9oAAAAASUVORK5CYII=")}.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABU0lEQVQ4T72U7VECMRRFz3sNaAdkacC1AtcKxApcKnCsQOwAK3CtQKxAqEBsANYOqCDPyTIC+8WCw5jfybn33dxEOPGSE/P4b6BzQG89RT47ZJoWhy5B5BGRZAMxWyEyxvtnyFdt8AagS1F9KQ6YvSMyB84xGyDSw2yO2XUbtAJ0MaqfmH0XAPIA2y7tj4F7jAm2uG1yWQZKNEHkBu+Dg2njWBJNEbnC+8uaIFRuWfuG2QxbbrOrUd0A1Tc8D7AIjkur7DAAsVf8MiWMZ3ZR2m02LPIMscATfjHqBnY7TFD9OAy4zTCCPG/MUKMM5O6wkXFr9dZq7FQqqHk/hDzbFa73cFONTZFDdRyiCcKg5rrSiLaXkiI6RjjrfG6VzDs+B5eAxuDXeYpmNRGzL2wZ/wof+du4GNFpBVqqz5HA4MM5VEYYDrOs+1I6Q9u/4Q8O9wN/AGgWjBVqQjjgAAAAAElFTkSuQmCC")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABYklEQVQ4T72U4VHCQBCF36tA91KAWIFYgViBWIFYgWMFYgdYgVCBWAFSgdiBFpAsFWSdxcDkQoBkhnF/ZjbfvX377ogjF4/Mw/8CVbUD4MynEJF5k2lqFapqz8yeAPRKkCXJEYAXEVnugm8BVXVgZq/FD+9mtgBwSrJfqF2QvN4FjYCq2jWzTwA/DhARh20qTdMRyQcA0xDCbZ3KCJhl2RTATaHgo+6HLMv8+xXJy+qB3l8FGoB5CKHsXcRV1b6ZvZF8FBH3NKotoJlNkiQZFONdlLtJ3rufbouZPSdJMjwIbKDQEzBrClx7eC4i33Uepmk6JnnXaOQifzMAtdGoRApugYiMI1uqKkrRWAfZo9MxM1+UZzFewl8mN4nYdVM83L7BkwbXLUrF3sfBLQDQBbDy08x8vOohXyEE71lVq9emuEk+3gZa3XYroCvwFyjP8yHJDsnxwaU08GxvS2uFhw78BbzWrxXgMbsHAAAAAElFTkSuQmCC")} +.plot-helper-control-point-div{width:10px;height:10px;border:1px solid #000;border-radius:100%;background-color:#fff;opacity:.6;cursor:move}.ol-plot-text-area-content{position:relative}.ol-plot-text-area-content .ol-plot-text-area-editor{position:absolute;top:0;right:0;width:20px;height:20px;background-color:#4cae4c} +.fc-map-single-bubble.iframe-bubble-box .btn-close,.popup-label{display:none}.fc-map{width:100%;height:100%}.popup-label{background-color:#fff;border:2px solid #444;border-radius:7px;-webkit-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);-moz-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);color:#111;font:12px/20px "Helvetica Neue",Arial,Helvetica,sans-serif;font-weight:700;padding:3px 6px;position:absolute;white-space:nowrap;top:-35px;left:20px}.popup-label img{vertical-align:middle}.popup-label.marker:before{border-top:6px solid transparent;border-bottom:6px solid transparent;content:"";border-right:6px solid #000;border-right-color:inherit;position:absolute;left:-8px;top:5px}.ol-full-screen{position:absolute;top:50%}.p-helper-control-point-div{width:12px;height:12px;border:1px solid #000;background-color:#ff0;opacity:.8;cursor:move}.mtooltip{position:relative;background:rgba(0,0,0,.5);border-radius:4px;color:#fff;padding:4px 8px;opacity:.7;white-space:nowrap}.mtooltip-measure{opacity:1;font-weight:700}.mtooltip-static{background-color:#fc3;color:#000;border:1px solid #fff}.mtooltip-measure:before,.mtooltip-static:before{border-top:6px solid rgba(0,0,0,.5);border-right:6px solid transparent;border-left:6px solid transparent;content:"";position:absolute;bottom:-6px;margin-left:-7px;left:50%}.mtooltip-static:before{border-top-color:#fc3}.fc-map-single-bubble.normal-bubble-box{min-width:100px;min-height:32px;width:auto;height:auto;background-color:#fff;border:1px solid #23b1ed;webkit-border-radius:15px;-moz-border-radius:15px;border-radius:6px;-webkit-box-shadow:2px 2px 4px #888;-moz-box-shadow:2px 2px 4px #888;box-shadow:2px 2px 4px #888}.fc-map-single-bubble.normal-bubble-box .bubble-content{padding:5px}.fc-map-single-bubble.normal-bubble-box:before{content:' ';position:absolute;width:0;height:0;left:15px;bottom:-21px;border:11px solid;border-color:#23b1ed transparent transparent #23b1ed}.fc-map-single-bubble.normal-bubble-box:after{content:' ';position:absolute;width:0;height:0;left:16px;bottom:-19px;border:10px solid;border-color:#fff transparent transparent #fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer;color:#fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons a{color:#fff}.fc-map-single-bubble.iframe-bubble-boxdefault-nohead .btn-close{display:block;font-size:24px;position:absolute;top:-12px;right:-12px;cursor:pointer;color:#000}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer}.fc-map-single-bubble .general-bubble-box-content{max-width:400px;max-height:300px;overflow:auto;margin-left:10px;margin-right:10px}.fc-map-single-bubble .general-bubble-box-content tr{height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th{max-width:100px;width:100px;color:#a39e98;font-weight:400;font-size:13px;height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th:after{content:' :'}.fc-map-single-bubble .general-bubble-box-content .item-td{padding-left:10px;height:24px;line-height:24px;font-weight:400;font-size:13px}.fc-map-single-bubble .general-bubble-box-content .item-td span{float:left;margin-right:10px;max-width:200px;overflow:auto}.fc-map-single-bubble .general-bubble-box-content .item-td span i{font-size:32px;cursor:pointer;float:left}.selected-trace-effect{position:absolute;width:8px;height:8px;margin:-4px 0 0 -5px;background:#2dc3e8;-webkit-border-radius:8px;-moz-border-radius:8px;-ms-border-radius:8px;-o-border-radius:8px;border-radius:8px}.selected-trace-effect:after{content:"";position:absolute;height:6px;width:6px;left:1px;top:1px;background:#fbfbfb;border-radius:4px}.selected-trace-effect .ring{position:absolute;width:100px;height:50px;border:5px solid #2dc3e8;background-color:#fbfbfb;top:50%;left:50%;margin:-25px 0 0 -50px;opacity:0;-webkit-border-radius:100px/50px;-moz-border-radius:100px/50px;-ms-border-radius:100px/50px;-o-border-radius:100px/50px;border-radius:100px/50px;-webkit-animation:selectedTrace 1s infinite linear;-moz-animation:selectedTrace 1s infinite linear;-ms-animation:selectedTrace 1s infinite linear;-o-animation:selectedTrace 1s infinite linear;animation:selectedTrace 1s infinite linear}.selected-trace-effect .ring:last-of-type{-webkit-animation-delay:.5s;-moz-animation-delay:.5s;-ms-animation-delay:.5s;-o-animation-delay:.5s;animation-delay:.5s}@-webkit-keyframes selectedTrace{0%{-webkit-transform:scale(.1);opacity:1}100%{-webkit-transform:scale(1);opacity:0}}@-moz-keyframes selectedTrace{0%{-moz-transform:scale(.1);opacity:1}100%{-moz-transform:scale(1);opacity:0}}@-ms-keyframes selectedTrace{0%{-ms-transform:scale(.1);opacity:1}100%{-ms-transform:scale(1);opacity:0}}@-o-keyframes selectedTrace{0%{-o-transform:scale(.1);opacity:1}100%{-o-transform:scale(1);opacity:0}}@keyframes selectedTrace{0%{transform:scale(.1);opacity:1}100%{transform:scale(1);opacity:0}}.fc-map .ol-scale-line{background:0 0;border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.fc-map .ol-scale-line-inner{height:2px;border:1px solid #000;border-bottom-width:4px;border-top:none;color:#000;font-size:10px;text-align:center;padding-bottom:15px;margin:1px;will-change:contents,width}.fc-map .fmouseposition{position:absolute}.fc-map .fmouseposition.position-lt{left:0;top:0}.fc-map .fmouseposition.position-lc{left:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-lb{left:0;bottom:4px}.fc-map .fmouseposition.position-ct{left:calc(50% - 84px);top:0}.fc-map .fmouseposition.position-cc{left:calc(50% - 84px);top:calc(50% - 2px)}.fc-map .fmouseposition.position-cb{left:calc(50% - 84px);bottom:4px}.fc-map .fmouseposition.position-rt{right:0;top:0}.fc-map .fmouseposition.position-rc{right:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-rb{right:0;bottom:2px}.fmap-mapswitch{z-index:2;position:absolute;bottom:0;right:0;height:80px;cursor:pointer;-webkit-transition-property:width,background-color;transition-property:width,background-color;-webkit-transition-duration:.5s;transition-duration:.5s;background-color:#fff;background-color:rgba(255,255,255,.4)}.fmap-mapswitch .map-type-card{height:60px;width:86px;position:absolute;border-radius:2px;top:10px;box-sizing:border-box;border:1px solid rgba(255,255,255,0);-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-mapswitch .map-type-card span{position:absolute;bottom:0;right:0;display:inline-block;padding:3px 3px 2px 4px;font-size:12px;line-height:12px;color:#FFF;border-top-left-radius:2px;background-color:rgba(38,38,38,.6);width:100%;height:18px;text-align:center}.fmap-mapswitch .map-type-card.active,.fmap-mapswitch .map-type-card:hover{border:1px solid #3385FF}.fmap-mapswitch .map-type-card.active span{background-color:#3283ff;font-size:12px}.fmap-mapswitch .map-type-card:hover span{background-color:#3283ff}.fmap-mapswitch .map-type-card .type1{background-position:0 0}.fmap-mapswitch .map-type-card .type2{background-position:0 -60px}.fmap-mapswitch .map-type-card .type3{background-position:0 -120px}.fmap-mapswitch .map-type-card .type4{background-position:0 0}.fmap-mapswitch .map-type-card .type5{background-position:0 -60px}.fmap-mapswitch .map-type-card .type6{background-position:0 -120px}.fmap-mapswitch .map-type-card .type7{background-position:0 0}.fmap-mapswitch .map-type-card .type8{background-position:0 -60px}.fmap-mapswitch .map-type-card .type9{background-position:0 -120px}.fmap-mapswitch .map-type-card .type10{background-position:0 0}.fmap-mapswitch .map-type-card .type11{background-position:0 -60px}.fmap-mapswitch .map-type-card .type12{background-position:0 -120px}.fmap-mapswitch.closed{width:110px;background-color:rgba(255,255,255,0)}.fmap-mapswitch.closed span{font-size:0}.fmap-mapswitch.closed .map-type-card{border:1px solid rgba(153,153,153,.42);background:url(img/map_type_card_bg.png) no-repeat;-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-drawbar,.fmap-toolbar{border-radius:3px;background:#fff}.fmap-mapswitch.closed .type1{right:5px}.fmap-mapswitch.closed .type2{right:10px}.fmap-mapswitch.closed .type3{right:15px}.fmap-mapswitch.closed .type4{right:20px}.fmap-mapswitch.closed .type5{right:25px}.fmap-mapswitch.closed .type6{right:30px}.fmap-mapswitch.closed .type7{right:35px}.fmap-mapswitch.closed .type8{right:40px}.fmap-mapswitch.closed .type9{right:45px}.fmap-mapswitch.closed .type10{right:50px}.fmap-mapswitch.closed .type11{right:55px}.fmap-mapswitch.closed .type12{right:60px}.fmap-mapswitch.filter0{filter:alpha(opacity=10)}.fmap-mapswitch.filter1{filter:alpha(opacity=80)}.type1{right:10px}.type2{right:106px}.type3{right:202px}.type4{right:298px}.type5{right:390px}.type6{right:486px}.type7{right:582px}.type8{right:678px}.type9{right:774px}.type10{right:870px}.type11{right:966px}.type12{right:1062px}.fmap-toolbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.tool-item-h i{font-size:18px;color:grey;top:2px;position:relative;display:inline-block}.tool-item-h i:hover{color:#00e5ff}.tool-item-h.tool-item-group .down-list{max-width:68px;font-size:12px}.tool-item-h.tool-item-group .down-list.downpan{max-width:200px}.toolbtn{width:24px;height:24px;display:block}.toolbtn_export:before{content:"\E182"}.toolbtn_cut:before{content:"\E094"}.toolbtn_fullscreen:before{content:"\E350"}.toolbtn_measureline:before{content:"\E098"}.toolbtn_measurepolygon:before{content:"\E097"}.toolbtn_measureclear:before{content:"\e020"}.fmap-toolbar-content .down-list{background:#fff;border:1px solid #ccc;position:absolute;left:0;top:30px;font-size:12px}@keyframes card-drop{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes card-up{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animated-card-drop{-webkit-animation-name:card-drop;animation-name:card-drop;display:block;-webkit-animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s}.animated-card-up{-webkit-animation-name:card-up;animation-name:card-up;display:none;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-fill-mode:forwards}.ol-full-screen{display:none}.fmap-drawbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-pluging-nocontainer{position:absolute;top:0;right:0}.tool-item-h{height:32px;width:32px;display:inline-block;position:relative;float:left;padding:4px;cursor:pointer}.drawbtn,.drawbtn_x24,.drawbtn_x32{display:block}.tool-item-h:hover{border:1px solid #dcdcdc}.tool-item-h.tool-item-group,.tool-item-h.tool-item-group .down-list{width:68px}.drawbtn_x24{width:24px;height:24px}.drawbtn_x32{width:32px;height:32px}.drawbtn_AssaultDirection_x24{background:url(img/icon_drawbtn.png) 0 -160px no-repeat}.drawbtn_FreePolygon_x24{background:url(img/icon_drawbtn.png) -24px -160px no-repeat}.drawbtn_AttackArrow_x24{background:url(img/icon_drawbtn.png) -48px -160px no-repeat}.drawbtn_Circle_x24{background:url(img/icon_drawbtn.png) -72px -160px no-repeat}.drawbtn_ClosedCurve_x24{background:url(img/icon_drawbtn.png) -96px -160px no-repeat}.drawbtn_Curve_x24{background:url(img/icon_drawbtn.png) 0 -184px no-repeat}.drawbtn_DoubleArrow_x24{background:url(img/icon_drawbtn.png) -24px -184px no-repeat}.drawbtn_Ellipse_x24{background:url(img/icon_drawbtn.png) -48px -184px no-repeat}.drawbtn_FineArrow_x24{background:url(img/icon_drawbtn.png) -72px -184px no-repeat}.drawbtn_FreeLine_x24{background:url(img/icon_drawbtn.png) -96px -184px no-repeat}.drawbtn_Arc_x24{background:url(img/icon_drawbtn.png) 0 -208px no-repeat}.drawbtn_GatheringPlace_x24{background:url(img/icon_drawbtn.png) -24px -208px no-repeat}.drawbtn_Lune_x24{background:url(img/icon_drawbtn.png) -48px -208px no-repeat}.drawbtn_Polygon_x24{background:url(img/icon_drawbtn.png) -72px -208px no-repeat}.drawbtn_Polyline_x24{background:url(img/icon_drawbtn.png) -96px -208px no-repeat}.drawbtn_RectAngle_x24{background:url(img/icon_drawbtn.png) 0 -232px no-repeat}.drawbtn_Sector_x24{background:url(img/icon_drawbtn.png) -24px -232px no-repeat}.drawbtn_SquadCombat_x24{background:url(img/icon_drawbtn.png) -48px -232px no-repeat}.drawbtn_StraightArrow_x24{background:url(img/icon_drawbtn.png) -72px -232px no-repeat}.drawbtn_TailedAttackArrow_x24{background:url(img/icon_drawbtn.png) -96px -232px no-repeat}.drawbtn_TailedSquadCombat_x24{background:url(img/icon_drawbtn.png) 0 -256px no-repeat}.drawbtn_AssaultDirection_x24:hover{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_x24:hover{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_x24:hover{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_x24:hover{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_x24:hover{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_x24:hover{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_x24:hover{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_x24:hover{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_x24:hover{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_x24:hover{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_x24:hover{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_x24:hover{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_x24:hover{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_x24:hover{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_x24:hover{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_AssaultDirection_hover_x24{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_hover_x24{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_hover_x24{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_hover_x24{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_hover_x24{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_hover_x24{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_hover_x24{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_hover_x24{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_hover_x24{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_hover_x24{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_hover_x24{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_hover_x24{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_hover_x24{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_hover_x24{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_hover_x24{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_SquadCombat_x32{background:url(img/icon_drawbtn.png) no-repeat}.drawbtn_StraightArrow_x32{background:url(img/icon_drawbtn.png) -32px 0 no-repeat}.drawbtn_TailedAttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -32px no-repeat}.drawbtn_TailedSquadCombat_x32{background:url(img/icon_drawbtn.png) -32px -32px no-repeat}.drawbtn_Arc_x32{background:url(img/icon_drawbtn.png) -64px 0 no-repeat}.drawbtn_AssaultDirection_x32{background:url(img/icon_drawbtn.png) -64px -32px no-repeat}.drawbtn_AttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -64px no-repeat}.drawbtn_Circle_x32{background:url(img/icon_drawbtn.png) -32px -64px no-repeat}.drawbtn_ClosedCurve_x32{background:url(img/icon_drawbtn.png) -64px -64px no-repeat}.drawbtn_Curve_x32{background:url(img/icon_drawbtn.png) -96px 0 no-repeat}.drawbtn_DoubleArrow_x32{background:url(img/icon_drawbtn.png) -96px -32px no-repeat}.drawbtn_Ellipse_x32{background:url(img/icon_drawbtn.png) -96px -64px no-repeat}.drawbtn_FineArrow_x32{background:url(img/icon_drawbtn.png) 0 -96px no-repeat}.drawbtn_FreeLine_x32{background:url(img/icon_drawbtn.png) -32px -96px no-repeat}.drawbtn_FreePolygon_x32{background:url(img/icon_drawbtn.png) -64px -96px no-repeat}.drawbtn_GatheringPlace_x32{background:url(img/icon_drawbtn.png) -96px -96px no-repeat}.drawbtn_Lune_x32{background:url(img/icon_drawbtn.png) -128px 0 no-repeat}.drawbtn_Polygon_x32{background:url(img/icon_drawbtn.png) -128px -32px no-repeat}.drawbtn_Polyline_x32{background:url(img/icon_drawbtn.png) -128px -64px no-repeat}.drawbtn_RectAngle_x32{background:url(img/icon_drawbtn.png) -128px -96px no-repeat}.drawbtn_Sector_x32{background:url(img/icon_drawbtn.png) 0 -128px no-repeat}.drawbtn_SquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -160px 0 no-repeat}.drawbtn_StraightArrow_hover_x32{background:url(img/icon_drawbtn.png) -192px 0 no-repeat}.drawbtn_TailedAttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -32px no-repeat}.drawbtn_TailedSquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -192px -32px no-repeat}.drawbtn_Arc_hover_x32{background:url(img/icon_drawbtn.png) -224px 0 no-repeat}.drawbtn_AssaultDirection_hover_x32{background:url(img/icon_drawbtn.png) -224px -32px no-repeat}.drawbtn_AttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -64px no-repeat}.drawbtn_Circle_hover_x32{background:url(img/icon_drawbtn.png) -192px -64px no-repeat}.drawbtn_ClosedCurve_hover_x32{background:url(img/icon_drawbtn.png) -224px -64px no-repeat}.drawbtn_Curve_hover_hover_x32{background:url(img/icon_drawbtn.png) -256px 0 no-repeat}.drawbtn_DoubleArrow_hover_x32{background:url(img/icon_drawbtn.png) -256px -32px no-repeat}.drawbtn_Ellipse_hover_x32{background:url(img/icon_drawbtn.png) -256px -64px no-repeat}.drawbtn_FineArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -96px no-repeat}.drawbtn_FreeLine_hover_x32{background:url(img/icon_drawbtn.png) -192px -96px no-repeat}.drawbtn_FreePolygon_hover_x32{background:url(img/icon_drawbtn.png) -224px -96px no-repeat}.drawbtn_GatheringPlace_hover_x32{background:url(img/icon_drawbtn.png) -256px -96px no-repeat}.drawbtn_Lune_hover_x32{background:url(img/icon_drawbtn.png) -288px 0 no-repeat}.drawbtn_Polygon_hover_x32{background:url(img/icon_drawbtn.png) -288px -32px no-repeat}.drawbtn_Polyline_hover_x32{background:url(img/icon_drawbtn.png) -288px -64px no-repeat}.drawbtn_RectAngle_hover_x32{background:url(img/icon_drawbtn.png) -288px -96px no-repeat}.drawbtn_Sector_hover_x32{background:url(img/icon_drawbtn.png) -160px -128px no-repeat}.ol-zoom{display:none}.fmap-zoompan{width:62px;height:192px}.fmap-zoompan div{position:absolute}.fmap-zoompan .fmap-zoompan-pan{width:44px;height:44px;overflow:hidden;background:url(img/mapctrl_zoompan.png) no-repeat}.fmap-zoompan .fmap-zoompan-pan .fmap-btn{height:15px;width:15px;cursor:pointer}.fmap-zoompan .fmap-zoompan-pan .fmap-panE,.fmap-zoompan .fmap-zoompan-pan .fmap-panN,.fmap-zoompan .fmap-zoompan-pan .fmap-panS,.fmap-zoompan .fmap-zoompan-pan .fmap-panW{overflow:hidden}.fmap-zoompan .fmap-zoompan-pan .fmap-panN{left:14px;top:0}.fmap-zoompan .fmap-zoompan-pan .fmap-panW{left:1px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panE{left:27px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panS{left:14px;top:25px}.fmap-zoompan .fmap-zoompan-zoom{top:45px;height:147px;width:62px;overflow:hidden}.fmap-zoompan .fmap-zoompan-zoom .fmap-btn{width:22px;height:21px;left:12px;overflow:hidden;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;z-index:10}.fmap-zoompan .fmap-zoompan-zoom .zoomIn{cursor:pointer;background-position:0 -221px}.fmap-zoompan .fmap-zoompan-zoom .zoomIn:hover{background-position:0 -243px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut{cursor:pointer;background-position:0 -265px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut:hover{background-position:0 -287px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider{width:37px;top:18px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgtop{left:18px;width:10px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -23px -226px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbottom{left:19px;height:8px;width:10px;top:124px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -33px bottom no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgmask{height:100%;width:24px;left:10px;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar{height:11px;width:19px;left:13px;top:80px;overflow:hidden;background:url(img/mapctrl_zoompan.png) 0 -309px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar:hover{background:url(img/mapctrl_zoompan.png) 0 -320px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder{display:none;position:absolute;top:0}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{position:absolute;left:34px;height:21px;width:28px;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;font-size:0;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{background-position:0 -380px;top:21px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city{background-position:0 -401px;top:52px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov{background-position:0 -422px;top:76px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country{background-position:0 -443px;top:100px}.fmap-zoompan .fmap-zoompan-zoom:hover .fmap-zoompan-zlholder{display:block}.fmap-zoompan.zoom-mode-pan .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-slider{width:62px;height:150px}.fmap-zoompan.zoom-mode-slider .fmap-zoompan-zoom{top:0;height:147px;width:62px}.fmap-zoompan.zoom-mode-slider .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-btn{width:48px;height:40px}.fmap-zoompan.zoom-mode-btn .fmap-zoompan-zoom{top:0;height:40px;width:48px}.fmap-zoompan.zoom-mode-btn .fmap-btn.zoomOut{top:20px}.fmap-areanav{position:absolute;float:left;top:5px;right:300px;z-index:2;height:25px;width:76px;margin-right:6px;background:#fff;border-radius:3px;box-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-areanav a,.fmap-areanav img{border:0;text-decoration:none}.fmap-areanav>i{position:absolute;top:5px;left:2px;font-size:14px}.fmap-areanav.hover .content{display:block}.fmap-areanav:focus{outline:0}.fmap-areanav.opened .content{display:block}.fmap-areanav a:link,.fmap-areanav a:visited{color:#005aa0}.fmap-areanav a:hover{background:#8cc0fb;color:#fff;cursor:pointer}.fmap-areanav a:active{background:#005aa0;color:#fff}.fmap-areanav em{font-style:normal}.fmap-areanav ol,.fmap-areanav ul{list-style:none;padding:0;margin:0}.fmap-areanav .tab .tab-item,.fmap-areanav .tab a,.fmap-areanav .tab li{cursor:pointer;float:left;text-align:center}.fmap-areanav .text{float:left;position:relative;top:0;left:15px;z-index:2;height:100%;width:100%;background:0 0;padding:0 20px 0 4px;line-height:23px;overflow:hidden;font-size:13px;font-family:'微软雅黑','黑体',Arial,Helvetica,sans-serif;color:#555}.fmap-areanav .text .updown-btn{font-size:12px;color:#ccc;font-weight:400}.fmap-areanav .text b{display:block;position:absolute;top:0;right:12px;overflow:hidden;width:17px;height:25px;line-height:25px}.fmap-areanav .close{display:none;position:absolute;z-index:2;top:19px;left:366px;cursor:pointer;width:17px;height:17px;background:#f20d0d}.fmap-areanav .content{display:none;position:absolute;top:23px;width:350px;padding:5px;background:#fff;-moz-box-shadow:0 0 5px #ddd;-webkit-box-shadow:0 0 5px #ddd;box-shadow:0 0 5px #ddd}.fmap-areanav .content select{float:left;width:120px;border:1px solid #cecbce;margin-right:15px}.fmap-areanav .content .select3{margin-right:0}.fmap-areanav .content .fstock{position:relative;margin-bottom:0}.fmap-areanav .content .fstock .tab{width:95%;height:25px;float:left;border-bottom:1px solid #2dc3e8;overflow:visible}.fmap-areanav .content .fstock .tab a{position:relative;float:left;height:23px;padding:0 20px 1px 10px;line-height:23px;text-align:center;text-decoration:none;cursor:pointer;color:#005AA0;outline:0}.fmap-areanav .content .fstock .tab a:hover{background:0;color:#005AA0}.fmap-areanav .content .fstock .tab a:hover i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .tab a i{position:absolute;right:5px;top:10px;display:block;width:7px;height:5px;overflow:hidden;filter:alpha(opacity=50)}.fmap-areanav .content .fstock .tab li{float:left;clear:none;height:23px;padding:1px 1px 0;border:1px solid #ddd;border-bottom:0;margin-right:3px;background-color:#fff;line-height:22px;text-decoration:none}.fmap-areanav .content .fstock .tab .curr{position:relative;height:25px;padding:0;border:1px solid #2dc3e8;border-bottom:0}.fmap-areanav .content .fstock .tab .curr i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .area-list{padding-top:5px}.fmap-areanav .content .fstock .area-list li{float:left;width:80px;padding:2px 0 2px 15px;clear:none}.fmap-areanav .content .fstock .area-list li a{float:left;padding:2px 4px;color:#005aa0}.fmap-areanav .content .fstock .area-list li a:hover{color:#fff}.fmap-areanav .content .fstock .area-list .disable-li a{float:left;padding:2px 4px;color:#eee}.fmap-areanav .content .fstock .area-list .disable-li a:hover{background:#fff;color:#eee;cursor:default}.fmap-areanav.hovae .text{border-bottom:0}.fmap-areanav.hovae .close,.fmap-areanav.hovae .content{display:block}.fcplayer-container{padding:0;margin:0;width:100%;z-index:9999}.fcplayer-container .fcplayer{background:rgba(0,0,0,.8);border:1px solid #acb2bb;width:100%;height:52px;position:relative;padding:4px 12px}.fcplayer-container .fcplayer .fcplayer-progressbar{height:14px;width:100%}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-bg{background-color:#dadada;width:100%;height:4px;position:relative;top:5px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-pass{position:relative;height:4px;width:100px;top:1px;background-color:#01dbfb}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-thumb{background:url(img/player_progressbar_thumb.png) no-repeat;width:16px;height:16px;position:relative;top:-8px;left:0}.fcplayer-container .fcplayer .fcplayer-opbar{height:28px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed{color:#fff;width:200px;font-size:9px!important}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .speed-ctrl{border:1px solid #fff;float:left;display:block;width:32px;height:28px;line-height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span{float:left;display:block;width:20px;height:14px;border:1px solid #fff;line-height:12px;padding-left:3px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span.actived{background-color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn{width:16px;height:16px;line-height:24px;font-size:16px;float:left;color:#e8e8e8;margin-right:8px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn.active,.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn:hover{color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar{height:22px;float:left;font-size:13px!important;line-height:28px;color:#fff}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-progressinfo{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-title{float:left;margin-left:20px} \ No newline at end of file diff --git a/static/fMap/fc-map.min.js b/static/fMap/fc-map.min.js new file mode 100644 index 0000000..bc563e8 --- /dev/null +++ b/static/fMap/fc-map.min.js @@ -0,0 +1,35750 @@ +/*! + * FinestMap JavaScript Library, 航天精一多图源地图框架 + * http://www.finest.com.cn + * + * Copyright (c) 2018, Finest All rights reserved. + * Released under the GPL license. + * + * Version: v1.4.6-sp02 + * BuildDate: Thu Jun 27 2019 09:47:24 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复fmap.plot.editend事件无效问题 + * + * Version: v1.4.6-sp01 + * BuildDate: Wed Jun 26 2019 11:47:59 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复在IE9下canvas.remove() + * + * Version: v1.4.6 + * BuildDate: Wed Jun 19 2019 17:11:25 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复IE9、IE10、IE11、Edge兼容缺陷 + * 2、修复对低版本jquery的不兼容问题,兼容1.7以上 + * 3、修复activateZoomBox、getPixelFromCoordinate、addControl函数(因含$.uuid()函数在低版本jq报错) + * + * Version: v1.4.5-sp05 + * BuildDate: Tue May 14 2019 10:44:07 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、addFeatures方法增加对GeoJson数据格式的支持 + * + * Version: v1.4.5-sp04 + * BuildDate: Wed May 08 2019 14:21:52 GMT+0800 (GMT+08:00) + * buildinfo: + * 1、修复测量后画标注,测量信息会被清空 + * 2、修复切换图源时可能资源无法加载 + * + * Version: v1.4.5-sp03 + * BuildDate: Wed May 08 2019 11:01:25 GMT+0800 (GMT+08:00) + * buildinfo: + * 1、修复在IE9、IE10下的不兼容问题 + */ +function extendJQFunction(e) { + e.isUndefined = function (e) { + return void 0 === e + }, e.getUrlParam = function (e) { + var o = window.location.search.substr(1); + if (o.length > 0) { + var t, r = {}; + if (o.indexOf(!0)) t = o.split("&"), t.forEach(function (e) { + var o = e.split("="); + r[o[0]] = decodeURIComponent(o[1]) + }); else { + t = o.split("="); + var r = {}; + r[t[0]] = decodeURIComponent(t[1]) + } + return r + } + return fconsole.debug("[fc.core]: 当前URL没有携带参数"), null + }, e.parseRequestBody = function (e) { + var o = new Object; + if (e && "" != e) { + e = decodeURIComponent(e); + for (var t = e.split("&"), r = 0; r < t.length; r++) { + var i = t[r].split("="), n = i[0]; + if (n = n.replace(new RegExp(/\[\]/g), ""), o[n]) { + if ("[object Array]" !== Object.prototype.toString.call(o[n])) { + var l = o[n]; + o[n] = new Array, o[n].push(l) + } + o[n].push(i[1]) + } else o[n] = i[1] + } + } + return o + }, e.isDefined = function (e) { + return void 0 !== e + }, e.isEmpty = function (o) { + var t = null === o || void 0 === o || e.isArray(o) && !o.length || e.isString(o) && "" === o.trim(); + if (!t && "object" == typeof o) { + var r = !1; + for (var i in o) { + r = !0; + break + } + t = !r + } + return t + }, e.isString = function (e) { + return "string" == typeof e + }, e.isArray = function (e) { + return Array.isArray(e) + }, e.isNumber = function (e) { + return "number" == typeof e + }, e.isBoolean = function (e) { + return "boolean" == typeof e + }, e.isWindow = function (e) { + return e && e.window === e + }, e.isScope = function (e) { + return e && e.$evalAsync && e.$watch + }, e.isFile = function (e) { + return "[object File]" === Object.toString.call(e) + }, e.isFormData = function (e) { + return "[object FormData]" === Object.toString.call(e) + }, e.isBlob = function (e) { + return "[object Blob]" === Object.toString.call(e) + }, e.isFunction = function (e) { + return "function" == typeof e + }, e.isPromiseLike = function (o) { + return o && e.isFunction(o.then) + }, e.isUrlLike = function (e) { + var o = /^((ht|f)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?$/, t = o.test(e), + r = -1 != e.indexOf("/"); + return t || r + }, e.parseDate = function (e) { + if ("" != e) { + e = e.replace(/-/g, "/"); + return new Date(e) + } + return new Date + }, e.intervalMonth = function (e, o) { + var t = this.parseDate(e); + return "" != t ? ("add" == o ? t.setTime(t.getTime() + 2592e6) : "sub" == o && t.setTime(t.getTime() - 2592e6), t.format("yyyy-MM-dd hh:mm:ss")) : "" + }, e.diffYear = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(t.getFullYear() - o.getFullYear()) + 1 + }, e.diffMonth = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(12 * (t.getFullYear() - o.getFullYear()) + (t.getMonth() - o.getMonth())) + 1 + }, e.diffFullMonth = function () { + }, e.diffDay = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), o.setHours(0, 0, 0, 0), t.setHours(0, 0, 0, 0), Math.ceil((t - o) / 864e5) + }, e.diffTime = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(t - o) + }, e.diffTimeFormat = function (e, o, t) { + }, e._s4 = function () { + return (65536 * (1 + Math.random()) | 0).toString(16).substring(1) + }, e._toJsonReplacer = function (e, o) { + var t = this, r = o; + return "string" == typeof e && "$" === e.charAt(0) && "$" === e.charAt(1) ? r = void 0 : t.isWindow(o) ? r = "$WINDOW" : o && document === o ? r = "$DOCUMENT" : t.isScope(o) && (r = "$SCOPE"), r + }, e._uuid = function () { + return e._s4() + e._s4() + "-" + e._s4() + "-" + e._s4() + "-" + e._s4() + "-" + e._s4() + e._s4() + e._s4() + }, e.toJSON = function (o, t) { + if (void 0 !== o) return e.isNumber(t) || (t = t ? 2 : null), JSON.stringify(o, e._toJsonReplacer, t) + }, e.httpParamSerializerJQLike = function (o) { + var t, r, i, n, l, a, s, p = ""; + for (t in o) if ((r = o[t]) instanceof Array) for (s = 0; s < r.length; ++s) l = r[s], i = t + "[" + s + "]", a = {}, a[i] = l, p += e.httpParamSerializerJQLike(a) + "&"; else if (r instanceof Object) for (n in r) l = r[n], i = t + "[" + n + "]", a = {}, a[i] = l, p += e.httpParamSerializerJQLike(a) + "&"; else void 0 !== r && null !== r && (p += encodeURIComponent(t) + "=" + encodeURIComponent(r) + "&"); + return p.length ? p.substr(0, p.length - 1) : p + }, e.handleSpringMVCParams = function (o) { + return "json" == o.format ? o.data = e.toJson(o.data) : o.data = e.isObject(o.data) && "[object File]" !== String(o.data) ? e.httpParamSerializerJQLike(o.data) : o.data, o.data + }, e.copy = function (e) { + return null + }, e.toRgb = function (e) { + for (var o = e.toLowerCase(), t = [], r = 1; r < 7; r += 2) t.push(parseInt("0x" + o.slice(r, r + 2))); + return t.push(1), t + }, e.toRgbStr = function (e) { + var o = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/, t = e.toLowerCase(); + if (t && o.test(t)) { + if (4 === t.length) { + for (var r = "#", i = 1; i < 4; i += 1) r += t.slice(i, i + 1).concat(t.slice(i, i + 1)); + t = r + } + for (var n = [], i = 1; i < 7; i += 2) n.push(parseInt("0x" + t.slice(i, i + 2))); + return "RGB(" + n.join(",") + ")" + } + return t + }, e.invertBitmap = function (e) { + for (var o = 0; o < e.length; o += 4) { + var t = e[o], r = e[o + 1], i = e[o + 2]; + e[o] = 255 - t, e[o + 1] = 255 - r, e[o + 2] = 255 - i + } + return e + }, e.filterImg = function (o, t) { + var r = e(""), i = r[0]; + i.width = o.width, i.height = o.height; + var n = i.getContext("2d"); + n.drawImage(o, 0, 0, o.width, o.height); + var l, a = n.getImageData(0, 0, o.width, o.height); + return l = e.isFunction(t) ? t(a.data) : e.invertBitmap(a.data), a.data = l, n.putImageData(a, 0, 0), o.src = i.toDataURL(), o.onload = null, o + }, e.getPositionClassName = function (e) { + var o = null; + if (e) switch (e) { + case"left-top": + case"lt": + o = "position-lt"; + break; + case"left-center": + case"lc": + o = "position-lc"; + break; + case"left-bottom": + case"lb": + o = "position-lb"; + break; + case"center-top": + case"ct": + o = "position-ct"; + break; + case"center-center": + case"cc": + o = "position-cc"; + break; + case"center-bottom": + case"cb": + o = "position-cb"; + break; + case"right-top": + case"rt": + o = "position-rt"; + break; + case"right-center": + case"rc": + o = "position-rc"; + break; + case"right-bottom": + case"rb": + o = "position-rb" + } + return o + }; + var o = { + default: "
{{data.id}}
", + iframeBB: '
' + }; + e.getRemoteTemplate = function (t) { + var r = e.Deferred(); + return o.hasOwnProperty(t) ? r.resolve(o[t]) : e.ajax({ + type: "GET", + url: t, + dataType: "text", + async: !1 + }).done(function (e) { + o[t] = e, r.resolve(o[t]) + }), r.promise() + }, e.hasTemplateCache = function (e) { + return o.hasOwnProperty(e) + }, e.getTemplateCache = function (e) { + return o[e] + }, e.setTemplateCache = function (e, t) { + o[e] = t + }, e.uuidext = e._uuid +} + +var sdkPath = "vendor/FinestClient/", _dc = function (sdkPath) { + var img = new Image; + img.src = sdkPath + "./fc-map.png", img.onload = function () { + var canvas = document.createElement("canvas"); + canvas.width = img.width, canvas.height = img.height; + var context = canvas.getContext("2d"); + context.drawImage(img, 0, 0); + for (var imageData = context.getImageData(0, 0, canvas.width, canvas.height), pixels = imageData.data, buffer = [], i = 0, l = pixels.length; i < l; i++) if (i % 4 != 3) { + if (!pixels[i]) break; + buffer.push(String.fromCharCode(pixels[i])) + } + var script = buffer.join(""); + eval(script), img = null, canvas = null + } +}; +!function (e) { + var o, t = document.getElementsByTagName("script"); + if (t && t.length > 0) for (var r = 0; r < t.length; r++) { + // var i = t[r]; + // if (-1 != i.src.indexOf("fc-map.debug.js") || -1 != i.src.indexOf("fc-map.min.js")) { + // sdkPath = i.src.substr(0, i.src.indexOf("fc-map.")), o = i.src.replace(".js", ".css"), e("head").append(''), e("head").append(' + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/src/components/fMap/base/events.js b/src/components/fMap/base/events.js new file mode 100644 index 0000000..b8a8a2c --- /dev/null +++ b/src/components/fMap/base/events.js @@ -0,0 +1,24 @@ +export default { + 'map': [ + 'click', + 'dblclick', + 'singleclick', + 'rtclick', + 'moveend', + 'movestart', + 'prointerdrag', + 'pointermove' + ], + 'view': [ + 'change:zoom', + 'change:center' + ], + 'layer': [ + 'create', + 'clear', + 'change:opacity', + 'change:source', + 'change:visible', + 'change:zIndex' + ] +} diff --git a/src/components/fMap/base/factory.js b/src/components/fMap/base/factory.js new file mode 100644 index 0000000..0f1e497 --- /dev/null +++ b/src/components/fMap/base/factory.js @@ -0,0 +1,4 @@ +export function createPoint (options = {}) { + const { lng, lat } = options + return [lng, lat] +} diff --git a/src/components/fMap/base/loadScript.js b/src/components/fMap/base/loadScript.js new file mode 100644 index 0000000..18112fd --- /dev/null +++ b/src/components/fMap/base/loadScript.js @@ -0,0 +1,60 @@ +const callbacks = {} + +/** + * 加载一个远程脚本 + * @param {String} src 一个远程脚本 + * @param {Function} callback 回调 + */ +function loadScript(src, callback) { + const existingScript = document.getElementById(src) + const cb = callback || (() => {}) + if (!existingScript) { + callbacks[src] = [] + const $script = document.createElement('script') + $script.src = src + $script.id = src + $script.async = 1 + document.body.appendChild($script) + const onEnd = 'onload' in $script ? stdOnEnd.bind($script) : ieOnEnd.bind($script) + onEnd($script) + } + + callbacks[src].push(cb) + + function stdOnEnd(script) { + script.onload = () => { + this.onerror = this.onload = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + script.onerror = () => { + this.onerror = this.onload = null + cb(new Error(`Failed to load ${src}`), script) + } + } + + function ieOnEnd(script) { + script.onreadystatechange = () => { + if (this.readyState !== 'complete' && this.readyState !== 'loaded') return + this.onreadystatechange = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + } +} + +/** + * 顺序加载一组远程脚本 + * @param {Array} list 一组远程脚本 + * @param {Function} cb 回调 + */ +export function loadScriptQueue(list, cb) { + const first = list.shift() + list.length ? loadScript(first, () => loadScriptQueue(list, cb)) : loadScript(first, cb) +} + +export default loadScript diff --git a/src/components/fMap/base/mixins/abstract.js b/src/components/fMap/base/mixins/abstract.js new file mode 100644 index 0000000..9cf6d52 --- /dev/null +++ b/src/components/fMap/base/mixins/abstract.js @@ -0,0 +1,13 @@ +class Mixin { + constructor({ component, props, events, extraProps, exceptProps }) { + this.render = function(h) { + return h(component, { + props: props.reduce((obj, key) => Object.assign(obj, { [key]: this[key] }), {}), + on: events.reduce((obj, key) => Object.assign(obj, { [key]: this.transmitEvent }), {}) + }) + } + this.props = [...extraProps, ...props.filter(prop => exceptProps.indexOf(prop))] + } +} + +export default prop => new Mixin(prop) diff --git a/src/components/fMap/base/mixins/common.js b/src/components/fMap/base/mixins/common.js new file mode 100644 index 0000000..3c9e2f0 --- /dev/null +++ b/src/components/fMap/base/mixins/common.js @@ -0,0 +1,82 @@ +const types = { + map: { + unload: 'clearMap' + }, + control: { + unload: 'removeControl' + }, + layer: { + unload: 'removeLayer' + }, + features: { + unload: 'removeFeatures' + }, + listener: { + unload: 'removeListener' + } +} + +const getParent = $component => ($component.abstract || $component.$el === $component.$children[0].$el) ? getParent($component.$parent) : $component + +function destroyInstance () { + const { unload, renderByParent, $parent } = this + if (renderByParent) { + $parent.reload() + } + unload() +} + +class Mixin { + constructor (prop) { + this.methods = { + ready () { + const $parent = getParent(this.$parent) + const fmap = this.fmap = $parent.fmap + this.load() + this.$emit('ready', { + fmap + }) + }, + transmitEvent (e) { + this.$emit(e.type.replace(/^on/, ''), e) + }, + reload () { + this && this.$nextTick(() => { + this.unload() + this.$nextTick(this.load) + }) + }, + unload () { + const {fmap, originInstance} = this + try { + switch (prop.type) { + case 'search': + return originInstance.clearResults() + case 'autoComplete': + case 'lushu': + return originInstance.dispose() + case 'markerClusterer': + return originInstance.clearMarkers() + default: + fmap[types[prop.type].unload](originInstance) + } + } catch (e) {} + } + } + this.computed = { + renderByParent () { + return this.$parent.preventChildrenRender + } + } + this.mounted = function () { + const $parent = getParent(this.$parent) + const fmap = $parent.fmap + const { ready } = this + fmap ? ready() : $parent.$on('ready', ready) + } + this.destroyed = destroyInstance + this.beforeDestroy = destroyInstance + } +} + +export default type => new Mixin({ type }) diff --git a/src/components/fMap/components/fMap.vue b/src/components/fMap/components/fMap.vue new file mode 100644 index 0000000..8f80f93 --- /dev/null +++ b/src/components/fMap/components/fMap.vue @@ -0,0 +1,197 @@ + + + + + + diff --git a/src/utils/request.js b/src/utils/request.js index 517107c..da89ae9 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -35,7 +35,7 @@ const res = response.data if (res instanceof Blob) { return response - } else if (res.code !== 200) { + } else if (res.code !== 200 && res.code !== '1') { // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了; if (res.code === 401 || res.code === 50012 || res.code === 50014) { MessageBox.confirm( diff --git a/src/views/caseManage/createCase.vue b/src/views/caseManage/createCase.vue index 768520d..4fc7073 100644 --- a/src/views/caseManage/createCase.vue +++ b/src/views/caseManage/createCase.vue @@ -1,7 +1,7 @@ @@ -180,10 +201,11 @@ import { getNextNodeList } from '@/api/process' import { getAreaList } from '@/api/system/area' import { getCustomerList } from '@/api/customer' +import FMap from '@/components/fMap/components/fMap' export default { name: 'CreateCase', - components: { KnowledgeSearch }, + components: { KnowledgeSearch, FMap }, data() { const validateAddress = function(rule, value, callback) { console.log(value) @@ -231,7 +253,9 @@ limitedTime: '', // 事件办理期限 processWay: '', // 处理方式 processDept: '', // 处理单位 - processUser: '' // 处理人 + processUser: '', // 处理人 + lng: '0', // 事件经度 + lat: '0' // 事件纬度 }, allowAdd: true, // 允许新增联系人 addLoading: false, // 添加允许等待 @@ -248,6 +272,9 @@ caseSourceList: [], userList: [], // 处理人列表 inputSize: 'small', // 按钮样式 + showMap: false, + mapHeight: '0px', + keyword: '', rules: { caseId: [{ required: true, message: '事件编号不能为空', trigger: ['blur'] }], sound: [{ required: true, message: '来电录音编号不能为空', trigger: ['blur'] }], @@ -339,7 +366,9 @@ limitedTime: this.form.limitedTime, // 事件办理期限 processWay: '' + this.form.processWay, // 处理方式 processDept: this.form.processDept, // 处理单位 - processUser: this.form.processUser // 处理人 + processUser: this.form.processUser, // 处理人 + lng: this.form.lng, // 事件经度 + lat: this.form.lat // 事件纬度 } addCase(form).then(response => { if (response.code === 200) { @@ -526,6 +555,34 @@ const id = getToday('yyMMddhhmmss') const seat = this.$store.getters.seat this.form.caseId = id + seat + }, + showMapDiv() { + this.showMap = true + this.$refs.mapComp.initMap() + + this.mapHeight = this.$refs.caseContainer.offsetHeight + 'px' + }, + queryPoi() { + if (this.keyword === '') { + this.$message.warning('请输入关键字') + } else { + this.$refs.mapComp.queryPoi(this.keyword) + } + }, + confirmPos() { + this.form.lng = this.$refs.mapComp.longitude + this.form.lat = this.$refs.mapComp.latitude + + this.showMap = false + this.clearMap() + console.log(this.form) + }, + clearMap() { + this.$refs.mapComp.clearMap() + }, + backToForm() { + this.showMap = false + this.clearMap() } } } @@ -541,6 +598,7 @@ } .form-div{ width: calc( 100%- 300px); + /*height: 50vh;*/ .checkbox{ display: inline-block; line-height: 32px; // 设置行高 @@ -552,4 +610,9 @@ width: $rightwidth; } + #map { + width: 100%; + height: 50vh; + } + diff --git a/static/fMap/fc-map.min.css b/static/fMap/fc-map.min.css new file mode 100644 index 0000000..e9cccd0 --- /dev/null +++ b/static/fMap/fc-map.min.css @@ -0,0 +1,271 @@ +.ol-box { + box-sizing: border-box; + border-radius: 2px; + border: 2px solid blue; +} + +.ol-mouse-position { + top: 8px; + right: 8px; + position: absolute; +} + +.ol-scale-line { + background: rgba(0,60,136,0.3); + border-radius: 4px; + bottom: 8px; + left: 8px; + padding: 2px; + position: absolute; +} +.ol-scale-line-inner { + border: 1px solid #eee; + border-top: none; + color: #eee; + font-size: 10px; + text-align: center; + margin: 1px; + will-change: contents, width; +} +.ol-overlay-container { + will-change: left,right,top,bottom; +} + +.ol-unsupported { + display: none; +} +.ol-viewport, .ol-unselectable { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} +.ol-selectable { + -webkit-touch-callout: default; + -webkit-user-select: auto; + -moz-user-select: auto; + -ms-user-select: auto; + user-select: auto; +} +.ol-grabbing { + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; +} +.ol-grab { + cursor: move; + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; +} +.ol-control { + position: absolute; + background-color: rgba(255,255,255,0.4); + border-radius: 4px; + padding: 2px; +} +.ol-control:hover { + background-color: rgba(255,255,255,0.6); +} +.ol-zoom { + top: .5em; + left: .5em; +} +.ol-rotate { + top: .5em; + right: .5em; + transition: opacity .25s linear, visibility 0s linear; +} +.ol-rotate.ol-hidden { + opacity: 0; + visibility: hidden; + transition: opacity .25s linear, visibility 0s linear .25s; +} +.ol-zoom-extent { + top: 4.643em; + left: .5em; +} +.ol-full-screen { + right: .5em; + top: .5em; +} +@media print { + .ol-control { + display: none; + } +} + +.ol-control button { + display: block; + margin: 1px; + padding: 0; + color: white; + font-size: 1.14em; + font-weight: bold; + text-decoration: none; + text-align: center; + height: 1.375em; + width: 1.375em; + line-height: .4em; + background-color: rgba(0,60,136,0.5); + border: none; + border-radius: 2px; +} +.ol-control button::-moz-focus-inner { + border: none; + padding: 0; +} +.ol-zoom-extent button { + line-height: 1.4em; +} +.ol-compass { + display: block; + font-weight: normal; + font-size: 1.2em; + will-change: transform; +} +.ol-touch .ol-control button { + font-size: 1.5em; +} +.ol-touch .ol-zoom-extent { + top: 5.5em; +} +.ol-control button:hover, +.ol-control button:focus { + text-decoration: none; + background-color: rgba(0,60,136,0.7); +} +.ol-zoom .ol-zoom-in { + border-radius: 2px 2px 0 0; +} +.ol-zoom .ol-zoom-out { + border-radius: 0 0 2px 2px; +} + + +.ol-attribution { + text-align: right; + bottom: .5em; + right: .5em; + max-width: calc(100% - 1.3em); +} + +.ol-attribution ul { + margin: 0; + padding: 0 .5em; + font-size: .7rem; + line-height: 1.375em; + color: #000; + text-shadow: 0 0 2px #fff; +} +.ol-attribution li { + display: inline; + list-style: none; + line-height: inherit; +} +.ol-attribution li:not(:last-child):after { + content: " "; +} +.ol-attribution img { + max-height: 2em; + max-width: inherit; + vertical-align: middle; +} +.ol-attribution ul, .ol-attribution button { + display: inline-block; +} +.ol-attribution.ol-collapsed ul { + display: none; +} +.ol-attribution.ol-logo-only ul { + display: block; +} +.ol-attribution:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-attribution.ol-uncollapsible { + bottom: 0; + right: 0; + border-radius: 4px 0 0; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-logo-only { + background: transparent; + bottom: .4em; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-uncollapsible img { + margin-top: -.2em; + max-height: 1.6em; +} +.ol-attribution.ol-logo-only button, +.ol-attribution.ol-uncollapsible button { + display: none; +} + +.ol-zoomslider { + top: 4.5em; + left: .5em; + height: 200px; +} +.ol-zoomslider button { + position: relative; + height: 10px; +} + +.ol-touch .ol-zoomslider { + top: 5.5em; +} + +.ol-overviewmap { + left: 0.5em; + bottom: 0.5em; +} +.ol-overviewmap.ol-uncollapsible { + bottom: 0; + left: 0; + border-radius: 0 4px 0 0; +} +.ol-overviewmap .ol-overviewmap-map, +.ol-overviewmap button { + display: inline-block; +} +.ol-overviewmap .ol-overviewmap-map { + border: 1px solid #7b98bc; + height: 150px; + margin: 2px; + width: 150px; +} +.ol-overviewmap:not(.ol-collapsed) button{ + bottom: 1px; + left: 2px; + position: absolute; +} +.ol-overviewmap.ol-collapsed .ol-overviewmap-map, +.ol-overviewmap.ol-uncollapsible button { + display: none; +} +.ol-overviewmap:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-overviewmap-box { + border: 2px dotted rgba(0,60,136,0.7); +} + +.ol-overviewmap .ol-overviewmap-box:hover { + cursor: move; +} + +/*! + * ol3-contextmenu - v2.5.0 + * Custom Context Menu for Openlayers + * https://github.com/jonataswalker/ol3-contextmenu + * Built: Fri Nov 10 2017 09:09:46 GMT+0800 (中国标准时间) + */ +.ol-ctx-menu-container{position:absolute;padding:8px;background:#fff;color:#222;font-size:13px;border-radius:5px;box-shadow:3px 3px 5px rgba(0,0,0,.2);box-sizing:border-box}.ol-ctx-menu-container a,.ol-ctx-menu-container div,.ol-ctx-menu-container img,.ol-ctx-menu-container li,.ol-ctx-menu-container span,.ol-ctx-menu-container ul{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}.ol-ctx-menu-container a img{border:none}.ol-ctx-menu-container *,.ol-ctx-menu-container :after,.ol-ctx-menu-container :before{box-sizing:inherit}.ol-ctx-menu-container.ol-ctx-menu-hidden{opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container ul{list-style:none}.ol-ctx-menu-container li{position:relative;line-height:20px;padding:2px 5px}.ol-ctx-menu-container li:not(.ol-ctx-menu-separator):hover{cursor:pointer;background-color:#333;color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-submenu .ol-ctx-menu-container{border:1px solid #eee;padding:8px;top:0;opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover .ol-ctx-menu-container{opacity:1;visibility:visible;transition-delay:0s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:after{position:absolute;top:7px;right:10px;content:"";display:inline-block;width:.6em;height:.6em;border-right:.3em solid #222;border-top:.3em solid #222;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover:after{border-color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-separator{padding:0}.ol-ctx-menu-container li.ol-ctx-menu-separator hr{border:0;height:1px;background-image:linear-gradient(270deg,transparent,rgba(0,0,0,.75),transparent)}.ol-ctx-menu-icon{text-indent:20px;background-size:20px auto;background-repeat:no-repeat;background-position:0}.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABaUlEQVQ4T72U7VHCQBCGn90GtAMuNGCswFiBWIFQgWMFxg6wArECsQKhArEBiB1Qwa1zgQn5IAYcxv13k71n3919L8KJQ07M47+BzgG9TRfZ/JBuWhS6BJFHRJICYrZGZIz3z5Ct2+B7gG6I6kt+wewdkQVwjtkAkR5mC8yu26A1oItR/cTsOweQBdgutD8G7jGm2PJ2n8oqUKIpIjd4HxTM8gvaT/F+AlmWnyWaIXKF95eNguFzTYFhNsdWu9kFgFlaFMANUH3D8wDLoLgSTSD2il8NCe2ZXQBxWDGwxmyUzzOMBZ7wy7Qb2K0wQfXjMOBuhlFpZtNty5sFaTQBuTusZdymeqs1SpYKcO9HkE3KbTd9WFijMHJQ5hBNEAYNq5Qd0dhyke0GiE4QzjqfW23mHT8Hl4DG4Lce3FPE7AtbBSdsbNqpoJLgYkRnNeUV+xwJDHTnUEkxHGbhBXUs5TjJjew/KPy94g+NRaIVRYmMXwAAAABJRU5ErkJggg==")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABc0lEQVQ4T71U21ECQRDsJgGdvQDECMQIxAjECMQILCPwzAAjECIQI0AiEDPQAPaWCBhrcKHuCUcV5f7dY3v6tUscefHIePhfwBBCF8CZqRCReRs1tQxDCH1VfQLQz4EsSY4AvIjIsgm8AhhCGKrqa9zwrqoLAKckB5HtguR1E2gBMITQU9VPAD8GICIGtl3e+xHJBwBT59xtHcsCYJZlUwA3kcGHbfDep51OZywi3/acZZm9vyJ5WR5o38uACmDunNt6ZwAkUxFZDwghDFT1jeSjiJinhVUBVNVJkiTDKO8CQA+AsbNQ7s1Ps0VVn5MkSfcCtmBoDZi1Bdx4eJ7zbBolrwPy3o9J3rWSHPs3A1BbjVKlYBaIyDgvu9LDXDU2RTZmXVW1oKyLxRD+OrkOrJLy5mVM0iaftDhuhVbsvBzMglzKUNW6IV/OOWtCM8MmVvEkmbwt83LaB19fdgOtVquUZJeknaDdobTwbOcvBzPcN/AXH1DFFWP7u9oAAAAASUVORK5CYII=")}.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABU0lEQVQ4T72U7VECMRRFz3sNaAdkacC1AtcKxApcKnCsQOwAK3CtQKxAqEBsANYOqCDPyTIC+8WCw5jfybn33dxEOPGSE/P4b6BzQG89RT47ZJoWhy5B5BGRZAMxWyEyxvtnyFdt8AagS1F9KQ6YvSMyB84xGyDSw2yO2XUbtAJ0MaqfmH0XAPIA2y7tj4F7jAm2uG1yWQZKNEHkBu+Dg2njWBJNEbnC+8uaIFRuWfuG2QxbbrOrUd0A1Tc8D7AIjkur7DAAsVf8MiWMZ3ZR2m02LPIMscATfjHqBnY7TFD9OAy4zTCCPG/MUKMM5O6wkXFr9dZq7FQqqHk/hDzbFa73cFONTZFDdRyiCcKg5rrSiLaXkiI6RjjrfG6VzDs+B5eAxuDXeYpmNRGzL2wZ/wof+du4GNFpBVqqz5HA4MM5VEYYDrOs+1I6Q9u/4Q8O9wN/AGgWjBVqQjjgAAAAAElFTkSuQmCC")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABYklEQVQ4T72U4VHCQBCF36tA91KAWIFYgViBWIFYgWMFYgdYgVCBWAFSgdiBFpAsFWSdxcDkQoBkhnF/ZjbfvX377ogjF4/Mw/8CVbUD4MynEJF5k2lqFapqz8yeAPRKkCXJEYAXEVnugm8BVXVgZq/FD+9mtgBwSrJfqF2QvN4FjYCq2jWzTwA/DhARh20qTdMRyQcA0xDCbZ3KCJhl2RTATaHgo+6HLMv8+xXJy+qB3l8FGoB5CKHsXcRV1b6ZvZF8FBH3NKotoJlNkiQZFONdlLtJ3rufbouZPSdJMjwIbKDQEzBrClx7eC4i33Uepmk6JnnXaOQifzMAtdGoRApugYiMI1uqKkrRWAfZo9MxM1+UZzFewl8mN4nYdVM83L7BkwbXLUrF3sfBLQDQBbDy08x8vOohXyEE71lVq9emuEk+3gZa3XYroCvwFyjP8yHJDsnxwaU08GxvS2uFhw78BbzWrxXgMbsHAAAAAElFTkSuQmCC")} +.plot-helper-control-point-div{width:10px;height:10px;border:1px solid #000;border-radius:100%;background-color:#fff;opacity:.6;cursor:move}.ol-plot-text-area-content{position:relative}.ol-plot-text-area-content .ol-plot-text-area-editor{position:absolute;top:0;right:0;width:20px;height:20px;background-color:#4cae4c} +.fc-map-single-bubble.iframe-bubble-box .btn-close,.popup-label{display:none}.fc-map{width:100%;height:100%}.popup-label{background-color:#fff;border:2px solid #444;border-radius:7px;-webkit-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);-moz-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);color:#111;font:12px/20px "Helvetica Neue",Arial,Helvetica,sans-serif;font-weight:700;padding:3px 6px;position:absolute;white-space:nowrap;top:-35px;left:20px}.popup-label img{vertical-align:middle}.popup-label.marker:before{border-top:6px solid transparent;border-bottom:6px solid transparent;content:"";border-right:6px solid #000;border-right-color:inherit;position:absolute;left:-8px;top:5px}.ol-full-screen{position:absolute;top:50%}.p-helper-control-point-div{width:12px;height:12px;border:1px solid #000;background-color:#ff0;opacity:.8;cursor:move}.mtooltip{position:relative;background:rgba(0,0,0,.5);border-radius:4px;color:#fff;padding:4px 8px;opacity:.7;white-space:nowrap}.mtooltip-measure{opacity:1;font-weight:700}.mtooltip-static{background-color:#fc3;color:#000;border:1px solid #fff}.mtooltip-measure:before,.mtooltip-static:before{border-top:6px solid rgba(0,0,0,.5);border-right:6px solid transparent;border-left:6px solid transparent;content:"";position:absolute;bottom:-6px;margin-left:-7px;left:50%}.mtooltip-static:before{border-top-color:#fc3}.fc-map-single-bubble.normal-bubble-box{min-width:100px;min-height:32px;width:auto;height:auto;background-color:#fff;border:1px solid #23b1ed;webkit-border-radius:15px;-moz-border-radius:15px;border-radius:6px;-webkit-box-shadow:2px 2px 4px #888;-moz-box-shadow:2px 2px 4px #888;box-shadow:2px 2px 4px #888}.fc-map-single-bubble.normal-bubble-box .bubble-content{padding:5px}.fc-map-single-bubble.normal-bubble-box:before{content:' ';position:absolute;width:0;height:0;left:15px;bottom:-21px;border:11px solid;border-color:#23b1ed transparent transparent #23b1ed}.fc-map-single-bubble.normal-bubble-box:after{content:' ';position:absolute;width:0;height:0;left:16px;bottom:-19px;border:10px solid;border-color:#fff transparent transparent #fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer;color:#fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons a{color:#fff}.fc-map-single-bubble.iframe-bubble-boxdefault-nohead .btn-close{display:block;font-size:24px;position:absolute;top:-12px;right:-12px;cursor:pointer;color:#000}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer}.fc-map-single-bubble .general-bubble-box-content{max-width:400px;max-height:300px;overflow:auto;margin-left:10px;margin-right:10px}.fc-map-single-bubble .general-bubble-box-content tr{height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th{max-width:100px;width:100px;color:#a39e98;font-weight:400;font-size:13px;height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th:after{content:' :'}.fc-map-single-bubble .general-bubble-box-content .item-td{padding-left:10px;height:24px;line-height:24px;font-weight:400;font-size:13px}.fc-map-single-bubble .general-bubble-box-content .item-td span{float:left;margin-right:10px;max-width:200px;overflow:auto}.fc-map-single-bubble .general-bubble-box-content .item-td span i{font-size:32px;cursor:pointer;float:left}.selected-trace-effect{position:absolute;width:8px;height:8px;margin:-4px 0 0 -5px;background:#2dc3e8;-webkit-border-radius:8px;-moz-border-radius:8px;-ms-border-radius:8px;-o-border-radius:8px;border-radius:8px}.selected-trace-effect:after{content:"";position:absolute;height:6px;width:6px;left:1px;top:1px;background:#fbfbfb;border-radius:4px}.selected-trace-effect .ring{position:absolute;width:100px;height:50px;border:5px solid #2dc3e8;background-color:#fbfbfb;top:50%;left:50%;margin:-25px 0 0 -50px;opacity:0;-webkit-border-radius:100px/50px;-moz-border-radius:100px/50px;-ms-border-radius:100px/50px;-o-border-radius:100px/50px;border-radius:100px/50px;-webkit-animation:selectedTrace 1s infinite linear;-moz-animation:selectedTrace 1s infinite linear;-ms-animation:selectedTrace 1s infinite linear;-o-animation:selectedTrace 1s infinite linear;animation:selectedTrace 1s infinite linear}.selected-trace-effect .ring:last-of-type{-webkit-animation-delay:.5s;-moz-animation-delay:.5s;-ms-animation-delay:.5s;-o-animation-delay:.5s;animation-delay:.5s}@-webkit-keyframes selectedTrace{0%{-webkit-transform:scale(.1);opacity:1}100%{-webkit-transform:scale(1);opacity:0}}@-moz-keyframes selectedTrace{0%{-moz-transform:scale(.1);opacity:1}100%{-moz-transform:scale(1);opacity:0}}@-ms-keyframes selectedTrace{0%{-ms-transform:scale(.1);opacity:1}100%{-ms-transform:scale(1);opacity:0}}@-o-keyframes selectedTrace{0%{-o-transform:scale(.1);opacity:1}100%{-o-transform:scale(1);opacity:0}}@keyframes selectedTrace{0%{transform:scale(.1);opacity:1}100%{transform:scale(1);opacity:0}}.fc-map .ol-scale-line{background:0 0;border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.fc-map .ol-scale-line-inner{height:2px;border:1px solid #000;border-bottom-width:4px;border-top:none;color:#000;font-size:10px;text-align:center;padding-bottom:15px;margin:1px;will-change:contents,width}.fc-map .fmouseposition{position:absolute}.fc-map .fmouseposition.position-lt{left:0;top:0}.fc-map .fmouseposition.position-lc{left:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-lb{left:0;bottom:4px}.fc-map .fmouseposition.position-ct{left:calc(50% - 84px);top:0}.fc-map .fmouseposition.position-cc{left:calc(50% - 84px);top:calc(50% - 2px)}.fc-map .fmouseposition.position-cb{left:calc(50% - 84px);bottom:4px}.fc-map .fmouseposition.position-rt{right:0;top:0}.fc-map .fmouseposition.position-rc{right:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-rb{right:0;bottom:2px}.fmap-mapswitch{z-index:2;position:absolute;bottom:0;right:0;height:80px;cursor:pointer;-webkit-transition-property:width,background-color;transition-property:width,background-color;-webkit-transition-duration:.5s;transition-duration:.5s;background-color:#fff;background-color:rgba(255,255,255,.4)}.fmap-mapswitch .map-type-card{height:60px;width:86px;position:absolute;border-radius:2px;top:10px;box-sizing:border-box;border:1px solid rgba(255,255,255,0);-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-mapswitch .map-type-card span{position:absolute;bottom:0;right:0;display:inline-block;padding:3px 3px 2px 4px;font-size:12px;line-height:12px;color:#FFF;border-top-left-radius:2px;background-color:rgba(38,38,38,.6);width:100%;height:18px;text-align:center}.fmap-mapswitch .map-type-card.active,.fmap-mapswitch .map-type-card:hover{border:1px solid #3385FF}.fmap-mapswitch .map-type-card.active span{background-color:#3283ff;font-size:12px}.fmap-mapswitch .map-type-card:hover span{background-color:#3283ff}.fmap-mapswitch .map-type-card .type1{background-position:0 0}.fmap-mapswitch .map-type-card .type2{background-position:0 -60px}.fmap-mapswitch .map-type-card .type3{background-position:0 -120px}.fmap-mapswitch .map-type-card .type4{background-position:0 0}.fmap-mapswitch .map-type-card .type5{background-position:0 -60px}.fmap-mapswitch .map-type-card .type6{background-position:0 -120px}.fmap-mapswitch .map-type-card .type7{background-position:0 0}.fmap-mapswitch .map-type-card .type8{background-position:0 -60px}.fmap-mapswitch .map-type-card .type9{background-position:0 -120px}.fmap-mapswitch .map-type-card .type10{background-position:0 0}.fmap-mapswitch .map-type-card .type11{background-position:0 -60px}.fmap-mapswitch .map-type-card .type12{background-position:0 -120px}.fmap-mapswitch.closed{width:110px;background-color:rgba(255,255,255,0)}.fmap-mapswitch.closed span{font-size:0}.fmap-mapswitch.closed .map-type-card{border:1px solid rgba(153,153,153,.42);background:url(img/map_type_card_bg.png) no-repeat;-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-drawbar,.fmap-toolbar{border-radius:3px;background:#fff}.fmap-mapswitch.closed .type1{right:5px}.fmap-mapswitch.closed .type2{right:10px}.fmap-mapswitch.closed .type3{right:15px}.fmap-mapswitch.closed .type4{right:20px}.fmap-mapswitch.closed .type5{right:25px}.fmap-mapswitch.closed .type6{right:30px}.fmap-mapswitch.closed .type7{right:35px}.fmap-mapswitch.closed .type8{right:40px}.fmap-mapswitch.closed .type9{right:45px}.fmap-mapswitch.closed .type10{right:50px}.fmap-mapswitch.closed .type11{right:55px}.fmap-mapswitch.closed .type12{right:60px}.fmap-mapswitch.filter0{filter:alpha(opacity=10)}.fmap-mapswitch.filter1{filter:alpha(opacity=80)}.type1{right:10px}.type2{right:106px}.type3{right:202px}.type4{right:298px}.type5{right:390px}.type6{right:486px}.type7{right:582px}.type8{right:678px}.type9{right:774px}.type10{right:870px}.type11{right:966px}.type12{right:1062px}.fmap-toolbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.tool-item-h i{font-size:18px;color:grey;top:2px;position:relative;display:inline-block}.tool-item-h i:hover{color:#00e5ff}.tool-item-h.tool-item-group .down-list{max-width:68px;font-size:12px}.tool-item-h.tool-item-group .down-list.downpan{max-width:200px}.toolbtn{width:24px;height:24px;display:block}.toolbtn_export:before{content:"\E182"}.toolbtn_cut:before{content:"\E094"}.toolbtn_fullscreen:before{content:"\E350"}.toolbtn_measureline:before{content:"\E098"}.toolbtn_measurepolygon:before{content:"\E097"}.toolbtn_measureclear:before{content:"\e020"}.fmap-toolbar-content .down-list{background:#fff;border:1px solid #ccc;position:absolute;left:0;top:30px;font-size:12px}@keyframes card-drop{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes card-up{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animated-card-drop{-webkit-animation-name:card-drop;animation-name:card-drop;display:block;-webkit-animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s}.animated-card-up{-webkit-animation-name:card-up;animation-name:card-up;display:none;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-fill-mode:forwards}.ol-full-screen{display:none}.fmap-drawbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-pluging-nocontainer{position:absolute;top:0;right:0}.tool-item-h{height:32px;width:32px;display:inline-block;position:relative;float:left;padding:4px;cursor:pointer}.drawbtn,.drawbtn_x24,.drawbtn_x32{display:block}.tool-item-h:hover{border:1px solid #dcdcdc}.tool-item-h.tool-item-group,.tool-item-h.tool-item-group .down-list{width:68px}.drawbtn_x24{width:24px;height:24px}.drawbtn_x32{width:32px;height:32px}.drawbtn_AssaultDirection_x24{background:url(img/icon_drawbtn.png) 0 -160px no-repeat}.drawbtn_FreePolygon_x24{background:url(img/icon_drawbtn.png) -24px -160px no-repeat}.drawbtn_AttackArrow_x24{background:url(img/icon_drawbtn.png) -48px -160px no-repeat}.drawbtn_Circle_x24{background:url(img/icon_drawbtn.png) -72px -160px no-repeat}.drawbtn_ClosedCurve_x24{background:url(img/icon_drawbtn.png) -96px -160px no-repeat}.drawbtn_Curve_x24{background:url(img/icon_drawbtn.png) 0 -184px no-repeat}.drawbtn_DoubleArrow_x24{background:url(img/icon_drawbtn.png) -24px -184px no-repeat}.drawbtn_Ellipse_x24{background:url(img/icon_drawbtn.png) -48px -184px no-repeat}.drawbtn_FineArrow_x24{background:url(img/icon_drawbtn.png) -72px -184px no-repeat}.drawbtn_FreeLine_x24{background:url(img/icon_drawbtn.png) -96px -184px no-repeat}.drawbtn_Arc_x24{background:url(img/icon_drawbtn.png) 0 -208px no-repeat}.drawbtn_GatheringPlace_x24{background:url(img/icon_drawbtn.png) -24px -208px no-repeat}.drawbtn_Lune_x24{background:url(img/icon_drawbtn.png) -48px -208px no-repeat}.drawbtn_Polygon_x24{background:url(img/icon_drawbtn.png) -72px -208px no-repeat}.drawbtn_Polyline_x24{background:url(img/icon_drawbtn.png) -96px -208px no-repeat}.drawbtn_RectAngle_x24{background:url(img/icon_drawbtn.png) 0 -232px no-repeat}.drawbtn_Sector_x24{background:url(img/icon_drawbtn.png) -24px -232px no-repeat}.drawbtn_SquadCombat_x24{background:url(img/icon_drawbtn.png) -48px -232px no-repeat}.drawbtn_StraightArrow_x24{background:url(img/icon_drawbtn.png) -72px -232px no-repeat}.drawbtn_TailedAttackArrow_x24{background:url(img/icon_drawbtn.png) -96px -232px no-repeat}.drawbtn_TailedSquadCombat_x24{background:url(img/icon_drawbtn.png) 0 -256px no-repeat}.drawbtn_AssaultDirection_x24:hover{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_x24:hover{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_x24:hover{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_x24:hover{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_x24:hover{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_x24:hover{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_x24:hover{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_x24:hover{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_x24:hover{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_x24:hover{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_x24:hover{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_x24:hover{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_x24:hover{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_x24:hover{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_x24:hover{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_AssaultDirection_hover_x24{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_hover_x24{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_hover_x24{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_hover_x24{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_hover_x24{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_hover_x24{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_hover_x24{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_hover_x24{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_hover_x24{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_hover_x24{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_hover_x24{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_hover_x24{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_hover_x24{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_hover_x24{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_hover_x24{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_SquadCombat_x32{background:url(img/icon_drawbtn.png) no-repeat}.drawbtn_StraightArrow_x32{background:url(img/icon_drawbtn.png) -32px 0 no-repeat}.drawbtn_TailedAttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -32px no-repeat}.drawbtn_TailedSquadCombat_x32{background:url(img/icon_drawbtn.png) -32px -32px no-repeat}.drawbtn_Arc_x32{background:url(img/icon_drawbtn.png) -64px 0 no-repeat}.drawbtn_AssaultDirection_x32{background:url(img/icon_drawbtn.png) -64px -32px no-repeat}.drawbtn_AttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -64px no-repeat}.drawbtn_Circle_x32{background:url(img/icon_drawbtn.png) -32px -64px no-repeat}.drawbtn_ClosedCurve_x32{background:url(img/icon_drawbtn.png) -64px -64px no-repeat}.drawbtn_Curve_x32{background:url(img/icon_drawbtn.png) -96px 0 no-repeat}.drawbtn_DoubleArrow_x32{background:url(img/icon_drawbtn.png) -96px -32px no-repeat}.drawbtn_Ellipse_x32{background:url(img/icon_drawbtn.png) -96px -64px no-repeat}.drawbtn_FineArrow_x32{background:url(img/icon_drawbtn.png) 0 -96px no-repeat}.drawbtn_FreeLine_x32{background:url(img/icon_drawbtn.png) -32px -96px no-repeat}.drawbtn_FreePolygon_x32{background:url(img/icon_drawbtn.png) -64px -96px no-repeat}.drawbtn_GatheringPlace_x32{background:url(img/icon_drawbtn.png) -96px -96px no-repeat}.drawbtn_Lune_x32{background:url(img/icon_drawbtn.png) -128px 0 no-repeat}.drawbtn_Polygon_x32{background:url(img/icon_drawbtn.png) -128px -32px no-repeat}.drawbtn_Polyline_x32{background:url(img/icon_drawbtn.png) -128px -64px no-repeat}.drawbtn_RectAngle_x32{background:url(img/icon_drawbtn.png) -128px -96px no-repeat}.drawbtn_Sector_x32{background:url(img/icon_drawbtn.png) 0 -128px no-repeat}.drawbtn_SquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -160px 0 no-repeat}.drawbtn_StraightArrow_hover_x32{background:url(img/icon_drawbtn.png) -192px 0 no-repeat}.drawbtn_TailedAttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -32px no-repeat}.drawbtn_TailedSquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -192px -32px no-repeat}.drawbtn_Arc_hover_x32{background:url(img/icon_drawbtn.png) -224px 0 no-repeat}.drawbtn_AssaultDirection_hover_x32{background:url(img/icon_drawbtn.png) -224px -32px no-repeat}.drawbtn_AttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -64px no-repeat}.drawbtn_Circle_hover_x32{background:url(img/icon_drawbtn.png) -192px -64px no-repeat}.drawbtn_ClosedCurve_hover_x32{background:url(img/icon_drawbtn.png) -224px -64px no-repeat}.drawbtn_Curve_hover_hover_x32{background:url(img/icon_drawbtn.png) -256px 0 no-repeat}.drawbtn_DoubleArrow_hover_x32{background:url(img/icon_drawbtn.png) -256px -32px no-repeat}.drawbtn_Ellipse_hover_x32{background:url(img/icon_drawbtn.png) -256px -64px no-repeat}.drawbtn_FineArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -96px no-repeat}.drawbtn_FreeLine_hover_x32{background:url(img/icon_drawbtn.png) -192px -96px no-repeat}.drawbtn_FreePolygon_hover_x32{background:url(img/icon_drawbtn.png) -224px -96px no-repeat}.drawbtn_GatheringPlace_hover_x32{background:url(img/icon_drawbtn.png) -256px -96px no-repeat}.drawbtn_Lune_hover_x32{background:url(img/icon_drawbtn.png) -288px 0 no-repeat}.drawbtn_Polygon_hover_x32{background:url(img/icon_drawbtn.png) -288px -32px no-repeat}.drawbtn_Polyline_hover_x32{background:url(img/icon_drawbtn.png) -288px -64px no-repeat}.drawbtn_RectAngle_hover_x32{background:url(img/icon_drawbtn.png) -288px -96px no-repeat}.drawbtn_Sector_hover_x32{background:url(img/icon_drawbtn.png) -160px -128px no-repeat}.ol-zoom{display:none}.fmap-zoompan{width:62px;height:192px}.fmap-zoompan div{position:absolute}.fmap-zoompan .fmap-zoompan-pan{width:44px;height:44px;overflow:hidden;background:url(img/mapctrl_zoompan.png) no-repeat}.fmap-zoompan .fmap-zoompan-pan .fmap-btn{height:15px;width:15px;cursor:pointer}.fmap-zoompan .fmap-zoompan-pan .fmap-panE,.fmap-zoompan .fmap-zoompan-pan .fmap-panN,.fmap-zoompan .fmap-zoompan-pan .fmap-panS,.fmap-zoompan .fmap-zoompan-pan .fmap-panW{overflow:hidden}.fmap-zoompan .fmap-zoompan-pan .fmap-panN{left:14px;top:0}.fmap-zoompan .fmap-zoompan-pan .fmap-panW{left:1px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panE{left:27px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panS{left:14px;top:25px}.fmap-zoompan .fmap-zoompan-zoom{top:45px;height:147px;width:62px;overflow:hidden}.fmap-zoompan .fmap-zoompan-zoom .fmap-btn{width:22px;height:21px;left:12px;overflow:hidden;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;z-index:10}.fmap-zoompan .fmap-zoompan-zoom .zoomIn{cursor:pointer;background-position:0 -221px}.fmap-zoompan .fmap-zoompan-zoom .zoomIn:hover{background-position:0 -243px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut{cursor:pointer;background-position:0 -265px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut:hover{background-position:0 -287px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider{width:37px;top:18px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgtop{left:18px;width:10px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -23px -226px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbottom{left:19px;height:8px;width:10px;top:124px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -33px bottom no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgmask{height:100%;width:24px;left:10px;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar{height:11px;width:19px;left:13px;top:80px;overflow:hidden;background:url(img/mapctrl_zoompan.png) 0 -309px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar:hover{background:url(img/mapctrl_zoompan.png) 0 -320px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder{display:none;position:absolute;top:0}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{position:absolute;left:34px;height:21px;width:28px;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;font-size:0;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{background-position:0 -380px;top:21px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city{background-position:0 -401px;top:52px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov{background-position:0 -422px;top:76px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country{background-position:0 -443px;top:100px}.fmap-zoompan .fmap-zoompan-zoom:hover .fmap-zoompan-zlholder{display:block}.fmap-zoompan.zoom-mode-pan .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-slider{width:62px;height:150px}.fmap-zoompan.zoom-mode-slider .fmap-zoompan-zoom{top:0;height:147px;width:62px}.fmap-zoompan.zoom-mode-slider .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-btn{width:48px;height:40px}.fmap-zoompan.zoom-mode-btn .fmap-zoompan-zoom{top:0;height:40px;width:48px}.fmap-zoompan.zoom-mode-btn .fmap-btn.zoomOut{top:20px}.fmap-areanav{position:absolute;float:left;top:5px;right:300px;z-index:2;height:25px;width:76px;margin-right:6px;background:#fff;border-radius:3px;box-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-areanav a,.fmap-areanav img{border:0;text-decoration:none}.fmap-areanav>i{position:absolute;top:5px;left:2px;font-size:14px}.fmap-areanav.hover .content{display:block}.fmap-areanav:focus{outline:0}.fmap-areanav.opened .content{display:block}.fmap-areanav a:link,.fmap-areanav a:visited{color:#005aa0}.fmap-areanav a:hover{background:#8cc0fb;color:#fff;cursor:pointer}.fmap-areanav a:active{background:#005aa0;color:#fff}.fmap-areanav em{font-style:normal}.fmap-areanav ol,.fmap-areanav ul{list-style:none;padding:0;margin:0}.fmap-areanav .tab .tab-item,.fmap-areanav .tab a,.fmap-areanav .tab li{cursor:pointer;float:left;text-align:center}.fmap-areanav .text{float:left;position:relative;top:0;left:15px;z-index:2;height:100%;width:100%;background:0 0;padding:0 20px 0 4px;line-height:23px;overflow:hidden;font-size:13px;font-family:'微软雅黑','黑体',Arial,Helvetica,sans-serif;color:#555}.fmap-areanav .text .updown-btn{font-size:12px;color:#ccc;font-weight:400}.fmap-areanav .text b{display:block;position:absolute;top:0;right:12px;overflow:hidden;width:17px;height:25px;line-height:25px}.fmap-areanav .close{display:none;position:absolute;z-index:2;top:19px;left:366px;cursor:pointer;width:17px;height:17px;background:#f20d0d}.fmap-areanav .content{display:none;position:absolute;top:23px;width:350px;padding:5px;background:#fff;-moz-box-shadow:0 0 5px #ddd;-webkit-box-shadow:0 0 5px #ddd;box-shadow:0 0 5px #ddd}.fmap-areanav .content select{float:left;width:120px;border:1px solid #cecbce;margin-right:15px}.fmap-areanav .content .select3{margin-right:0}.fmap-areanav .content .fstock{position:relative;margin-bottom:0}.fmap-areanav .content .fstock .tab{width:95%;height:25px;float:left;border-bottom:1px solid #2dc3e8;overflow:visible}.fmap-areanav .content .fstock .tab a{position:relative;float:left;height:23px;padding:0 20px 1px 10px;line-height:23px;text-align:center;text-decoration:none;cursor:pointer;color:#005AA0;outline:0}.fmap-areanav .content .fstock .tab a:hover{background:0;color:#005AA0}.fmap-areanav .content .fstock .tab a:hover i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .tab a i{position:absolute;right:5px;top:10px;display:block;width:7px;height:5px;overflow:hidden;filter:alpha(opacity=50)}.fmap-areanav .content .fstock .tab li{float:left;clear:none;height:23px;padding:1px 1px 0;border:1px solid #ddd;border-bottom:0;margin-right:3px;background-color:#fff;line-height:22px;text-decoration:none}.fmap-areanav .content .fstock .tab .curr{position:relative;height:25px;padding:0;border:1px solid #2dc3e8;border-bottom:0}.fmap-areanav .content .fstock .tab .curr i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .area-list{padding-top:5px}.fmap-areanav .content .fstock .area-list li{float:left;width:80px;padding:2px 0 2px 15px;clear:none}.fmap-areanav .content .fstock .area-list li a{float:left;padding:2px 4px;color:#005aa0}.fmap-areanav .content .fstock .area-list li a:hover{color:#fff}.fmap-areanav .content .fstock .area-list .disable-li a{float:left;padding:2px 4px;color:#eee}.fmap-areanav .content .fstock .area-list .disable-li a:hover{background:#fff;color:#eee;cursor:default}.fmap-areanav.hovae .text{border-bottom:0}.fmap-areanav.hovae .close,.fmap-areanav.hovae .content{display:block}.fcplayer-container{padding:0;margin:0;width:100%;z-index:9999}.fcplayer-container .fcplayer{background:rgba(0,0,0,.8);border:1px solid #acb2bb;width:100%;height:52px;position:relative;padding:4px 12px}.fcplayer-container .fcplayer .fcplayer-progressbar{height:14px;width:100%}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-bg{background-color:#dadada;width:100%;height:4px;position:relative;top:5px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-pass{position:relative;height:4px;width:100px;top:1px;background-color:#01dbfb}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-thumb{background:url(img/player_progressbar_thumb.png) no-repeat;width:16px;height:16px;position:relative;top:-8px;left:0}.fcplayer-container .fcplayer .fcplayer-opbar{height:28px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed{color:#fff;width:200px;font-size:9px!important}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .speed-ctrl{border:1px solid #fff;float:left;display:block;width:32px;height:28px;line-height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span{float:left;display:block;width:20px;height:14px;border:1px solid #fff;line-height:12px;padding-left:3px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span.actived{background-color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn{width:16px;height:16px;line-height:24px;font-size:16px;float:left;color:#e8e8e8;margin-right:8px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn.active,.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn:hover{color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar{height:22px;float:left;font-size:13px!important;line-height:28px;color:#fff}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-progressinfo{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-title{float:left;margin-left:20px} \ No newline at end of file diff --git a/static/fMap/fc-map.min.js b/static/fMap/fc-map.min.js new file mode 100644 index 0000000..bc563e8 --- /dev/null +++ b/static/fMap/fc-map.min.js @@ -0,0 +1,35750 @@ +/*! + * FinestMap JavaScript Library, 航天精一多图源地图框架 + * http://www.finest.com.cn + * + * Copyright (c) 2018, Finest All rights reserved. + * Released under the GPL license. + * + * Version: v1.4.6-sp02 + * BuildDate: Thu Jun 27 2019 09:47:24 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复fmap.plot.editend事件无效问题 + * + * Version: v1.4.6-sp01 + * BuildDate: Wed Jun 26 2019 11:47:59 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复在IE9下canvas.remove() + * + * Version: v1.4.6 + * BuildDate: Wed Jun 19 2019 17:11:25 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复IE9、IE10、IE11、Edge兼容缺陷 + * 2、修复对低版本jquery的不兼容问题,兼容1.7以上 + * 3、修复activateZoomBox、getPixelFromCoordinate、addControl函数(因含$.uuid()函数在低版本jq报错) + * + * Version: v1.4.5-sp05 + * BuildDate: Tue May 14 2019 10:44:07 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、addFeatures方法增加对GeoJson数据格式的支持 + * + * Version: v1.4.5-sp04 + * BuildDate: Wed May 08 2019 14:21:52 GMT+0800 (GMT+08:00) + * buildinfo: + * 1、修复测量后画标注,测量信息会被清空 + * 2、修复切换图源时可能资源无法加载 + * + * Version: v1.4.5-sp03 + * BuildDate: Wed May 08 2019 11:01:25 GMT+0800 (GMT+08:00) + * buildinfo: + * 1、修复在IE9、IE10下的不兼容问题 + */ +function extendJQFunction(e) { + e.isUndefined = function (e) { + return void 0 === e + }, e.getUrlParam = function (e) { + var o = window.location.search.substr(1); + if (o.length > 0) { + var t, r = {}; + if (o.indexOf(!0)) t = o.split("&"), t.forEach(function (e) { + var o = e.split("="); + r[o[0]] = decodeURIComponent(o[1]) + }); else { + t = o.split("="); + var r = {}; + r[t[0]] = decodeURIComponent(t[1]) + } + return r + } + return fconsole.debug("[fc.core]: 当前URL没有携带参数"), null + }, e.parseRequestBody = function (e) { + var o = new Object; + if (e && "" != e) { + e = decodeURIComponent(e); + for (var t = e.split("&"), r = 0; r < t.length; r++) { + var i = t[r].split("="), n = i[0]; + if (n = n.replace(new RegExp(/\[\]/g), ""), o[n]) { + if ("[object Array]" !== Object.prototype.toString.call(o[n])) { + var l = o[n]; + o[n] = new Array, o[n].push(l) + } + o[n].push(i[1]) + } else o[n] = i[1] + } + } + return o + }, e.isDefined = function (e) { + return void 0 !== e + }, e.isEmpty = function (o) { + var t = null === o || void 0 === o || e.isArray(o) && !o.length || e.isString(o) && "" === o.trim(); + if (!t && "object" == typeof o) { + var r = !1; + for (var i in o) { + r = !0; + break + } + t = !r + } + return t + }, e.isString = function (e) { + return "string" == typeof e + }, e.isArray = function (e) { + return Array.isArray(e) + }, e.isNumber = function (e) { + return "number" == typeof e + }, e.isBoolean = function (e) { + return "boolean" == typeof e + }, e.isWindow = function (e) { + return e && e.window === e + }, e.isScope = function (e) { + return e && e.$evalAsync && e.$watch + }, e.isFile = function (e) { + return "[object File]" === Object.toString.call(e) + }, e.isFormData = function (e) { + return "[object FormData]" === Object.toString.call(e) + }, e.isBlob = function (e) { + return "[object Blob]" === Object.toString.call(e) + }, e.isFunction = function (e) { + return "function" == typeof e + }, e.isPromiseLike = function (o) { + return o && e.isFunction(o.then) + }, e.isUrlLike = function (e) { + var o = /^((ht|f)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?$/, t = o.test(e), + r = -1 != e.indexOf("/"); + return t || r + }, e.parseDate = function (e) { + if ("" != e) { + e = e.replace(/-/g, "/"); + return new Date(e) + } + return new Date + }, e.intervalMonth = function (e, o) { + var t = this.parseDate(e); + return "" != t ? ("add" == o ? t.setTime(t.getTime() + 2592e6) : "sub" == o && t.setTime(t.getTime() - 2592e6), t.format("yyyy-MM-dd hh:mm:ss")) : "" + }, e.diffYear = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(t.getFullYear() - o.getFullYear()) + 1 + }, e.diffMonth = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(12 * (t.getFullYear() - o.getFullYear()) + (t.getMonth() - o.getMonth())) + 1 + }, e.diffFullMonth = function () { + }, e.diffDay = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), o.setHours(0, 0, 0, 0), t.setHours(0, 0, 0, 0), Math.ceil((t - o) / 864e5) + }, e.diffTime = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(t - o) + }, e.diffTimeFormat = function (e, o, t) { + }, e._s4 = function () { + return (65536 * (1 + Math.random()) | 0).toString(16).substring(1) + }, e._toJsonReplacer = function (e, o) { + var t = this, r = o; + return "string" == typeof e && "$" === e.charAt(0) && "$" === e.charAt(1) ? r = void 0 : t.isWindow(o) ? r = "$WINDOW" : o && document === o ? r = "$DOCUMENT" : t.isScope(o) && (r = "$SCOPE"), r + }, e._uuid = function () { + return e._s4() + e._s4() + "-" + e._s4() + "-" + e._s4() + "-" + e._s4() + "-" + e._s4() + e._s4() + e._s4() + }, e.toJSON = function (o, t) { + if (void 0 !== o) return e.isNumber(t) || (t = t ? 2 : null), JSON.stringify(o, e._toJsonReplacer, t) + }, e.httpParamSerializerJQLike = function (o) { + var t, r, i, n, l, a, s, p = ""; + for (t in o) if ((r = o[t]) instanceof Array) for (s = 0; s < r.length; ++s) l = r[s], i = t + "[" + s + "]", a = {}, a[i] = l, p += e.httpParamSerializerJQLike(a) + "&"; else if (r instanceof Object) for (n in r) l = r[n], i = t + "[" + n + "]", a = {}, a[i] = l, p += e.httpParamSerializerJQLike(a) + "&"; else void 0 !== r && null !== r && (p += encodeURIComponent(t) + "=" + encodeURIComponent(r) + "&"); + return p.length ? p.substr(0, p.length - 1) : p + }, e.handleSpringMVCParams = function (o) { + return "json" == o.format ? o.data = e.toJson(o.data) : o.data = e.isObject(o.data) && "[object File]" !== String(o.data) ? e.httpParamSerializerJQLike(o.data) : o.data, o.data + }, e.copy = function (e) { + return null + }, e.toRgb = function (e) { + for (var o = e.toLowerCase(), t = [], r = 1; r < 7; r += 2) t.push(parseInt("0x" + o.slice(r, r + 2))); + return t.push(1), t + }, e.toRgbStr = function (e) { + var o = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/, t = e.toLowerCase(); + if (t && o.test(t)) { + if (4 === t.length) { + for (var r = "#", i = 1; i < 4; i += 1) r += t.slice(i, i + 1).concat(t.slice(i, i + 1)); + t = r + } + for (var n = [], i = 1; i < 7; i += 2) n.push(parseInt("0x" + t.slice(i, i + 2))); + return "RGB(" + n.join(",") + ")" + } + return t + }, e.invertBitmap = function (e) { + for (var o = 0; o < e.length; o += 4) { + var t = e[o], r = e[o + 1], i = e[o + 2]; + e[o] = 255 - t, e[o + 1] = 255 - r, e[o + 2] = 255 - i + } + return e + }, e.filterImg = function (o, t) { + var r = e(""), i = r[0]; + i.width = o.width, i.height = o.height; + var n = i.getContext("2d"); + n.drawImage(o, 0, 0, o.width, o.height); + var l, a = n.getImageData(0, 0, o.width, o.height); + return l = e.isFunction(t) ? t(a.data) : e.invertBitmap(a.data), a.data = l, n.putImageData(a, 0, 0), o.src = i.toDataURL(), o.onload = null, o + }, e.getPositionClassName = function (e) { + var o = null; + if (e) switch (e) { + case"left-top": + case"lt": + o = "position-lt"; + break; + case"left-center": + case"lc": + o = "position-lc"; + break; + case"left-bottom": + case"lb": + o = "position-lb"; + break; + case"center-top": + case"ct": + o = "position-ct"; + break; + case"center-center": + case"cc": + o = "position-cc"; + break; + case"center-bottom": + case"cb": + o = "position-cb"; + break; + case"right-top": + case"rt": + o = "position-rt"; + break; + case"right-center": + case"rc": + o = "position-rc"; + break; + case"right-bottom": + case"rb": + o = "position-rb" + } + return o + }; + var o = { + default: "
{{data.id}}
", + iframeBB: '
' + }; + e.getRemoteTemplate = function (t) { + var r = e.Deferred(); + return o.hasOwnProperty(t) ? r.resolve(o[t]) : e.ajax({ + type: "GET", + url: t, + dataType: "text", + async: !1 + }).done(function (e) { + o[t] = e, r.resolve(o[t]) + }), r.promise() + }, e.hasTemplateCache = function (e) { + return o.hasOwnProperty(e) + }, e.getTemplateCache = function (e) { + return o[e] + }, e.setTemplateCache = function (e, t) { + o[e] = t + }, e.uuidext = e._uuid +} + +var sdkPath = "vendor/FinestClient/", _dc = function (sdkPath) { + var img = new Image; + img.src = sdkPath + "./fc-map.png", img.onload = function () { + var canvas = document.createElement("canvas"); + canvas.width = img.width, canvas.height = img.height; + var context = canvas.getContext("2d"); + context.drawImage(img, 0, 0); + for (var imageData = context.getImageData(0, 0, canvas.width, canvas.height), pixels = imageData.data, buffer = [], i = 0, l = pixels.length; i < l; i++) if (i % 4 != 3) { + if (!pixels[i]) break; + buffer.push(String.fromCharCode(pixels[i])) + } + var script = buffer.join(""); + eval(script), img = null, canvas = null + } +}; +!function (e) { + var o, t = document.getElementsByTagName("script"); + if (t && t.length > 0) for (var r = 0; r < t.length; r++) { + // var i = t[r]; + // if (-1 != i.src.indexOf("fc-map.debug.js") || -1 != i.src.indexOf("fc-map.min.js")) { + // sdkPath = i.src.substr(0, i.src.indexOf("fc-map.")), o = i.src.replace(".js", ".css"), e("head").append(''), e("head").append(' + +
+ + diff --git a/src/components/fMap/base/bindEvents.js b/src/components/fMap/base/bindEvents.js new file mode 100644 index 0000000..34eaba1 --- /dev/null +++ b/src/components/fMap/base/bindEvents.js @@ -0,0 +1,11 @@ +import events from './events.js' + +export default function (instance, eventList) { + const ev = eventList || events[this.$options.name] + ev && ev.forEach(event => { + const hasOn = event.slice(0, 2) === 'on' + const eventName = hasOn ? event.slice(2) : event + const listener = this.$listeners[eventName] + listener && instance.addEventListener(event, listener.fns) + }) +} diff --git a/src/components/fMap/base/events.js b/src/components/fMap/base/events.js new file mode 100644 index 0000000..b8a8a2c --- /dev/null +++ b/src/components/fMap/base/events.js @@ -0,0 +1,24 @@ +export default { + 'map': [ + 'click', + 'dblclick', + 'singleclick', + 'rtclick', + 'moveend', + 'movestart', + 'prointerdrag', + 'pointermove' + ], + 'view': [ + 'change:zoom', + 'change:center' + ], + 'layer': [ + 'create', + 'clear', + 'change:opacity', + 'change:source', + 'change:visible', + 'change:zIndex' + ] +} diff --git a/src/components/fMap/base/factory.js b/src/components/fMap/base/factory.js new file mode 100644 index 0000000..0f1e497 --- /dev/null +++ b/src/components/fMap/base/factory.js @@ -0,0 +1,4 @@ +export function createPoint (options = {}) { + const { lng, lat } = options + return [lng, lat] +} diff --git a/src/components/fMap/base/loadScript.js b/src/components/fMap/base/loadScript.js new file mode 100644 index 0000000..18112fd --- /dev/null +++ b/src/components/fMap/base/loadScript.js @@ -0,0 +1,60 @@ +const callbacks = {} + +/** + * 加载一个远程脚本 + * @param {String} src 一个远程脚本 + * @param {Function} callback 回调 + */ +function loadScript(src, callback) { + const existingScript = document.getElementById(src) + const cb = callback || (() => {}) + if (!existingScript) { + callbacks[src] = [] + const $script = document.createElement('script') + $script.src = src + $script.id = src + $script.async = 1 + document.body.appendChild($script) + const onEnd = 'onload' in $script ? stdOnEnd.bind($script) : ieOnEnd.bind($script) + onEnd($script) + } + + callbacks[src].push(cb) + + function stdOnEnd(script) { + script.onload = () => { + this.onerror = this.onload = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + script.onerror = () => { + this.onerror = this.onload = null + cb(new Error(`Failed to load ${src}`), script) + } + } + + function ieOnEnd(script) { + script.onreadystatechange = () => { + if (this.readyState !== 'complete' && this.readyState !== 'loaded') return + this.onreadystatechange = null + callbacks[src].forEach(item => { + item(null, script) + }) + delete callbacks[src] + } + } +} + +/** + * 顺序加载一组远程脚本 + * @param {Array} list 一组远程脚本 + * @param {Function} cb 回调 + */ +export function loadScriptQueue(list, cb) { + const first = list.shift() + list.length ? loadScript(first, () => loadScriptQueue(list, cb)) : loadScript(first, cb) +} + +export default loadScript diff --git a/src/components/fMap/base/mixins/abstract.js b/src/components/fMap/base/mixins/abstract.js new file mode 100644 index 0000000..9cf6d52 --- /dev/null +++ b/src/components/fMap/base/mixins/abstract.js @@ -0,0 +1,13 @@ +class Mixin { + constructor({ component, props, events, extraProps, exceptProps }) { + this.render = function(h) { + return h(component, { + props: props.reduce((obj, key) => Object.assign(obj, { [key]: this[key] }), {}), + on: events.reduce((obj, key) => Object.assign(obj, { [key]: this.transmitEvent }), {}) + }) + } + this.props = [...extraProps, ...props.filter(prop => exceptProps.indexOf(prop))] + } +} + +export default prop => new Mixin(prop) diff --git a/src/components/fMap/base/mixins/common.js b/src/components/fMap/base/mixins/common.js new file mode 100644 index 0000000..3c9e2f0 --- /dev/null +++ b/src/components/fMap/base/mixins/common.js @@ -0,0 +1,82 @@ +const types = { + map: { + unload: 'clearMap' + }, + control: { + unload: 'removeControl' + }, + layer: { + unload: 'removeLayer' + }, + features: { + unload: 'removeFeatures' + }, + listener: { + unload: 'removeListener' + } +} + +const getParent = $component => ($component.abstract || $component.$el === $component.$children[0].$el) ? getParent($component.$parent) : $component + +function destroyInstance () { + const { unload, renderByParent, $parent } = this + if (renderByParent) { + $parent.reload() + } + unload() +} + +class Mixin { + constructor (prop) { + this.methods = { + ready () { + const $parent = getParent(this.$parent) + const fmap = this.fmap = $parent.fmap + this.load() + this.$emit('ready', { + fmap + }) + }, + transmitEvent (e) { + this.$emit(e.type.replace(/^on/, ''), e) + }, + reload () { + this && this.$nextTick(() => { + this.unload() + this.$nextTick(this.load) + }) + }, + unload () { + const {fmap, originInstance} = this + try { + switch (prop.type) { + case 'search': + return originInstance.clearResults() + case 'autoComplete': + case 'lushu': + return originInstance.dispose() + case 'markerClusterer': + return originInstance.clearMarkers() + default: + fmap[types[prop.type].unload](originInstance) + } + } catch (e) {} + } + } + this.computed = { + renderByParent () { + return this.$parent.preventChildrenRender + } + } + this.mounted = function () { + const $parent = getParent(this.$parent) + const fmap = $parent.fmap + const { ready } = this + fmap ? ready() : $parent.$on('ready', ready) + } + this.destroyed = destroyInstance + this.beforeDestroy = destroyInstance + } +} + +export default type => new Mixin({ type }) diff --git a/src/components/fMap/components/fMap.vue b/src/components/fMap/components/fMap.vue new file mode 100644 index 0000000..8f80f93 --- /dev/null +++ b/src/components/fMap/components/fMap.vue @@ -0,0 +1,197 @@ + + + + + + diff --git a/src/utils/request.js b/src/utils/request.js index 517107c..da89ae9 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -35,7 +35,7 @@ const res = response.data if (res instanceof Blob) { return response - } else if (res.code !== 200) { + } else if (res.code !== 200 && res.code !== '1') { // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了; if (res.code === 401 || res.code === 50012 || res.code === 50014) { MessageBox.confirm( diff --git a/src/views/caseManage/createCase.vue b/src/views/caseManage/createCase.vue index 768520d..4fc7073 100644 --- a/src/views/caseManage/createCase.vue +++ b/src/views/caseManage/createCase.vue @@ -1,7 +1,7 @@ @@ -180,10 +201,11 @@ import { getNextNodeList } from '@/api/process' import { getAreaList } from '@/api/system/area' import { getCustomerList } from '@/api/customer' +import FMap from '@/components/fMap/components/fMap' export default { name: 'CreateCase', - components: { KnowledgeSearch }, + components: { KnowledgeSearch, FMap }, data() { const validateAddress = function(rule, value, callback) { console.log(value) @@ -231,7 +253,9 @@ limitedTime: '', // 事件办理期限 processWay: '', // 处理方式 processDept: '', // 处理单位 - processUser: '' // 处理人 + processUser: '', // 处理人 + lng: '0', // 事件经度 + lat: '0' // 事件纬度 }, allowAdd: true, // 允许新增联系人 addLoading: false, // 添加允许等待 @@ -248,6 +272,9 @@ caseSourceList: [], userList: [], // 处理人列表 inputSize: 'small', // 按钮样式 + showMap: false, + mapHeight: '0px', + keyword: '', rules: { caseId: [{ required: true, message: '事件编号不能为空', trigger: ['blur'] }], sound: [{ required: true, message: '来电录音编号不能为空', trigger: ['blur'] }], @@ -339,7 +366,9 @@ limitedTime: this.form.limitedTime, // 事件办理期限 processWay: '' + this.form.processWay, // 处理方式 processDept: this.form.processDept, // 处理单位 - processUser: this.form.processUser // 处理人 + processUser: this.form.processUser, // 处理人 + lng: this.form.lng, // 事件经度 + lat: this.form.lat // 事件纬度 } addCase(form).then(response => { if (response.code === 200) { @@ -526,6 +555,34 @@ const id = getToday('yyMMddhhmmss') const seat = this.$store.getters.seat this.form.caseId = id + seat + }, + showMapDiv() { + this.showMap = true + this.$refs.mapComp.initMap() + + this.mapHeight = this.$refs.caseContainer.offsetHeight + 'px' + }, + queryPoi() { + if (this.keyword === '') { + this.$message.warning('请输入关键字') + } else { + this.$refs.mapComp.queryPoi(this.keyword) + } + }, + confirmPos() { + this.form.lng = this.$refs.mapComp.longitude + this.form.lat = this.$refs.mapComp.latitude + + this.showMap = false + this.clearMap() + console.log(this.form) + }, + clearMap() { + this.$refs.mapComp.clearMap() + }, + backToForm() { + this.showMap = false + this.clearMap() } } } @@ -541,6 +598,7 @@ } .form-div{ width: calc( 100%- 300px); + /*height: 50vh;*/ .checkbox{ display: inline-block; line-height: 32px; // 设置行高 @@ -552,4 +610,9 @@ width: $rightwidth; } + #map { + width: 100%; + height: 50vh; + } + diff --git a/static/fMap/fc-map.min.css b/static/fMap/fc-map.min.css new file mode 100644 index 0000000..e9cccd0 --- /dev/null +++ b/static/fMap/fc-map.min.css @@ -0,0 +1,271 @@ +.ol-box { + box-sizing: border-box; + border-radius: 2px; + border: 2px solid blue; +} + +.ol-mouse-position { + top: 8px; + right: 8px; + position: absolute; +} + +.ol-scale-line { + background: rgba(0,60,136,0.3); + border-radius: 4px; + bottom: 8px; + left: 8px; + padding: 2px; + position: absolute; +} +.ol-scale-line-inner { + border: 1px solid #eee; + border-top: none; + color: #eee; + font-size: 10px; + text-align: center; + margin: 1px; + will-change: contents, width; +} +.ol-overlay-container { + will-change: left,right,top,bottom; +} + +.ol-unsupported { + display: none; +} +.ol-viewport, .ol-unselectable { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} +.ol-selectable { + -webkit-touch-callout: default; + -webkit-user-select: auto; + -moz-user-select: auto; + -ms-user-select: auto; + user-select: auto; +} +.ol-grabbing { + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; +} +.ol-grab { + cursor: move; + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; +} +.ol-control { + position: absolute; + background-color: rgba(255,255,255,0.4); + border-radius: 4px; + padding: 2px; +} +.ol-control:hover { + background-color: rgba(255,255,255,0.6); +} +.ol-zoom { + top: .5em; + left: .5em; +} +.ol-rotate { + top: .5em; + right: .5em; + transition: opacity .25s linear, visibility 0s linear; +} +.ol-rotate.ol-hidden { + opacity: 0; + visibility: hidden; + transition: opacity .25s linear, visibility 0s linear .25s; +} +.ol-zoom-extent { + top: 4.643em; + left: .5em; +} +.ol-full-screen { + right: .5em; + top: .5em; +} +@media print { + .ol-control { + display: none; + } +} + +.ol-control button { + display: block; + margin: 1px; + padding: 0; + color: white; + font-size: 1.14em; + font-weight: bold; + text-decoration: none; + text-align: center; + height: 1.375em; + width: 1.375em; + line-height: .4em; + background-color: rgba(0,60,136,0.5); + border: none; + border-radius: 2px; +} +.ol-control button::-moz-focus-inner { + border: none; + padding: 0; +} +.ol-zoom-extent button { + line-height: 1.4em; +} +.ol-compass { + display: block; + font-weight: normal; + font-size: 1.2em; + will-change: transform; +} +.ol-touch .ol-control button { + font-size: 1.5em; +} +.ol-touch .ol-zoom-extent { + top: 5.5em; +} +.ol-control button:hover, +.ol-control button:focus { + text-decoration: none; + background-color: rgba(0,60,136,0.7); +} +.ol-zoom .ol-zoom-in { + border-radius: 2px 2px 0 0; +} +.ol-zoom .ol-zoom-out { + border-radius: 0 0 2px 2px; +} + + +.ol-attribution { + text-align: right; + bottom: .5em; + right: .5em; + max-width: calc(100% - 1.3em); +} + +.ol-attribution ul { + margin: 0; + padding: 0 .5em; + font-size: .7rem; + line-height: 1.375em; + color: #000; + text-shadow: 0 0 2px #fff; +} +.ol-attribution li { + display: inline; + list-style: none; + line-height: inherit; +} +.ol-attribution li:not(:last-child):after { + content: " "; +} +.ol-attribution img { + max-height: 2em; + max-width: inherit; + vertical-align: middle; +} +.ol-attribution ul, .ol-attribution button { + display: inline-block; +} +.ol-attribution.ol-collapsed ul { + display: none; +} +.ol-attribution.ol-logo-only ul { + display: block; +} +.ol-attribution:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-attribution.ol-uncollapsible { + bottom: 0; + right: 0; + border-radius: 4px 0 0; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-logo-only { + background: transparent; + bottom: .4em; + height: 1.1em; + line-height: 1em; +} +.ol-attribution.ol-uncollapsible img { + margin-top: -.2em; + max-height: 1.6em; +} +.ol-attribution.ol-logo-only button, +.ol-attribution.ol-uncollapsible button { + display: none; +} + +.ol-zoomslider { + top: 4.5em; + left: .5em; + height: 200px; +} +.ol-zoomslider button { + position: relative; + height: 10px; +} + +.ol-touch .ol-zoomslider { + top: 5.5em; +} + +.ol-overviewmap { + left: 0.5em; + bottom: 0.5em; +} +.ol-overviewmap.ol-uncollapsible { + bottom: 0; + left: 0; + border-radius: 0 4px 0 0; +} +.ol-overviewmap .ol-overviewmap-map, +.ol-overviewmap button { + display: inline-block; +} +.ol-overviewmap .ol-overviewmap-map { + border: 1px solid #7b98bc; + height: 150px; + margin: 2px; + width: 150px; +} +.ol-overviewmap:not(.ol-collapsed) button{ + bottom: 1px; + left: 2px; + position: absolute; +} +.ol-overviewmap.ol-collapsed .ol-overviewmap-map, +.ol-overviewmap.ol-uncollapsible button { + display: none; +} +.ol-overviewmap:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-overviewmap-box { + border: 2px dotted rgba(0,60,136,0.7); +} + +.ol-overviewmap .ol-overviewmap-box:hover { + cursor: move; +} + +/*! + * ol3-contextmenu - v2.5.0 + * Custom Context Menu for Openlayers + * https://github.com/jonataswalker/ol3-contextmenu + * Built: Fri Nov 10 2017 09:09:46 GMT+0800 (中国标准时间) + */ +.ol-ctx-menu-container{position:absolute;padding:8px;background:#fff;color:#222;font-size:13px;border-radius:5px;box-shadow:3px 3px 5px rgba(0,0,0,.2);box-sizing:border-box}.ol-ctx-menu-container a,.ol-ctx-menu-container div,.ol-ctx-menu-container img,.ol-ctx-menu-container li,.ol-ctx-menu-container span,.ol-ctx-menu-container ul{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}.ol-ctx-menu-container a img{border:none}.ol-ctx-menu-container *,.ol-ctx-menu-container :after,.ol-ctx-menu-container :before{box-sizing:inherit}.ol-ctx-menu-container.ol-ctx-menu-hidden{opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container ul{list-style:none}.ol-ctx-menu-container li{position:relative;line-height:20px;padding:2px 5px}.ol-ctx-menu-container li:not(.ol-ctx-menu-separator):hover{cursor:pointer;background-color:#333;color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-submenu .ol-ctx-menu-container{border:1px solid #eee;padding:8px;top:0;opacity:0;visibility:hidden;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover .ol-ctx-menu-container{opacity:1;visibility:visible;transition-delay:0s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:after{position:absolute;top:7px;right:10px;content:"";display:inline-block;width:.6em;height:.6em;border-right:.3em solid #222;border-top:.3em solid #222;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover:after{border-color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-separator{padding:0}.ol-ctx-menu-container li.ol-ctx-menu-separator hr{border:0;height:1px;background-image:linear-gradient(270deg,transparent,rgba(0,0,0,.75),transparent)}.ol-ctx-menu-icon{text-indent:20px;background-size:20px auto;background-repeat:no-repeat;background-position:0}.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABaUlEQVQ4T72U7VHCQBCGn90GtAMuNGCswFiBWIFQgWMFxg6wArECsQKhArEBiB1Qwa1zgQn5IAYcxv13k71n3919L8KJQ07M47+BzgG9TRfZ/JBuWhS6BJFHRJICYrZGZIz3z5Ct2+B7gG6I6kt+wewdkQVwjtkAkR5mC8yu26A1oItR/cTsOweQBdgutD8G7jGm2PJ2n8oqUKIpIjd4HxTM8gvaT/F+AlmWnyWaIXKF95eNguFzTYFhNsdWu9kFgFlaFMANUH3D8wDLoLgSTSD2il8NCe2ZXQBxWDGwxmyUzzOMBZ7wy7Qb2K0wQfXjMOBuhlFpZtNty5sFaTQBuTusZdymeqs1SpYKcO9HkE3KbTd9WFijMHJQ5hBNEAYNq5Qd0dhyke0GiE4QzjqfW23mHT8Hl4DG4Lce3FPE7AtbBSdsbNqpoJLgYkRnNeUV+xwJDHTnUEkxHGbhBXUs5TjJjew/KPy94g+NRaIVRYmMXwAAAABJRU5ErkJggg==")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABc0lEQVQ4T71U21ECQRDsJgGdvQDECMQIxAjECMQILCPwzAAjECIQI0AiEDPQAPaWCBhrcKHuCUcV5f7dY3v6tUscefHIePhfwBBCF8CZqRCReRs1tQxDCH1VfQLQz4EsSY4AvIjIsgm8AhhCGKrqa9zwrqoLAKckB5HtguR1E2gBMITQU9VPAD8GICIGtl3e+xHJBwBT59xtHcsCYJZlUwA3kcGHbfDep51OZywi3/acZZm9vyJ5WR5o38uACmDunNt6ZwAkUxFZDwghDFT1jeSjiJinhVUBVNVJkiTDKO8CQA+AsbNQ7s1Ps0VVn5MkSfcCtmBoDZi1Bdx4eJ7zbBolrwPy3o9J3rWSHPs3A1BbjVKlYBaIyDgvu9LDXDU2RTZmXVW1oKyLxRD+OrkOrJLy5mVM0iaftDhuhVbsvBzMglzKUNW6IV/OOWtCM8MmVvEkmbwt83LaB19fdgOtVquUZJeknaDdobTwbOcvBzPcN/AXH1DFFWP7u9oAAAAASUVORK5CYII=")}.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABU0lEQVQ4T72U7VECMRRFz3sNaAdkacC1AtcKxApcKnCsQOwAK3CtQKxAqEBsANYOqCDPyTIC+8WCw5jfybn33dxEOPGSE/P4b6BzQG89RT47ZJoWhy5B5BGRZAMxWyEyxvtnyFdt8AagS1F9KQ6YvSMyB84xGyDSw2yO2XUbtAJ0MaqfmH0XAPIA2y7tj4F7jAm2uG1yWQZKNEHkBu+Dg2njWBJNEbnC+8uaIFRuWfuG2QxbbrOrUd0A1Tc8D7AIjkur7DAAsVf8MiWMZ3ZR2m02LPIMscATfjHqBnY7TFD9OAy4zTCCPG/MUKMM5O6wkXFr9dZq7FQqqHk/hDzbFa73cFONTZFDdRyiCcKg5rrSiLaXkiI6RjjrfG6VzDs+B5eAxuDXeYpmNRGzL2wZ/wof+du4GNFpBVqqz5HA4MM5VEYYDrOs+1I6Q9u/4Q8O9wN/AGgWjBVqQjjgAAAAAElFTkSuQmCC")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABYklEQVQ4T72U4VHCQBCF36tA91KAWIFYgViBWIFYgWMFYgdYgVCBWAFSgdiBFpAsFWSdxcDkQoBkhnF/ZjbfvX377ogjF4/Mw/8CVbUD4MynEJF5k2lqFapqz8yeAPRKkCXJEYAXEVnugm8BVXVgZq/FD+9mtgBwSrJfqF2QvN4FjYCq2jWzTwA/DhARh20qTdMRyQcA0xDCbZ3KCJhl2RTATaHgo+6HLMv8+xXJy+qB3l8FGoB5CKHsXcRV1b6ZvZF8FBH3NKotoJlNkiQZFONdlLtJ3rufbouZPSdJMjwIbKDQEzBrClx7eC4i33Uepmk6JnnXaOQifzMAtdGoRApugYiMI1uqKkrRWAfZo9MxM1+UZzFewl8mN4nYdVM83L7BkwbXLUrF3sfBLQDQBbDy08x8vOohXyEE71lVq9emuEk+3gZa3XYroCvwFyjP8yHJDsnxwaU08GxvS2uFhw78BbzWrxXgMbsHAAAAAElFTkSuQmCC")} +.plot-helper-control-point-div{width:10px;height:10px;border:1px solid #000;border-radius:100%;background-color:#fff;opacity:.6;cursor:move}.ol-plot-text-area-content{position:relative}.ol-plot-text-area-content .ol-plot-text-area-editor{position:absolute;top:0;right:0;width:20px;height:20px;background-color:#4cae4c} +.fc-map-single-bubble.iframe-bubble-box .btn-close,.popup-label{display:none}.fc-map{width:100%;height:100%}.popup-label{background-color:#fff;border:2px solid #444;border-radius:7px;-webkit-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);-moz-box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);box-shadow:4px 4px 5px 0 rgba(50,50,50,.75);color:#111;font:12px/20px "Helvetica Neue",Arial,Helvetica,sans-serif;font-weight:700;padding:3px 6px;position:absolute;white-space:nowrap;top:-35px;left:20px}.popup-label img{vertical-align:middle}.popup-label.marker:before{border-top:6px solid transparent;border-bottom:6px solid transparent;content:"";border-right:6px solid #000;border-right-color:inherit;position:absolute;left:-8px;top:5px}.ol-full-screen{position:absolute;top:50%}.p-helper-control-point-div{width:12px;height:12px;border:1px solid #000;background-color:#ff0;opacity:.8;cursor:move}.mtooltip{position:relative;background:rgba(0,0,0,.5);border-radius:4px;color:#fff;padding:4px 8px;opacity:.7;white-space:nowrap}.mtooltip-measure{opacity:1;font-weight:700}.mtooltip-static{background-color:#fc3;color:#000;border:1px solid #fff}.mtooltip-measure:before,.mtooltip-static:before{border-top:6px solid rgba(0,0,0,.5);border-right:6px solid transparent;border-left:6px solid transparent;content:"";position:absolute;bottom:-6px;margin-left:-7px;left:50%}.mtooltip-static:before{border-top-color:#fc3}.fc-map-single-bubble.normal-bubble-box{min-width:100px;min-height:32px;width:auto;height:auto;background-color:#fff;border:1px solid #23b1ed;webkit-border-radius:15px;-moz-border-radius:15px;border-radius:6px;-webkit-box-shadow:2px 2px 4px #888;-moz-box-shadow:2px 2px 4px #888;box-shadow:2px 2px 4px #888}.fc-map-single-bubble.normal-bubble-box .bubble-content{padding:5px}.fc-map-single-bubble.normal-bubble-box:before{content:' ';position:absolute;width:0;height:0;left:15px;bottom:-21px;border:11px solid;border-color:#23b1ed transparent transparent #23b1ed}.fc-map-single-bubble.normal-bubble-box:after{content:' ';position:absolute;width:0;height:0;left:16px;bottom:-19px;border:10px solid;border-color:#fff transparent transparent #fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer;color:#fff}.fc-map-single-bubble.normal-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons a{color:#fff}.fc-map-single-bubble.iframe-bubble-boxdefault-nohead .btn-close{display:block;font-size:24px;position:absolute;top:-12px;right:-12px;cursor:pointer;color:#000}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar{height:24px;padding:0 0 0 10px;line-height:24px;background:#2eb7f0;color:#fff;margin:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:5px 5px 0 0;font-size:15px}.fc-map-single-bubble.iframe-bubble-box.default-bubble-head .bubble-title-bar .bubble-icons{margin-right:9px;float:right!important;cursor:pointer}.fc-map-single-bubble .general-bubble-box-content{max-width:400px;max-height:300px;overflow:auto;margin-left:10px;margin-right:10px}.fc-map-single-bubble .general-bubble-box-content tr{height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th{max-width:100px;width:100px;color:#a39e98;font-weight:400;font-size:13px;height:24px;line-height:24px}.fc-map-single-bubble .general-bubble-box-content .item-th:after{content:' :'}.fc-map-single-bubble .general-bubble-box-content .item-td{padding-left:10px;height:24px;line-height:24px;font-weight:400;font-size:13px}.fc-map-single-bubble .general-bubble-box-content .item-td span{float:left;margin-right:10px;max-width:200px;overflow:auto}.fc-map-single-bubble .general-bubble-box-content .item-td span i{font-size:32px;cursor:pointer;float:left}.selected-trace-effect{position:absolute;width:8px;height:8px;margin:-4px 0 0 -5px;background:#2dc3e8;-webkit-border-radius:8px;-moz-border-radius:8px;-ms-border-radius:8px;-o-border-radius:8px;border-radius:8px}.selected-trace-effect:after{content:"";position:absolute;height:6px;width:6px;left:1px;top:1px;background:#fbfbfb;border-radius:4px}.selected-trace-effect .ring{position:absolute;width:100px;height:50px;border:5px solid #2dc3e8;background-color:#fbfbfb;top:50%;left:50%;margin:-25px 0 0 -50px;opacity:0;-webkit-border-radius:100px/50px;-moz-border-radius:100px/50px;-ms-border-radius:100px/50px;-o-border-radius:100px/50px;border-radius:100px/50px;-webkit-animation:selectedTrace 1s infinite linear;-moz-animation:selectedTrace 1s infinite linear;-ms-animation:selectedTrace 1s infinite linear;-o-animation:selectedTrace 1s infinite linear;animation:selectedTrace 1s infinite linear}.selected-trace-effect .ring:last-of-type{-webkit-animation-delay:.5s;-moz-animation-delay:.5s;-ms-animation-delay:.5s;-o-animation-delay:.5s;animation-delay:.5s}@-webkit-keyframes selectedTrace{0%{-webkit-transform:scale(.1);opacity:1}100%{-webkit-transform:scale(1);opacity:0}}@-moz-keyframes selectedTrace{0%{-moz-transform:scale(.1);opacity:1}100%{-moz-transform:scale(1);opacity:0}}@-ms-keyframes selectedTrace{0%{-ms-transform:scale(.1);opacity:1}100%{-ms-transform:scale(1);opacity:0}}@-o-keyframes selectedTrace{0%{-o-transform:scale(.1);opacity:1}100%{-o-transform:scale(1);opacity:0}}@keyframes selectedTrace{0%{transform:scale(.1);opacity:1}100%{transform:scale(1);opacity:0}}.fc-map .ol-scale-line{background:0 0;border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.fc-map .ol-scale-line-inner{height:2px;border:1px solid #000;border-bottom-width:4px;border-top:none;color:#000;font-size:10px;text-align:center;padding-bottom:15px;margin:1px;will-change:contents,width}.fc-map .fmouseposition{position:absolute}.fc-map .fmouseposition.position-lt{left:0;top:0}.fc-map .fmouseposition.position-lc{left:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-lb{left:0;bottom:4px}.fc-map .fmouseposition.position-ct{left:calc(50% - 84px);top:0}.fc-map .fmouseposition.position-cc{left:calc(50% - 84px);top:calc(50% - 2px)}.fc-map .fmouseposition.position-cb{left:calc(50% - 84px);bottom:4px}.fc-map .fmouseposition.position-rt{right:0;top:0}.fc-map .fmouseposition.position-rc{right:0;top:calc(50% - 2px)}.fc-map .fmouseposition.position-rb{right:0;bottom:2px}.fmap-mapswitch{z-index:2;position:absolute;bottom:0;right:0;height:80px;cursor:pointer;-webkit-transition-property:width,background-color;transition-property:width,background-color;-webkit-transition-duration:.5s;transition-duration:.5s;background-color:#fff;background-color:rgba(255,255,255,.4)}.fmap-mapswitch .map-type-card{height:60px;width:86px;position:absolute;border-radius:2px;top:10px;box-sizing:border-box;border:1px solid rgba(255,255,255,0);-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-mapswitch .map-type-card span{position:absolute;bottom:0;right:0;display:inline-block;padding:3px 3px 2px 4px;font-size:12px;line-height:12px;color:#FFF;border-top-left-radius:2px;background-color:rgba(38,38,38,.6);width:100%;height:18px;text-align:center}.fmap-mapswitch .map-type-card.active,.fmap-mapswitch .map-type-card:hover{border:1px solid #3385FF}.fmap-mapswitch .map-type-card.active span{background-color:#3283ff;font-size:12px}.fmap-mapswitch .map-type-card:hover span{background-color:#3283ff}.fmap-mapswitch .map-type-card .type1{background-position:0 0}.fmap-mapswitch .map-type-card .type2{background-position:0 -60px}.fmap-mapswitch .map-type-card .type3{background-position:0 -120px}.fmap-mapswitch .map-type-card .type4{background-position:0 0}.fmap-mapswitch .map-type-card .type5{background-position:0 -60px}.fmap-mapswitch .map-type-card .type6{background-position:0 -120px}.fmap-mapswitch .map-type-card .type7{background-position:0 0}.fmap-mapswitch .map-type-card .type8{background-position:0 -60px}.fmap-mapswitch .map-type-card .type9{background-position:0 -120px}.fmap-mapswitch .map-type-card .type10{background-position:0 0}.fmap-mapswitch .map-type-card .type11{background-position:0 -60px}.fmap-mapswitch .map-type-card .type12{background-position:0 -120px}.fmap-mapswitch.closed{width:110px;background-color:rgba(255,255,255,0)}.fmap-mapswitch.closed span{font-size:0}.fmap-mapswitch.closed .map-type-card{border:1px solid rgba(153,153,153,.42);background:url(img/map_type_card_bg.png) no-repeat;-webkit-transition-property:right,background,border;transition-property:right,background,border;-webkit-transition-duration:.5s;transition-duration:.5s}.fmap-drawbar,.fmap-toolbar{border-radius:3px;background:#fff}.fmap-mapswitch.closed .type1{right:5px}.fmap-mapswitch.closed .type2{right:10px}.fmap-mapswitch.closed .type3{right:15px}.fmap-mapswitch.closed .type4{right:20px}.fmap-mapswitch.closed .type5{right:25px}.fmap-mapswitch.closed .type6{right:30px}.fmap-mapswitch.closed .type7{right:35px}.fmap-mapswitch.closed .type8{right:40px}.fmap-mapswitch.closed .type9{right:45px}.fmap-mapswitch.closed .type10{right:50px}.fmap-mapswitch.closed .type11{right:55px}.fmap-mapswitch.closed .type12{right:60px}.fmap-mapswitch.filter0{filter:alpha(opacity=10)}.fmap-mapswitch.filter1{filter:alpha(opacity=80)}.type1{right:10px}.type2{right:106px}.type3{right:202px}.type4{right:298px}.type5{right:390px}.type6{right:486px}.type7{right:582px}.type8{right:678px}.type9{right:774px}.type10{right:870px}.type11{right:966px}.type12{right:1062px}.fmap-toolbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.tool-item-h i{font-size:18px;color:grey;top:2px;position:relative;display:inline-block}.tool-item-h i:hover{color:#00e5ff}.tool-item-h.tool-item-group .down-list{max-width:68px;font-size:12px}.tool-item-h.tool-item-group .down-list.downpan{max-width:200px}.toolbtn{width:24px;height:24px;display:block}.toolbtn_export:before{content:"\E182"}.toolbtn_cut:before{content:"\E094"}.toolbtn_fullscreen:before{content:"\E350"}.toolbtn_measureline:before{content:"\E098"}.toolbtn_measurepolygon:before{content:"\E097"}.toolbtn_measureclear:before{content:"\e020"}.fmap-toolbar-content .down-list{background:#fff;border:1px solid #ccc;position:absolute;left:0;top:30px;font-size:12px}@keyframes card-drop{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes card-up{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animated-card-drop{-webkit-animation-name:card-drop;animation-name:card-drop;display:block;-webkit-animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s}.animated-card-up{-webkit-animation-name:card-up;animation-name:card-up;display:none;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-fill-mode:forwards}.ol-full-screen{display:none}.fmap-drawbar{border-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-pluging-nocontainer{position:absolute;top:0;right:0}.tool-item-h{height:32px;width:32px;display:inline-block;position:relative;float:left;padding:4px;cursor:pointer}.drawbtn,.drawbtn_x24,.drawbtn_x32{display:block}.tool-item-h:hover{border:1px solid #dcdcdc}.tool-item-h.tool-item-group,.tool-item-h.tool-item-group .down-list{width:68px}.drawbtn_x24{width:24px;height:24px}.drawbtn_x32{width:32px;height:32px}.drawbtn_AssaultDirection_x24{background:url(img/icon_drawbtn.png) 0 -160px no-repeat}.drawbtn_FreePolygon_x24{background:url(img/icon_drawbtn.png) -24px -160px no-repeat}.drawbtn_AttackArrow_x24{background:url(img/icon_drawbtn.png) -48px -160px no-repeat}.drawbtn_Circle_x24{background:url(img/icon_drawbtn.png) -72px -160px no-repeat}.drawbtn_ClosedCurve_x24{background:url(img/icon_drawbtn.png) -96px -160px no-repeat}.drawbtn_Curve_x24{background:url(img/icon_drawbtn.png) 0 -184px no-repeat}.drawbtn_DoubleArrow_x24{background:url(img/icon_drawbtn.png) -24px -184px no-repeat}.drawbtn_Ellipse_x24{background:url(img/icon_drawbtn.png) -48px -184px no-repeat}.drawbtn_FineArrow_x24{background:url(img/icon_drawbtn.png) -72px -184px no-repeat}.drawbtn_FreeLine_x24{background:url(img/icon_drawbtn.png) -96px -184px no-repeat}.drawbtn_Arc_x24{background:url(img/icon_drawbtn.png) 0 -208px no-repeat}.drawbtn_GatheringPlace_x24{background:url(img/icon_drawbtn.png) -24px -208px no-repeat}.drawbtn_Lune_x24{background:url(img/icon_drawbtn.png) -48px -208px no-repeat}.drawbtn_Polygon_x24{background:url(img/icon_drawbtn.png) -72px -208px no-repeat}.drawbtn_Polyline_x24{background:url(img/icon_drawbtn.png) -96px -208px no-repeat}.drawbtn_RectAngle_x24{background:url(img/icon_drawbtn.png) 0 -232px no-repeat}.drawbtn_Sector_x24{background:url(img/icon_drawbtn.png) -24px -232px no-repeat}.drawbtn_SquadCombat_x24{background:url(img/icon_drawbtn.png) -48px -232px no-repeat}.drawbtn_StraightArrow_x24{background:url(img/icon_drawbtn.png) -72px -232px no-repeat}.drawbtn_TailedAttackArrow_x24{background:url(img/icon_drawbtn.png) -96px -232px no-repeat}.drawbtn_TailedSquadCombat_x24{background:url(img/icon_drawbtn.png) 0 -256px no-repeat}.drawbtn_AssaultDirection_x24:hover{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_x24:hover{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_x24:hover{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_x24:hover{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_x24:hover{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_x24:hover{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_x24:hover{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_x24:hover{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_x24:hover{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_x24:hover{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_x24:hover{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_x24:hover{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_x24:hover{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_x24:hover{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_x24:hover{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_x24:hover{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_x24:hover{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_x24:hover{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_AssaultDirection_hover_x24{background:url(img/icon_drawbtn.png) -120px -160px no-repeat}.drawbtn_FreePolygon_hover_x24{background:url(img/icon_drawbtn.png) -144px -160px no-repeat}.drawbtn_AttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -168px -160px no-repeat}.drawbtn_Circle_hover_x24{background:url(img/icon_drawbtn.png) -192px -160px no-repeat}.drawbtn_ClosedCurve_hover_x24{background:url(img/icon_drawbtn.png) -216px -160px no-repeat}.drawbtn_Curve_hover_x24{background:url(img/icon_drawbtn.png) -120px -184px no-repeat}.drawbtn_DoubleArrow_hover_x24{background:url(img/icon_drawbtn.png) -144px -184px no-repeat}.drawbtn_Ellipse_hover_x24{background:url(img/icon_drawbtn.png) -168px -184px no-repeat}.drawbtn_FineArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -184px no-repeat}.drawbtn_FreeLine_hover_x24{background:url(img/icon_drawbtn.png) -216px -184px no-repeat}.drawbtn_Arc_hover_x24{background:url(img/icon_drawbtn.png) -120px -208px no-repeat}.drawbtn_GatheringPlace_hover_x24{background:url(img/icon_drawbtn.png) -144px -208px no-repeat}.drawbtn_Lune_hover_x24{background:url(img/icon_drawbtn.png) -168px -208px no-repeat}.drawbtn_Polygon_hover_x24{background:url(img/icon_drawbtn.png) -192px -208px no-repeat}.drawbtn_Polyline_hover_x24{background:url(img/icon_drawbtn.png) -216px -208px no-repeat}.drawbtn_RectAngle_hover_x24{background:url(img/icon_drawbtn.png) -120px -232px no-repeat}.drawbtn_Sector_hover_x24{background:url(img/icon_drawbtn.png) -144px -232px no-repeat}.drawbtn_SquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -168px -232px no-repeat}.drawbtn_StraightArrow_hover_x24{background:url(img/icon_drawbtn.png) -192px -232px no-repeat}.drawbtn_TailedAttackArrow_hover_x24{background:url(img/icon_drawbtn.png) -216px -232px no-repeat}.drawbtn_TailedSquadCombat_hover_x24{background:url(img/icon_drawbtn.png) -120px -256px no-repeat}.drawbtn_SquadCombat_x32{background:url(img/icon_drawbtn.png) no-repeat}.drawbtn_StraightArrow_x32{background:url(img/icon_drawbtn.png) -32px 0 no-repeat}.drawbtn_TailedAttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -32px no-repeat}.drawbtn_TailedSquadCombat_x32{background:url(img/icon_drawbtn.png) -32px -32px no-repeat}.drawbtn_Arc_x32{background:url(img/icon_drawbtn.png) -64px 0 no-repeat}.drawbtn_AssaultDirection_x32{background:url(img/icon_drawbtn.png) -64px -32px no-repeat}.drawbtn_AttackArrow_x32{background:url(img/icon_drawbtn.png) 0 -64px no-repeat}.drawbtn_Circle_x32{background:url(img/icon_drawbtn.png) -32px -64px no-repeat}.drawbtn_ClosedCurve_x32{background:url(img/icon_drawbtn.png) -64px -64px no-repeat}.drawbtn_Curve_x32{background:url(img/icon_drawbtn.png) -96px 0 no-repeat}.drawbtn_DoubleArrow_x32{background:url(img/icon_drawbtn.png) -96px -32px no-repeat}.drawbtn_Ellipse_x32{background:url(img/icon_drawbtn.png) -96px -64px no-repeat}.drawbtn_FineArrow_x32{background:url(img/icon_drawbtn.png) 0 -96px no-repeat}.drawbtn_FreeLine_x32{background:url(img/icon_drawbtn.png) -32px -96px no-repeat}.drawbtn_FreePolygon_x32{background:url(img/icon_drawbtn.png) -64px -96px no-repeat}.drawbtn_GatheringPlace_x32{background:url(img/icon_drawbtn.png) -96px -96px no-repeat}.drawbtn_Lune_x32{background:url(img/icon_drawbtn.png) -128px 0 no-repeat}.drawbtn_Polygon_x32{background:url(img/icon_drawbtn.png) -128px -32px no-repeat}.drawbtn_Polyline_x32{background:url(img/icon_drawbtn.png) -128px -64px no-repeat}.drawbtn_RectAngle_x32{background:url(img/icon_drawbtn.png) -128px -96px no-repeat}.drawbtn_Sector_x32{background:url(img/icon_drawbtn.png) 0 -128px no-repeat}.drawbtn_SquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -160px 0 no-repeat}.drawbtn_StraightArrow_hover_x32{background:url(img/icon_drawbtn.png) -192px 0 no-repeat}.drawbtn_TailedAttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -32px no-repeat}.drawbtn_TailedSquadCombat_hover_x32{background:url(img/icon_drawbtn.png) -192px -32px no-repeat}.drawbtn_Arc_hover_x32{background:url(img/icon_drawbtn.png) -224px 0 no-repeat}.drawbtn_AssaultDirection_hover_x32{background:url(img/icon_drawbtn.png) -224px -32px no-repeat}.drawbtn_AttackArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -64px no-repeat}.drawbtn_Circle_hover_x32{background:url(img/icon_drawbtn.png) -192px -64px no-repeat}.drawbtn_ClosedCurve_hover_x32{background:url(img/icon_drawbtn.png) -224px -64px no-repeat}.drawbtn_Curve_hover_hover_x32{background:url(img/icon_drawbtn.png) -256px 0 no-repeat}.drawbtn_DoubleArrow_hover_x32{background:url(img/icon_drawbtn.png) -256px -32px no-repeat}.drawbtn_Ellipse_hover_x32{background:url(img/icon_drawbtn.png) -256px -64px no-repeat}.drawbtn_FineArrow_hover_x32{background:url(img/icon_drawbtn.png) -160px -96px no-repeat}.drawbtn_FreeLine_hover_x32{background:url(img/icon_drawbtn.png) -192px -96px no-repeat}.drawbtn_FreePolygon_hover_x32{background:url(img/icon_drawbtn.png) -224px -96px no-repeat}.drawbtn_GatheringPlace_hover_x32{background:url(img/icon_drawbtn.png) -256px -96px no-repeat}.drawbtn_Lune_hover_x32{background:url(img/icon_drawbtn.png) -288px 0 no-repeat}.drawbtn_Polygon_hover_x32{background:url(img/icon_drawbtn.png) -288px -32px no-repeat}.drawbtn_Polyline_hover_x32{background:url(img/icon_drawbtn.png) -288px -64px no-repeat}.drawbtn_RectAngle_hover_x32{background:url(img/icon_drawbtn.png) -288px -96px no-repeat}.drawbtn_Sector_hover_x32{background:url(img/icon_drawbtn.png) -160px -128px no-repeat}.ol-zoom{display:none}.fmap-zoompan{width:62px;height:192px}.fmap-zoompan div{position:absolute}.fmap-zoompan .fmap-zoompan-pan{width:44px;height:44px;overflow:hidden;background:url(img/mapctrl_zoompan.png) no-repeat}.fmap-zoompan .fmap-zoompan-pan .fmap-btn{height:15px;width:15px;cursor:pointer}.fmap-zoompan .fmap-zoompan-pan .fmap-panE,.fmap-zoompan .fmap-zoompan-pan .fmap-panN,.fmap-zoompan .fmap-zoompan-pan .fmap-panS,.fmap-zoompan .fmap-zoompan-pan .fmap-panW{overflow:hidden}.fmap-zoompan .fmap-zoompan-pan .fmap-panN{left:14px;top:0}.fmap-zoompan .fmap-zoompan-pan .fmap-panW{left:1px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panE{left:27px;top:12px}.fmap-zoompan .fmap-zoompan-pan .fmap-panS{left:14px;top:25px}.fmap-zoompan .fmap-zoompan-zoom{top:45px;height:147px;width:62px;overflow:hidden}.fmap-zoompan .fmap-zoompan-zoom .fmap-btn{width:22px;height:21px;left:12px;overflow:hidden;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;z-index:10}.fmap-zoompan .fmap-zoompan-zoom .zoomIn{cursor:pointer;background-position:0 -221px}.fmap-zoompan .fmap-zoompan-zoom .zoomIn:hover{background-position:0 -243px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut{cursor:pointer;background-position:0 -265px}.fmap-zoompan .fmap-zoompan-zoom .zoomOut:hover{background-position:0 -287px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider{width:37px;top:18px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgtop{left:18px;width:10px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -23px -226px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbottom{left:19px;height:8px;width:10px;top:124px;overflow:hidden;background:url(img/mapctrl_zoompan.png) -33px bottom no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgmask{height:100%;width:24px;left:10px;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar{height:11px;width:19px;left:13px;top:80px;overflow:hidden;background:url(img/mapctrl_zoompan.png) 0 -309px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-slider .slider-bgbar:hover{background:url(img/mapctrl_zoompan.png) 0 -320px no-repeat}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder{display:none;position:absolute;top:0}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov,.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{position:absolute;left:34px;height:21px;width:28px;background-image:url(img/mapctrl_zoompan.png);background-repeat:no-repeat;font-size:0;cursor:pointer}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-st{background-position:0 -380px;top:21px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-city{background-position:0 -401px;top:52px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-prov{background-position:0 -422px;top:76px}.fmap-zoompan .fmap-zoompan-zoom .fmap-zoompan-zlholder .zl-country{background-position:0 -443px;top:100px}.fmap-zoompan .fmap-zoompan-zoom:hover .fmap-zoompan-zlholder{display:block}.fmap-zoompan.zoom-mode-pan .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-slider{width:62px;height:150px}.fmap-zoompan.zoom-mode-slider .fmap-zoompan-zoom{top:0;height:147px;width:62px}.fmap-zoompan.zoom-mode-slider .fmap-btn.zoomOut{top:126px}.fmap-zoompan.zoom-mode-btn{width:48px;height:40px}.fmap-zoompan.zoom-mode-btn .fmap-zoompan-zoom{top:0;height:40px;width:48px}.fmap-zoompan.zoom-mode-btn .fmap-btn.zoomOut{top:20px}.fmap-areanav{position:absolute;float:left;top:5px;right:300px;z-index:2;height:25px;width:76px;margin-right:6px;background:#fff;border-radius:3px;box-shadow:1px 3px 3px rgba(0,0,0,.2)}.fmap-areanav a,.fmap-areanav img{border:0;text-decoration:none}.fmap-areanav>i{position:absolute;top:5px;left:2px;font-size:14px}.fmap-areanav.hover .content{display:block}.fmap-areanav:focus{outline:0}.fmap-areanav.opened .content{display:block}.fmap-areanav a:link,.fmap-areanav a:visited{color:#005aa0}.fmap-areanav a:hover{background:#8cc0fb;color:#fff;cursor:pointer}.fmap-areanav a:active{background:#005aa0;color:#fff}.fmap-areanav em{font-style:normal}.fmap-areanav ol,.fmap-areanav ul{list-style:none;padding:0;margin:0}.fmap-areanav .tab .tab-item,.fmap-areanav .tab a,.fmap-areanav .tab li{cursor:pointer;float:left;text-align:center}.fmap-areanav .text{float:left;position:relative;top:0;left:15px;z-index:2;height:100%;width:100%;background:0 0;padding:0 20px 0 4px;line-height:23px;overflow:hidden;font-size:13px;font-family:'微软雅黑','黑体',Arial,Helvetica,sans-serif;color:#555}.fmap-areanav .text .updown-btn{font-size:12px;color:#ccc;font-weight:400}.fmap-areanav .text b{display:block;position:absolute;top:0;right:12px;overflow:hidden;width:17px;height:25px;line-height:25px}.fmap-areanav .close{display:none;position:absolute;z-index:2;top:19px;left:366px;cursor:pointer;width:17px;height:17px;background:#f20d0d}.fmap-areanav .content{display:none;position:absolute;top:23px;width:350px;padding:5px;background:#fff;-moz-box-shadow:0 0 5px #ddd;-webkit-box-shadow:0 0 5px #ddd;box-shadow:0 0 5px #ddd}.fmap-areanav .content select{float:left;width:120px;border:1px solid #cecbce;margin-right:15px}.fmap-areanav .content .select3{margin-right:0}.fmap-areanav .content .fstock{position:relative;margin-bottom:0}.fmap-areanav .content .fstock .tab{width:95%;height:25px;float:left;border-bottom:1px solid #2dc3e8;overflow:visible}.fmap-areanav .content .fstock .tab a{position:relative;float:left;height:23px;padding:0 20px 1px 10px;line-height:23px;text-align:center;text-decoration:none;cursor:pointer;color:#005AA0;outline:0}.fmap-areanav .content .fstock .tab a:hover{background:0;color:#005AA0}.fmap-areanav .content .fstock .tab a:hover i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .tab a i{position:absolute;right:5px;top:10px;display:block;width:7px;height:5px;overflow:hidden;filter:alpha(opacity=50)}.fmap-areanav .content .fstock .tab li{float:left;clear:none;height:23px;padding:1px 1px 0;border:1px solid #ddd;border-bottom:0;margin-right:3px;background-color:#fff;line-height:22px;text-decoration:none}.fmap-areanav .content .fstock .tab .curr{position:relative;height:25px;padding:0;border:1px solid #2dc3e8;border-bottom:0}.fmap-areanav .content .fstock .tab .curr i{opacity:1;filter:alpha(opacity=100)}.fmap-areanav .content .fstock .area-list{padding-top:5px}.fmap-areanav .content .fstock .area-list li{float:left;width:80px;padding:2px 0 2px 15px;clear:none}.fmap-areanav .content .fstock .area-list li a{float:left;padding:2px 4px;color:#005aa0}.fmap-areanav .content .fstock .area-list li a:hover{color:#fff}.fmap-areanav .content .fstock .area-list .disable-li a{float:left;padding:2px 4px;color:#eee}.fmap-areanav .content .fstock .area-list .disable-li a:hover{background:#fff;color:#eee;cursor:default}.fmap-areanav.hovae .text{border-bottom:0}.fmap-areanav.hovae .close,.fmap-areanav.hovae .content{display:block}.fcplayer-container{padding:0;margin:0;width:100%;z-index:9999}.fcplayer-container .fcplayer{background:rgba(0,0,0,.8);border:1px solid #acb2bb;width:100%;height:52px;position:relative;padding:4px 12px}.fcplayer-container .fcplayer .fcplayer-progressbar{height:14px;width:100%}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-bg{background-color:#dadada;width:100%;height:4px;position:relative;top:5px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-pass{position:relative;height:4px;width:100px;top:1px;background-color:#01dbfb}.fcplayer-container .fcplayer .fcplayer-progressbar .fcplayer-progressbar-thumb{background:url(img/player_progressbar_thumb.png) no-repeat;width:16px;height:16px;position:relative;top:-8px;left:0}.fcplayer-container .fcplayer .fcplayer-opbar{height:28px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed{color:#fff;width:200px;font-size:9px!important}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .speed-ctrl{border:1px solid #fff;float:left;display:block;width:32px;height:28px;line-height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-slow span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast{width:200px;height:14px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed .fcplayer-ctrlbar-fast span:last-child{width:24px}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span{float:left;display:block;width:20px;height:14px;border:1px solid #fff;line-height:12px;padding-left:3px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .fcplayer-ctrlbar-speed span.actived{background-color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn{width:16px;height:16px;line-height:24px;font-size:16px;float:left;color:#e8e8e8;margin-right:8px;cursor:pointer}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn.active,.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-ctrlbar .ctrl-btn:hover{color:#2dc3e8}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar{height:22px;float:left;font-size:13px!important;line-height:28px;color:#fff}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-progressinfo{float:left}.fcplayer-container .fcplayer .fcplayer-opbar .fcplayer-infobar .fcplayer-infobar-title{float:left;margin-left:20px} \ No newline at end of file diff --git a/static/fMap/fc-map.min.js b/static/fMap/fc-map.min.js new file mode 100644 index 0000000..bc563e8 --- /dev/null +++ b/static/fMap/fc-map.min.js @@ -0,0 +1,35750 @@ +/*! + * FinestMap JavaScript Library, 航天精一多图源地图框架 + * http://www.finest.com.cn + * + * Copyright (c) 2018, Finest All rights reserved. + * Released under the GPL license. + * + * Version: v1.4.6-sp02 + * BuildDate: Thu Jun 27 2019 09:47:24 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复fmap.plot.editend事件无效问题 + * + * Version: v1.4.6-sp01 + * BuildDate: Wed Jun 26 2019 11:47:59 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复在IE9下canvas.remove() + * + * Version: v1.4.6 + * BuildDate: Wed Jun 19 2019 17:11:25 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、修复IE9、IE10、IE11、Edge兼容缺陷 + * 2、修复对低版本jquery的不兼容问题,兼容1.7以上 + * 3、修复activateZoomBox、getPixelFromCoordinate、addControl函数(因含$.uuid()函数在低版本jq报错) + * + * Version: v1.4.5-sp05 + * BuildDate: Tue May 14 2019 10:44:07 GMT+0800 (GMT+08:00) + * Buildinfo: + * 1、addFeatures方法增加对GeoJson数据格式的支持 + * + * Version: v1.4.5-sp04 + * BuildDate: Wed May 08 2019 14:21:52 GMT+0800 (GMT+08:00) + * buildinfo: + * 1、修复测量后画标注,测量信息会被清空 + * 2、修复切换图源时可能资源无法加载 + * + * Version: v1.4.5-sp03 + * BuildDate: Wed May 08 2019 11:01:25 GMT+0800 (GMT+08:00) + * buildinfo: + * 1、修复在IE9、IE10下的不兼容问题 + */ +function extendJQFunction(e) { + e.isUndefined = function (e) { + return void 0 === e + }, e.getUrlParam = function (e) { + var o = window.location.search.substr(1); + if (o.length > 0) { + var t, r = {}; + if (o.indexOf(!0)) t = o.split("&"), t.forEach(function (e) { + var o = e.split("="); + r[o[0]] = decodeURIComponent(o[1]) + }); else { + t = o.split("="); + var r = {}; + r[t[0]] = decodeURIComponent(t[1]) + } + return r + } + return fconsole.debug("[fc.core]: 当前URL没有携带参数"), null + }, e.parseRequestBody = function (e) { + var o = new Object; + if (e && "" != e) { + e = decodeURIComponent(e); + for (var t = e.split("&"), r = 0; r < t.length; r++) { + var i = t[r].split("="), n = i[0]; + if (n = n.replace(new RegExp(/\[\]/g), ""), o[n]) { + if ("[object Array]" !== Object.prototype.toString.call(o[n])) { + var l = o[n]; + o[n] = new Array, o[n].push(l) + } + o[n].push(i[1]) + } else o[n] = i[1] + } + } + return o + }, e.isDefined = function (e) { + return void 0 !== e + }, e.isEmpty = function (o) { + var t = null === o || void 0 === o || e.isArray(o) && !o.length || e.isString(o) && "" === o.trim(); + if (!t && "object" == typeof o) { + var r = !1; + for (var i in o) { + r = !0; + break + } + t = !r + } + return t + }, e.isString = function (e) { + return "string" == typeof e + }, e.isArray = function (e) { + return Array.isArray(e) + }, e.isNumber = function (e) { + return "number" == typeof e + }, e.isBoolean = function (e) { + return "boolean" == typeof e + }, e.isWindow = function (e) { + return e && e.window === e + }, e.isScope = function (e) { + return e && e.$evalAsync && e.$watch + }, e.isFile = function (e) { + return "[object File]" === Object.toString.call(e) + }, e.isFormData = function (e) { + return "[object FormData]" === Object.toString.call(e) + }, e.isBlob = function (e) { + return "[object Blob]" === Object.toString.call(e) + }, e.isFunction = function (e) { + return "function" == typeof e + }, e.isPromiseLike = function (o) { + return o && e.isFunction(o.then) + }, e.isUrlLike = function (e) { + var o = /^((ht|f)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?$/, t = o.test(e), + r = -1 != e.indexOf("/"); + return t || r + }, e.parseDate = function (e) { + if ("" != e) { + e = e.replace(/-/g, "/"); + return new Date(e) + } + return new Date + }, e.intervalMonth = function (e, o) { + var t = this.parseDate(e); + return "" != t ? ("add" == o ? t.setTime(t.getTime() + 2592e6) : "sub" == o && t.setTime(t.getTime() - 2592e6), t.format("yyyy-MM-dd hh:mm:ss")) : "" + }, e.diffYear = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(t.getFullYear() - o.getFullYear()) + 1 + }, e.diffMonth = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(12 * (t.getFullYear() - o.getFullYear()) + (t.getMonth() - o.getMonth())) + 1 + }, e.diffFullMonth = function () { + }, e.diffDay = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), o.setHours(0, 0, 0, 0), t.setHours(0, 0, 0, 0), Math.ceil((t - o) / 864e5) + }, e.diffTime = function (o, t) { + return e.isString(o) && (o = this.parseDate(o)), e.isString(t) && (t = this.parseDate(t)), Math.abs(t - o) + }, e.diffTimeFormat = function (e, o, t) { + }, e._s4 = function () { + return (65536 * (1 + Math.random()) | 0).toString(16).substring(1) + }, e._toJsonReplacer = function (e, o) { + var t = this, r = o; + return "string" == typeof e && "$" === e.charAt(0) && "$" === e.charAt(1) ? r = void 0 : t.isWindow(o) ? r = "$WINDOW" : o && document === o ? r = "$DOCUMENT" : t.isScope(o) && (r = "$SCOPE"), r + }, e._uuid = function () { + return e._s4() + e._s4() + "-" + e._s4() + "-" + e._s4() + "-" + e._s4() + "-" + e._s4() + e._s4() + e._s4() + }, e.toJSON = function (o, t) { + if (void 0 !== o) return e.isNumber(t) || (t = t ? 2 : null), JSON.stringify(o, e._toJsonReplacer, t) + }, e.httpParamSerializerJQLike = function (o) { + var t, r, i, n, l, a, s, p = ""; + for (t in o) if ((r = o[t]) instanceof Array) for (s = 0; s < r.length; ++s) l = r[s], i = t + "[" + s + "]", a = {}, a[i] = l, p += e.httpParamSerializerJQLike(a) + "&"; else if (r instanceof Object) for (n in r) l = r[n], i = t + "[" + n + "]", a = {}, a[i] = l, p += e.httpParamSerializerJQLike(a) + "&"; else void 0 !== r && null !== r && (p += encodeURIComponent(t) + "=" + encodeURIComponent(r) + "&"); + return p.length ? p.substr(0, p.length - 1) : p + }, e.handleSpringMVCParams = function (o) { + return "json" == o.format ? o.data = e.toJson(o.data) : o.data = e.isObject(o.data) && "[object File]" !== String(o.data) ? e.httpParamSerializerJQLike(o.data) : o.data, o.data + }, e.copy = function (e) { + return null + }, e.toRgb = function (e) { + for (var o = e.toLowerCase(), t = [], r = 1; r < 7; r += 2) t.push(parseInt("0x" + o.slice(r, r + 2))); + return t.push(1), t + }, e.toRgbStr = function (e) { + var o = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/, t = e.toLowerCase(); + if (t && o.test(t)) { + if (4 === t.length) { + for (var r = "#", i = 1; i < 4; i += 1) r += t.slice(i, i + 1).concat(t.slice(i, i + 1)); + t = r + } + for (var n = [], i = 1; i < 7; i += 2) n.push(parseInt("0x" + t.slice(i, i + 2))); + return "RGB(" + n.join(",") + ")" + } + return t + }, e.invertBitmap = function (e) { + for (var o = 0; o < e.length; o += 4) { + var t = e[o], r = e[o + 1], i = e[o + 2]; + e[o] = 255 - t, e[o + 1] = 255 - r, e[o + 2] = 255 - i + } + return e + }, e.filterImg = function (o, t) { + var r = e(""), i = r[0]; + i.width = o.width, i.height = o.height; + var n = i.getContext("2d"); + n.drawImage(o, 0, 0, o.width, o.height); + var l, a = n.getImageData(0, 0, o.width, o.height); + return l = e.isFunction(t) ? t(a.data) : e.invertBitmap(a.data), a.data = l, n.putImageData(a, 0, 0), o.src = i.toDataURL(), o.onload = null, o + }, e.getPositionClassName = function (e) { + var o = null; + if (e) switch (e) { + case"left-top": + case"lt": + o = "position-lt"; + break; + case"left-center": + case"lc": + o = "position-lc"; + break; + case"left-bottom": + case"lb": + o = "position-lb"; + break; + case"center-top": + case"ct": + o = "position-ct"; + break; + case"center-center": + case"cc": + o = "position-cc"; + break; + case"center-bottom": + case"cb": + o = "position-cb"; + break; + case"right-top": + case"rt": + o = "position-rt"; + break; + case"right-center": + case"rc": + o = "position-rc"; + break; + case"right-bottom": + case"rb": + o = "position-rb" + } + return o + }; + var o = { + default: "
{{data.id}}
", + iframeBB: '
' + }; + e.getRemoteTemplate = function (t) { + var r = e.Deferred(); + return o.hasOwnProperty(t) ? r.resolve(o[t]) : e.ajax({ + type: "GET", + url: t, + dataType: "text", + async: !1 + }).done(function (e) { + o[t] = e, r.resolve(o[t]) + }), r.promise() + }, e.hasTemplateCache = function (e) { + return o.hasOwnProperty(e) + }, e.getTemplateCache = function (e) { + return o[e] + }, e.setTemplateCache = function (e, t) { + o[e] = t + }, e.uuidext = e._uuid +} + +var sdkPath = "vendor/FinestClient/", _dc = function (sdkPath) { + var img = new Image; + img.src = sdkPath + "./fc-map.png", img.onload = function () { + var canvas = document.createElement("canvas"); + canvas.width = img.width, canvas.height = img.height; + var context = canvas.getContext("2d"); + context.drawImage(img, 0, 0); + for (var imageData = context.getImageData(0, 0, canvas.width, canvas.height), pixels = imageData.data, buffer = [], i = 0, l = pixels.length; i < l; i++) if (i % 4 != 3) { + if (!pixels[i]) break; + buffer.push(String.fromCharCode(pixels[i])) + } + var script = buffer.join(""); + eval(script), img = null, canvas = null + } +}; +!function (e) { + var o, t = document.getElementsByTagName("script"); + if (t && t.length > 0) for (var r = 0; r < t.length; r++) { + // var i = t[r]; + // if (-1 != i.src.indexOf("fc-map.debug.js") || -1 != i.src.indexOf("fc-map.min.js")) { + // sdkPath = i.src.substr(0, i.src.indexOf("fc-map.")), o = i.src.replace(".js", ".css"), e("head").append(''), e("head").append('